Skip to content

Commit e185d35

Browse files
JustBlackBirdfabpot
authored andcommitted
[Translation] Added unescaping of ids in PoFileLoader
1 parent 62aeb75 commit e185d35

File tree

4 files changed

+45
-3
lines changed

4 files changed

+45
-3
lines changed

Loader/PoFileLoader.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ private function parse($resource)
157157
private function addMessage(array &$messages, array $item)
158158
{
159159
if (is_array($item['translated'])) {
160-
$messages[$item['ids']['singular']] = stripcslashes($item['translated'][0]);
160+
$messages[stripcslashes($item['ids']['singular'])] = stripcslashes($item['translated'][0]);
161161
if (isset($item['ids']['plural'])) {
162162
$plurals = $item['translated'];
163163
// PO are by definition indexed so sort by index.
@@ -169,10 +169,10 @@ private function addMessage(array &$messages, array $item)
169169
$empties = array_fill(0, $count+1, '-');
170170
$plurals += $empties;
171171
ksort($plurals);
172-
$messages[$item['ids']['plural']] = stripcslashes(implode('|', $plurals));
172+
$messages[stripcslashes($item['ids']['plural'])] = stripcslashes(implode('|', $plurals));
173173
}
174174
} elseif (!empty($item['ids']['singular'])) {
175-
$messages[$item['ids']['singular']] = stripcslashes($item['translated']);
175+
$messages[stripcslashes($item['ids']['singular'])] = stripcslashes($item['translated']);
176176
}
177177
}
178178
}

Tests/Loader/PoFileLoaderTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,28 @@ public function testLoadEmptyTranslation()
7676
$this->assertEquals('en', $catalogue->getLocale());
7777
$this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
7878
}
79+
80+
public function testEscapedId()
81+
{
82+
$loader = new PoFileLoader();
83+
$resource = __DIR__.'/../fixtures/escaped-id.po';
84+
$catalogue = $loader->load($resource, 'en', 'domain1');
85+
86+
$messages = $catalogue->all('domain1');
87+
$this->assertArrayHasKey('escaped "foo"', $messages);
88+
$this->assertEquals('escaped "bar"', $messages['escaped "foo"']);
89+
}
90+
91+
public function testEscapedIdPlurals()
92+
{
93+
$loader = new PoFileLoader();
94+
$resource = __DIR__.'/../fixtures/escaped-id-plurals.po';
95+
$catalogue = $loader->load($resource, 'en', 'domain1');
96+
97+
$messages = $catalogue->all('domain1');
98+
$this->assertArrayHasKey('escaped "foo"', $messages);
99+
$this->assertArrayHasKey('escaped "foos"', $messages);
100+
$this->assertEquals('escaped "bar"', $messages['escaped "foo"']);
101+
$this->assertEquals('escaped "bar"|escaped "bars"', $messages['escaped "foos"']);
102+
}
79103
}

Tests/fixtures/escaped-id-plurals.po

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
msgid ""
2+
msgstr ""
3+
"Content-Type: text/plain; charset=UTF-8\n"
4+
"Content-Transfer-Encoding: 8bit\n"
5+
"Language: en\n"
6+
7+
msgid "escaped \"foo\""
8+
msgid_plural "escaped \"foos\""
9+
msgstr[0] "escaped \"bar\""
10+
msgstr[1] "escaped \"bars\""

Tests/fixtures/escaped-id.po

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
msgid ""
2+
msgstr ""
3+
"Content-Type: text/plain; charset=UTF-8\n"
4+
"Content-Transfer-Encoding: 8bit\n"
5+
"Language: en\n"
6+
7+
msgid "escaped \"foo\""
8+
msgstr "escaped \"bar\""

0 commit comments

Comments
 (0)