Use locale_parse for computing fallback locales
This commit is contained in:
parent
135c6f7d9d
commit
3657c0e664
@ -234,15 +234,38 @@ class TranslatorTest extends TestCase
|
|||||||
$this->assertEquals('bar', $translator->trans('foo', [], 'resources'));
|
$this->assertEquals('bar', $translator->trans('foo', [], 'resources'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testTransWithFallbackLocaleBis()
|
/**
|
||||||
|
* @dataProvider getFallbackLocales
|
||||||
|
*/
|
||||||
|
public function testTransWithFallbackLocaleBis($expectedLocale, $locale)
|
||||||
{
|
{
|
||||||
$translator = new Translator('en_US');
|
$translator = new Translator($locale);
|
||||||
$translator->addLoader('array', new ArrayLoader());
|
$translator->addLoader('array', new ArrayLoader());
|
||||||
$translator->addResource('array', ['foo' => 'foofoo'], 'en_US');
|
$translator->addResource('array', ['foo' => 'foofoo'], $locale);
|
||||||
$translator->addResource('array', ['bar' => 'foobar'], 'en');
|
$translator->addResource('array', ['bar' => 'foobar'], $expectedLocale);
|
||||||
$this->assertEquals('foobar', $translator->trans('bar'));
|
$this->assertEquals('foobar', $translator->trans('bar'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFallbackLocales()
|
||||||
|
{
|
||||||
|
$locales = [
|
||||||
|
['en', 'en_US'],
|
||||||
|
['en', 'en-US'],
|
||||||
|
['sl_Latn_IT', 'sl_Latn_IT_nedis'],
|
||||||
|
['sl_Latn', 'sl_Latn_IT'],
|
||||||
|
];
|
||||||
|
|
||||||
|
if (\function_exists('locale_parse')) {
|
||||||
|
$locales[] = ['sl_Latn_IT', 'sl-Latn-IT-nedis'];
|
||||||
|
$locales[] = ['sl_Latn', 'sl-Latn-IT'];
|
||||||
|
} else {
|
||||||
|
$locales[] = ['sl-Latn-IT', 'sl-Latn-IT-nedis'];
|
||||||
|
$locales[] = ['sl-Latn', 'sl-Latn-IT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $locales;
|
||||||
|
}
|
||||||
|
|
||||||
public function testTransWithFallbackLocaleTer()
|
public function testTransWithFallbackLocaleTer()
|
||||||
{
|
{
|
||||||
$translator = new Translator('fr_FR');
|
$translator = new Translator('fr_FR');
|
||||||
|
@ -412,8 +412,19 @@ EOF
|
|||||||
$locales[] = $fallback;
|
$locales[] = $fallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (false !== strrchr($locale, '_')) {
|
if (\function_exists('locale_parse')) {
|
||||||
|
$localeSubTags = locale_parse($locale);
|
||||||
|
if (1 < \count($localeSubTags)) {
|
||||||
|
array_pop($localeSubTags);
|
||||||
|
$fallback = locale_compose($localeSubTags);
|
||||||
|
if (false !== $fallback) {
|
||||||
|
array_unshift($locales, $fallback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif (false !== strrchr($locale, '_')) {
|
||||||
array_unshift($locales, substr($locale, 0, -\strlen(strrchr($locale, '_'))));
|
array_unshift($locales, substr($locale, 0, -\strlen(strrchr($locale, '_'))));
|
||||||
|
} elseif (false !== strrchr($locale, '-')) {
|
||||||
|
array_unshift($locales, substr($locale, 0, -\strlen(strrchr($locale, '-'))));
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_unique($locales);
|
return array_unique($locales);
|
||||||
|
Reference in New Issue
Block a user