Rails 4 I18n:新的翻译没有工作和缺失

时间:2014-05-19 08:04:58

标签: ruby-on-rails internationalization

我目前面临一个非常奇怪的问题。翻译我的应用,我在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?

1 个答案:

答案 0 :(得分:2)

看起来不错。确保重新启动服务器,因为未动态加载YML更改。

如果问题仍然存在,请在控制台中尝试。翻译某些内容以初始化I18n后端,例如用:

I18n.t(:whatever)

然后检查translations哈希:

I18n.backend.send(:translations)

你看到你的新钥匙吗?您确定使用的是英语,:en,语言环境吗?