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'));
|
||||
}
|
||||
|
||||
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->addResource('array', ['foo' => 'foofoo'], 'en_US');
|
||||
$translator->addResource('array', ['bar' => 'foobar'], 'en');
|
||||
$translator->addResource('array', ['foo' => 'foofoo'], $locale);
|
||||
$translator->addResource('array', ['bar' => 'foobar'], $expectedLocale);
|
||||
$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()
|
||||
{
|
||||
$translator = new Translator('fr_FR');
|
||||
|
@ -412,8 +412,19 @@ EOF
|
||||
$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, '_'))));
|
||||
} elseif (false !== strrchr($locale, '-')) {
|
||||
array_unshift($locales, substr($locale, 0, -\strlen(strrchr($locale, '-'))));
|
||||
}
|
||||
|
||||
return array_unique($locales);
|
||||
|
Reference in New Issue
Block a user