Recentemente, tive que editar algum código em que a mensagem de validação de e-mail estava codificada e usava uma redação diferente de outros lugares no site, onde I18n é usado. Acontece que era tão simples quanto eu esperava.
class EmailValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless valid?(value)
# From this:
# object.errors[attribute] << (options[:message] || "is an incorrect email")
# to this:
object.errors.add(attribute, (options[:message] || :invalid))
end
end
def valid?(str)
EmailValidator.valid?(str)
end
def self.valid? str
return unless str.present?
!!str.match(/^([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i)
end
end