]> BookStack Code Mirror - bookstack/blobdiff - app/Http/Middleware/Localization.php
Rolled tri-layout to page edit and book-create
[bookstack] / app / Http / Middleware / Localization.php
index 31cb5d9a2bfb2e7eb1fb48c67ddf5d9419faca97..528ff40478dbeb92f436ee747b0cb9f07b9071d8 100644 (file)
@@ -2,9 +2,13 @@
 
 use Carbon\Carbon;
 use Closure;
+use Illuminate\Http\Request;
 
 class Localization
 {
+
+    protected $rtlLocales = ['ar'];
+
     /**
      * Handle an incoming request.
      *
@@ -15,9 +19,38 @@ 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);
+        }
+
+        // Set text direction
+        if (in_array($locale, $this->rtlLocales)) {
+            config()->set('app.rtl', true);
+        }
+
         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;
+    }
 }