Implement localization for API responses and error messages

- Added localization support for API responses in English and Spanish.
- Introduced a middleware to set the API locale based on the Accept-Language header.
- Updated various exception messages and validation responses to use localized strings.
- Created new language files for English and Spanish translations.
- Refactored existing code to replace hardcoded messages with localized strings.
- Added tests to verify localization functionality and response correctness.
This commit is contained in:
2026-07-28 10:19:39 -03:00
parent 754aeebe3a
commit ff9d7728e8
34 changed files with 654 additions and 114 deletions

57
lang/es/validation.php Normal file
View File

@@ -0,0 +1,57 @@
<?php
return [
'after_or_equal' => ':Attribute debe ser una fecha posterior o igual a :date.',
'array' => ':Attribute debe ser un arreglo.',
'boolean' => 'El campo :attribute debe ser verdadero o falso.',
'confirmed' => 'La confirmación de :attribute no coincide.',
'date' => ':Attribute no es una fecha válida.',
'distinct' => 'El campo :attribute tiene un valor duplicado.',
'email' => ':Attribute debe ser una dirección de email válida.',
'exists' => 'El valor seleccionado para :attribute no es válido.',
'file' => ':Attribute debe ser un archivo.',
'integer' => ':Attribute debe ser un número entero.',
'max' => [
'array' => ':Attribute no debe tener más de :max elementos.',
'file' => ':Attribute no debe superar los :max kilobytes.',
'numeric' => ':Attribute no debe ser mayor que :max.',
'string' => ':Attribute no debe tener más de :max caracteres.',
],
'min' => [
'array' => ':Attribute debe tener al menos :min elementos.',
'file' => ':Attribute debe pesar al menos :min kilobytes.',
'numeric' => ':Attribute debe ser al menos :min.',
'string' => ':Attribute debe tener al menos :min caracteres.',
],
'numeric' => ':Attribute debe ser un número.',
'password' => [
'letters' => ':Attribute debe contener al menos una letra.',
'mixed' => ':Attribute debe contener al menos una letra mayúscula y una minúscula.',
'numbers' => ':Attribute debe contener al menos un número.',
'symbols' => ':Attribute debe contener al menos un símbolo.',
'uncompromised' => ':Attribute aparece en una filtración de datos. Elige una contraseña diferente.',
],
'prohibited' => 'El campo :attribute está prohibido.',
'regex' => 'El formato de :attribute no es válido.',
'required' => 'El campo :attribute es obligatorio.',
'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.',
'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.',
'string' => ':Attribute debe ser texto.',
'unique' => 'El valor de :attribute ya está en uso.',
'url' => ':Attribute debe ser una URL válida.',
'uuid' => ':Attribute debe ser un UUID válido.',
'attributes' => [
'cantidad' => 'cantidad',
'catalog_item_id' => 'producto',
'codigo' => 'código',
'dni' => 'DNI',
'email' => 'email',
'nombre_apellido' => 'nombre y apellido',
'oauth_code' => 'código de autenticación',
'password' => 'contraseña',
'password_confirmation' => 'confirmación de contraseña',
'telefono' => 'teléfono',
'tenant_codigo' => 'tenant',
'variant_id' => 'variante',
],
];