]> BookStack Code Mirror - bookstack/blob - app/Http/Middleware/Localization.php
Merge branch 'master' into fix/#960
[bookstack] / app / Http / Middleware / Localization.php
1 <?php namespace BookStack\Http\Middleware;
2
3 use Carbon\Carbon;
4 use Closure;
5 use Illuminate\Http\Request;
6
7 class Localization
8 {
9
10     protected $rtlLocales = ['ar'];
11
12     /**
13      * Handle an incoming request.
14      *
15      * @param  \Illuminate\Http\Request  $request
16      * @param  \Closure  $next
17      * @return mixed
18      */
19     public function handle($request, Closure $next)
20     {
21         $defaultLang = config('app.locale');
22
23         if (user()->isDefault() && config('app.auto_detect_locale')) {
24             $locale = $this->autoDetectLocale($request, $defaultLang);
25         } else {
26             $locale = setting()->getUser(user(), 'language', $defaultLang);
27         }
28
29         // Set text direction
30         if (in_array($locale, $this->rtlLocales)) {
31             config()->set('app.rtl', true);
32         }
33
34         app()->setLocale($locale);
35         Carbon::setLocale($locale);
36         return $next($request);
37     }
38
39     /**
40      * Autodetect the visitors locale by matching locales in their headers
41      * against the locales supported by BookStack.
42      * @param Request $request
43      * @param string $default
44      * @return string
45      */
46     protected function autoDetectLocale(Request $request, string $default)
47     {
48         $availableLocales = config('app.locales');
49         foreach ($request->getLanguages() as $lang) {
50             if (in_array($lang, $availableLocales)) {
51                 return $lang;
52             }
53         }
54         return $default;
55     }
56 }