2012-04-11 18 views
6

Estoy usando I18n-js, y todas las llamadas I18n.t de mi lado del cliente devuelven un mensaje de traducción faltante cuando se ejecuta en producción.I18n la ruta de carga no se establece cuando se ejecutan "activos bin/rake: precompilación"!

Todo está bien en desarrollo y prueba.

El origen de este problema parece estar en la canalización de activos.

I18n.load_path no contiene ninguno de mis traducciones (cuando se ejecuta activos bin/rastrillo: precompilación) que sólo contiene las siguientes rutas:

["/home/chris/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activemodel-3.2.3/lib/active_model/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_view/locale/en.yml"] 

Estos se parecen a la ActiveSupport defecto, ActiveModel, activerecord y actionpack las traducciones de las gemas ...

Mis caminos de traducción hacer sin embargo conseguir el sistema como se espera cuando se ejecuta bin/carriles de la consola en el desarrollo y producción:

1.9.3p125 :002 > I18n.load_path 
=> ["/home/chris/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activemodel-3.2.3/lib/active_model/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_view/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/carrierwave-0.6.1/lib/carrierwave/validations/../locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/devise-2.0.4/config/locales/en.yml", 
"/media/sf_code/Project/config/locales/active_record.en.yml", 
"/media/sf_code/Project/config/locales/project.en.yml"] 

De hecho, la documentación de I18n establece: "La configuración regional predeterminada es: en y todas las traducciones de config/locales/*. Rb, yml se cargan automáticamente".

También he intentado especificando en application.rb

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s] 

Pero todavía no hay alegría.

Cualquiera tiene alguna idea de lo que podría causar que I18n.load_path no se establezca solo cuando se ejecutan activos: precompilación?

Gracias por cualquier idea

Respuesta

0

¿Ha definido una configuración regional predeterminada? Si no es así, se puede hacer añadiendo esta línea en su fichero de configuración/application.rb

config.i18n.default_locale = :fr 

Tal vez debería añadir esta línea demasiado en su production.rb el fin de permitir retrocesos de localización para I18n:

config.i18n.fallbacks = true 

A continuación, tenga en cuenta que no tiene sangría de tabulación en el archivo de configuración regional, pero solo espacios de sangría.

La configuración regional no es un activo, los activos son solo js, ​​css e imágenes, por lo que no existe un vínculo entre la compilación de recursos y las configuraciones regionales.

3

Esto se debe en realidad a un indicador de configuración de activos que probablemente haya configurado en su config/application.rb.

config.assets.initialize_on_precompile = false 

Los activos rastrillo: cheques de tareas rastrillo de precompilación para esta bandera, y en caso de ser falso, sólo se carga el grupo de activos y no inicializa totalmente la aplicación. A su vez, las configuraciones regionales de la aplicación no se agregan a I18n.load_path.

0

Esto es porque el i18n.js no se compila y manipula en public/assets que hacer lo que hay que añadir la siguiente línea en config/environments/production.rb

config.assets.precompile += %w(i18n.js en_locale.js fr_locale.js) 

A continuación, ejecute rake assets:precompile notará que public/assets/i18n-MD5.js ahora existe y listo para ser servido .

Cuestiones relacionadas