Laravel-登录后永久使用语言

时间:2018-10-26 16:48:50

标签: php laravel laravel-middleware laravel-localization

我在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配置文件中的内容。

我该如何解决?

谢谢

1 个答案:

答案 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'));