2017-06-09 9 views
0

私は$localeが有効なロケールであれば、私は、単純Laravel;どのようにsetLocaleを永続化するのですか?

\App::setLocale($locale); 

を行い、チェックHomeController->setLocale($locale)では私の自宅のルート

Route::get('/', '[email protected]')->name('home'); 

そして、特定のルートに変更するための言語

Route::get('/setLocale/{locale}', '[email protected]')->name('setLocale'); 

ましたその後、自宅にリダイレクトします。私は

$locale = \App::getLocale(); 

問題を使用してロケールを確認HomeController->index()。ここ

は、ユーザーがロケールを変更した後、アプリが新しいロケールは、リダイレクト設定されますが、検出されたロケールがまだデフォルトのロケールではないということですユーザーによる新しい設定。

どのようにアプリケーションロケールの変更を永続的にすることができますか?

setLocaleを使用しているときにLaravelがロケールのクッキーなどを設定していたと思って、getLocaleを使用して再読したことがありましたが、今はこれがLaravelの仕組みではないと思います。

私は再度質問します。ページの変更後に保存されるようにアプリのロケールを設定するにはどうすればよいですか?

+1

セッション/キャッシュを使用してロケール '\ App:setLocale( 'ufo-lan guage ') 'はロケールをリクエストライフのためだけに設定します。とにかくそれのための経路を使用し、検索エンジンのために何も保存しないでください。 – Kyslik

+0

お客様はロケールスラッグを避けるように頼まれました。彼はURLの翻訳を好む – realtebo

+0

あなたの顧客はすべての影響を知っていますか?それは愚かだが、サイトの翻訳がある場合、g-botがクッキーを保存していないようだから、googleは決して知りません。歓声 – Kyslik

答えて

1

ミドルウェアを使用してこれを行いました。ここに私のコードは次のとおりです。

LanguageMiddleware:

public function handle($request, Closure $next) 
{ 
    if(session()->has('locale')) 
     app()->setLocale(session('locale')); 
    app()->setLocale(config('app.locale')); 

    return $next($request); 
} 

があなたのミドルウェアを登録することを忘れないでください:)

ユーザーは、単純なGET-ルートで、言語を変更することができます:

Route::get('/lang/{key}', function ($key) { 
    session()->put('locale', $key); 
    return redirect()->back(); 
}); 

うまくいけば助けてくれるでしょう:)

1

setlocaleは、現在のリクエストに対してのみ機能します。値を記憶させたい場合は、手動でクッキーを設定する必要があります。

これを行うにはmiddlewareを使用することをおすすめします。

+0

ああ...これは良いアイデアです。私は試してみます。 – realtebo

+0

アプリの起動時に設定されるのはどうですか? – realtebo

+0

あなたのアプリのすべてのルートが翻訳され、個人ロケールが必要な場合に依存します。 – Jerodev

関連する問題