2012-09-23 88 views
3

在我的网站中,语言环境由附加到URL的查询参数确定(例如http://www.mysite.com/mypage?locale=en)。如何将语言环境参数传递给Devise

我在我的应用程序控制器中使用设计与before_filter :authenticate_user!,但无法计算如何传递区域设置参数来设计登录视图(如果手动将它添加到视图网址后,它会显示翻译来看,它只是路过,我想不通参数)

添加以下到我的应用程序控制器,它并没有这样的伎俩:

before_filter :set_locale 

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

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

回答

11

我找到了解决办法。显然,设计要求要这样定义的方法(而不是像铁轨documentation状态):

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

顺便说一句,如果任何人都可以解释的原因和差异,请做。

+0

没有家伙!太糟糕了!这怎么可能?我需要将逻辑放入此方法中,访问请求和主机域...我该怎么办? – coorasse

+0

@coorasse这个工程。 – asiniy

4

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

+0

[此链接](https://github.com/plataformatec/devise/wiki/How-To:--Redirect-with-locale-after-authentication-failure)建议'options.merge({:locale => I18n .locale})'。你能告诉我区别吗? – Wit

相关问题