maeshimaの日記

メモ書きです

エラーメッセージのフォーマットを変えたい場合

Rails2.3の話で、Rails3でも同じかは未確認です。

通常のエラーメッセージは「エラーになった属性の名前 + validation固有のメッセージ」。これを変えたい場合、localeのファイルで"activerecord.errors.full_messages.format"を修正することで変えることが出来る。デフォルトは "{{attribute}} {{message}}"。

個別のvalidationのエラーメッセージだけ変えたい場合

例えば blank のエラーメッセージを変えたい場合は "activerecord.errors.full_messages.blank" を修正する。

完全に個別でエラーメッセージを変えたい場合

下記のように"activerecord.errors.full_messages.{messageで指定された文字列}"とするとおk。

# app/models/article.rb
class Article < ActiveRecord::Base
  validates_presence_of :title, :message => :"title.blank"
end

# config/locales/en.yml
en:
  activerecord:
    errors:
      full_messages:
        title:
          blank: This title is screwed!

authlogicのエラーメッセージフォーマット

authlogicは、authlogic中でI18nの変換して、それを:messageにいれてるから普通にやるとymlが汚くなる。下記のようにすると少しスマートに。

ja:
  authlogic:
    error_messages:
      login_blank: &invalid
        "あああああ"
 # ...       
  activerecord:
    errors:
      full_messages:
        *invalid": "%{message}"

追記

該当箇所のソースをピックアップ

      def generate_full_message(options = {})
        keys = [
          :"full_messages.#{@message}",
          :'full_messages.format',
          '%{attribute} %{message}'
        ]

        options.merge!(:default => keys, :message => self.message)
        I18n.translate(keys.shift, options)
      end