]> BookStack Code Mirror - bookstack/commitdiff
Fixed language locale setting issue
authorDan Brown <redacted>
Mon, 27 Feb 2023 19:09:20 +0000 (19:09 +0000)
committerDan Brown <redacted>
Mon, 27 Feb 2023 19:14:45 +0000 (19:14 +0000)
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
tests/LanguageTest.php

index 0cbf3f39705ac45c2f0b819751ce335536ba94e8..93c992fcc0871ff24d7e622609d389351ba82a78 100644 (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));
index e5c3c0bff83f40b1ce04e2ac74d256ad32cbbff1..b65227dd826838472ea4ef412f2d42b74b2c7876 100644 (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');
+    }
 }