gpt4 book ai didi

ruby-on-rails - I18n.locale 被重置为 :en in between controller and the view

转载 作者:行者123 更新时间:2023-12-03 16:20:14 28 4
gpt4 key购买 nike

我正在尝试使用 spree 自己的 spree_i18n 将 Rails/Spree 应用程序国际化gem,但我无法让它工作。

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被调用,但当执行仍在 Controller 内时,语言环境是正确的(例如,如果我访问 url /?locale=es ,则上述 Controller 代码中的 puts 语句输出 es )。

但是当执行到达 View 时,语言环境不知何故被重置为 en . (例如,在 View 中添加 <% raise I18n.locale.to_s %> 会引发“en”作为错误消息。)

我有 opened an issue on Spree's Github因为据我所知,我完全按照他们的指示进行了操作,但仍然无法正常工作,但我可能仍然遗漏了一些东西。为什么没有正确设置语言环境?

(注意:我应该补充一点,Spree.t 也不起作用,而不仅仅是 t。)

编辑:如果您查看关于我的 Github 问题的评论,您会发现我的工作正常。但是,我 99% 确定我的解决方案是一个 hack,并且我应该使用更好的方法。赏金给谁能告诉我我做错了什么。

最佳答案

Spree I18n 提供了一种设置默认语言的方法:在 config/application.rb 上使用config.i18n.default_locale = :es

以及设置要更改的语言的可能性。也许在 config/initializers/spree_i18n.rb

SpreeI18n::Config.available_locales = [:en, :es, :de] 
SpreeI18n::Config.supported_locales = [:en, :es, :de]

之后,您可以在ApplicationController上删除set_locale,因为它没有任何效果。

有了这个,它就像一个魅力。

已编辑:

我更改错误消息是因为我想确保它有效:

<%= product_description(@product) rescue Spree.t(:product_has_no_description) +
' ' + Spree.t(:action) %>

我添加了一个没有描述的新产品。在 localhost 上运行服务器

英文我看到:“This product has no description Action”

我在西类牙语中看到:“Este producto no tiene descripción Acción”

在德语中我看到:“Produkt hat keine Beschreibung Aktion”

完全符合预期。

您可以在 github 查看更改的源代码

关于ruby-on-rails - I18n.locale 被重置为 :en in between controller and the view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26322158/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com