Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4fece28

Browse filesBrowse 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
Copy full SHA for 4fece28

File tree

Expand file treeCollapse file tree

3 files changed

+32
-2
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+32
-2
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Translation/Loader/PoFileLoader.php
+10-2Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Translation/Tests/Loader/PoFileLoaderTest.php
+12Lines 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
}
+10Lines 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)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.