Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4fece28

Browse files
committed
bug #18175 [Translation] Add support for fuzzy tags in PoFileLoader (nud)
This PR was submitted for the master branch but it was merged into the 2.3 branch instead (closes #18175). Discussion ---------- [Translation] Add support for fuzzy tags in PoFileLoader | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #18161 | License | MIT | Doc PR | - 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. This commit can (and imo should) be back-ported as-is to the 2.x branch. Commits ------- 970b956 bug #18161 [Translation] Add support for fuzzy tags in PoFileLoader
2 parents 18615fc + 970b956 commit 4fece28

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
}
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)