From 2d30fde3608dcd0b203074c99c80e20273765d99 Mon Sep 17 00:00:00 2001 From: Olivier Legat Date: Wed, 2 Feb 2022 18:37:10 +0100 Subject: [PATCH] localized front routes set lang for localized routes redirect user to saved lang keep previous lang feature on Back Office --- app/Http/Middleware/LangCheck.php | 100 ++++++++++++++---- resources/views/front/contact.blade.php | 6 +- resources/views/front/food-service.blade.php | 4 +- resources/views/front/gammes/index.blade.php | 2 +- .../views/front/gammes/product.blade.php | 2 +- resources/views/front/gammes/show.blade.php | 2 +- resources/views/front/home.blade.php | 6 +- resources/views/front/legals.blade.php | 2 +- resources/views/front/policy.blade.php | 2 +- resources/views/front/product.blade.php | 2 +- resources/views/front/search.blade.php | 2 +- .../layouts/frontend/app-footer.blade.php | 8 +- .../layouts/frontend/app-header.blade.php | 37 +++++-- routes/web.php | 10 +- 14 files changed, 135 insertions(+), 50 deletions(-) diff --git a/app/Http/Middleware/LangCheck.php b/app/Http/Middleware/LangCheck.php index 241da0e..cfc56c8 100644 --- a/app/Http/Middleware/LangCheck.php +++ b/app/Http/Middleware/LangCheck.php @@ -5,9 +5,12 @@ namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cookie; +use Illuminate\Support\Facades\View; class LangCheck { + + protected $langs = ['fr','en','es']; /** * Handle an incoming request. * @@ -17,33 +20,92 @@ class LangCheck */ public function handle(Request $request, Closure $next) { - //if lang provided un request then set it - if($request->lang) { - //Set cookie - Cookie::queue(Cookie::forever('language', $request->lang)); - //set session - $request->session()->put('lang',strtolower($request->lang)); - //bonus remove lang parameter from query - return redirect()->to($request->fullUrlWithoutQuery('lang')); + + $routName = $request->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 { - //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, ['fr', 'en', 'es'])) { - //default other languages to en - $fromC = 'en'; + //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); } } - //set session - $request->session()->put('lang',strtolower($fromC)); + + $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; + } } diff --git a/resources/views/front/contact.blade.php b/resources/views/front/contact.blade.php index 0e45490..ccf099d 100644 --- a/resources/views/front/contact.blade.php +++ b/resources/views/front/contact.blade.php @@ -46,7 +46,7 @@

{!! __('Une question ? Une idée ? Un conseil ?
Des informations sur nos produits ?') !!}

@@ -67,7 +67,7 @@ @endif @endif -
+ @csrf @if ($errors->any()) @foreach ($errors->all() as $error) @@ -183,7 +183,7 @@

{!! __('Les informations que vous nous communiquez sont collectées et traitées par la Société Bretonne de Volaille, responsable de traitement selon les finalités définies dans notre Charte de confidentialité. Ces informations sont destinées au personnel de la Société Bretonne de Volaille et peuvent être partagées avec ses sous-traitants.
- A tout moment, vous pouvez retirer votre consentement. Pour toute information complémentaire concernant vos données personnelles et vos droits, merci de consulter notre Charte de confidentialité.', ['PRIVROUTE' => route('policy')]) !!}

+ A tout moment, vous pouvez retirer votre consentement. Pour toute information complémentaire concernant vos données personnelles et vos droits, merci de consulter notre Charte de confidentialité.', ['PRIVROUTE' => route($routeprefixer . 'policy')]) !!}

diff --git a/resources/views/front/food-service.blade.php b/resources/views/front/food-service.blade.php index 3222ce6..0fc062c 100644 --- a/resources/views/front/food-service.blade.php +++ b/resources/views/front/food-service.blade.php @@ -41,7 +41,7 @@
{!! $encart_food->text !!}
- {{ __('En savoir plus') }} + {{ __('En savoir plus') }}
@@ -74,7 +74,7 @@
{{ $product->alt_text_picture}}

{{ $product->name}}

- + {{ __('Découvrir') }} diff --git a/resources/views/front/gammes/index.blade.php b/resources/views/front/gammes/index.blade.php index 06adc5c..978f7a5 100644 --- a/resources/views/front/gammes/index.blade.php +++ b/resources/views/front/gammes/index.blade.php @@ -45,7 +45,7 @@ @foreach ($gammes as $gamme)
{{ $gamme->alt_text_picture}} - + {{ $gamme->title}} diff --git a/resources/views/front/gammes/product.blade.php b/resources/views/front/gammes/product.blade.php index 2b1ebc0..a61bd29 100644 --- a/resources/views/front/gammes/product.blade.php +++ b/resources/views/front/gammes/product.blade.php @@ -1,7 +1,7 @@
{{ $product->alt_text_picture }}

{{ $product->name }}

- + {{ __('Découvrir') }} diff --git a/resources/views/front/gammes/show.blade.php b/resources/views/front/gammes/show.blade.php index c54732b..04770cb 100644 --- a/resources/views/front/gammes/show.blade.php +++ b/resources/views/front/gammes/show.blade.php @@ -30,7 +30,7 @@

{{ $gamme->title }}

diff --git a/resources/views/front/home.blade.php b/resources/views/front/home.blade.php index 95f4d2c..6375841 100644 --- a/resources/views/front/home.blade.php +++ b/resources/views/front/home.blade.php @@ -56,7 +56,7 @@ {!! clean(nl2br($encart_home->text)) !!}

- {{ __('En savoir plus') }} + {{ __('En savoir plus') }}

@@ -72,7 +72,7 @@ {{ __('Découvrez tous nos produits à base de volaille.') }}

{{ __('home.products.text')}}

- {{ __('Découvrir')}} + {{ __('Découvrir')}} @if (isset($products_home))
@foreach ($products_home as $product) @@ -100,7 +100,7 @@

{{ $post_home->title}}

{!! clean(nl2br($post_home->text)) !!}

- En savoir plus + En savoir plus

diff --git a/resources/views/front/legals.blade.php b/resources/views/front/legals.blade.php index 5b27c97..57239da 100644 --- a/resources/views/front/legals.blade.php +++ b/resources/views/front/legals.blade.php @@ -30,7 +30,7 @@

{{ $mentions_legales->title }}

diff --git a/resources/views/front/policy.blade.php b/resources/views/front/policy.blade.php index 2d21156..8427548 100644 --- a/resources/views/front/policy.blade.php +++ b/resources/views/front/policy.blade.php @@ -30,7 +30,7 @@

{{ $privacy_policy->title }}

diff --git a/resources/views/front/product.blade.php b/resources/views/front/product.blade.php index 176f38d..18179e5 100644 --- a/resources/views/front/product.blade.php +++ b/resources/views/front/product.blade.php @@ -31,7 +31,7 @@

{{ $product->name}}

diff --git a/resources/views/front/search.blade.php b/resources/views/front/search.blade.php index 39027a8..bf94658 100644 --- a/resources/views/front/search.blade.php +++ b/resources/views/front/search.blade.php @@ -28,7 +28,7 @@

{{ __('Résultats') }}

diff --git a/resources/views/layouts/frontend/app-footer.blade.php b/resources/views/layouts/frontend/app-footer.blade.php index bbc6d35..b9dfc13 100644 --- a/resources/views/layouts/frontend/app-footer.blade.php +++ b/resources/views/layouts/frontend/app-footer.blade.php @@ -59,10 +59,10 @@