Skip to content

Commit

Permalink
[Translator] Fix translator overlapse
Browse files Browse the repository at this point in the history
  • Loading branch information
Xavier RENAUDIN authored and nicolas-grekas committed Aug 2, 2022
1 parent af947fe commit 4e6b4c0
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 12 deletions.
19 changes: 7 additions & 12 deletions MessageCatalogue.php
Original file line number Diff line number Diff line change
Expand Up @@ -159,19 +159,14 @@ public function replace($messages, $domain = 'messages')
*/
public function add($messages, $domain = 'messages')
{
if (!isset($this->messages[$domain])) {
$this->messages[$domain] = [];
}
$intlDomain = $domain;
if (!str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) {
$intlDomain .= self::INTL_DOMAIN_SUFFIX;
}
$altDomain = str_ends_with($domain, self::INTL_DOMAIN_SUFFIX) ? substr($domain, 0, -\strlen(self::INTL_DOMAIN_SUFFIX)) : $domain.self::INTL_DOMAIN_SUFFIX;
foreach ($messages as $id => $message) {
if (isset($this->messages[$intlDomain]) && \array_key_exists($id, $this->messages[$intlDomain])) {
$this->messages[$intlDomain][$id] = $message;
} else {
$this->messages[$domain][$id] = $message;
}
unset($this->messages[$altDomain][$id]);
$this->messages[$domain][$id] = $message;
}

if ([] === ($this->messages[$altDomain] ?? null)) {
unset($this->messages[$altDomain]);
}
}

Expand Down
24 changes: 24 additions & 0 deletions Tests/TranslatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
use Symfony\Component\Translation\Exception\InvalidArgumentException;
use Symfony\Component\Translation\Exception\NotFoundResourceException;
use Symfony\Component\Translation\Exception\RuntimeException;
use Symfony\Component\Translation\Formatter\IntlFormatter;
use Symfony\Component\Translation\Formatter\IntlFormatterInterface;
use Symfony\Component\Translation\Formatter\MessageFormatter;
use Symfony\Component\Translation\Formatter\MessageFormatterInterface;
use Symfony\Component\Translation\Loader\ArrayLoader;
use Symfony\Component\Translation\MessageCatalogue;
use Symfony\Component\Translation\Translator;
Expand Down Expand Up @@ -683,6 +687,26 @@ public function testIntlFormattedDomain()
$this->assertSame('Hi Bob', $translator->trans('some_message', ['%name%' => 'Bob']));
}

public function testIntlDomainOverlapseWithIntlResourceBefore()
{
$intlFormatterMock = $this->createMock(IntlFormatterInterface::class);
$intlFormatterMock->expects($this->once())->method('formatIntl')->with('hello intl', 'en', [])->willReturn('hello intl');

$messageFormatter = new MessageFormatter(null, $intlFormatterMock);

$translator = new Translator('en', $messageFormatter);
$translator->addLoader('array', new ArrayLoader());

$translator->addResource('array', ['some_message' => 'hello intl'], 'en', 'messages+intl-icu');
$translator->addResource('array', ['some_message' => 'hello'], 'en', 'messages');

$this->assertSame('hello', $translator->trans('some_message', [], 'messages'));

$translator->addResource('array', ['some_message' => 'hello intl'], 'en', 'messages+intl-icu');

$this->assertSame('hello intl', $translator->trans('some_message', [], 'messages'));
}

/**
* @group legacy
*/
Expand Down

0 comments on commit 4e6b4c0

Please sign in to comment.