8000 bug #18161 [Translation] Add support for fuzzy tags in PoFileLoader · symfony/symfony@970b956 · GitHub
[go: up one dir, main page]

Skip to content

Commit 970b956

Browse files
nudfabpot
authored andcommitted
bug #18161 [Translation] Add support for fuzzy tags in PoFileLoader
The traditional gettext tools usually try to find similar strings when updating translations. This results in some strings having a translation but being marked as "fuzzy", even if the translation is not correct. The expected result when a string is marked as fuzzy is that it should not be used by the translation system. Using symfony, though, the translations were used, which could result in "funny" messages being displayed in the interface despite being often completely out of context. This commit discards messages in .po files that have a '#, fuzzy' flag. | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | 18161 | License | MIT | Doc PR | -
1 parent 18615fc commit 970b956

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

src/Symfony/Component/Translation/Loader/PoFileLoader.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,20 @@ private function parse($resource)
108108

109109
$messages = array();
110110
$item = $defaults;
111+
$flags = array();
111112

112113
while ($line = fgets($stream)) {
113114
$line = trim($line);
114115

115116
if ($line === '') {
116117
// Whitespace indicated current item is done
117-
$this->addMessage($messages, $item);
118+
if (!in_array('fuzzy', $flags)) {
119+
$this->addMessage($messages, $item);
120+
}
118121
$item = $defaults;
122+
$flags = array();
123+
} elseif (substr($line, 0, 2) === '#,') {
124+
$flags = array_map('trim', explode(',', substr($line, 2)));
119125
} elseif (substr($line, 0, 7) === 'msgid "') {
120126
// We start a new msg so save previous
121127
// TODO: this fails when comments or contexts are added
@@ -141,7 +147,9 @@ private function parse($resource)
141147
}
142148
}
143149
// save last item
144-
$this->addMessage($messages, $item);
150+
if (!in_array('fuzzy', $flags)) {
151+
$this->addMessage($messages, $item);
152+
}
145153
fclose($stream);
146154

147155
return $messages;

src/Symfony/Component/Translation/Tests/Loader/PoFileLoaderTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,16 @@ public function testEscapedIdPlurals()
9393
$this->assertEquals('escaped "bar"', $messages['escaped "foo"']);
9494
$this->assertEquals('escaped "bar"|escaped "bars"', $messages['escaped "foos"']);
9595
}
96+
97+
public function testSkipFuzzyTranslations()
98+
{
99+
$loader = new PoFileLoader();
100+
$resource = __DIR__.'/../fixtures/fuzzy-translations.po';
101+
$catalogue = $loader->load($resource, 'en', 'domain1');
102+
103+
$messages = $catalogue->all('domain1');
104+
$this->assertArrayHasKey('foo1', $messages);
105+
$this->assertArrayNotHasKey('foo2', $messages);
106+
$this->assertArrayHasKey('foo3', $messages);
107+
}
96108
}
8E2D
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#, php-format
2+
msgid "foo1"
3+
msgstr "bar1"
4+
5+
#, fuzzy, php-format
6+
msgid "foo2"
7+
msgstr "fuzzy bar2"
8+
9+
msgid "foo3"
10+
msgstr "bar3"

0 commit comments

Comments
 (0)
0