ruby-on-rails - son - rails multi language
Cargando dinĂ¡micamente las traducciones I18n de gema en Rails Engine (1)
Creé una gema (TranslationsGem) que uso en múltiples proyectos (un motor y una aplicación de Rails). Esta gema establece varios hashes que se cargan en el back-end I18n.
Un método #store_dynamic_translations
configura varios hashes que se cargan en el back-end I18n. Básicamente funciona así:
I18n.backend.store_translations(:en, { test: { property: ''value'' } })
Mis pruebas confirman el método y la carga de la traducción funciona correctamente. No obstante, no puedo hacer que funcione en el motor host y la aplicación Rails. En mi entorno de prueba, tengo que ejecutar el método en mi test_helper
para asegurarme de que las traducciones se carguen correctamente. Fuera del entorno de prueba, parece que no puedo hacer que funcione correctamente. Puedo verificar que el método se haya ejecutado, pero las traducciones no están cargadas.
He intentado varias cosas durante horas, como ejecutar el método en el inicializador del motor y usar los ganchos de ActiveSupport. En la aplicación host Rails intenté ejecutar #store_dynamic_translations
en un inicializador pero fue en vano.
Por extraño que parezca, si ejecuto #store_dynamic_translations
en mi controlador o vista de la aplicación Rails, funciona. ¿Hay alguna forma de configurar esto en el momento del arranque de la aplicación?
EDITAR: he configurado un repositorio de ejemplo que contiene la configuración actual .
Una gema que almacena dinámicamente las traducciones en el backend I18n.
Un motor Rails que carga la gema y debe tener sus traducciones disponibles
En la prueba en cuestión, al descomentar la directiva MyI18n::Translations.store_dynamic_translations
la prueba pasa. ¿Pero debería ser posible hacerlo desde un inicializador de motor , creo?
Según la sugerencia de Emill Kampp, el gancho correcto fue after_initialize
. Especifiqué esto en engine.rb
:
module Blorgh
class Engine < ::Rails::Engine
isolate_namespace Blorgh
config.after_initialize do
MyI18n::Translations.store_dynamic_translations
end
end
end