【问题标题】:How to pass locale parameter to Devise如何将语言环境参数传递给设计
【发布时间】:2012-09-23 07:33:28
【问题描述】:

在我的网站中,区域设置由附加到 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

【问题讨论】:

    标签: ruby-on-rails internationalization devise


    【解决方案1】:

    我找到了解决方案。显然,Devise 需要这样定义方法(而不像 rails documentation 状态):

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

    顺便说一句,如果有人能解释原因和区别,请做。

    【讨论】:

    • 没有人!太糟糕了!这怎么可能?我需要在这个方法中加入逻辑,访问请求和宿主域……我该怎么做?
    【解决方案2】:

    DeviseController 不继承自 ApplicationController,因此访问 default_url_options 的唯一方法是将其定义为 ApplicationController 上的类方法。

    【讨论】:

    • This link 建议options.merge({ :locale => I18n.locale })。你能告诉我区别吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2019-07-16
    • 1970-01-01
    • 2021-07-04
    • 2021-06-19
    • 1970-01-01
    相关资源
    最近更新 更多