Create middleware to handle locale
php artisan make:middleware SetLocale
<?php
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 SetLocale
{
/**
* Handle an incoming request.
*
* @param \\Closure(\\Illuminate\\Http\\Request): (\\Symfony\\Component\\HttpFoundation\\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
$locale = Session::get('locale', 'en');
App::setLocale($locale);
return $next($request);
}
}
Register middleware in bootstrap/app.php
$middleware->web(append: [
// Other Middleware
\\App\\Http\\Middleware\\SetLocale::class,
]);
Make changelang route
use Illuminate\\Support\\Facades\\Session;
Route::get('/lang/{locale}', function ($locale) {
if (!in_array($locale, ['en', 'kh'])) {
abort(404);
}
Session::put('locale', $locale);
return redirect()->back();
});
Blade html main app layout
resources/views/app.blade.php
<!DOCTYPE html>
<html lang="{{ **str_replace('_', '-', app()->getLocale())** }}">
<head>
...
</head>
<body class="{{ **(app()->getLocale() == 'kh' ? 'font-siemreap-regular' : 'font-poppins-regular')** }}">
@inertia
</body>
</html>
Share locale global
app/Http/Middleware/HandleInertiaRequests.php
...
public function share(Request $request): array
{
return [
...
'locale' => session('locale'),
...
Reactjs Hook
resources/js/hooks/use-translation.tsx