Hatena::ブログ(Diary)

130単位

2012-01-06

YAMLの参照まわりのtranslation missingの解決

Railsで翻訳のエラーに出くわしました。

translation missing: ja.activerecord.errors.models.user.attributes.email.taken

再現

環境
rails c
Loading development environment (Rails 3.0.11)
ruby-1.9.2-p180 :001 > I18n.t('activerecord.errors.messages.taken')
 => "translation missing: ja.activerecord.errors.messages.taken" 

原因

config/locale/ja.yml

  errors:
    format: "%{attribute} %{message}"

    messages: &errors_messages
      inclusion: "は一覧にありません。"
      exclusion: "は予約されています。"

  activerecord:
    errors:
      messages:
        taken: "はすでに存在します。"
        record_invalid: "バリデーションに失敗しました。 %{errors}"
        <<: *errors_messages

一部省略していますが、おそらく参照のあたりがうまく解析できておらず、"taken"が認識されていないようでした。

解決法1

Ruby1.9.2-p180からRuby1.9.2-p290に上げたら解決しました。詳しくはわかりませんが、YAMLの解析が改善されているものと思われます。

Ruby1.9.2-p290
$ rails c
Loading development environment (Rails 3.0.11)
1.9.2-p290 :001 > I18n.t('activerecord.errors.messages.taken')
 => "はすでに存在します。" 
RVM

RVMでバージョンを上げる場合

rvm upgrade ruby-1.9.2-p180 ruby-1.9.2-p290

解決法2

svenfuchs/rails-i18n ? GitHub にある最新のja.ymlを使っても解決できます。

以下のコミットでYAMLの構造が変更されていました。


4797363827
Rails3レシピブック 190の技

関連記事

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/deeeki/20120106/yaml_translation_missing