diff --git a/src/Symfony/Component/Translation/Loader/XliffFileLoader.php b/src/Symfony/Component/Translation/Loader/XliffFileLoader.php index 4ad5087099..9c97233c77 100644 --- a/src/Symfony/Component/Translation/Loader/XliffFileLoader.php +++ b/src/Symfony/Component/Translation/Loader/XliffFileLoader.php @@ -34,7 +34,7 @@ class XliffFileLoader implements LoaderInterface throw new \InvalidArgumentException(sprintf('This is not a local file "%s".', $resource)); } - $xml = $this->parseFile($resource); + list($xml, $encoding) = $this->parseFile($resource); $xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:1.2'); $catalogue = new MessageCatalogue($locale); @@ -50,11 +50,11 @@ class XliffFileLoader implements LoaderInterface // If the xlf file has another encoding specified, try to convert it because // simple_xml will always return utf-8 encoded values - if ('UTF-8' !== $this->encoding && !empty($this->encoding)) { + if ('UTF-8' !== $encoding && !empty($encoding)) { if (function_exists('mb_convert_encoding')) { - $target = mb_convert_encoding($target, $this->encoding, 'UTF-8'); + $target = mb_convert_encoding($target, $encoding, 'UTF-8'); } elseif (function_exists('iconv')) { - $target = iconv('UTF-8', $this->encoding, $target); + $target = iconv('UTF-8', $encoding, $target); } else { throw new \RuntimeException('No suitable convert encoding function (use UTF-8 as your encoding or install the iconv or mbstring extension).'); } @@ -90,8 +90,6 @@ class XliffFileLoader implements LoaderInterface throw new \RuntimeException(implode("\n", $this->getXmlErrors($internalErrors))); } - $this->encoding = strtoupper($dom->encoding); - libxml_disable_entity_loader($disableEntities); foreach ($dom->childNodes as $child) { @@ -125,7 +123,7 @@ class XliffFileLoader implements LoaderInterface libxml_use_internal_errors($internalErrors); - return simplexml_import_dom($dom); + return array(simplexml_import_dom($dom), strtoupper($dom->encoding)); } /** diff --git a/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php b/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php index cf88d366e2..f84a62ee22 100644 --- a/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php +++ b/src/Symfony/Component/Translation/Tests/Loader/XliffFileLoaderTest.php @@ -52,6 +52,10 @@ class XliffFileLoaderTest extends \PHPUnit_Framework_TestCase public function testEncoding() { + if (!function_exists('iconv') && !function_exists('mb_convert_encoding')) { + $this->markTestSkipped('The iconv and mbstring extensions are not available.'); + } + $loader = $this->createLoader(); $catalogue = $loader->load(__DIR__.'/../fixtures/encoding.xlf', 'en', 'domain1'); diff --git a/src/Symfony/Component/Translation/Tests/fixtures/encoding.xlf b/src/Symfony/Component/Translation/Tests/fixtures/encoding.xlf index a6c33e084b..6be901bd75 100644 --- a/src/Symfony/Component/Translation/Tests/fixtures/encoding.xlf +++ b/src/Symfony/Component/Translation/Tests/fixtures/encoding.xlf @@ -4,11 +4,11 @@ foo - bär + bär bar - föö + föö