X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/ad4642c2c4257e005e3011011185fae1ff2fd033..refs/pull/1026/head:/app/Http/Middleware/Localization.php diff --git a/app/Http/Middleware/Localization.php b/app/Http/Middleware/Localization.php index 14c87c377..528ff4047 100644 --- a/app/Http/Middleware/Localization.php +++ b/app/Http/Middleware/Localization.php @@ -2,9 +2,13 @@ use Carbon\Carbon; use Closure; +use Illuminate\Http\Request; class Localization { + + protected $rtlLocales = ['ar']; + /** * Handle an incoming request. * @@ -15,19 +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; + } }