route()->getName(); $routeParams = Route::current()->parameters(); 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. // phpcs:disable $langset = 'fr'; $this->saveUserLocale($langset, $request); // TODO : Reactivate below when activating langs // 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)) { // $routNameEN = 'en.' . $routName; // $routNameES = 'es.' . $routName; // $sess_lang = $request->session()->get('lang', config('app.locale')); // switch ($sess_lang) { // case 'en': // return redirect()->route($routNameEN, $routeParams); // case 'es': // return redirect()->route($routNameES, $routeParams); // } // } // $langset = 'fr'; // $this->saveUserLocale($langset, $request); // }//end if }//end if // phpcs:enable $sess_lang = $request->session()->get('lang', config('app.locale')); app()->setLocale($sess_lang); config(['app.locale' => $sess_lang]); $routePrefixer = ""; if ($sess_lang != config('app.locale')) { $routePrefixer = $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; } }