Fixed language locale setting issue

Attempted to access an array that had been filtered and therefore could
have holes within, including as position 0 which would then be
accessed.
Also added cs language to internal map

Related to #4068
This commit is contained in:
Dan Brown 2023-02-27 19:09:20 +00:00
parent c7e33d1981
commit 7c27d26161
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
2 changed files with 13 additions and 3 deletions

View File

@ -24,6 +24,7 @@ class LanguageManager
'bg' => ['iso' => 'bg_BG', 'windows' => 'Bulgarian'],
'bs' => ['iso' => 'bs_BA', 'windows' => 'Bosnian (Latin)'],
'ca' => ['iso' => 'ca', 'windows' => 'Catalan'],
'cs' => ['iso' => 'cs_CZ', 'windows' => 'Czech'],
'da' => ['iso' => 'da_DK', 'windows' => 'Danish'],
'de' => ['iso' => 'de_DE', 'windows' => 'German'],
'de_informal' => ['iso' => 'de_DE', 'windows' => 'German'],
@ -120,14 +121,14 @@ class LanguageManager
$isoLang = $this->localeMap[$language]['iso'] ?? '';
$isoLangPrefix = explode('_', $isoLang)[0];
$locales = array_filter([
$locales = array_values(array_filter([
$isoLang ? $isoLang . '.utf8' : false,
$isoLang ?: false,
$isoLang ? str_replace('_', '-', $isoLang) : false,
$isoLang ? $isoLangPrefix . '.UTF-8' : false,
$this->localeMap[$language]['windows'] ?? false,
$language,
]);
]));
if (!empty($locales)) {
setlocale(LC_TIME, $locales[0], ...array_slice($locales, 1));

View File

@ -4,7 +4,7 @@ namespace Tests;
class LanguageTest extends TestCase
{
protected $langs;
protected array $langs;
/**
* LanguageTest constructor.
@ -81,4 +81,13 @@ class LanguageTest extends TestCase
$this->get('/');
$this->assertTrue(config('app.rtl'), 'App RTL config should have been set to true by middleware');
}
public function test_unknown_lang_does_not_break_app()
{
config()->set('app.locale', 'zz');
$loginReq = $this->get('/login', ['Accept-Language' => 'zz']);
$loginReq->assertOk();
$loginReq->assertSee('Log In');
}
}