2017-08-17 3 views
0

私はlaravel 5.3フレームワークを使用し、ミドルウェアを使って言語をチェックし、リダイレクトは正確でローカライズされています。私の質問は、クッキーに選択した言語を保存することをお勧めしますか?だから、毎回ユーザーを選択した言語にリダイレクトできますか?パフォーマンスにもいいですか...多言語ウェブサイト、言語操作で動作しますか?

私がApp::getLocale()と呼んでいる瞬間、正しい言語が得られます。

私は一般的にこのように正しいことを知りたいですか?

+0

これを行うことのない「正しい」方法はありません。しかし、ユーザーの設定をクッキーに保存することは容認でき、多くのサイトで行うことができます。あなたはセッションでそれを保存することができますが、それが設定された方法によっては、サイトを再訪するときに持続しないことがあります。はい、これは問題ありません。 – Andy

答えて

1

私は、リクエストごとにセッションに言語を設定/確認するために、このミドルウェアを使用します。

<?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); 
    } 
} 

希望これはあなたを助けます。単純なものについては

0

、あなたもこのコードを試すことができます。..

<?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); 
    } 
}