Language Switcher
Zero-config language switcher for Filament admin panels with automatic translation detection and country flags.
Author:
Craft Forge
Documentation
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.


#Demo
#Installation
| 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.
#Configuration
#Locales
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())

#Remember Locale
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
#Custom Render Hook
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 footer
All available render hooks: https://filamentphp.com/docs/5.x/advanced/render-hooks

#Show on Auth Pages
Display the language switcher on login, register, and password reset pages:
FilamentLanguageSwitcherPlugin::make()
->showOnAuthPages()
#Hide Flags
Display only language names without flag icons:
FilamentLanguageSwitcherPlugin::make()
->showFlags(false)
#Event
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}");
});
}
#License
The MIT License (MIT). Please see License File for more information.
The author
From the same author
Featured Plugins
A selection of plugins curated by the Filament team
Custom Dashboards
Let your users build and share their own dashboards with a drag-and-drop interface. Define your data sources in PHP and let them do the rest.
Filament
Custom Fields
Eliminate custom field migrations forever. Let your users create and manage form fields directly in Filament admin panels with 20+ built-in field types, validation, and zero database changes.
Relaticle
Advanced Tables (formerly Filter Sets)
Supercharge your tables with powerful features like user-customizable views, quick filters, multi-column sorting, advanced table searching, convenient view management, and more. Compatible with Resource Panel Tables, Relation Managers, Table Widgets, and Table Builder!
Kenneth Sese