spanish son rails que multi las language i18n gemas ruby-on-rails ruby internationalization i18n-gem

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 .

  1. Una gema que almacena dinámicamente las traducciones en el backend I18n.

  2. 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