Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit727ca9e

Browse files
committed
bug#45840 [Translation] Fix locales format in CrowdinProvider (ossinkine)
This PR was merged into the 5.4 branch.Discussion----------[Translation] Fix locales format in CrowdinProvider| Q | A| ------------- | ---| Branch? | 5.4| Bug fix? | yes| New feature? | no| Deprecations? | no| License | MITSince Crowdin requires locales with dash (`-`) and Symfony operates locales with underscore (`_`) the provider should correctly format such locales before requests.Commits-------5fab2d3 Fix locales format in CrowdinProvider
2 parents0ecacec +5fab2d3 commit727ca9e

File tree

2 files changed

+101
-35
lines changed

2 files changed

+101
-35
lines changed

‎src/Symfony/Component/Translation/Bridge/Crowdin/CrowdinProvider.php‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ private function uploadTranslations(int $fileId, string $domain, string $content
278278
* @see https://support.crowdin.com/api/v2/#operation/api.projects.translations.postOnLanguage (Crowdin API)
279279
* @see https://support.crowdin.com/enterprise/api/#operation/api.projects.translations.postOnLanguage (Crowdin Enterprise API)
280280
*/
281-
return$this->client->request('POST','translations/'.$locale, [
281+
return$this->client->request('POST','translations/'.str_replace('_','-',$locale), [
282282
'json' => [
283283
'storageId' =>$storageId,
284284
'fileId' =>$fileId,
@@ -294,7 +294,7 @@ private function exportProjectTranslations(string $languageId, int $fileId): Res
294294
*/
295295
return$this->client->request('POST','translations/exports', [
296296
'json' => [
297-
'targetLanguageId' =>$languageId,
297+
'targetLanguageId' =>str_replace('_','-',$languageId),
298298
'fileIds' => [$fileId],
299299
],
300300
]);

‎src/Symfony/Component/Translation/Bridge/Crowdin/Tests/CrowdinProviderTest.php‎

Lines changed: 99 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,10 @@ public function testCompleteWriteProcessUpdateFiles()
217217
$provider->write($translatorBag);
218218
}
219219

220-
publicfunctiontestCompleteWriteProcessAddFileAndUploadTranslations()
220+
/**
221+
* @dataProvider getResponsesForProcessAddFileAndUploadTranslations
222+
*/
223+
publicfunctiontestCompleteWriteProcessAddFileAndUploadTranslations(TranslatorBag$translatorBag,string$expectedLocale,string$expectedMessagesTranslationsContent)
221224
{
222225
$this->xliffFileDumper =newXliffFileDumper();
223226

@@ -237,24 +240,6 @@ public function testCompleteWriteProcessAddFileAndUploadTranslations()
237240
</file>
238241
</xliff>
239242

240-
XLIFF;
241-
242-
$expectedMessagesTranslationsContent = <<<'XLIFF'
243-
<?xml version="1.0" encoding="utf-8"?>
244-
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
245-
<file source-language="en" target-language="fr" datatype="plaintext" original="file.ext">
246-
<header>
247-
<tool tool-id="symfony" tool-name="Symfony"/>
248-
</header>
249-
<body>
250-
<trans-unit id="ypeBEso" resname="a">
251-
<source>a</source>
252-
<target>trans_fr_a</target>
253-
</trans-unit>
254-
</body>
255-
</file>
256-
</xliff>
257-
258243
XLIFF;
259244

260245
$responses = [
@@ -296,23 +281,15 @@ public function testCompleteWriteProcessAddFileAndUploadTranslations()
296281

297282
returnnewMockResponse(json_encode(['data' => ['id' =>19]]), ['http_code' =>201]);
298283
},
299-
'UploadTranslations' =>function (string$method,string$url,array$options = []):ResponseInterface {
284+
'UploadTranslations' =>function (string$method,string$url,array$options = [])use ($expectedLocale):ResponseInterface {
300285
$this->assertSame('POST',$method);
301-
$this->assertSame('https://api.crowdin.com/api/v2/projects/1/translations/fr',$url);
286+
$this->assertSame(sprintf('https://api.crowdin.com/api/v2/projects/1/translations/%s',$expectedLocale),$url);
302287
$this->assertSame('{"storageId":19,"fileId":12}',$options['body']);
303288

304289
returnnewMockResponse();
305290
},
306291
];
307292

308-
$translatorBag =newTranslatorBag();
309-
$translatorBag->addCatalogue(newMessageCatalogue('en', [
310-
'messages' => ['a' =>'trans_en_a'],
311-
]));
312-
$translatorBag->addCatalogue(newMessageCatalogue('fr', [
313-
'messages' => ['a' =>'trans_fr_a'],
314-
]));
315-
316293
$provider =$this->createProvider((newMockHttpClient($responses))->withOptions([
317294
'base_uri' =>'https://api.crowdin.com/api/v2/projects/1/',
318295
'auth_bearer' =>'API_TOKEN',
@@ -321,10 +298,69 @@ public function testCompleteWriteProcessAddFileAndUploadTranslations()
321298
$provider->write($translatorBag);
322299
}
323300

301+
publicfunctiongetResponsesForProcessAddFileAndUploadTranslations():\Generator
302+
{
303+
$arrayLoader =newArrayLoader();
304+
305+
$translatorBagFr =newTranslatorBag();
306+
$translatorBagFr->addCatalogue($arrayLoader->load([
307+
'a' =>'trans_en_a',
308+
],'en'));
309+
$translatorBagFr->addCatalogue($arrayLoader->load([
310+
'a' =>'trans_fr_a',
311+
],'fr'));
312+
313+
yield [$translatorBagFr,'fr', <<<'XLIFF'
314+
<?xml version="1.0" encoding="utf-8"?>
315+
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
316+
<file source-language="en" target-language="fr" datatype="plaintext" original="file.ext">
317+
<header>
318+
<tool tool-id="symfony" tool-name="Symfony"/>
319+
</header>
320+
<body>
321+
<trans-unit id="ypeBEso" resname="a">
322+
<source>a</source>
323+
<target>trans_fr_a</target>
324+
</trans-unit>
325+
</body>
326+
</file>
327+
</xliff>
328+
329+
XLIFF
330+
];
331+
332+
$translatorBagEnGb =newTranslatorBag();
333+
$translatorBagEnGb->addCatalogue($arrayLoader->load([
334+
'a' =>'trans_en_a',
335+
],'en'));
336+
$translatorBagEnGb->addCatalogue($arrayLoader->load([
337+
'a' =>'trans_en_gb_a',
338+
],'en_GB'));
339+
340+
yield [$translatorBagEnGb,'en-GB', <<<'XLIFF'
341+
<?xml version="1.0" encoding="utf-8"?>
342+
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
343+
<file source-language="en" target-language="en-GB" datatype="plaintext" original="file.ext">
344+
<header>
345+
<tool tool-id="symfony" tool-name="Symfony"/>
346+
</header>
347+
<body>
348+
<trans-unit id="ypeBEso" resname="a">
349+
<source>a</source>
350+
<target>trans_en_gb_a</target>
351+
</trans-unit>
352+
</body>
353+
</file>
354+
</xliff>
355+
356+
XLIFF
357+
];
358+
}
359+
324360
/**
325361
* @dataProvider getResponsesForOneLocaleAndOneDomain
326362
*/
327-
publicfunctiontestReadForOneLocaleAndOneDomain(string$locale,string$domain,string$responseContent,TranslatorBag$expectedTranslatorBag)
363+
publicfunctiontestReadForOneLocaleAndOneDomain(string$locale,string$domain,string$responseContent,TranslatorBag$expectedTranslatorBag,string$expectedTargetLanguageId)
328364
{
329365
$responses = [
330366
'listFiles' =>function (string$method,string$url):ResponseInterface {
@@ -340,10 +376,10 @@ public function testReadForOneLocaleAndOneDomain(string $locale, string $domain,
340376
],
341377
]));
342378
},
343-
'exportProjectTranslations' =>function (string$method,string$url,array$options = []):ResponseInterface {
379+
'exportProjectTranslations' =>function (string$method,string$url,array$options = [])use ($expectedTargetLanguageId):ResponseInterface {
344380
$this->assertSame('POST',$method);
345381
$this->assertSame('https://api.crowdin.com/api/v2/projects/1/translations/exports',$url);
346-
$this->assertSame('{"targetLanguageId":"fr","fileIds":[12]}',$options['body']);
382+
$this->assertSame(sprintf('{"targetLanguageId":"%s","fileIds":[12]}',$expectedTargetLanguageId),$options['body']);
347383

348384
returnnewMockResponse(json_encode(['data' => ['url' =>'https://file.url']]));
349385
},
@@ -401,7 +437,37 @@ public function getResponsesForOneLocaleAndOneDomain(): \Generator
401437
</xliff>
402438
XLIFF
403439
,
404-
$expectedTranslatorBagFr,
440+
$expectedTranslatorBagFr,'fr',
441+
];
442+
443+
$expectedTranslatorBagEnUs =newTranslatorBag();
444+
$expectedTranslatorBagEnUs->addCatalogue($arrayLoader->load([
445+
'index.hello' =>'Hello',
446+
'index.greetings' =>'Welcome, {firstname}!',
447+
],'en_GB'));
448+
449+
yield ['en_GB','messages', <<<'XLIFF'
450+
<?xml version="1.0" encoding="UTF-8"?>
451+
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
452+
<file source-language="en" target-language="en_GB" datatype="database" tool-id="crowdin">
453+
<header>
454+
<tool tool-id="crowdin" tool-name="Crowdin" tool-version="1.0.25 20201211-1" tool-company="Crowdin"/>
455+
</header>
456+
<body>
457+
<trans-unit id="crowdin:5fd89b853ee27904dd6c5f67" resname="index.hello" datatype="plaintext">
458+
<source>index.hello</source>
459+
<target state="translated">Hello</target>
460+
</trans-unit>
461+
<trans-unit id="crowdin:5fd89b8542e5aa5cc27457e2" resname="index.greetings" datatype="plaintext" extradata="crowdin:format=icu">
462+
<source>index.greetings</source>
463+
<target state="translated">Welcome, {firstname}!</target>
464+
</trans-unit>
465+
</body>
466+
</file>
467+
</xliff>
468+
XLIFF
469+
,
470+
$expectedTranslatorBagEnUs,'en-GB',
405471
];
406472
}
407473

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp