| Install | |
|---|---|
composer require craft-forge/filament-language-switcher |
|
| Latest Version: | v1.2.1 |
| PHP: | ^8.1 |
A simple and elegant language switcher plugin for Filament admin panels. Automatically detects available Filament translations or allows custom language configuration with optional flag icons. Supports auth pages, cookie persistence, and locale change events.


| Plugin Version | Filament Version | PHP Version |
|---|---|---|
| 1.x | 3.x, 4.x, 5.x | > 8.1 |
1. Install the package via Composer:
composer require craft-forge/filament-language-switcher
2. Register the plugin in your Filament panel configuration (e.g. AdminPanelProvider):
use CraftForge\FilamentLanguageSwitcher\FilamentLanguageSwitcherPlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
FilamentLanguageSwitcherPlugin::make(),
]);
}
The plugin will automatically detect available Filament language files and display them in a dropdown menu.
By default, the plugin auto-detects available Filament language files. To define the locale list manually, pass it to locales() - choose one of three formats:
Locale codes - names and flags are resolved automatically from the built-in dictionary (200+ languages):
FilamentLanguageSwitcherPlugin::make()
->locales(['en', 'fr', 'de'])
Full control - specify name and flag per locale. Flag codes reference: https://flagicons.lipis.dev.
FilamentLanguageSwitcherPlugin::make()
->locales([
['code' => 'en', 'name' => 'English', 'flag' => 'us'],
['code' => 'fr', 'name' => 'Français', 'flag' => 'fr'],
['code' => 'de', 'name' => 'Deutsch', 'flag' => 'de'],
])
Dynamic - load locales at runtime (e.g. from a database):
FilamentLanguageSwitcherPlugin::make()
->locales(fn () => Language::pluck('code')->toArray())

Store the selected locale in a cookie to persist across browser sessions (e.g. after logout):
FilamentLanguageSwitcherPlugin::make()
->rememberLocale() // forever
->rememberLocale(days: 30) // for 30 days
Change where the language switcher appears in the panel:
use Filament\View\PanelsRenderHook;
FilamentLanguageSwitcherPlugin::make()
->renderHook(PanelsRenderHook::USER_MENU_PROFILE_AFTER)
Popular placements:
USER_MENU_BEFORE — before the user menu (default)USER_MENU_PROFILE_AFTER — after user profile in dropdownUSER_MENU_AFTER — after the user menuSIDEBAR_FOOTER — at the bottom of sidebarFOOTER — in the page footerAll available render hooks: https://filamentphp.com/docs/5.x/advanced/render-hooks

Display the language switcher on login, register, and password reset pages:
FilamentLanguageSwitcherPlugin::make()
->showOnAuthPages()
Display only language names without flag icons:
FilamentLanguageSwitcherPlugin::make()
->showFlags(false)
The plugin dispatches a LocaleChanged event whenever a user switches locale, providing both the new and previous locale:
use CraftForge\FilamentLanguageSwitcher\Events\LocaleChanged;
use Illuminate\Support\Facades\Event;
public function boot(): void
{
Event::listen(LocaleChanged::class, function (LocaleChanged $event) {
// auth()->user()->setLocale($event->newLocale);
// Log::info("Locale changed from {$event->oldLocale} to {$event->newLocale}");
});
}
The MIT License (MIT). Please see License File for more information.