I used this simple way to set and store the locale setting in Laravel 5.6 using middlewares. The code is pretty basic, if there’s a locale in the request then set the setting in session based on the parameter.
App\Http\Middleware\SetLocale.php
<?php
namespace App\Http\Middleware;
use Closure;
class SetLocale
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->has('locale')) {
if (in_array(strtolower($request->locale), ['en', 'de', 'ko', 'jp', 'km', 'th', 'vi'])) {
session()->put('locale', $request->locale);
} else {
session()->put('locale', 'en');
}
}
if(session()->has('locale')) {
app()->setLocale(session('locale'));
}
return $next($request);
}
}
App\Http\Kernel.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\SetLocale::class,
],
'api' => [
'throttle:60,1',
'bindings'
],
];
}
