我试图使用狂欢自己的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%肯定我的解决方案是黑客行为,我应该使用更好的方法。赏金可以告诉我什么是我错误的东西。