From 903ca68ad3f8705054a6bcb0d6f929088f3019be Mon Sep 17 00:00:00 2001 From: Olivier Legat Date: Thu, 22 Sep 2022 12:43:27 +0200 Subject: [PATCH] fix first access redirect to browser lang, prevent any lang check waiting for langs activations --- app/Http/Middleware/LangCheck.php | 64 +++++++++++++++---------------- config/app.php | 7 ++++ 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/app/Http/Middleware/LangCheck.php b/app/Http/Middleware/LangCheck.php index 0fa7bd6..0b05ef5 100644 --- a/app/Http/Middleware/LangCheck.php +++ b/app/Http/Middleware/LangCheck.php @@ -5,17 +5,11 @@ namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cookie; +use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\View; class LangCheck { - /** - * The available languages. - * - * @var array - */ - protected $langs = ['fr','en','es']; - /** * Handle an incoming request. * @@ -27,6 +21,8 @@ class LangCheck { $routName = $request->route()->getName(); + + $routeParams = Route::current()->parameters(); if (preg_match('/^bo\./', $routName)) { // Back office. if ($request->lang) { @@ -39,30 +35,34 @@ class LangCheck } } else { // FRONT. - if (preg_match('/^(en|es)\./', $routName)) { - // From front use named routes. - $langset = $request->segment(1); + // 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); - case 'es': - return redirect()->route($routNameES); - } - } + // $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 + // $langset = 'fr'; + // $this->saveUserLocale($langset, $request); + // }//end if }//end if - + // phpcs:enable @@ -70,7 +70,7 @@ class LangCheck app()->setLocale($sess_lang); config(['app.locale' => $sess_lang]); $routePrefixer = ""; - if ($sess_lang != 'fr') { + if ($sess_lang != config('app.locale')) { $routePrefixer = $sess_lang . '.'; } View::share('routeprefixer', $routePrefixer); @@ -109,9 +109,9 @@ class LangCheck 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'; + if (!in_array($fromC, config('app.other_locales'))) { + // Default other languages to config('app.locale'). + $fromC = config('app.locale'); } } $this->saveUserLocale($fromC, $request); diff --git a/config/app.php b/config/app.php index 08fee42..1666cc8 100644 --- a/config/app.php +++ b/config/app.php @@ -108,6 +108,13 @@ return [ 'faker_locale' => 'fr_FR', + /** + * All locales + */ + + 'other_locales' => ['en', 'es'], + + /* |-------------------------------------------------------------------------- | Encryption Key