route()->getName(); if (preg_match('/^bo\./', $routName)) { // Back office. if ($request->lang) { // Within bo we set lang with querystring param. $this->saveUserLocale($request->lang, $request); // Bonus remove lang parameter from query. return redirect()->to($request->fullUrlWithoutQuery('lang')); } else { $this->checkFirstAccess($request); } } else { // FRONT. if (preg_match('/^(' . \implode("|", config('app.other_locales')) . ')\./', $routName)) { // From front use named routes. $langset = $request->segment(1); $this->saveUserLocale($langset, $request); } else { // Not specified in route. if ($this->checkFirstAccess($request)) { $sess_lang = $request->session()->get('lang', config('app.locale')); if ($sess_lang === config('app.locale')) { return redirect()->route($routName, $request->route()->parameters()); } return redirect()->route($sess_lang . '.' . $routName, $request->route()->parameters()); } $this->saveUserLocale( config('app.locale'), $request ); } //end if } //end if $sess_lang = $request->session()->get('lang', config('app.locale')); $routePrefixer = ""; if ($sess_lang != config('app.locale')) { $routePrefixer = $sess_lang . '.'; } app()->setLocale($sess_lang); View::share('routeprefixer', $routePrefixer); return $next($request); } /** * Register Current user choice for language * * @param string $lang * @param \Illuminate\Http\Request $request * * @return void */ private function saveUserLocale(string $lang, Request $request) { // Set cookie. Cookie::queue(Cookie::forever('language', strtolower($lang))); // Set session. $request->session()->put('lang', strtolower($lang)); } /** * checks if we have saved locale info for current user * if not find then save that locale * @param \Illuminate\Http\Request $request * * @return boolean */ private function checkFirstAccess(Request $request) { // Do we have session ? if (!$request->session()->has('lang')) { $fromC = Cookie::get('language'); if (is_null($fromC) || empty($fromC)) { // Pas de cookie, recherche sur le navigateur. $fromC = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2); if (!in_array($fromC, config('app.other_locales'))) { // Default other languages to config('app.locale'). $fromC = config('app.locale'); } } $this->saveUserLocale($fromC, $request); return true; } // We have lang session. return false; } }