PHP code example of bezhansalleh / filament-language-switch

1. Go to this page and download the library: Download bezhansalleh/filament-language-switch library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

bezhansalleh / filament-language-switch example snippets


@source '../../../../vendor/bezhansalleh/filament-language-switch/**';

use BezhanSalleh\LanguageSwitch\LanguageSwitch;

public function boot(): void
{
    LanguageSwitch::configureUsing(function (LanguageSwitch $switch) {
        $switch->locales(['en', 'fr', 'ar']);
    });
}

$switch->locales(['en', 'fr', 'ar']);

use BezhanSalleh\LanguageSwitch\Enums\DisplayMode;

$switch
    ->locales(['en', 'fr', 'ar', 'de', 'es', 'pt', 'ja', 'ko', 'zh'])
    ->displayMode(DisplayMode::Modal)
    ->modalWidth('lg');

$switch
    ->displayMode(DisplayMode::Modal)
    ->columns(2)
    ->modalWidth('lg');

$switch
    ->displayMode(DisplayMode::Modal)
    ->modalSlideOver();

$switch
    ->displayMode(DisplayMode::Modal)
    ->modalHeading('Choose Language')
    ->modalIcon('heroicon-o-language')
    ->modalIconColor('primary');

use BezhanSalleh\LanguageSwitch\Enums\TriggerStyle;

// Visual only
$switch->trigger(style: TriggerStyle::Icon);    // language icon
$switch->trigger(style: TriggerStyle::Flag);    // flag image (er(style: TriggerStyle::FlagLabel);    // flag + locale name
$switch->trigger(style: TriggerStyle::AvatarLabel);  // abbreviation + locale name

// Label only — no visual
$switch->trigger(style: TriggerStyle::Label);

use Filament\Support\Icons\Heroicon;

// Just change the icon (style stays as default)
$switch->trigger(icon: Heroicon::GlobeAlt);

// Any Blade Icons string works too
$switch->trigger(icon: 'heroicon-o-globe-alt');
$switch->trigger(icon: 'phosphor-translate');

// Or change both in one call
$switch->trigger(
    style: TriggerStyle::IconLabel,
    icon: Heroicon::GlobeAlt,
);

use Filament\Support\Facades\FilamentIcon;

FilamentIcon::register([
    'language-switch::trigger' => 'heroicon-o-globe-alt',
]);

$switch->flags([
    'en' => asset('flags/us.svg'),
    'fr' => asset('flags/fr.svg'),
    'ar' => asset('flags/sa.svg'),
]);

use BezhanSalleh\LanguageSwitch\Enums\ItemStyle;

$switch->itemStyle(ItemStyle::FlagOnly);        // flag images only, tooltips on hover
$switch->itemStyle(ItemStyle::AvatarOnly);      // abbreviations only (EN, FR), tooltips on hover
$switch->itemStyle(ItemStyle::LabelOnly);       // text labels only, no visual
$switch->itemStyle(ItemStyle::FlagWithLabel);    // flag + locale name (default with flags)
$switch->itemStyle(ItemStyle::AvatarWithLabel);  // abbreviation + locale name (default without flags)

$switch
    ->flags([...])
    ->itemStyle(ItemStyle::FlagOnly)
    ->displayMode(DisplayMode::Modal)
    ->columns(3)
    ->modalWidth('lg');

$switch->labels([
    'pt_BR' => 'Brasileiro',
    'pt_PT' => 'Europeu',
]);

$switch->nativeLabel();

// Labels generated in French (e.g., "Anglais" for English)
$switch->displayLocale('fr');

$switch->circular();

$switch
    ->displayMode(DisplayMode::Modal)
    ->flagHeight('h-20')     // Default: 'h-16'
    ->avatarHeight('size-10'); // Default: 'size-8'

use Filament\View\PanelsRenderHook;

$switch->renderHook(PanelsRenderHook::SIDEBAR_NAV_END);

$switch->renderHook(PanelsRenderHook::USER_MENU_PROFILE_AFTER);

$switch->dropdownPlacement('top-end');

$switch->maxHeight('30rem');
$switch->maxHeight('max-content'); // no scroll, grows to fit content

use BezhanSalleh\LanguageSwitch\Enums\Placement;

$switch
    ->visible(outsidePanels: true)
    ->outsidePanelPlacement(Placement::TopEnd);

$switch->visible(insidePanels: false, outsidePanels: true);

use BezhanSalleh\LanguageSwitch\Enums\Placement;
use BezhanSalleh\LanguageSwitch\Enums\PlacementMode;

$switch->outsidePanelPlacement(Placement::TopCenter, PlacementMode::Pinned);

$switch->outsidePanelRoutes([
    'auth.login',
    'auth.register',
    'auth.password-reset.request',
    'auth.password-reset.reset',
]);

use Filament\View\PanelsRenderHook;

// Dock as a profile item inside the user menu dropdown
$switch->outsidePanelsRenderHook(PanelsRenderHook::USER_MENU_PROFILE_AFTER);

// Or force body-level anchoring for an in-flow mode
$switch
    ->outsidePanelPlacement(Placement::BottomCenter, PlacementMode::Static)
    ->outsidePanelsRenderHook(PanelsRenderHook::BODY_END);

use Filament\View\PanelsRenderHook;

// Force a body-start overlay even when a user menu is present
$switch
    ->outsidePanelPlacement(Placement::TopEnd, PlacementMode::Pinned)
    ->outsidePanelsRenderHook(PanelsRenderHook::BODY_START);

$switch->excludes(['admin']);

$switch->userPreferredLocale(fn () => auth()->user()?->locale);

use BezhanSalleh\LanguageSwitch\Events\LocaleChanged;
use Illuminate\Support\Facades\Event;

Event::listen(function (LocaleChanged $event) {
    auth()->user()?->update(['locale' => $event->locale]);
});

LanguageSwitch::configureUsing(function (LanguageSwitch $switch) {
    $switch
        ->locales(['en', 'fr', 'ar'])
        ->controlPanel();
});

$switch->controlPanel(false);

$switch->controlPanel(live: false);          // enabled + staged (Apply button)
$switch->controlPanel(true, live: false);    // same thing, explicit

use BezhanSalleh\LanguageSwitch\Enums\DisplayMode;
use BezhanSalleh\LanguageSwitch\Enums\TriggerStyle;
use BezhanSalleh\LanguageSwitch\LanguageSwitch;
use Filament\Support\Icons\Heroicon;

LanguageSwitch::configureUsing(function (LanguageSwitch $switch) {
    $switch
        ->locales(['en', 'fr', 'ar', 'de', 'es'])
        ->flags([
            'en' => asset('flags/us.svg'),
            'fr' => asset('flags/fr.svg'),
            'ar' => asset('flags/sa.svg'),
            'de' => asset('flags/de.svg'),
            'es' => asset('flags/es.svg'),
        ])
        ->displayMode(DisplayMode::Modal)
        ->columns(2)
        ->modalWidth('lg')
        ->circular()
        ->nativeLabel()
        ->trigger(
            style: TriggerStyle::FlagLabel,
            icon: Heroicon::GlobeAlt,
        )
        ->excludes(['admin'])
        ->userPreferredLocale(fn () => auth()->user()?->locale);
});
bash
php artisan vendor:publish --tag="language-switch-views"