Skip to content

Commit

Permalink
Fix TranslationTrait for multiple domains
Browse files Browse the repository at this point in the history
  • Loading branch information
Tomasz Kusy authored and derrabus committed Dec 5, 2021
1 parent 124a042 commit c301b6d
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 2 deletions.
3 changes: 1 addition & 2 deletions Command/TranslationTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ private function readLocalTranslations(array $locales, array $domains, array $tr

if ($domains) {
foreach ($domains as $domain) {
$catalogue = $this->filterCatalogue($catalogue, $domain);
$bag->addCatalogue($catalogue);
$bag->addCatalogue($this->filterCatalogue($catalogue, $domain));
}
} else {
$bag->addCatalogue($catalogue);
Expand Down
77 changes: 77 additions & 0 deletions Tests/Command/TranslationPullCommandTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,83 @@ public function testPullMessagesWithDefaultLocale()
, file_get_contents($filenameFr));
}

public function testPullMessagesMultipleDomains()
{
$arrayLoader = new ArrayLoader();
$filenameMessages = $this->createFile(['note' => 'NOTE']);
$filenameDomain = $this->createFile(['note' => 'NOTE'], 'en', 'domain.%locale%.xlf');
$locales = ['en'];
$domains = ['messages', 'domain'];

$providerReadTranslatorBag = new TranslatorBag();
$providerReadTranslatorBag->addCatalogue($arrayLoader->load([
'new.foo' => 'newFoo',
], 'en'));

$providerReadTranslatorBag->addCatalogue($arrayLoader->load([
'new.foo' => 'newFoo',
], 'en',
'domain'
));

$provider = $this->createMock(ProviderInterface::class);
$provider->expects($this->once())
->method('read')
->with($domains, $locales)
->willReturn($providerReadTranslatorBag);

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

$tester = $this->createCommandTester($provider, $locales, $domains, 'en');
$tester->execute(['--locales' => ['en'], '--domains' => ['messages', 'domain']]);

$this->assertStringContainsString('[OK] New translations from "null" has been written locally (for "en" locale(s), and "messages, domain" domain(s)).', trim($tester->getDisplay()));
$this->assertXmlStringEqualsXmlString(<<<XLIFF
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" target-language="en" datatype="plaintext" original="file.ext">
<header>
<tool tool-id="symfony" tool-name="Symfony"/>
</header>
<body>
<trans-unit id="994ixRL" resname="new.foo">
<source>new.foo</source>
<target>newFoo</target>
</trans-unit>
<trans-unit id="7bRlYkK" resname="note">
<source>note</source>
<target>NOTE</target>
</trans-unit>
</body>
</file>
</xliff>
XLIFF
, file_get_contents($filenameMessages));
$this->assertXmlStringEqualsXmlString(<<<XLIFF
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" target-language="en" datatype="plaintext" original="file.ext">
<header>
<tool tool-id="symfony" tool-name="Symfony"/>
</header>
<body>
<trans-unit id="994ixRL" resname="new.foo">
<source>new.foo</source>
<target>newFoo</target>
</trans-unit>
<trans-unit id="7bRlYkK" resname="note">
<source>note</source>
<target>NOTE</target>
</trans-unit>
</body>
</file>
</xliff>
XLIFF
, file_get_contents($filenameDomain));
}

private function createCommandTester(ProviderInterface $provider, array $locales = ['en'], array $domains = ['messages'], $defaultLocale = 'en'): CommandTester
{
$writer = new TranslationWriter();
Expand Down

0 comments on commit c301b6d

Please sign in to comment.