2

我在当前的 Rails 项目中遇到了一个非常奇怪的 i18n 问题。每当我尝试使用 key 时,我都会收到翻译缺失消息notifications。例如:

#en-US.yml
en-US:
  notifications:
    index:
      title: 'notification page'

#/notifications/index.html.erb
<%= content_for :title, t('.title') -%>

这将失败并告诉我翻译丢失

#en-US.yml
en-US:
  notifications:
    index:
      title: 'notification page'

#/notifications/index.html.erb
<%= content_for :title, t('notifications.index.title') -%>

这也会失败。

#en-US.yml
en-US:
  notification:
    index:
      title: 'notification page'

#/notifications/index.html.erb
<%= content_for :title, t('notification.index.title') -%>

奇怪的是,这将起作用,删除s将允许它找到翻译。

#en-US.yml
en-US:
  notifications1:
    index:
      title: 'notification page'

#/notifications/index.html.erb
<%= content_for :title, t('notifications1.index.title') -%>

这也将起作用,1在通知的末尾添加一个。

Rails 似乎不喜欢通知这个词。这是一个问题,因为我不想为此重命名整个模型,而且我想使用 i18n.t 视图快捷方式来保持一致性。是notifications保留字吗?是否有任何原因无法找到它?

4

2 回答 2

0

虽然不是一个确切的答案,但我发现 I18n 中有几个词不能用作键。我假设 I18n 代码在其他地方使用它们。

其他包括“否”、“是”、“开”等。

只需使用同义词或执行“notifications_”之类的操作即可使其与众不同。

于 2012-08-22T16:20:35.067 回答
0

我不确定为什么在您的情况下它会失败,但我自己试了一下,这不是保留字,我的语言环境文件:

en:
  notifications:
    foo: bar

结果:

1.8.7 :001 > I18n.t('notifications.foo')
 => "bar"

该测试是使用 Rails 3.1.5 和 Ruby 1.8.7 完成的。

在你的情况下,你得到以下?

1.8.7 :001 > I18n.t('notifications')
 => "translation missing: en.notifications" 
于 2012-08-22T16:05:06.910 回答