Spatie maneja las traducciones con la base de datos y los archivos de idioma principalmente a través de su paquete Laravel-Translation-Loader, que se integra perfectamente con el sistema de traducción nativa de Laravel.
Cómo funciona al usar archivos de base de datos y idiomas
- El paquete le permite almacenar traducciones en la base de datos utilizando una tabla dedicada (`lenguaje_lines`). Cada entrada de traducción está representada por una instancia del modelo 'Languageline', que incluye:
- `Grupo`: el grupo de traducción (por ejemplo," Validación "o" Auth ").
- `Key`: la clave de traducción dentro del grupo.
- `Text`: una matriz que contiene traducciones para diferentes locales (por ejemplo,` ['en' => 'Este es un campo requerido', 'nl' => 'dit es een verplicht veld'] `).
- Cuando solicita una traducción utilizando las funciones de traducción habituales de Laravel como `trans ()` o `__ ()`, el paquete primero verifica la base de datos para la traducción. Si encuentra una entrada coincidente, devuelve la versión de la base de datos.
- Si la traducción no se encuentra en la base de datos, recae en los archivos de idiomas tradicionales almacenados en el directorio de Laravel 'S `Resources/Lang`.
- Esto significa traducciones de bases de datos que anulan las traducciones de archivos de idioma si ambos existen para la misma clave y localidad.
- El paquete admite las traducciones basadas en grupos (por ejemplo, `Validation.Required`) y las traducciones JSON mediante el uso de un nombre especial de grupo` '*' `para líneas de traducción JSON.
Características y comportamiento adicionales
- El paquete almacena grupos de traducciones para optimizar el rendimiento, reduciendo las consultas de la base de datos en las solicitudes de traducción repetidas. El caché se invalida cuando se crean, actualizan o eliminan las traducciones.
- Se puede extender: puede agregar proveedores de traducción personalizados (por ejemplo, YAML, CSV) implementando la interfaz 'TranslationLationLoader` del paquete, lo que permite que las traducciones se carguen de otras fuentes más allá de la base de datos y los archivos de idioma.
- Puede continuar utilizando las directivas de traducción predeterminadas de Laravel y las directivas de Blade (`@lang`,` trans () `,` __ () `) sin modificación.
Resumen
El paquete del cargador de traducción de Spatie fusiona efectivamente las traducciones de base de datos con traducciones nativas basadas en archivos priorizando las entradas de la base de datos. Esto permite la edición dinámica de las traducciones a través de una interfaz de usuario respaldada por la base de datos mientras se conserva los archivos de lenguaje de lenguaje estático. La integración es suave, que requiere cambios mínimos en las llamadas de traducción existentes, y ofrece almacenamiento en caché y extensibilidad para casos de uso avanzados [1] [3] [5] [6] [7].
Citas:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://laravel-news.com/translation-loader-package
[4] https://github.com/spatie/laravel-translatable
[5] https://www.laravelblogs.com/courses/multi-language-laravel/spatie-laravel-translation-loader
[6] https://packagist.org/packages/spatie/laravel-translation-loader
[7] https://freek.dev/593-a-laravel-package-to-store-language-lines-in-the-database
[8] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translatable