diff --git a/src/Symfony/Component/Translation/Bridge/Lokalise/LokaliseProvider.php b/src/Symfony/Component/Translation/Bridge/Lokalise/LokaliseProvider.php index 06a95dc2e8759..a1243e483956a 100644 --- a/src/Symfony/Component/Translation/Bridge/Lokalise/LokaliseProvider.php +++ b/src/Symfony/Component/Translation/Bridge/Lokalise/LokaliseProvider.php @@ -147,7 +147,6 @@ private function exportFiles(array $locales, array $domains): array 'json' => [ 'format' => 'symfony_xliff', 'original_filenames' => true, - 'directory_prefix' => '%LANG_ISO%', 'filter_langs' => array_values($locales), 'filter_filenames' => array_map([$this, 'getLokaliseFilenameFromDomain'], $domains), 'export_empty_as' => 'skip', @@ -167,7 +166,12 @@ private function exportFiles(array $locales, array $domains): array throw new ProviderException(sprintf('Unable to export translations from Lokalise: "%s".', $response->getContent(false)), $response); } - return $responseContent['files']; + // Lokalise returns languages with "-" separator, we need to reformat them to "_" separator. + $reformattedLanguages = array_map(function ($language) { + return str_replace('-', '_', $language); + }, array_keys($responseContent['files'])); + + return array_combine($reformattedLanguages, $responseContent['files']); } private function createKeys(array $keys, string $domain): array diff --git a/src/Symfony/Component/Translation/Bridge/Lokalise/Tests/LokaliseProviderTest.php b/src/Symfony/Component/Translation/Bridge/Lokalise/Tests/LokaliseProviderTest.php index 127f0b3f816e4..51270cc82d350 100644 --- a/src/Symfony/Component/Translation/Bridge/Lokalise/Tests/LokaliseProviderTest.php +++ b/src/Symfony/Component/Translation/Bridge/Lokalise/Tests/LokaliseProviderTest.php @@ -559,7 +559,6 @@ public function testReadForOneLocaleAndOneDomain(string $locale, string $domain, $expectedBody = json_encode([ 'format' => 'symfony_xliff', 'original_filenames' => true, - 'directory_prefix' => '%LANG_ISO%', 'filter_langs' => [$locale], 'filter_filenames' => [$domain.'.xliff'], 'export_empty_as' => 'skip', @@ -581,15 +580,10 @@ public function testReadForOneLocaleAndOneDomain(string $locale, string $domain, ])); }; - $loader = $this->getLoader(); - $loader->expects($this->once()) - ->method('load') - ->willReturn((new XliffFileLoader())->load($responseContent, $locale, $domain)); - $provider = self::createProvider((new MockHttpClient($response))->withOptions([ 'base_uri' => 'https://api.lokalise.com/api2/projects/PROJECT_ID/', 'headers' => ['X-Api-Token' => 'API_KEY'], - ]), $loader, $this->getLogger(), $this->getDefaultLocale(), 'api.lokalise.com'); + ]), new XliffFileLoader(), $this->getLogger(), $this->getDefaultLocale(), 'api.lokalise.com'); $translatorBag = $provider->read([$domain], [$locale]); // We don't want to assert equality of metadata here, due to the ArrayLoader usage. @@ -761,6 +755,36 @@ public static function getResponsesForOneLocaleAndOneDomain(): \Generator $expectedTranslatorBagEn, ]; + $expectedTranslatorBagEnUS = new TranslatorBag(); + $expectedTranslatorBagEnUS->addCatalogue($arrayLoader->load([ + 'index.hello' => 'Hello', + 'index.greetings' => 'Welcome, {firstname}!', + ], 'en_US')); + + yield ['en_US', 'messages', <<<'XLIFF' + + + +
+ +
+ + + index.greetings + Welcome, {firstname}! + + + index.hello + Hello + + +
+
+XLIFF + , + $expectedTranslatorBagEnUS, + ]; + $expectedTranslatorBagFr = new TranslatorBag(); $expectedTranslatorBagFr->addCatalogue($arrayLoader->load([ 'index.hello' => 'Bonjour',