diff --git a/src/Symfony/Component/Translation/Loader/PoFileLoader.php b/src/Symfony/Component/Translation/Loader/PoFileLoader.php index b5d12e9821..29e898cc47 100644 --- a/src/Symfony/Component/Translation/Loader/PoFileLoader.php +++ b/src/Symfony/Component/Translation/Loader/PoFileLoader.php @@ -108,14 +108,20 @@ class PoFileLoader extends ArrayLoader $messages = array(); $item = $defaults; + $flags = array(); while ($line = fgets($stream)) { $line = trim($line); if ($line === '') { // Whitespace indicated current item is done - $this->addMessage($messages, $item); + if (!in_array('fuzzy', $flags)) { + $this->addMessage($messages, $item); + } $item = $defaults; + $flags = array(); + } elseif (substr($line, 0, 2) === '#,') { + $flags = array_map('trim', explode(',', substr($line, 2))); } elseif (substr($line, 0, 7) === 'msgid "') { // We start a new msg so save previous // TODO: this fails when comments or contexts are added @@ -141,7 +147,9 @@ class PoFileLoader extends ArrayLoader } } // save last item - $this->addMessage($messages, $item); + if (!in_array('fuzzy', $flags)) { + $this->addMessage($messages, $item); + } fclose($stream); return $messages; diff --git a/src/Symfony/Component/Translation/Tests/Loader/PoFileLoaderTest.php b/src/Symfony/Component/Translation/Tests/Loader/PoFileLoaderTest.php index 87090eb736..5d340c766f 100644 --- a/src/Symfony/Component/Translation/Tests/Loader/PoFileLoaderTest.php +++ b/src/Symfony/Component/Translation/Tests/Loader/PoFileLoaderTest.php @@ -93,4 +93,16 @@ class PoFileLoaderTest extends \PHPUnit_Framework_TestCase $this->assertEquals('escaped "bar"', $messages['escaped "foo"']); $this->assertEquals('escaped "bar"|escaped "bars"', $messages['escaped "foos"']); } + + public function testSkipFuzzyTranslations() + { + $loader = new PoFileLoader(); + $resource = __DIR__.'/../fixtures/fuzzy-translations.po'; + $catalogue = $loader->load($resource, 'en', 'domain1'); + + $messages = $catalogue->all('domain1'); + $this->assertArrayHasKey('foo1', $messages); + $this->assertArrayNotHasKey('foo2', $messages); + $this->assertArrayHasKey('foo3', $messages); + } } diff --git a/src/Symfony/Component/Translation/Tests/fixtures/fuzzy-translations.po b/src/Symfony/Component/Translation/Tests/fixtures/fuzzy-translations.po new file mode 100644 index 0000000000..04d4047aa4 --- /dev/null +++ b/src/Symfony/Component/Translation/Tests/fixtures/fuzzy-translations.po @@ -0,0 +1,10 @@ +#, php-format +msgid "foo1" +msgstr "bar1" + +#, fuzzy, php-format +msgid "foo2" +msgstr "fuzzy bar2" + +msgid "foo3" +msgstr "bar3"