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