Spatie gestiona las traducciones en aplicaciones de Laravel integrando con el sistema de localización de Laravel y proporcionando formas flexibles de almacenar y recuperar traducciones basadas en la localidad actual de la aplicación.
Cómo Spatie maneja las traducciones cuando cambia la ubicación de la aplicación
1. Almacenamiento y recuperación de traducción
-Spatie ofrece un paquete llamado Laravel-Translation-Loader que permite almacenar traducciones en una base de datos en lugar de solo archivos de idioma. Este paquete reemplaza al proveedor de servicios de traducción predeterminado de Laravel con el proveedor de Spatie, lo que permite que las traducciones se obtengan dinámicamente desde la base de datos [1].
- Las traducciones se almacenan en una tabla (generalmente `lenguaje_lines`) donde cada entrada contiene un grupo (como" validación "), una clave (como" requerida ") y un objeto json que contiene traducciones para múltiples locales (por ejemplo,` 'en' => 'Este es un campo requerido', 'nl' => 'dit es EEN verplicht Veld'`) [1].
- Cuando llamas a la función de Laravel `__ ()` con una clave de traducción, Spatie’s Loader obtiene la traducción para el conjunto de ubicaciones actuales en la aplicación. Por ejemplo, si la ubicación de la aplicación es `'nl'`,` __ (' Validation.Required ') `Devuelve la traducción holandesa de la base de datos [1].
2. Conmutación local
- La ubicación de la aplicación se puede cambiar en tiempo de ejecución utilizando el método Laravel `App ()-> setLocale ('localale_code')`.
- Una vez que se cambia la ubicación, todas las recuperaciones de traducción posteriores a través de `__ ()` u otras funciones de traducción devuelven automáticamente el texto en la configuración regional recién establecida.
- Si falta una traducción para la ubicación actual en la base de datos, el mecanismo de localización de alojamiento de Laravel puede devolver la traducción de la localidad predeterminada, a menos que se desactive explícitamente [1] [8].
3. Traducciones a nivel de modelo con almacenamiento JSON
- Otro paquete Spatie, Laravel-Translatable, está diseñado para modelos elocuentes para hacer que los atributos sean traducibles.
- Las traducciones se almacenan como JSON en una sola columna de base de datos por atributo traducible, sin necesidad de tablas adicionales [3].
- Cuando cambia la ubicación de la aplicación, acceder a un atributo traducible en el modelo devuelve el valor para la configuración regional actual automáticamente. Por ejemplo, `$ NewsItem-> Name` devolverá la traducción para la configuración local de ubicación actual en la aplicación [4].
- Puede obtener o establecer traducciones explícitamente para locales específicos utilizando métodos como `getTranslation (atributo, locale)` y `setTranslation (atributo, localidad, valor)` [4].
4. Traducciones de retroceso y faltantes
- El paquete traducible de Spatie admite locales de alojamiento, por lo que si falta una traducción para la localidad actual, puede devolver la traducción de otro local (generalmente el predeterminado) [8].
- Este comportamiento se puede controlar pasando una bandera booleana a `getTranslation 'para deshabilitar el respaldo y obtener una cadena vacía si falta la traducción [8].
Resumen
Cuando cambia la ubicación de la aplicación, los paquetes de traducción de Spatie sirven automáticamente a la traducción apropiada de las líneas de lenguaje almacenadas en la base de datos o los atributos del modelo almacenados por JSON, aprovechando la configuración local de Laravel. Esta integración perfecta garantiza que las funciones de recuperación de traducción devuelvan la cadena localizada correcta basada en la ubicación de la aplicación actual, con mecanismos de alternativos disponibles si falta una traducción.
Este enfoque permite el cambio de localización dinámica en tiempo de ejecución y admite el almacenamiento de traducciones de maneras flexibles, ya sea en tablas de bases de datos o columnas JSON, dependiendo del paquete utilizado.
Referencias: [1] [3] [4] [8]
Citas:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://github.com/spatie/laravel-translatable
[4] https://spatie.be/docs/laravel-translatable/v6/basic-usage/getting-and-settings-translations
[5] https://filamentphp.com/plugins/filament-spatie-translatable
[6] https://github.com/filamentphp/filament/discussions/6913
[7] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows-the-default-locale-when-ity-to-to-retrieve-th