У меня есть маршрут для переключения языка:
Код: Выделить всё
Route::get('/lang/{locale}', function ($locale) {
if (!in_array($locale, ['en', 'ja'])) {
abort(400);
}
session()->put('locale', $locale);
return redirect()->back();
})->name('lang.switch');
Код: Выделить всё
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class SetLocale
{
public function handle($request, Closure $next)
{
$locale = session('locale', 'en');
App::setLocale($locale);
return $next($request);
}
}
Код: Выделить всё
protected $middlewareGroups = [
'web' => [
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\SetLocale::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
Код: Выделить всё
dashboard.blade.phpКод: Выделить всё
SESSION: {{ session('locale') }}
APP: {{ app()->getLocale() }}
{{ __('messages.dashboard') }}
{{ __('messages.system_overview') }}
resources/lang/en/messages.php
Код: Выделить всё
return [
'dashboard' => 'Dashboard',
'system_overview' => 'System Overview',
];
Код: Выделить всё
return [
'dashboard' => 'ダッシュボード',
'system_overview' => 'システム概要',
];
- изменяется правильно (
Код: Выделить всё
session('locale')/ ja)Код: Выделить всё
en - Меню навигации переводит правильно
- НО на приборной панели:
остается enКод: Выделить всё
app()->getLocale() - Переводы не обновляются
Что я пробовал
- Очистка кэша:
Код: Выделить всё
php artisan optimize:clear php artisan view:clear - Проверенное промежуточное ПО зарегистрировано
- Проверенные файлы перевода корректны
- Удалены повторяющиеся ключи в языковых файлах
- Промежуточное ПО выполняется правильно
Почему session('locale') обновляется правильно, но app()->getLocale() не отражает его в представлениях Blade?
Есть ли в Laravel 12 что-то особенное в отношении порядка выполнения промежуточного программного обеспечения или обработки локализации, что мне может не хватать?
Мобильная версия