From 7c27d261616205644e5822061cca412ee4ba2d0a Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Mon, 27 Feb 2023 19:09:20 +0000 Subject: [PATCH] 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 --- app/Util/LanguageManager.php | 5 +++-- tests/LanguageTest.php | 11 ++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/Util/LanguageManager.php b/app/Util/LanguageManager.php index 0cbf3f39705..93c992fcc08 100644 --- a/app/Util/LanguageManager.php +++ b/app/Util/LanguageManager.php @@ -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 @@ public function setPhpDateTimeLocale(string $language): void $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)); diff --git a/tests/LanguageTest.php b/tests/LanguageTest.php index e5c3c0bff83..b65227dd826 100644 --- a/tests/LanguageTest.php +++ b/tests/LanguageTest.php @@ -4,7 +4,7 @@ class LanguageTest extends TestCase { - protected $langs; + protected array $langs; /** * LanguageTest constructor. @@ -81,4 +81,13 @@ public function test_rtl_config_set_if_lang_is_rtl() $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'); + } }