Files
construprogress/app/Http/Middleware/SetLocale.php
T

56 lines
1.4 KiB
PHP
Raw Normal View History

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
class SetLocale
{
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next)
{
$locale = null;
$allowedLocales = ['en', 'es', 'fr', 'ru'];
// 1. From authenticated user preference
if (Auth::check()) {
$userLocale = Auth::user()->locale;
if ($userLocale && in_array($userLocale, $allowedLocales)) {
$locale = $userLocale;
}
}
// 2. From session
2026-08-28 13:04:28 +02:00
if (! $locale && Session::has('locale')) {
$sessionLocale = Session::get('locale');
if (in_array($sessionLocale, $allowedLocales)) {
$locale = $sessionLocale;
}
}
// 3. From browser Accept-Language
2026-08-28 13:04:28 +02:00
if (! $locale) {
$browserLang = substr($request->server('HTTP_ACCEPT_LANGUAGE', 'en'), 0, 2);
if (in_array($browserLang, $allowedLocales)) {
$locale = $browserLang;
}
}
// 4. Default to app locale
2026-08-28 13:04:28 +02:00
if (! $locale) {
$locale = config('app.locale', 'en');
}
App::setLocale($locale);
Session::put('locale', $locale);
return $next($request);
}
2026-08-28 13:04:28 +02:00
}