我在laravel中有一个应用程序,现在我需要用几种语言来放置它。
在用户表中,我添加了列lang
,该列告诉我每个用户的默认语言。
因此,登录后,我创建一个session
变量来存储此值:
protected function authenticated(Request $request, $user)
{
session(['locale' => $user->lang]);
}
接下来,我创建并注册middleware
来设置每种路线的语言:
public function handle($request, Closure $next)
{
if(session()->has('locale'))
{
app()->setLocale(session('locale'));
}
else
{
app()->setLocale(config('app.locale'));
}
return $next($request);
}
如果我回显会话,它会根据登录的用户为我提供正确的语言。
但这不起作用,始终将默认语言设置为laravel配置文件中的内容。
我该如何解决?
谢谢
答案 0 :(得分:2)
您正在覆盖区域设置:
// Check if session has locale
if(session()->has('locale'))
// set session locale
app()->setLocale(session('locale'));
// this is outside the condition block
// so it will run everytime
app()->setLocale(config('app.locale'));
您可以使用大括号来避免这种情况,如下所示:
if(session()->has('locale')) {
app()->setLocale(session('locale'));
} else {
app()->setLocale(config('app.locale'));
}
或者,如果您不喜欢大括号,请使用默认语言环境进行初始化,然后根据会话中的语言环境进行更改,例如:
app()->setLocale(config('app.locale'));
if(session()->has('locale'))
app()->setLocale(session('locale'));