Rails 2.2.2でエラーメッセージを日本語化する。

Rails 2.2.2のi18nでエラーメッセージを日本語化するときの備忘録

インストール
sudo gem so -a http://gems.github.com #http://gems.github.comがgemのSOURCESに入ってない場合
sudo gem i amatsuda-i18n_generators

設定ファイルの生成
script/generate i18n ja
exists config/locales
create config/locales/ja.yml
create config/locales/models_ja.yml

参考:Close to the EDGE Rails 2.2の I18nによる日本語化を最も簡単に行う方法

で、実行してみると
translation missing: ja, activerecord, errors, templates , header
というエラーが出る。これは/cofig/locales/ja.ymlにバグがあって
  activerecord:
errors:
template:
header:
one: "{{model}}にエラーが発生しました。"
other: "{{model}}に{{count}}つのエラーが発生しました。"

body: "次の項目を確認してください。"

activerecord:
errors:

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

activerecord:
errors:
が重複しているため。2つめのこの行を削除するとエラーが出なくなる。
参考:i18n_generators にハマった件 - you know something? | Use it for myself.

その後に/cofig/locales/ja.ymlをモデルとカラム名に合わせて以下のようにする。
例)モデル名:Topic、カラム名:body titleの場合
  activerecord:
models:
topic: トピック
attributes:
topic:
body: 本文
title: タイトル

errors:
template:
header:
one: "{{model}}にエラーが発生しました。"
other: "{{model}}に{{count}}つのエラーが発生しました。"

body: "次の項目を確認してください。"
これで以下のように日本語化される。
トピックに2つのエラーが発生しました。
次の項目を確認してください。

・ 本文 は1文字以上で入力してください。
・タイトル は1文字以上で入力してください。

注意すべきは、正しくネストされていないと、正しく日本語化されない点。
例えば
  activerecord:
models:
topic: トピック
attributes:
topic:
body: 本文
title: タイトル
のように、カラム名の指定箇所attributesがmodelsと同じレベルになっていないと「Bodyがありません」などとなってしまう。
これが分からずに数時間格闘した・・・。


タグ:Rails
posted by digital-squad at 2008年12月27日 13時15分 | Comment(0) | TrackBack(0) | Ruby on Rails / Ruby
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。