]> BookStack Code Mirror - bookstack/blobdiff - app/Http/Middleware/Localization.php
Show users link in top nav if user is signed in and only manages users
[bookstack] / app / Http / Middleware / Localization.php
index 466c1442b92eca75c6fa692564ed163c16a00fca..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,21 +19,38 @@ 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);
         }
+
+        // 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;
+    }
 }