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

Skip to content

Commit 567cee5

Browse files
artemoliynyknicolas-grekas
authored andcommitted
[Translation] Fix for translation:update command updating ICU messages
1 parent f8d3b06 commit 567cee5

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,14 @@ private function filterCatalogue(MessageCatalogue $catalogue, string $domain): M
356356
{
357357
$filteredCatalogue = new MessageCatalogue($catalogue->getLocale());
358358

359-
if ($messages = $catalogue->all($domain)) {
359+
// extract intl-icu messages only
360+
$intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX;
361+
if ($intlMessages = $catalogue->all($intlDomain)) {
362+
$filteredCatalogue->add($intlMessages, $intlDomain);
363+
}
364+
365+
// extract all messages and subtract intl-icu messages
366+
if ($messages = array_diff($catalogue->all($domain), $intlMessages)) {
360367
$filteredCatalogue->add($messages, $domain);
361368
}
362369
foreach ($catalogue->getResources() as $resource) {

src/Symfony/Component/Translation/MessageCatalogue.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ public function getDomains()
7272
public function all($domain = null)
7373
{
7474
if (null !== $domain) {
75+
// skip messages merge if intl-icu requested explicitly
76+
if (false !== strpos($domain, self::INTL_DOMAIN_SUFFIX)) {
77+
return $this->messages[$domain] ?? [];
78+
}
79+
7580
return ($this->messages[$domain.self::INTL_DOMAIN_SUFFIX] ?? []) + ($this->messages[$domain] ?? []);
7681
}
7782

src/Symfony/Component/Translation/Tests/MessageCatalogueTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,30 @@ public function testAll()
6767
$this->assertEquals($messages, $catalogue->all());
6868
}
6969

70+
public function testAllIntICU()
71+
{
72+
$messages = [
73+
'domain1+intl-icu' => ['foo' => 'bar'],
74+
'domain2+intl-icu' => ['bar' => 'foo'],
75+
'domain2' => ['biz' => 'biz'],
76+
];
77+
$catalogue = new MessageCatalogue('en', $messages);
78+
79+
// separated domains
80+
$this->assertSame(['foo' => 'bar'], $catalogue->all('domain1+intl-icu'));
81+
$this->assertSame(['bar' => 'foo'], $catalogue->all('domain2+intl-icu'));
82+
83+
// merged, intl-icu ignored
84+
$this->assertSame(['bar' => 'foo', 'biz' => 'biz'], $catalogue->all('domain2'));
85+
86+
// intl-icu ignored
87+
$messagesExpected = [
88+
'domain1' => ['foo' => 'bar'],
89+
'domain2' => ['bar' => 'foo', 'biz' => 'biz'],
90+
];
91+
$this->assertSame($messagesExpected, $catalogue->all());
92+
}
93+
7094
public function testHas()
7195
{
7296
$catalogue = new MessageCatalogue('en', ['domain1' => ['foo' => 'foo'], 'domain2+intl-icu' => ['bar' => 'bar']]);

0 commit comments

Comments
 (0)