2012-07-04 4 views
6

J'utilise before_filter dans ApplicationController pour définir locale pour mon application:Ruby on Rails + Devise + I18n: comment définir les paramètres régionaux?

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 

Il fonctionne pour les contrôleurs qui sont écrits par moi. Mais les messages de tous les appareils sont toujours en anglais.

Réglage config.i18n.default_locale = "uk" (ou autre) dans config/application.rb œuvres, donc je suppose que le problème est le contrôleur qui méditent n'utilise pas mon before_filter (peut-être, il ne hérite pas ApplicationController du tout (?)).

Comment résoudre ce problème? Comment faire usage utiliser ma locale?

+1

utilise vos applications ApplicationController. ceci est configurable via le paramètre parent_controller. – phoet

+0

@Hauleth Oui, je l'ai fait. Et ils fonctionnent si je définis des paramètres régionaux non anglais par défaut avec config.i18n.default_locale dans application.rb – frp

Répondre

0

Vous devez utiliser prepend_before_action (ou prepend_before_filter mais il est alias prepend_before_action et va bientôt être dépréciée) donc vous devriez avoir quelque chose comme:

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 

Notez que cela peut casser le I18n.locale dans vos vues de sorte que vous devrez peut-être définir dans before_action supplémentaire.

0

J'ai rencontré ce problème lors du chargement de mes paramètres régionaux en français pour tout le monde, et le problème était que mes paramètres locaux étaient initialement créés dans leur propre fichier - devise.en.yml. Je les ai déplacés dans le fichier en.yml, et tout a été réparé.

Espérons que cela aidera quelqu'un dans le futur!

Questions connexes