エラーメッセージのフォーマットを変えたい場合
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