我試圖使用狂歡自己的spree_i18n
gem來國際化Rails/Spree應用程序,但我無法讓它正常工作。I18n.locale重置爲:在控制器和視圖之間
I made a minimal app which recreates the problem here.
爲了削減長話短說,我在我的ApplicationController中下面的代碼:
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
puts I18n.locale
end
和代碼在我看來,這應該被翻譯(<%= t("whatever") %>
)。但無論我做什麼,文本總是以英文輸出。
隨着調試的一些額外的代碼,我可以看到,一旦set_locale
被調用,但同時執行還是在控制器內,該區域是正確的(例如,如果我訪問的URL /?locale=es
,然後在上面的控制器代碼的puts
聲明輸出es
)。
但是在執行到達視圖時,語言環境已被重置爲en
。 (例如,在視圖中添加<% raise I18n.locale.to_s %>
會將「en」作爲錯誤消息引發。)
我已經opened an issue on Spree's Github因爲據我所知我已經完全按照他們的指示操作,但它仍然不能正常工作,但我仍可能遺漏了什麼。爲什麼區域設置不正確?
(注:我要補充的是,Spree.t
不工作,要麼,不只是t
。)
編輯:如果你看一下我的Github上的問題的評論,你會看到,我得到了它的工作。但是,我99%肯定我的解決方案是黑客行爲,我應該使用更好的方法。賞金可以告訴我什麼是我錯誤的東西。