Ce système permet de changer la langue du site à partir d’un menu. Il utilise les sessions pour stocker la langue lors d’un changement. Puis un middleware modifie la langue par celle stocké dans la session grâce à la fonctionnalité « setLocal » de Laravel et à la traduction de Blade.

Création du menu :

CSS :

.flag {
    width: 21px;
    height: 14px;
}

HTML :

<!– locale translation –>
<li class="dropdown">
    <a data-toggle="dropdown" class="dropdown-toggle" href="#"><img class="flag" src="{{ url(‘images/lang/’.Session::get(‘locale’).’.png’) }}" alt="{{ Session::get(‘locale’) }}"/><b class="caret"></b></a>
    <ul class="dropdown-menu flagMenu">
        <li><a href="{{ url(‘lang/en’) }}"><img class="flag" src="{{ url('images/lang/en.png') }}" alt="en"/></a></li>
        <li><a href="{{ url(‘lang/fr’) }}"><img class="flag" src="{{ url('images/lang/fr.png') }}" alt="fr"/></a></li>
    </ul>
</li>

Création de la route qui met en session la nouvel langue :

Route::get('/lang/{locale}', function ($locale) {
    Session::set('locale', $locale);

    if($_SERVER['HTTP_REFERER'])
        return redirect($_SERVER['HTTP_REFERER']);
    else
        return redirect('/');
});

Création du middleware :

Ajouter ce middleware sur toutes les routes à partir du fichier Kernel.php.

<?php

namespace App\Http\Middleware;

use Closure;
use Session;
use App;

class UserLocal
{
    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    */
    public function handle($request, Closure $next)
    {

        if(!Session::has('locale'))
        {
            Session::put('locale', App::getLocale());
        }

        App::setLocale(Session::get('locale'));

        return $next($request);
    }
}

 

Utilisation des traductions :

Pour traduire son site grâce à ce système, on utilise ensuite le système de traduction intégré à Blade (https://laravel.com/docs/5.4/localization).

{{ trans('app.search') }}

 

Améliorations possibles :

- Utiliser les cookies au lieu des sessions.

- Détection du pays de l’utilisateur.