Sistema multilingüe EN/ES: middleware SetLocale, LanguageSwitcher, campo locale en users, traducciones en dashboard/mapa/proyectos/gestores
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user