diff --git a/src/Symfony/Component/Translation/Tests/Command/TranslationPushCommandTest.php b/src/Symfony/Component/Translation/Tests/Command/TranslationPushCommandTest.php index b174c5c0cfaa..2c7f576c3709 100644 --- a/src/Symfony/Component/Translation/Tests/Command/TranslationPushCommandTest.php +++ b/src/Symfony/Component/Translation/Tests/Command/TranslationPushCommandTest.php @@ -89,6 +89,52 @@ public function testPushNewMessages() $this->assertStringContainsString('[OK] New local translations has been sent to "null" (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay())); } + public function testPushNewIntlIcuMessages() + { + $arrayLoader = new ArrayLoader(); + $xliffLoader = new XliffFileLoader(); + $locales = ['en', 'fr']; + $domains = ['messages']; + + // Simulate existing messages on Provider + $providerReadTranslatorBag = new TranslatorBag(); + $providerReadTranslatorBag->addCatalogue($arrayLoader->load(['note' => 'NOTE'], 'en')); + $providerReadTranslatorBag->addCatalogue($arrayLoader->load(['note' => 'NOTE'], 'fr')); + + $provider = $this->createMock(ProviderInterface::class); + $provider->expects($this->once()) + ->method('read') + ->with($domains, $locales) + ->willReturn($providerReadTranslatorBag); + + // Create local files, with a new message + $filenameEn = $this->createFile([ + 'note' => 'NOTE', + 'new.foo' => 'newFooIntlIcu', + ], 'en', 'messages+intl-icu.%locale%.xlf'); + $filenameFr = $this->createFile([ + 'note' => 'NOTE', + 'new.foo' => 'nouveauFooIntlIcu', + ], 'fr', 'messages+intl-icu.%locale%.xlf'); + $localTranslatorBag = new TranslatorBag(); + $localTranslatorBag->addCatalogue($xliffLoader->load($filenameEn, 'en')); + $localTranslatorBag->addCatalogue($xliffLoader->load($filenameFr, 'fr')); + + $provider->expects($this->once()) + ->method('write') + ->with($localTranslatorBag->diff($providerReadTranslatorBag)); + + $provider->expects($this->once()) + ->method('__toString') + ->willReturn('null://default'); + + $tester = $this->createCommandTester($provider, $locales, $domains); + + $tester->execute(['--locales' => ['en', 'fr'], '--domains' => ['messages']]); + + $this->assertStringContainsString('[OK] New local translations has been sent to "null" (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay())); + } + public function testPushForceMessages() { $xliffLoader = new XliffFileLoader(); diff --git a/src/Symfony/Component/Translation/Tests/TranslatorBagTest.php b/src/Symfony/Component/Translation/Tests/TranslatorBagTest.php index 58b8fa02bdc1..102f2e443bb2 100644 --- a/src/Symfony/Component/Translation/Tests/TranslatorBagTest.php +++ b/src/Symfony/Component/Translation/Tests/TranslatorBagTest.php @@ -66,6 +66,34 @@ public function testDiff() ], $this->getAllMessagesFromTranslatorBag($bagResult)); } + public function testDiffWithIntlDomain() + { + $catalogueA = new MessageCatalogue('en', [ + 'domain1+intl-icu' => ['foo' => 'foo', 'bar' => 'bar'], + 'domain2' => ['baz' => 'baz', 'qux' => 'qux'], + ]); + + $bagA = new TranslatorBag(); + $bagA->addCatalogue($catalogueA); + + $catalogueB = new MessageCatalogue('en', [ + 'domain1' => ['foo' => 'foo'], + 'domain2' => ['baz' => 'baz', 'corge' => 'corge'], + ]); + + $bagB = new TranslatorBag(); + $bagB->addCatalogue($catalogueB); + + $bagResult = $bagA->diff($bagB); + + $this->assertEquals([ + 'en' => [ + 'domain1' => ['bar' => 'bar'], + 'domain2' => ['qux' => 'qux'], + ], + ], $this->getAllMessagesFromTranslatorBag($bagResult)); + } + public function testIntersect() { $catalogueA = new MessageCatalogue('en', ['domain1' => ['foo' => 'foo', 'bar' => 'bar'], 'domain2' => ['baz' => 'baz', 'qux' => 'qux']]); diff --git a/src/Symfony/Component/Translation/TranslatorBag.php b/src/Symfony/Component/Translation/TranslatorBag.php index 555a9e8147fd..6a4df3c3ceaa 100644 --- a/src/Symfony/Component/Translation/TranslatorBag.php +++ b/src/Symfony/Component/Translation/TranslatorBag.php @@ -70,7 +70,7 @@ public function diff(TranslatorBagInterface $diffBag): self $operation->moveMessagesToIntlDomainsIfPossible(AbstractOperation::NEW_BATCH); $newCatalogue = new MessageCatalogue($locale); - foreach ($operation->getDomains() as $domain) { + foreach ($catalogue->getDomains() as $domain) { $newCatalogue->add($operation->getNewMessages($domain), $domain); } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy