]> BookStack Code Mirror - bookstack/blobdiff - app/Http/Middleware/Localization.php
UTF-8 slugs & UI fixes
[bookstack] / app / Http / Middleware / Localization.php
index 14c87c377f630367019096641a564a28b77768ae..bdbf6ccbd9c57832cb29c560770900683e5c7938 100644 (file)
@@ -2,6 +2,7 @@
 
 use Carbon\Carbon;
 use Closure;
+use Illuminate\Http\Request;
 
 class Localization
 {
@@ -15,19 +16,33 @@ class Localization
     public function handle($request, Closure $next)
     {
         $defaultLang = config('app.locale');
-        if (user()->isDefault()) {
-            $locale = $defaultLang;
-            $availableLocales = config('app.locales');
-            foreach ($request->getLanguages() as $lang) {
-                if (!in_array($lang, $availableLocales)) continue;
-                $locale = $lang;
-                break;
-            }
+
+        if (user()->isDefault() && config('app.auto_detect_locale')) {
+            $locale = $this->autoDetectLocale($request, $defaultLang);
         } else {
             $locale = setting()->getUser(user(), 'language', $defaultLang);
         }
+
         app()->setLocale($locale);
         Carbon::setLocale($locale);
         return $next($request);
     }
+
+    /**
+     * Autodetect the visitors locale by matching locales in their headers
+     * against the locales supported by BookStack.
+     * @param Request $request
+     * @param string $default
+     * @return string
+     */
+    protected function autoDetectLocale(Request $request, string $default)
+    {
+        $availableLocales = config('app.locales');
+        foreach ($request->getLanguages() as $lang) {
+            if (in_array($lang, $availableLocales)) {
+                return $lang;
+            }
+        }
+        return $default;
+    }
 }