2012-09-23 25 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

相關問題