spa() ->spaUrlExceptions(['*/lang/*']) ->middleware([SetLang::class]) ->renderHook( name: PanelsRenderHook::USER_MENU_PROFILE_AFTER, hook: fn (): View => view(view: 'filament.hooks.lang-switcher'), ) // resources/views/filament/hooks/lang-switcher.blade.php @php $locale = app()->getLocale(); $flags = json_decode(env('APP_LOCALE_FLAGS'), true); $labels = json_decode(env('APP_LOCALE_LABELS'), true); @endphp
@foreach(array_keys($labels) as $lang) {{ $flags[$lang] }} @endforeach
// app/Http/Middleware/SetLang.php handle($request, function ($request) use ($next) { if (!session()->has('current_lang')) { if ($languages = request()->header('accept-language')) { foreach (explode(',', $languages) as $lang) { $lang = str_replace('-', '_', $lang); if (array_key_exists($lang, json_decode(env('APP_LOCALE_LABELS'), true))) { session()->put('current_lang', $lang); break; } } } } app()->setLocale(session('current_lang', 'en')); return $next($request); }); } } // .env APP_LOCALE_FLAGS='{"en":"🇺🇸","pt_BR":"🇧🇷","es":"🇲🇽"}' APP_LOCALE_LABELS='{"en":"English","pt_BR":"Português","es":"Spanish"}'