What we want to do is to set the locales of a laravel 5.6 application, by depending of the language of the authenticated user.
We store the language preferences of a user on the database, in the users
table.
Create a new Middleware:
php artisan make:middleware AuthUserSetLocale
With this middleware, we check if there is an authenticated user, in which case, we set it's language as App locale. Middleware content:
<?php
namespace App\Http\Middleware;
use Closure;
class AuthUserSetLocale
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (\Auth::check()) {
\App::setLocale(\Auth::user()->language);
}
return $next($request);
}
}
Last step is to register the new middleware in our Kernel app (app/Http/Kernel.php
file):
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\AuthUserSetLocale::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
Thank you!