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('/^(en|es)\./', $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); case 'es': return redirect()->route($routNameES); } } $langset = 'fr'; $this->saveUserLocale($langset, $request); } } $sess_lang = $request->session()->get('lang', config('app.locale')); app()->setLocale($sess_lang); $routePrefixer = ""; if($sess_lang != 'fr') { $routePrefixer = $sess_lang . '.'; } View::share('routeprefixer', $routePrefixer); return $next($request); } /** * */ private function saveUserLocale($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 * @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, $this->langs)) { //default other languages to en $fromC = 'en'; } } $this->saveUserLocale($fromC, $request); return true; } //we have lang session return false; } }