diff --git a/app/Livewire/UserForm.php b/app/Livewire/UserForm.php index 74da087..bf8f073 100644 --- a/app/Livewire/UserForm.php +++ b/app/Livewire/UserForm.php @@ -36,6 +36,9 @@ class UserForm extends Component // Permisos public string $formRole = ''; + // Preferencias + public string $locale = 'es'; + // Notas public string $notes = ''; @@ -43,6 +46,12 @@ class UserForm extends Component public $roles; public $companies; + /** Idiomas disponibles (cΓ³digo => nombre + archivo de bandera). */ + public array $languages = [ + 'es' => ['name' => 'EspaΓ±ol', 'flag' => 'es.svg'], + 'en' => ['name' => 'English', 'flag' => 'gb.svg'], + ]; + public function mount(?User $user = null): void { abort_unless(Auth::user()->can('create users') || Auth::user()->can('edit users'), 403); @@ -65,6 +74,7 @@ class UserForm extends Component $this->email = $user->email; $this->notes = $user->notes ?? ''; $this->formRole = $user->roles->first()?->name ?? $this->formRole; + $this->locale = $user->locale ?? $this->locale; } } @@ -83,6 +93,7 @@ class UserForm extends Component 'phone' => 'nullable|string|max:30', 'email' => "required|email|max:255|unique:users,email,{$id}", 'formRole' => 'required|exists:roles,name', + 'locale' => 'required|in:' . implode(',', array_keys($this->languages)), ]; if (!$this->user) { @@ -103,6 +114,7 @@ class UserForm extends Component 'companyId' => 'empresa', 'formPassword'=> 'contraseΓ±a', 'formRole' => 'rol', + 'locale' => 'idioma', ]; public function copyCompanyAddress(): void @@ -139,6 +151,7 @@ class UserForm extends Component 'phone' => $this->phone ?: null, 'email' => $this->email, 'notes' => $this->notes ?: null, + 'locale' => $this->locale, ]; if ($this->formPassword !== '') { diff --git a/app/Models/User.php b/app/Models/User.php index 872e730..9ffa03d 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -25,6 +25,7 @@ class User extends Authenticatable 'email', 'password', 'status', 'valid_from', 'valid_until', 'company_id', 'phone', 'address', 'notes', + 'locale', ]; /** diff --git a/public/images/flags/es.svg b/public/images/flags/es.svg new file mode 100644 index 0000000..d8fb9a2 --- /dev/null +++ b/public/images/flags/es.svg @@ -0,0 +1,4 @@ + diff --git a/public/images/flags/gb.svg b/public/images/flags/gb.svg new file mode 100644 index 0000000..5985f56 --- /dev/null +++ b/public/images/flags/gb.svg @@ -0,0 +1,10 @@ + diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index fa86edb..eea89b6 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -15,6 +15,9 @@ @vite(['resources/css/app.css', 'resources/js/app.js']) @livewireStyles + {{-- Evita el parpadeo de elementos Alpine (x-cloak) antes de inicializar --}} + + diff --git a/resources/views/livewire/language-switcher.blade.php b/resources/views/livewire/language-switcher.blade.php index fb6e852..225b6fc 100644 --- a/resources/views/livewire/language-switcher.blade.php +++ b/resources/views/livewire/language-switcher.blade.php @@ -1,10 +1,12 @@
{{ $message }}
@enderror + +{{ $message }}
@enderror +