Laravel — использовать язык навсегда после входа в систему

У меня есть приложение на 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

Решение

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]