diff --git a/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderTest.php b/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderTest.php index 2a2183abf110f..5b224de8aa1be 100644 --- a/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderTest.php +++ b/src/Symfony/Component/Translation/Bridge/Loco/Tests/LocoProviderTest.php @@ -426,12 +426,16 @@ public function getResponsesForManyLocalesAndManyDomains(): \Generator $expectedTranslatorBag = new TranslatorBag(); $expectedTranslatorBag->addCatalogue($arrayLoader->load([ 'index.hello' => 'Hello', - 'index.greetings' => 'Welcome, {firstname}!', ], 'en')); + $expectedTranslatorBag->addCatalogue($arrayLoader->load([ + 'index.greetings' => 'Welcome, {firstname}!', + ], 'en', 'messages+intl-icu')); $expectedTranslatorBag->addCatalogue($arrayLoader->load([ 'index.hello' => 'Bonjour', - 'index.greetings' => 'Bienvenue, {firstname} !', ], 'fr')); + $expectedTranslatorBag->addCatalogue($arrayLoader->load([ + 'index.greetings' => 'Bienvenue, {firstname} !', + ], 'fr', 'messages+intl-icu')); $expectedTranslatorBag->addCatalogue($arrayLoader->load([ 'firstname.error' => 'Firstname must contains only letters.', 'lastname.error' => 'Lastname must contains only letters.', @@ -443,7 +447,7 @@ public function getResponsesForManyLocalesAndManyDomains(): \Generator yield [ ['en', 'fr'], - ['messages', 'validators'], + ['messages', 'messages+intl-icu', 'validators'], [ 'en' => [ 'messages' => <<<'XLIFF' @@ -458,6 +462,19 @@ public function getResponsesForManyLocalesAndManyDomains(): \Generator index.hello Hello + + + +XLIFF + , + 'messages+intl-icu' => <<<'XLIFF' + + + +
+ +
+ index.greetings Welcome, {firstname}! @@ -502,6 +519,19 @@ public function getResponsesForManyLocalesAndManyDomains(): \Generator index.hello Bonjour + +
+
+XLIFF + , + 'messages+intl-icu' => <<<'XLIFF' + + + +
+ +
+ index.greetings Bienvenue, {firstname} ! diff --git a/src/Symfony/Component/Translation/Catalogue/AbstractOperation.php b/src/Symfony/Component/Translation/Catalogue/AbstractOperation.php index 9869fbb8bb34e..98d42e5b6e46c 100644 --- a/src/Symfony/Component/Translation/Catalogue/AbstractOperation.php +++ b/src/Symfony/Component/Translation/Catalogue/AbstractOperation.php @@ -83,7 +83,18 @@ public function __construct(MessageCatalogueInterface $source, MessageCatalogueI public function getDomains() { if (null === $this->domains) { - $this->domains = array_values(array_unique(array_merge($this->source->getDomains(), $this->target->getDomains()))); + $domains = []; + foreach ([$this->source, $this->target] as $catalogue) { + foreach ($catalogue->getDomains() as $domain) { + $domains[$domain] = $domain; + + if ($catalogue->all($domainIcu = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX)) { + $domains[$domainIcu] = $domainIcu; + } + } + } + + $this->domains = array_values($domains); } return $this->domains; diff --git a/src/Symfony/Component/Translation/Tests/Catalogue/MergeOperationTest.php b/src/Symfony/Component/Translation/Tests/Catalogue/MergeOperationTest.php index 240c492800acc..3f21abac9dd52 100644 --- a/src/Symfony/Component/Translation/Tests/Catalogue/MergeOperationTest.php +++ b/src/Symfony/Component/Translation/Tests/Catalogue/MergeOperationTest.php @@ -58,7 +58,7 @@ public function testGetResultFromIntlDomain() $this->assertEquals( new MessageCatalogue('en', [ 'messages' => ['a' => 'old_a', 'b' => 'old_b'], - 'messages+intl-icu' => ['d' => 'old_d', 'c' => 'new_c'], + 'messages+intl-icu' => ['d' => 'old_d', 'c' => 'new_c', 'a' => 'new_a'], ]), $this->createOperation( new MessageCatalogue('en', ['messages' => ['a' => 'old_a', 'b' => 'old_b'], 'messages+intl-icu' => ['d' => 'old_d']]), diff --git a/src/Symfony/Component/Translation/Tests/Catalogue/TargetOperationTest.php b/src/Symfony/Component/Translation/Tests/Catalogue/TargetOperationTest.php index d5441f3bee4ef..2b63cd4166464 100644 --- a/src/Symfony/Component/Translation/Tests/Catalogue/TargetOperationTest.php +++ b/src/Symfony/Component/Translation/Tests/Catalogue/TargetOperationTest.php @@ -72,6 +72,7 @@ public function testGetResultWithMixedDomains() $this->assertEquals( new MessageCatalogue('en', [ 'messages' => ['a' => 'old_a'], + 'messages+intl-icu' => ['a' => 'new_a'], ]), $this->createOperation( new MessageCatalogue('en', ['messages' => ['a' => 'old_a']]), @@ -103,7 +104,7 @@ public function testGetResultWithMixedDomains() $this->assertEquals( new MessageCatalogue('en', [ 'messages' => ['a' => 'old_a'], - 'messages+intl-icu' => ['b' => 'new_b'], + 'messages+intl-icu' => ['b' => 'new_b', 'a' => 'new_a'], ]), $this->createOperation( new MessageCatalogue('en', ['messages' => ['a' => 'old_a']]), diff --git a/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php b/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php index 7494a1c84c8fc..ecb6e834104e4 100644 --- a/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php +++ b/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php @@ -46,19 +46,27 @@ public function testPullNewXlf12Messages() { $arrayLoader = new ArrayLoader(); $filenameEn = $this->createFile(); + $filenameEnIcu = $this->createFile(['say_hello' => 'Welcome, {firstname}!'], 'en', 'messages+intl-icu.%locale%.xlf'); $filenameFr = $this->createFile(['note' => 'NOTE'], 'fr'); + $filenameFrIcu = $this->createFile(['say_hello' => 'Bonjour, {firstname}!'], 'fr', 'messages+intl-icu.%locale%.xlf'); $locales = ['en', 'fr']; - $domains = ['messages']; + $domains = ['messages', 'messages+intl-icu']; $providerReadTranslatorBag = new TranslatorBag(); $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ 'note' => 'NOTE', 'new.foo' => 'newFoo', ], 'en')); + $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ + 'say_hello' => 'Welcome, {firstname}!', + ], 'en', 'messages+intl-icu')); $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ 'note' => 'NOTE', 'new.foo' => 'nouveauFoo', ], 'fr')); + $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ + 'say_hello' => 'Bonjour, {firstname}!', + ], 'fr', 'messages+intl-icu')); $provider = $this->createMock(ProviderInterface::class); $provider->expects($this->once()) @@ -71,9 +79,9 @@ public function testPullNewXlf12Messages() ->willReturn('null://default'); $tester = $this->createCommandTester($provider, $locales, $domains); - $tester->execute(['--locales' => ['en', 'fr'], '--domains' => ['messages']]); + $tester->execute(['--locales' => ['en', 'fr'], '--domains' => ['messages', 'messages+intl-icu']]); - $this->assertStringContainsString('[OK] New translations from "null" has been written locally (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay())); + $this->assertStringContainsString('[OK] New translations from "null" has been written locally (for "en, fr" locale(s), and "messages, messages+intl-icu"', trim($tester->getDisplay())); $this->assertXmlStringEqualsXmlString(<< @@ -97,6 +105,23 @@ public function testPullNewXlf12Messages() , file_get_contents($filenameEn)); $this->assertXmlStringEqualsXmlString(<< + + +
+ +
+ + + say_hello + Welcome, {firstname}! + + +
+
+XLIFF + , file_get_contents($filenameEnIcu)); + $this->assertXmlStringEqualsXmlString(<<
@@ -116,6 +141,23 @@ public function testPullNewXlf12Messages() XLIFF , file_get_contents($filenameFr)); + $this->assertXmlStringEqualsXmlString(<< + + +
+ +
+ + + say_hello + Bonjour, {firstname}! + + +
+
+XLIFF + , file_get_contents($filenameFrIcu)); } public function testPullNewXlf20Messages()