バリデーションチェックの日本語化
restful_authenticationを導入したあとで、ユーザー登録のバリデーションが英語だと気になった。
以下を、app/model/user.rb で修正
validates_presence_of :login, :email, :message => 'が空です。' validates_presence_of :password, :if => :password_required?, :message => 'が空です。' validates_presence_of :password_confirmation, :if => :password_required?, :message => 'が空です。' validates_length_of :password, :within => 4..40, :if => :password_required?, :too_short => 'が短すぎます(%d文字以上です)', :too_long => 'が長すぎます(%d文字以下です)。' validates_confirmation_of :password, :if => :password_required?, :message => "が一致していません。" validates_length_of :login, :within => 3..40, :too_short => 'が短すぎます(%d文字以上です)', :too_long => 'が長すぎます(%d文字以下です)。' validates_length_of :email, :within => 3..100, :too_short => 'が短すぎます(%d文字以上です)', :too_long => 'が長すぎます(%d文字以下です)。' validates_uniqueness_of :login, :email, :case_sensitive => false, :message => 'は既に登録されています。' class << self HUMANIZED_ATTRIBUTE_KEY_NAMES = { "login" => "ユーザー名", "email" => "メール", "password" => "ユーザー名", "password_confirmation" => "パスワード確認", } def human_attribute_name(attribute_key_name) HUMANIZED_ATTRIBUTE_KEY_NAMES[attribute_key_name] || super end end
さらに日本語化を進めるには、
# Methods added to this helper will be available to all templates in the application. module ApplicationHelper def error_messages_for(*params) options = params.extract_options!.symbolize_keys if object = options.delete(:object) objects = [object].flatten else objects = params.collect {|object_name| instance_variable_get("@#{object_name}") }.compact end count = objects.inject(0) {|sum, object| sum + object.errors.count } unless count.zero? html = {} [:id, :class].each do |key| if options.include?(key) value = options[key] html[key] = value unless value.blank? else html[key] = 'errorExplanation' end end options[:object_name] ||= params.first options[:header_message] = "#{count}個のエラーが発生しました" unless options.include?(:header_message) options[:message] ||= '次の項目に問題があります:' unless options.include?(:message) error_messages = objects.map {|object| object.errors.full_messages.map {|msg| content_tag(:li, msg) } } contents = '' contents << content_tag(options[:header_tag] || :h2, options[:header_message]) unless options[:header_message].blank? contents << content_tag(:p, options[:message]) unless options[:message].blank? contents << content_tag(:ul, error_messages) content_tag(:div, contents, html) else '' end end end
http://d.hatena.ne.jp/shunsuk/20080625/1214381487 を参考にさせていただいた。