Laravel - использовать язык навсегда после входа в систему - PullRequest
0 голосов
/ 26 октября 2018

У меня есть приложение на 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 голосов
/ 26 октября 2018

Вы перезаписываете язык:

// 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'));
...