2016-06-12 10 views
1

Laravelでロケールスイッチャーを作成しようとしています。Laravelでロケールが変更されない

ユーザーがログインしている場合は、スイッチャーがうまく動作しますが、ゲストは、何も起こりません、私はバグを見つけることができないとき...ここ

が私のファイルです:私のログインビューで

、私が持っています私のスイッチャー:

<ul class="dropdown-menu"> 
       <li><a class="mexico" href="{{ URL::action('[email protected]', 'es') }}"> 
         <img src="/images/flags/MX.png" alt="Español"> Español</a></li> 
       <li><a class="english" href="{{ URL::action('[email protected]', 'en') }}"> 
         <img src="/images/flags/GB.png" alt="English"> English</a></li> 
      </ul> 

ここでは私のLanguageControllerです:

class LanguageController extends Controller 
{ 

    public function update($locale){ 
     if(Auth::check()){ 
      Auth::user()->locale = $locale; 
      Auth::user()->save(); 
     } 
     Lang::setLocale($locale); 
     app()->setLocale($locale); 
     return redirect()->back(); 

    } 
} 

マイroutes.phpの

私はロケールを扱う世界的なミドルウェアいる
Route::get('lang/{lang}', '[email protected]'); // This is outside any middleware 

:デフォルトでは、ユーザーがログインしている場合は、ロケールが、そうでない場合は、DBに

public function handle($request, Closure $next) 
{ 
     if (Auth::check()) { 
      app()->setLocale(Auth::user()->locale); 
     } 
     else { 
      $locale = Lang::getLocale(); 

      app()->setLocale($locale); 
     } 
    return $next($request); 
} 

保存されているアプリのロケールが設定されている...

ロケールはスペイン語です。

英語を選択しようとすると、何もしません。

dd(Lang::getLocale()); 

はそうLanguageControllerの末尾に「EN」を私に与えて、それが動作するはずですが、私は、ログインビューで

dd(Lang::getLocale()); 

これと同じ行を置けば(それはリターンリダイレクトした後、そこに戻って取得します() - > back();)、それは私に "es"を与える

私は理解できない!

EDIT:

return redirect()->back(); 

それが動作

return view ('auth/login'); 

で:私は交換してください

これを拡張すると、私がredirect()を使用すると失敗するように思えます...それを修正する方法はまだ分かりません。ここで

答えて

0

は、私はそれを解決する方法である:

class LanguageController extends Controller 
    { 

     public function update($locale) 
     { 
      if (Auth::check()) { 
       Auth::user()->locale = $locale; 
       Auth::user()->save(); 
      } 
      Session::put('locale', $locale); 
      return redirect()->back(); 


     } 
    } 

LocaleMiddleware:this post

にインスピレーションを受け

class LocaleMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 

    protected $languages = ['en', 'es']; 


    public function handle($request, Closure $next) 
    { 
     if (Session::has('locale') && in_array(Session::get('locale'), $this->languages)) { 
      App::setLocale(Session::get('locale')); 
     } 

     return $next($request); 
    } 
} 

関連する問題