diff --git a/Dumper/XliffFileDumper.php b/Dumper/XliffFileDumper.php index b41394c1..98444bca 100644 --- a/Dumper/XliffFileDumper.php +++ b/Dumper/XliffFileDumper.php @@ -176,7 +176,7 @@ private function dumpXliff2(string $defaultLocale, MessageCatalogue $messages, ? $metadata = $messages->getMetadata($source, $domain); // Add notes section - if ($this->hasMetadataArrayInfo('notes', $metadata)) { + if ($this->hasMetadataArrayInfo('notes', $metadata) && $metadata['notes']) { $notesElement = $dom->createElement('notes'); foreach ($metadata['notes'] as $note) { $n = $dom->createElement('note'); diff --git a/Tests/Dumper/XliffFileDumperTest.php b/Tests/Dumper/XliffFileDumperTest.php index 73e66817..fff7e94a 100644 --- a/Tests/Dumper/XliffFileDumperTest.php +++ b/Tests/Dumper/XliffFileDumperTest.php @@ -148,6 +148,24 @@ public function testDumpCatalogueWithXliffExtension() ); } + public function testEmptyMetadataNotes() + { + $catalogue = new MessageCatalogue('en_US'); + $catalogue->add([ + 'empty' => 'notes', + 'full' => 'notes', + ]); + $catalogue->setMetadata('empty', ['notes' => []]); + $catalogue->setMetadata('full', ['notes' => [['category' => 'file-source', 'priority' => 1, 'content' => 'test/path/to/translation/Example.1.html.twig:27']]]); + + $dumper = new XliffFileDumper(); + + $this->assertStringEqualsFile( + __DIR__.'/../Fixtures/resources-2.0-empty-notes.xlf', + $dumper->formatCatalogue($catalogue, 'messages', ['default_locale' => 'fr_FR', 'xliff_version' => '2.0']) + ); + } + public function testFormatCatalogueXliff2WithSegmentAttributes() { $catalogue = new MessageCatalogue('en_US'); diff --git a/Tests/Fixtures/resources-2.0-empty-notes.xlf b/Tests/Fixtures/resources-2.0-empty-notes.xlf new file mode 100644 index 00000000..7cba2cc0 --- /dev/null +++ b/Tests/Fixtures/resources-2.0-empty-notes.xlf @@ -0,0 +1,20 @@ + + + + + + empty + notes + + + + + test/path/to/translation/Example.1.html.twig:27 + + + full + notes + + + +