エラーメッセージの国際化(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

本日はここまで。次回も、エラーメッセージの国際化を続けます。