]> BookStack Code Mirror - bookstack/blobdiff - app/Http/Middleware/Localization.php
UTF-8 slugs & UI fixes
[bookstack] / app / Http / Middleware / Localization.php
index 3624e0e017e71e1bfffad0a62ab82ee90974d76a..bdbf6ccbd9c57832cb29c560770900683e5c7938 100644 (file)
@@ -1,9 +1,8 @@
-<?php
-
-namespace BookStack\Http\Middleware;
+<?php namespace BookStack\Http\Middleware;
 
 use Carbon\Carbon;
 use Closure;
+use Illuminate\Http\Request;
 
 class Localization
 {
@@ -17,9 +16,33 @@ class Localization
     public function handle($request, Closure $next)
     {
         $defaultLang = config('app.locale');
-        $locale = setting()->getUser(user(), 'language', $defaultLang);
+
+        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;
+    }
 }