gpt4 book ai didi

php - 拉维尔;如何使 setLocale 永久化?

转载 作者:可可西里 更新时间:2023-11-01 00:08:14 25 4
gpt4 key购买 nike

我有我的家路线

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();

问题是在用户更改语言环境后,应用程序设置了新的语言环境,重定向,但检测到的语言环境仍然是默认语言环境,而不是用户设置的新语言环境。

我如何/在何处/何时可以对应用区域设置进行持久化更改?

我认为 Laravel 在使用 setLocale 时设置了区域设置 cookie 或其他东西,并在使用 getLocale 时重新读取它,但现在我认为这不是 Laravel 的工作方式。

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

最佳答案

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

语言中间件:

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

return $next($request);
}

记得注册你的中间件:)

用户可以通过简单的 GET-Route 更改语言:

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

希望对你有帮助:)

显然,Laravel 7.0 中有一些变化!

如果您使用上面的代码,请将 BeforeMiddleware 更改为 AfterMiddleware! (参见 https://laravel.com/docs/7.x/middleware)

如果不这样做,session('locale') 的值将始终为 null!

关于php - 拉维尔;如何使 setLocale 永久化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44456027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com