エラーメッセージの国際化(2)
2009/01/10
前回は、サンプルアプリケーション asagao のデフォルトのエラーメッセージを国際化しました。
今回は、モデル・フィールド単位でエラーメッセージを国際化します。
member.rb に次のような記述があります。
  validates_uniqueness_of :member_number,
    :message => 'が他の方と重なっています。',
    :if => Proc.new {|member|
      positive_integer?(member.member_number) }
(省略)
  validates_uniqueness_of :login_name,
    :message => 'が他の方と重なっています。'
validates_uniqueness_of のデフォルトのメッセージは t('activerecord.errors.messages.taken') です。
私たちの翻訳ファイルでは「はすでに使用されています。」になっています。
Member モデルについてのみ validates_uniqueness_of のエラーメッセージを「が他の方と重なっています。」に変更するには、config/activerecord_ja.yml に次のように記述します。
(省略)
    errors:
      messages:
(省略)
      models:
        member:
          taken: が他の方と重なっています。
        attributes:
          # Overrides model and default messages.
これで member.rb の先ほどの部分は次のように簡単になります。
  validates_uniqueness_of :member_number,
    :if => Proc.new {|member|
      positive_integer?(member.member_number) }
(省略)
  validates_uniqueness_of :login_name
続いて、フィールド単位でエラーメッセージを変更します。
member.rb に次のような記述があります。
  validates_confirmation_of :password,
    :message => 'が確認用パスワードと一致しません。'
このメッセージを翻訳ファイルに移動するには、config/activerecord_ja.yml に次のように記述します。
(省略)
    errors:
      messages:
(省略)
      models:
        member:
          taken: が他の方と重なっています。
          attributes:
            password:
              confirmation: が確認用パスワードと一致しません。
先ほどの記述は次のように短くなります。
validates_confirmation_of :password
本日はここまで。次回も、エラーメッセージの国際化を続けます。
 
  