[Translation] Add support for calling 'trans' with ICU formatted messages

This commit is contained in:
Hugo Sales 2020-07-18 02:28:19 +00:00 committed by Fabien Potencier
parent 27bb2828e3
commit d2ec41f4ef
3 changed files with 24 additions and 1 deletions

View File

@ -4,6 +4,7 @@ CHANGELOG
5.2.0
-----
* added support for calling `trans` with ICU formatted messages
* added `PseudoLocalizationTranslator`
5.1.0

View File

@ -368,6 +368,14 @@ class TranslatorTest extends TestCase
$this->assertEquals($expected, $translator->trans($id, $parameters, $domain, $locale));
}
/**
* @dataProvider getTransICUTests
*/
public function testTransICU(...$args)
{
$this->testTrans(...$args);
}
/**
* @dataProvider getInvalidLocalesTests
*/
@ -444,6 +452,17 @@ class TranslatorTest extends TestCase
];
}
public function getTransICUTests()
{
$id = '{apples, plural, =0 {There are no apples} one {There is one apple} other {There are # apples}}';
return [
['There are no apples', $id, $id, ['{apples}' => 0], 'en', 'test'.MessageCatalogue::INTL_DOMAIN_SUFFIX],
['There is one apple', $id, $id, ['{apples}' => 1], 'en', 'test'.MessageCatalogue::INTL_DOMAIN_SUFFIX],
['There are 3 apples', $id, $id, ['{apples}' => 3], 'en', 'test'.MessageCatalogue::INTL_DOMAIN_SUFFIX],
];
}
public function getFlattenedTransTests()
{
$messages = [

View File

@ -214,7 +214,10 @@ class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleA
}
}
if ($this->hasIntlFormatter && $catalogue->defines($id, $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX)) {
$len = \strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX);
if ($this->hasIntlFormatter
&& ($catalogue->defines($id, $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX)
|| 0 == substr_compare($domain, MessageCatalogue::INTL_DOMAIN_SUFFIX, -$len, $len))) {
return $this->formatter->formatIntl($catalogue->get($id, $domain), $locale, $parameters);
}