2017-08-17 3 views
0

J'utilise laravel 5.3 framework et ai un middleware pour vérifier les langues, les redirections sont correctes et la localisation fonctionne, ma question est, il est recommandé de sauvegarder la langue sélectionnée dans un cookie? Donc, je serai en mesure de rediriger l'utilisateur à chaque fois à la langue sélectionnée? Peut-il être aussi bon pour la performance ...Site multilingue, travail avec manipulation de la langue?

Pour le moment, si j'appelle App::getLocale() est obtenir la bonne langue.

Je suis généralement intéressé de savoir de quelle façon ce que je fais est correct?

+0

Il n'y a pas « bonne » façon de le faire. Mais stocker les préférences de l'utilisateur dans un cookie est acceptable, et fait par beaucoup de sites. Vous pouvez le stocker dans une session, mais en fonction de la configuration, il peut ne pas persister lorsqu'il reviendra sur le site. Alors oui, c'est bien. – Andy

Répondre

1

J'utilise ce middleware pour vérifier/mettre la langue en session pour chaque demande:

<?php 

namespace App\Http\Middleware; 

use App; 
use Auth; 
use Config; 
use Session; 
use Closure; 

class SetLocale 
{ 
    public function handle($request, Closure $next) 
    { 
     // If the session doesn't have already a locale 
     if (!Session::has('locale')) { 
      // Set the logged in user language 
      if (Auth::check() && Auth::user()->lang->code) { 
       Session::put('locale', Auth::user()->lang->code); 
      } else { 
       // Else get the http header language and set it 
       $requestLanguage = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 
       if (App\Lang::where('code', $requestLanguage)->exists()) { 
        Session::put('locale', $requestLanguage); 
       } else { 
        // If none of the above worked use the app deafult language 
        Session::put('locale', Config::get('app.locale')); 
       } 
      } 
     } 
     // Set the output locale as app locale 
     App::setLocale(Session::get('locale')); 

     return $next($request); 
    } 
} 

espoir que cela vous aide.

0

Pour le simple, vous pouvez essayer ce code trop ..

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Support\Facades\App; 
use Illuminate\Support\Facades\Session; 

class SetLocale 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $default = config('app.locale'); 

     // 2. retrieve selected locale if exist (otherwise return the default) 
     $locale = Session::get('locale', $default); 

     // 3. set the locale 
     App::setLocale($locale); 

     return $next($request); 
    } 
}