From 9926845cf303994d1da3901b2af27a3770263f5a Mon Sep 17 00:00:00 2001 From: Hugo Hamon Date: Tue, 29 Jul 2014 21:37:35 +0200 Subject: [PATCH] [Translation] made XliffFileDumper support CDATA sections. --- .../Component/Translation/Dumper/XliffFileDumper.php | 7 ++++++- .../Translation/Tests/Dumper/XliffFileDumperTest.php | 11 +++++++++-- .../Translation/Tests/fixtures/resources-clean.xlf | 4 ++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php b/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php index 96c0c8a387..f192e4c7b5 100644 --- a/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php +++ b/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php @@ -47,8 +47,13 @@ class XliffFileDumper extends FileDumper $s = $translation->appendChild($dom->createElement('source')); $s->appendChild($dom->createTextNode($source)); + // Does the target contain characters requiring a CDATA section? + $text = (1 === preg_match('/[&<>]/', $target)) + ? $dom->createCDATASection($target) + : $dom->createTextNode($target); + $t = $translation->appendChild($dom->createElement('target')); - $t->appendChild($dom->createTextNode($target)); + $t->appendChild($text); $xliffBody->appendChild($translation); } diff --git a/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php b/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php index bef31358c5..5eddb56968 100644 --- a/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php +++ b/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php @@ -19,13 +19,20 @@ class XliffFileDumperTest extends \PHPUnit_Framework_TestCase public function testDump() { $catalogue = new MessageCatalogue('en'); - $catalogue->add(array('foo' => 'bar', 'key' => '')); + $catalogue->add(array( + 'foo' => 'bar', + 'key' => '', + 'key.with.cdata' => ' & ', + )); $tempDir = sys_get_temp_dir(); $dumper = new XliffFileDumper(); $dumper->dump($catalogue, array('path' => $tempDir)); - $this->assertEquals(file_get_contents(__DIR__.'/../fixtures/resources-clean.xlf'), file_get_contents($tempDir.'/messages.en.xlf')); + $this->assertSame( + file_get_contents(__DIR__.'/../fixtures/resources-clean.xlf'), + file_get_contents($tempDir.'/messages.en.xlf') + ); unlink($tempDir.'/messages.en.xlf'); } diff --git a/src/Symfony/Component/Translation/Tests/fixtures/resources-clean.xlf b/src/Symfony/Component/Translation/Tests/fixtures/resources-clean.xlf index 464b079200..c5f83efe60 100644 --- a/src/Symfony/Component/Translation/Tests/fixtures/resources-clean.xlf +++ b/src/Symfony/Component/Translation/Tests/fixtures/resources-clean.xlf @@ -10,6 +10,10 @@ key + + key.with.cdata + & ]]> +