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

Skip to content

Commit b752653

Browse files
committed
Allow usage of Provider domains if possible
1 parent 23338d0 commit b752653

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: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Symfony\Component\Console\Input\InputOption;
2121
use Symfony\Component\Console\Output\OutputInterface;
2222
use Symfony\Component\Console\Style\SymfonyStyle;
23+
use Symfony\Component\Translation\Provider\FilteringProvider;
2324
use Symfony\Component\Translation\Provider\TranslationProviderCollection;
2425
use Symfony\Component\Translation\Reader\TranslationReaderInterface;
2526
use Symfony\Component\Translation\TranslatorBag;
@@ -133,7 +134,13 @@ protected function execute(InputInterface $input, OutputInterface $output): int
133134
$localTranslations = $this->readLocalTranslations($locales, $domains, $this->transPaths);
134135

135136
if (!$domains) {
136-
$domains = $this->getDomainsFromTranslatorBag($localTranslations);
137+
if ($provider instanceof FilteringProvider) {
138+
$domains = $provider->getDomains();
139+
}
140+
141+
if (!$domains) {
142+
$domains = $this->getDomainsFromTranslatorBag($localTranslations);
143+
}
137144
}
138145

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

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

Lines changed: 64 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,68 @@ 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+
$filenameEn = $this->createFile([
286+
'note' => 'NOTE',
287+
'new.foo' => 'newFoo',
288+
]);
289+
$filenameFr = $this->createFile([
290+
'note' => 'NOTE',
291+
'new.foo' => 'nouveauFoo',
292+
], 'fr');
293+
$localTranslatorBag = new TranslatorBag();
294+
$localTranslatorBag->addCatalogue($xliffLoader->load($filenameEn, 'en'));
295+
$localTranslatorBag->addCatalogue($xliffLoader->load($filenameFr, 'fr'));
296+
297+
$provider->expects($this->once())
298+
->method('write')
299+
->with($localTranslatorBag->diff($providerReadTranslatorBag));
300+
301+
$provider->expects($this->once())
302+
->method('__toString')
303+
->willReturn('null://default');
304+
305+
$reader = new TranslationReader();
306+
$reader->addLoader('xlf', new XliffFileLoader());
307+
308+
$command = new TranslationPushCommand(
309+
new TranslationProviderCollection([
310+
'loco' => $provider,
311+
]),
312+
$reader,
313+
[$this->translationAppDir.'/translations'],
314+
$locales
315+
);
316+
317+
$application = new Application();
318+
$application->add($command);
319+
$tester = new CommandTester($application->find('translation:push'));
320+
321+
$tester->execute(['--locales' => ['en', 'fr']]);
322+
323+
$this->assertStringContainsString('[OK] New local translations has been sent to "null" (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay()));
324+
}
325+
262326
/**
263327
* @dataProvider provideCompletionSuggestions
264328
*/

0 commit comments

Comments
 (0)
0