From 7f89d93a899b5941766ff9b8fade82cccb72d22d Mon Sep 17 00:00:00 2001 From: Yoann MOROCUTTI Date: Fri, 8 Oct 2021 10:54:39 +0200 Subject: [PATCH] [Translation] Use symfony default locale when pulling translations from providers --- .../Command/TranslationPullCommand.php | 1 + .../Command/TranslationPullCommandTest.php | 80 ++++++++++++++++++- 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Translation/Command/TranslationPullCommand.php b/src/Symfony/Component/Translation/Command/TranslationPullCommand.php index 0ec02ca7b26c7..511c7caec6a84 100644 --- a/src/Symfony/Component/Translation/Command/TranslationPullCommand.php +++ b/src/Symfony/Component/Translation/Command/TranslationPullCommand.php @@ -119,6 +119,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $writeOptions = [ 'path' => end($this->transPaths), 'xliff_version' => $xliffVersion, + 'default_locale' => $this->defaultLocale, ]; if (!$domains) { diff --git a/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php b/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php index 73b562dec76ff..2d647341bfbf1 100644 --- a/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php +++ b/src/Symfony/Component/Translation/Tests/Command/TranslationPullCommandTest.php @@ -348,7 +348,83 @@ public function testPullForceIntlIcuMessages() , file_get_contents($filenameFr)); } - private function createCommandTester(ProviderInterface $provider, array $locales = ['en'], array $domains = ['messages']): CommandTester + public function testPullMessagesWithDefaultLocale() + { + $arrayLoader = new ArrayLoader(); + $filenameFr = $this->createFile(['note' => 'NOTE'], 'fr'); + $filenameEn = $this->createFile(['note' => 'NOTE']); + $locales = ['en', 'fr']; + $domains = ['messages']; + + $providerReadTranslatorBag = new TranslatorBag(); + $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ + 'note' => 'NOTE', + 'new.foo' => 'nouveauFoo', + ], 'fr')); + $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ + 'note' => 'NOTE', + 'new.foo' => 'newFoo', + ], 'en')); + + $provider = $this->createMock(ProviderInterface::class); + $provider->expects($this->once()) + ->method('read') + ->with($domains, $locales) + ->willReturn($providerReadTranslatorBag); + + $provider->expects($this->once()) + ->method('__toString') + ->willReturn('null://default'); + + $tester = $this->createCommandTester($provider, $locales, $domains, 'fr'); + $tester->execute(['--locales' => ['en', 'fr'], '--domains' => ['messages']]); + + $this->assertStringContainsString('[OK] New translations from "null" has been written locally (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay())); + $this->assertXmlStringEqualsXmlString(<< + + +
+ +
+ + + new.foo + newFoo + + + note + NOTE + + +
+
+XLIFF + , file_get_contents($filenameEn)); + $this->assertXmlStringEqualsXmlString(<< + + +
+ +
+ + + new.foo + nouveauFoo + + + note + NOTE + + +
+
+XLIFF + , file_get_contents($filenameFr)); + } + + private function createCommandTester(ProviderInterface $provider, array $locales = ['en'], array $domains = ['messages'], $defaultLocale = 'en'): CommandTester { $writer = new TranslationWriter(); $writer->addDumper('xlf', new XliffFileDumper()); @@ -360,7 +436,7 @@ private function createCommandTester(ProviderInterface $provider, array $locales $this->getProviderCollection($provider, $locales, $domains), $writer, $reader, - 'en', + $defaultLocale, [$this->translationAppDir.'/translations'] ); $application = new Application();