Sistema multilingüe EN/ES: middleware SetLocale, LanguageSwitcher, campo locale en users, traducciones en dashboard/mapa/proyectos/gestores

This commit is contained in:
2026-05-09 23:14:48 +02:00
parent 7bf5a90a24
commit 3e8b6f1eb3
22 changed files with 798 additions and 131 deletions
+54
View File
@@ -0,0 +1,54 @@
<?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;
}
}
// 4. Default to English
if (!$locale) {
$locale = 'en';
}
App::setLocale($locale);
Session::put('locale', $locale);
return $next($request);
}
}
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace App\Livewire;
use Livewire\Component;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
class LanguageSwitcher extends Component
{
public $currentLocale;
public function mount()
{
$this->currentLocale = App::getLocale();
}
public function switchLanguage($locale)
{
if (!in_array($locale, ['en', 'es'])) {
return;
}
App::setLocale($locale);
Session::put('locale', $locale);
if (Auth::check()) {
$user = Auth::user();
$user->locale = $locale;
$user->save();
}
$this->currentLocale = $locale;
$this->dispatch('localeChanged', $locale);
}
public function render()
{
return view('livewire.language-switcher');
}
}