Laravel;如何使setLocale永久化?

时间:2017-06-09 10:57:23

标签: php laravel laravel-5

我的家乡路线

Route::get('/', 'HomeController@index')->name('home');

改变语言的具体途径

Route::get('/setLocale/{locale}', 'HomeController@setLocale')->name('setLocale');

HomeController->setLocale($locale)我检查$locale是否是有效的区域设置,然后只需执行

\App::setLocale($locale);

然后重定向到家。

HomeController->index()中,我使用

验证语言环境
$locale = \App::getLocale();

问题是,在用户更改区域设置后,应用程序会设置新的区域设置,重定向,但检测到的区域设置仍然是DEFAULT区域设置,而不是用户设置的新区域设置。

我如何/何时/何时可以持续更改应用区域设置?

我认为Laravel在使用setLocale时使用getLocale并在使用ID | Value 时重新阅读时设置了区域设置Cookie,但现在我认为这不是Laravel的工作方式。

我再次问:如何设置应用区域设置,以便在更改页面后保留?

2 个答案:

答案 0 :(得分:5)

我是通过使用中间件来做到的。这是我的代码:

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更改语言:

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

希望这可以帮助你:)

答案 1 :(得分:1)

stage.addEventListener(Event.ENTER_FRAME, range); function range(event: Event) { if (limit.hitTestObject(flappy)) { flappy.x -= 2.5; } else if (wall.hitTestObject(flappy)) { flappy.y += 20; } } 仅适用于当前请求。如果您希望记住该值,则必须手动设置cookie。

我建议使用middleware来执行此操作。