2026-05-09 23:14:48 +02:00
|
|
|
<?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;
|
|
|
|
|
|
|
|
|
|
// 1. From authenticated user preference
|
|
|
|
|
if (Auth::check()) {
|
|
|
|
|
$userLocale = Auth::user()->locale;
|
|
|
|
|
if ($userLocale && in_array($userLocale, ['en', 'es'])) {
|
|
|
|
|
$locale = $userLocale;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 2. From session
|
|
|
|
|
if (!$locale && Session::has('locale')) {
|
|
|
|
|
$sessionLocale = Session::get('locale');
|
|
|
|
|
if (in_array($sessionLocale, ['en', 'es'])) {
|
|
|
|
|
$locale = $sessionLocale;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 3. From browser Accept-Language
|
|
|
|
|
if (!$locale) {
|
|
|
|
|
$browserLang = substr($request->server('HTTP_ACCEPT_LANGUAGE', 'en'), 0, 2);
|
|
|
|
|
if (in_array($browserLang, ['en', 'es'])) {
|
|
|
|
|
$locale = $browserLang;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-16 18:05:53 +02:00
|
|
|
// 4. Default to app locale
|
2026-05-09 23:14:48 +02:00
|
|
|
if (!$locale) {
|
2026-06-16 18:05:53 +02:00
|
|
|
$locale = config('app.locale', 'es');
|
2026-05-09 23:14:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
App::setLocale($locale);
|
|
|
|
|
Session::put('locale', $locale);
|
|
|
|
|
|
|
|
|
|
return $next($request);
|
|
|
|
|
}
|
|
|
|
|
}
|