2

現在の Rails プロジェクトで、i18n に関して非常に奇妙な問題が発生しています。キーを使用しようとすると、翻訳が見つからないというメッセージが表示されます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し、通知の最後に a を追加すると機能します。

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 に答える