use Carbon\Carbon;
use Closure;
+use Illuminate\Http\Request;
class Localization
{
+
+ protected $rtlLocales = ['ar'];
+
/**
* Handle an incoming request.
*
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;
+ }
}