Skip to content

Commit

Permalink
Allow usage of Provider domains if possible
Browse files Browse the repository at this point in the history
  • Loading branch information
welcoMattic committed Apr 12, 2022
1 parent 76dbc7a commit 3241305
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 1 deletion.
9 changes: 8 additions & 1 deletion Command/TranslationPushCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Translation\Provider\FilteringProvider;
use Symfony\Component\Translation\Provider\TranslationProviderCollection;
use Symfony\Component\Translation\Reader\TranslationReaderInterface;
use Symfony\Component\Translation\TranslatorBag;
Expand Down Expand Up @@ -133,7 +134,13 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$localTranslations = $this->readLocalTranslations($locales, $domains, $this->transPaths);

if (!$domains) {
$domains = $this->getDomainsFromTranslatorBag($localTranslations);
if ($provider instanceof FilteringProvider) {
$domains = $provider->getDomains();
}

if (!$domains) {
$domains = $this->getDomainsFromTranslatorBag($localTranslations);
}
}

if (!$deleteMissing && $force) {
Expand Down
64 changes: 64 additions & 0 deletions Tests/Command/TranslationPushCommandTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
use Symfony\Component\Translation\Command\TranslationPushCommand;
use Symfony\Component\Translation\Loader\ArrayLoader;
use Symfony\Component\Translation\Loader\XliffFileLoader;
use Symfony\Component\Translation\Provider\FilteringProvider;
use Symfony\Component\Translation\Provider\ProviderInterface;
use Symfony\Component\Translation\Provider\TranslationProviderCollection;
use Symfony\Component\Translation\Reader\TranslationReader;
use Symfony\Component\Translation\TranslatorBag;

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

public function testPushWithProviderDomains()
{
$arrayLoader = new ArrayLoader();
$xliffLoader = new XliffFileLoader();
$locales = ['en', 'fr'];
$domains = ['messages'];

// Simulate existing messages on Provider
$providerReadTranslatorBag = new TranslatorBag();
$providerReadTranslatorBag->addCatalogue($arrayLoader->load(['note' => 'NOTE'], 'en'));
$providerReadTranslatorBag->addCatalogue($arrayLoader->load(['note' => 'NOTE'], 'fr'));

$provider = $this->createMock(FilteringProvider::class);
$provider->expects($this->once())
->method('read')
->with($domains, $locales)
->willReturn($providerReadTranslatorBag);
$provider->expects($this->once())
->method('getDomains')
->willReturn(['messages']);

$filenameEn = $this->createFile([
'note' => 'NOTE',
'new.foo' => 'newFoo',
]);
$filenameFr = $this->createFile([
'note' => 'NOTE',
'new.foo' => 'nouveauFoo',
], 'fr');
$localTranslatorBag = new TranslatorBag();
$localTranslatorBag->addCatalogue($xliffLoader->load($filenameEn, 'en'));
$localTranslatorBag->addCatalogue($xliffLoader->load($filenameFr, 'fr'));

$provider->expects($this->once())
->method('write')
->with($localTranslatorBag->diff($providerReadTranslatorBag));

$provider->expects($this->once())
->method('__toString')
->willReturn('null://default');

$reader = new TranslationReader();
$reader->addLoader('xlf', new XliffFileLoader());

$command = new TranslationPushCommand(
new TranslationProviderCollection([
'loco' => $provider,
]),
$reader,
[$this->translationAppDir.'/translations'],
$locales
);

$application = new Application();
$application->add($command);
$tester = new CommandTester($application->find('translation:push'));

$tester->execute(['--locales' => ['en', 'fr']]);

$this->assertStringContainsString('[OK] New local translations has been sent to "null" (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay()));
}

/**
* @dataProvider provideCompletionSuggestions
*/
Expand Down

0 comments on commit 3241305

Please sign in to comment.