我有我的家路线
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/