我目前面临一个非常奇怪的问题。翻译我的应用,我在config/locales/en.yml
内创建了一些默认密钥:
# config/locales/en.yml
en:
default:
country: "Your country is %{name}"
...
到目前为止一切正常。但是,现在我在同一个文件中添加一个新密钥(当然还保存该文件):
# config/locales/en.yml
en:
default:
country: "Your country is %{name}"
group: "Group with name %{name}"
...
我称之为:
# app/views/home/index.html.haml
= t('default.group', name: "Test name")
然而,它总是让我“翻译失踪......”。使用旧密钥(例如,en.country)时:
# app/views/home/index.html.haml
= t('default.country', name: "US")
它正在运作。
这是一种奇怪的行为,无法找到为什么这不起作用。我正在添加的任何新密钥似乎都没有找到。
想法?
编辑:
只有在我使用render_to_string
方法时才能实现问题:
# app/views/home/partial.html.haml
= t('default.group', name: "Group name")
# controller
def action
render_to_string(
template: "path/to/partial"
)
end
但如果视图是:
# app/views/home/_partial.html.haml
= t('default.country', name: "US")
有效。
编辑2:
好的,我知道为什么它不起作用。我实际上在我的pub / sub系统中使用Sidekiq来通知用户。
由于worker在自己的上下文中执行,我必须手动包含正确的类/帮助器。但是,你知道哪个班/助手吗?
例如,为了使用route
助手,我正在做:
include Rails.application.routes.url_helpers
那么用什么来加载I18n?
答案 0 :(得分:2)
看起来不错。确保重新启动服务器,因为未动态加载YML更改。
如果问题仍然存在,请在控制台中尝试。翻译某些内容以初始化I18n后端,例如用:
I18n.t(:whatever)
然后检查translations
哈希:
I18n.backend.send(:translations)
你看到你的新钥匙吗?您确定使用的是英语,:en
,语言环境吗?