X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/26da81a3b011198e90eed38c42e198d040d9dcfc..7f95b51b00d0d5fa1e7bcf5574f2d58bddcbd504:/app/Http/Middleware/Localization.php diff --git a/app/Http/Middleware/Localization.php b/app/Http/Middleware/Localization.php index 31cb5d9a2..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,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; + } }