To ensure the consistent application of the selected locale, it is necessary to store the locale in the session. so update your route:
Route::get('/lang/{locale}', function ($locale) {
if (!in_array($locale, ['en', 'fr','es'])) {
abort(400);
}
App::setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
create a middleware that examines the locale stored within the session,
artisan make:middleware Localization
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
use Symfony\Component\HttpFoundation\Response;
class Localization
{
public function handle(Request $request, Closure $next): Response
{
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
return $next($request);
}
}
add the newly created middleware into your kernel.php file, within the middlewareGroups array, to enable its functionality throughout your application's request lifecycle.
protected $middlewareGroups = [
'web' => [
...
\App\Http\Middleware\Localization::class,
]
];
now, your application will utilize the selected locale for all of its pages