Rails2.2のI18Nを試してみた
昨日の Rails勉強会@東京第34回 でRails2.2 (RC1)がリリースされていることを知りました。
Rails 2.2 ではいくつもの中規模(?)な変更・追加が行われていますが、一番興味のあった国際語化(I18N)を試してみました。
基本設定
まずは、http://i18n-demo.phusion.nl/pages/setup をみて(左上のselect boxでja-JPを選択する)。
- 日付と時間のフォーマット用プラグインをインストール
- このページにある日本語用 config/locales/ja-JP.rb を作成
↑日付入力のselect box が日本語かされています!(Octber が 「10月」になっている)
# テンプレートの日本語化は手動でやってます ^^;
↑ しかし、エラーメッセージは日本語化されません。config/locales/ja-JP.rbにはActiveRecordのエラーメッセージの日本語もあるのですが??
ActiveRecordの日本語化リソースファイルを作成
Translating ActiveRecord • iain.nl という記事を見つけたので、参考に しながら ActiveRecordの日本語化リソースファイルを作成
ja-JP: activerecord: models: todo: Todo attributes: todo: due: 期日 task: タスク errors: template: header: "{{model}}でエラーが発生しました。" body: "つぎの項目を確認して下さい。" messages: blank: "が空です、入力して下さい"
↑無事にエラーメッセージやカラム名も日本語化されました。
まとめ
- Rails2.2のI18Nは一応使える
- しかし、従来使われていた GetTextととはまったく互換性がない
- ドキュメント不足?
なぜ config/locales/ja-JP.rb のActiveRecordのエラーメッセージは使われないの?
追記: config/locales/ja-JP.rb の修正
config/locales/ja-JP.rbを以下のように変更したらこのファイルのエラーメッセージが使われるようになりました。
メッセージのキーワードが変わったのでしょうか?
# Active Record :activerecord => { :errors => { :template => { :header => "{{model}}でエラーが発生しました。", :body => "以下のメッセージを確認してください:" }, :messages => { :inclusion => "は、リストに含まれていません", :exclusion => "は、有効な値ではありません", :invalid => "は、妥当な値ではありません", :confirmation => "は、確認できません", :accepted => "は、入力できません", :empty => "何も入力されていません", :blank => "空白です", :too_long => "長すぎます ({{count}}文字以下)", :too_short => "短すぎます ({{count}}文字以上)", ・・・・
この場合、日本語化リソースファイルは以下のようにテーブル、カラムの定義のみでOK
ja-JP: activerecord: models: todo: Todo attributes: todo: due: 期日 task: タスク