3

私のサイトでは、ロケールは URL に追加されたクエリ パラメータによって決定されます (例: http://www.mysite.com/mypage?locale=en )。

アプリケーションコントローラーでデバイスを使用してbefore_filter :authenticate_user!いますが、ロケールパラメーターをデバイスサインインビューに渡す方法がわかりませんでした (表示された後にこれをビュー URL に手動で追加すると、翻訳されたビューが表示されます。私が理解できないパラメータを渡す)

アプリケーションコントローラーに以下を追加しましたが、うまくいきませんでした:

  before_filter :set_locale

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end

  def default_url_options(options={})
    { locale: I18n.locale }
  end
4

2 に答える 2

12

解決策を見つけました。どうやらDeviseでは、メソッドをそのように定義する必要があります(レールのドキュメントの状態とは異なります):

def self.default_url_options
  { :locale => I18n.locale }
end

ところで、誰かが理由と違いを説明できるなら、してください。

于 2012-09-27T13:59:45.377 に答える
4

DeviseController は ApplicationController を継承していないため、default_url_options にアクセスする唯一の方法は、ApplicationController のクラス メソッドとして定義することです。

于 2013-09-22T00:31:20.037 に答える