2012-07-04 11 views
6

utilizo before_filter en ApplicationController para establecer la configuración regional para mi aplicación:Ruby on Rails + Devise + I18n: cómo establecer la configuración regional?

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    before_filter :set_locale 

    def set_locale 
    I18n.locale = request.compatible_language_from ["uk", "ru", "de", "en"] 
    end 
end 

Funciona para los controladores que están escritos por mí. Pero todos los mensajes del inventor siguen siendo en inglés.

Configuración config.i18n.default_locale = "uk" (u otro) en config/application.rb obras, así que supongo que el problema es el controlador de ese legado no utiliza mi before_filter (posiblemente, no hereda ApplicationController en absoluto (?)).

Cómo resolver este problema? ¿Cómo hacer uso de mi ubicación?

+1

idear utiliza sus aplicaciones ApplicationController. esto es configurable a través de la configuración parent_controller. – phoet

+0

@Hauleth Sí, lo hice. Y funcionan si establezco la configuración regional no inglesa como predeterminada con config.i18n.default_locale en application.rb – frp

Respuesta

0

Es necesario utilizar prepend_before_action (o prepend_before_filter pero es alias prepend_before_action y pronto va a ser obsoleto) por lo que debe tener algo como:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    prepend_before_action :set_locale 

    private 

    def set_locale 
    I18n.locale = request.compatible_language_from [:uk, :ru, :de, :en] 
    end 
end 

Nota que esto puede romper el I18n.locale en sus vistas, por lo que puede necesitar configurarlo en before_action adicional.

0

Tuve este problema donde mis configuraciones de francés se estaban cargando para todo el mundo, y el problema era que mis entornos de diseño se construyeron originalmente en su propio archivo: devise.en.yml. Los moví al archivo en.yml, y todo se solucionó.

¡Espero que esto ayude a alguien en el futuro!