GMA*_*GMA 3 locale ruby-on-rails internationalization spree rails-i18n
我正在尝试使用spree自己的spree_i18ngem 来国际化Rails/Spree应用程序,但我无法让它工作.
简而言之,我在ApplicationController中有以下代码:
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
puts I18n.locale
end
Run Code Online (Sandbox Code Playgroud)
我的视图中的代码应该被翻译(<%= t("whatever") %>).但无论我做什么,文本总是以英文输出.
使用一些额外的调试代码,我可以看到一旦set_locale调用,但执行仍然在控制器内,语言环境是正确的(例如,如果我访问url /?locale=es,那么puts上面的控制器代码输出中的语句es).
但是当执行到达视图时,语言环境已经以某种方式被重置为en.(例如<% raise I18n.locale.to_s %>,在视图中添加会将"en"作为错误消息引发.)
我已经在Spree的Github上打开了一个问题,因为据我所知,我已完全按照他们的指示操作,但仍然没有工作,但我可能仍然遗漏了一些东西.为什么区域设置没有正确设置?
(注意:我应该补充说,Spree.t它不起作用,不仅仅是t.)
编辑:如果你看看我的Github问题的评论,你会看到我的工作.但是,我99%肯定我的解决方案是一个黑客,并且我应该使用更好的方法.赏金可以告诉我什么是我错了.
Spree I18n提供了一种设置默认语言的方法:on config/application.rbwith
config.i18n.default_locale = :es
并且可以设置要更改的语言.也许就是config/initializers/spree_i18n.rb
SpreeI18n::Config.available_locales = [:en, :es, :de]
SpreeI18n::Config.supported_locales = [:en, :es, :de]
Run Code Online (Sandbox Code Playgroud)
之后,您可以set_locale在ApplicationController上删除它,因为它没有任何效果.
有了这个,它就像一个魅力.
编辑:
我更改了错误消息,因为我想确保它有效:
<%= product_description(@product) rescue Spree.t(:product_has_no_description) +
' ' + Spree.t(:action) %>
Run Code Online (Sandbox Code Playgroud)
我添加了一个没有描述的新产品.在localhost上运行服务器
在英语中我看到:"此产品没有描述动作"
在西班牙语中我看到:"Este producto no tiene描述Acción"
在deutsch,我看到:"Produkt hat keine Beschreibung Aktion"
完全是预期的.
您可以在github上看到包含更改的源代码