Laravel: i18n di una applicazione

Spread the love
i18n localizzazione di un'applicazione
i18n localizzazione di un’applicazione

La localizzazione (o internationalization o i18n) di Laravel è già gestita da un apposito middleware. Seguiamo questi pochi passi necessari ad atttivare la funzionalità multilingua per un’applicazione Laravel.

Attivazione e configurazione del middleware i18n

$ php artisan make:middleware Localization

Questo comando crea un nuovo file in app/Http/Middleware/Localization.php che va personalizzato se vogliamo gestire la lingua con le variabili di sessione. L’alternativa sarebbe specificare sempre in ogni rotta la lingua che si vuole usare. Un incubo!

Modifichiamo così il file:

    public function handle(Request $request, Closure $next)
    {
        if (Session::has('locale')) {
            App::setLocale(Session::get('locale'));
        }

        return $next($request);
    }

Con il comando setLocale si valorizza la lingua usata in quel momento dall’applicazione con il valore contenuto dalla variabile di sessione.

Configurazione della rotta per lo switch della lingua

Ora occorre un metodo per fare lo switch e lo facciamo in una rotta che scriviamo in routes/web.php:

Route::get('language/{locale}', function ($locale) {
    app()->setLocale($locale);
    session()->put('locale', $locale);
    return redirect()->back();
});

Possiamo anche scegliere di portare il codice che si trova nella funzione anonima dentro al controller HomeController.

Creazione dei file di localizzazione

Poi creiamo due file di lingua dentro a resources/lang/ e li chiamiamo en.json e it.json. Possiamo fare quanti file vogliamo, attenzione che ad ogni rotta deve corrispondere un file!

Per esempio un estratto del file italiano può essere il seguente:

{
    "Dashboard": "Cruscotto",
    "logout": "Esci",
    "Companies": "Aziende",
    "Users": "Utenti",
    "Name": "Ragione Sociale",
    "Website": "Sito web",
    "Email":  "Email",
    "Main Phone #": "Telefono principale",
    "latitude":  "Latitudine",
    "longitude": "Longitudine",
    "company_type":  "Tipo Azienda",
    "Commands": "Comandi",
    "Create new": "Nuovo record"
}

Comandi HTML per lo switch

Ora inseriamo i comandi per cambiare lingua nell’header dell’applicazione: lo facciamo in un modo grezzo che può essere migliorato, ma è questione di Blade e Vue:

                <div class="collapse navbar-collapse" id="navbarSupportedContent">
                    <!-- Left Side Of Navbar -->
                    <ul class="navbar-nav me-auto">
                        <li class="nav-item">
                            <a class="nav-link" href="dashboard/">{{ __('Dashboard') }}</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="{{ route('companies.index') }}">{{ __('Companies') }}</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="{{ route('users.index') }}">{{ __('Users') }}</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="/language/it">it</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="/language/en">en</a>
                        </li>
                    </ul>

Sostituire tutte le stringhe cablate con i segnaposto

Qui si può vedere anche come vengono utilizzati i segnaposto definiti in resources/lang: occorre sostituire ad esempio la stringa “Companies” cablata nell’HTML/Blade con il segnaposto {{__('Companies')}}.

Risorse web

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.