2012-07-04 6 views
6

używam before_filter w ApplicationController ustawienie locale dla mojej aplikacji:Ruby on Rails + Devise + I18n: jak ustawić ustawienia regionalne?

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 

To działa dla kontrolerów, które są napisane przeze mnie. Jednak wszystkie wiadomości opracowane przez Devise są nadal angielskie.

Ustawianie config.i18n.default_locale = "uk" (lub inne) w config/application.rb prac, więc myślę, że problem jest kontroler którzy wymyślają za nie używać mojego before_filter (możliwie, że nie dziedziczy ApplicationController na wszystkich (?)).

Jak rozwiązać ten problem? Jak dokonać analizy za pomocą mojego ustawienia narodowego?

+1

Wymyślić używa aplikacji ApplicationController. można to skonfigurować za pomocą ustawienia parent_controller. – phoet

+0

@Hauleth Tak, zrobiłem. I działają, jeśli ustawię domyślną lokalizację inną niż angielska za pomocą config.i18n.default_locale in application.rb – frp

Odpowiedz

0

Trzeba użyć prepend_before_action (lub prepend_before_filter ale jest aliasem prepend_before_action i wkrótce będzie przestarzała), więc nie powinno być coś takiego:

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 

Uwaga, która może przerwać wyświetlenie I18n.locale, więc konieczne może być ustawienie go w dodatkowym before_action.

0

Miałem ten problem, gdy moje francuskie lokalizacje zostały załadowane dla wszystkich, a problem polegał na tym, że moje lokalizacje zostały pierwotnie zbudowane w ich własnym pliku - devise.en.yml. Przeniosłem je do pliku en.yml i wszystko zostało naprawione.

Mam nadzieję, że to pomoże komuś w przyszłości!