From 322936ade48fe462956b10287d9edeb41bdbbfc4 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 14 Aug 2017 21:56:06 +0200 Subject: [PATCH 1/4] Adding the ability do dump in xliff2.0 --- .../Component/Translation/CHANGELOG.md | 1 + .../Translation/Dumper/XliffFileDumper.php | 18 +++++++++++++++++- .../Tests/Dumper/XliffFileDumperTest.php | 19 +++++++++++++++++++ .../Tests/fixtures/resources-notes-meta.xlf | 16 ++++++++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Component/Translation/Tests/fixtures/resources-notes-meta.xlf diff --git a/src/Symfony/Component/Translation/CHANGELOG.md b/src/Symfony/Component/Translation/CHANGELOG.md index baa791b0ad174..4ba9a154f157a 100644 --- a/src/Symfony/Component/Translation/CHANGELOG.md +++ b/src/Symfony/Component/Translation/CHANGELOG.md @@ -7,6 +7,7 @@ CHANGELOG * Added `TranslationDumperPass` * Added `TranslationExtractorPass` * Added `TranslatorPass` + * Added section to the Xliff 2.0 dumper. 3.2.0 ----- diff --git a/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php b/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php index 64588b167991d..fdc4f0fdaf533 100644 --- a/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php +++ b/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php @@ -146,6 +146,23 @@ private function dumpXliff2($defaultLocale, MessageCatalogue $messages, $domain, foreach ($messages->all($domain) as $source => $target) { $translation = $dom->createElement('unit'); $translation->setAttribute('id', strtr(substr(base64_encode(hash('sha256', $source, true)), 0, 7), '/+', '._')); + $metadata = $messages->getMetadata($source, $domain); + + // Add notes section + if ($this->hasMetadataArrayInfo('notes', $metadata)) { + $notesElement = $dom->createElement('notes'); + foreach ($metadata['notes'] as $note) { + $n = $dom->createElement('note'); + $n->appendChild($dom->createTextNode($note['content'] ?? '')); + unset($note['content']); + + foreach ($note as $name => $value) { + $n->setAttribute($name, $value); + } + $notesElement->appendChild($n); + } + $translation->appendChild($notesElement); + } $segment = $translation->appendChild($dom->createElement('segment')); @@ -156,7 +173,6 @@ private function dumpXliff2($defaultLocale, MessageCatalogue $messages, $domain, $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target); $targetElement = $dom->createElement('target'); - $metadata = $messages->getMetadata($source, $domain); if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) { foreach ($metadata['target-attributes'] as $name => $value) { $targetElement->setAttribute($name, $value); diff --git a/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php b/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php index 5764dff540692..bbff60e0b5b23 100644 --- a/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php +++ b/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php @@ -87,4 +87,23 @@ public function testFormatCatalogueWithTargetAttributesMetadata() $dumper->formatCatalogue($catalogue, 'messages', array('default_locale' => 'fr_FR')) ); } + public function testFormatCatalogueWithNotesMetadata() + { + $catalogue = new MessageCatalogue('en_US'); + $catalogue->add(array( + 'foo' => 'bar', + )); + $catalogue->setMetadata('foo', array('notes' => array( + array('category'=>'state', 'content' => 'new'), + array('category'=>'approved', 'content' => 'true'), + array('category'=>'section', 'content' => 'user login', 'priority'=>'1'), + ))); + + $dumper = new XliffFileDumper(); + + $this->assertStringEqualsFile( + __DIR__.'/../fixtures/resources-notes-meta.xlf', + $dumper->formatCatalogue($catalogue, 'messages', array('default_locale' => 'fr_FR', 'xliff_version'=>'2.0')) + ); + } } diff --git a/src/Symfony/Component/Translation/Tests/fixtures/resources-notes-meta.xlf b/src/Symfony/Component/Translation/Tests/fixtures/resources-notes-meta.xlf new file mode 100644 index 0000000000000..04f9a0a06e233 --- /dev/null +++ b/src/Symfony/Component/Translation/Tests/fixtures/resources-notes-meta.xlf @@ -0,0 +1,16 @@ + + + + + + new + true + user login + + + foo + bar + + + + From d124c9beb17b6657918e65c0e4f2149f20de0f08 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 14 Aug 2017 22:01:59 +0200 Subject: [PATCH 2/4] cs --- .../Translation/Tests/Dumper/XliffFileDumperTest.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php b/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php index bbff60e0b5b23..30ca4d3d24868 100644 --- a/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php +++ b/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php @@ -87,6 +87,7 @@ public function testFormatCatalogueWithTargetAttributesMetadata() $dumper->formatCatalogue($catalogue, 'messages', array('default_locale' => 'fr_FR')) ); } + public function testFormatCatalogueWithNotesMetadata() { $catalogue = new MessageCatalogue('en_US'); @@ -94,16 +95,16 @@ public function testFormatCatalogueWithNotesMetadata() 'foo' => 'bar', )); $catalogue->setMetadata('foo', array('notes' => array( - array('category'=>'state', 'content' => 'new'), - array('category'=>'approved', 'content' => 'true'), - array('category'=>'section', 'content' => 'user login', 'priority'=>'1'), + array('category' => 'state', 'content' => 'new'), + array('category' => 'approved', 'content' => 'true'), + array('category' => 'section', 'content' => 'user login', 'priority' => '1'), ))); $dumper = new XliffFileDumper(); $this->assertStringEqualsFile( __DIR__.'/../fixtures/resources-notes-meta.xlf', - $dumper->formatCatalogue($catalogue, 'messages', array('default_locale' => 'fr_FR', 'xliff_version'=>'2.0')) + $dumper->formatCatalogue($catalogue, 'messages', array('default_locale' => 'fr_FR', 'xliff_version' => '2.0')) ); } } From e12c555e1de83ea895a831caaf4ef8c4ff8db91d Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 14 Aug 2017 22:03:34 +0200 Subject: [PATCH 3/4] Removed PHP 7 code --- src/Symfony/Component/Translation/Dumper/XliffFileDumper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php b/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php index fdc4f0fdaf533..d7e5ecc78c120 100644 --- a/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php +++ b/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php @@ -153,7 +153,7 @@ private function dumpXliff2($defaultLocale, MessageCatalogue $messages, $domain, $notesElement = $dom->createElement('notes'); foreach ($metadata['notes'] as $note) { $n = $dom->createElement('note'); - $n->appendChild($dom->createTextNode($note['content'] ?? '')); + $n->appendChild($dom->createTextNode(isset($note['content']) ? $note['content'] : '')); unset($note['content']); foreach ($note as $name => $value) { From a8c8b73efb4f2dd585d52f3a69e7e15bfdf57e64 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 14 Aug 2017 22:09:37 +0200 Subject: [PATCH 4/4] Restart travis with 3.4 base --- src/Symfony/Component/Translation/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Translation/CHANGELOG.md b/src/Symfony/Component/Translation/CHANGELOG.md index 4ba9a154f157a..e8bcb2243ea34 100644 --- a/src/Symfony/Component/Translation/CHANGELOG.md +++ b/src/Symfony/Component/Translation/CHANGELOG.md @@ -7,7 +7,7 @@ CHANGELOG * Added `TranslationDumperPass` * Added `TranslationExtractorPass` * Added `TranslatorPass` - * Added section to the Xliff 2.0 dumper. + * Added section to the Xliff 2.0 dumper. 3.2.0 -----