8000 Allow usage of Provider domains if possible · symfony/symfony@6e02668 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6e02668

Browse files
committed
Allow usage of Provider domains if possible
1 parent b342c1b commit 6e02668

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

src/Symfony/Component/Translation/Command/TranslationPushCommand.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,13 @@ protected function execute(InputInterface $input, OutputInterface $output): int
132132
$localTranslations = $this->readLocalTranslations($locales, $domains, $this->transPaths);
133133

134134
if (!$domains) {
135-
$domains = $this->getDomainsFromTranslatorBag($localTranslations);
135+
if (method_exists($provider, 'getDomains')) {
136+
$domains = $provider->getDomains();
137+
}
138+
139+
if (!$domains) {
140+
$domains = $this->getDomainsFromTranslatorBag($localTranslations);
141+
}
136142
}
137143

138144
if (!$deleteMissing && $force) {

src/Symfony/Component/Translation/Tests/Command/TranslationPushCommandTest.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
use Symfony\Component\Translation\Command\TranslationPushCommand;
1818
use Symfony\Component\Translation\Loader\ArrayLoader;
1919
use Symfony\Component\Translation\Loader\XliffFileLoader;
20+
use Symfony\Component\Translation\Provider\FilteringProvider;
2021
use Symfony\Component\Translation\Provider\ProviderInterface;
22+
use Symfony\Component\Translation\Provider\TranslationProviderCollection;
2123
use Symfony\Component\Translation\Reader\TranslationReader;
2224
use Symfony\Component\Translation\TranslatorBag;
2325

@@ -259,6 +261,69 @@ public function testPushForceAndDeleteMissingMessages()
259261
$this->assertStringContainsString('[OK] All local translations has been sent to "null" (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay()));
260262
}
261263

264+
public function testPushWithProviderDomains()
265+
{
266+
$arrayLoader = new ArrayLoader();
267+
$xliffLoader = new XliffFileLoader();
268+
$locales = ['en', 'fr'];
269+
$domains = ['messages'];
270+
271+
// Simulate existing messages on Provider
272+
$providerReadTranslatorBag = new TranslatorBag();
273+
$providerReadTranslatorBag->addCatalogue($arrayLoader->load(['note' => 'NOTE'], 'en'));
274+
$providerReadTranslatorBag->addCatalogue($arrayLoader->load(['note' => 'NOTE'], 'fr'));
275+
276+
$provider = $this->createMock(FilteringProvider::class);
277+
$provider->expects($this->once())
278+
->method('read')
279+
->with($domains, $locales)
280+
->willReturn($providerReadTranslatorBag);
281+
$provider->expects($this->once())
282+
->method('getDomains')
283+
->willReturn(['messages']);
284+
285+
// Create local files, with a new message
286+
$filenameEn = $this->createFile([
287+
'note' => 'NOTE',
288+
'new.foo' => 'newFoo',
289+
]);
290+
$filenameFr = $this->createFile([
291+
'note' => 'NOTE',
292+
'new.foo' => 'nouveauFoo',
293+
], 'fr');
294+
$localTranslatorBag = new TranslatorBag();
295+
$localTranslatorBag->addCatalogue($xliffLoader->load($filenameEn, 'en'));
296+
$localTranslatorBag->addCatalogue($xliffLoader->load($filenameFr, 'fr'));
297+
298+
$provider->expects($this->once())
299+
->method('write')
300+
->with($localTranslatorBag->diff($providerReadTranslatorBag));
301+
302+
$provider->expects($this->once())
303+
->method('__toString')
304+
->willReturn('null://default');
305+
306+
$reader = new TranslationReader();
307+
$reader->addLoader('xlf', new XliffFileLoader());
308+
309+
$command = new TranslationPushCommand(
310+
new TranslationProviderCollection([
311+
'loco' => $provider,
312+
]),
313+
$reader,
314+
[$this->translationAppDir.'/translations'],
315+
$locales
316+
);
317+
318+
$application = new Application();
319+
$application->add($command);
320+
$tester = new CommandTester($application->find('translation:push'));
321+
322+
$tester->execute(['--locales' => ['en', 'fr']]);
323+
324+
$this->assertStringContainsString('[OK] New local translations has been sent to "null" (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay()));
325+
}
326+
262327
/**
263328
* @dataProvider provideCompletionSuggestions
264329
*/

0 commit comments

Comments
 (0)
0