ActiveRecord出错信息是已经格式化过的英文字符串,这很不方便做本地化处理。要想做本地化,必须保留错误数据,在显示时再格式化为本地语言。不过ActiveRecord过早地把错误信息格式化为字符串,基本上已经断绝了本地化这条路。
为了让ActiveRecord错误信息可以本地化,我采用打补丁的方式。查看验证这部分代码,发现格式化字符串分散在各个验证方法中,一一重写不大合算。好在它是调用default_error_messages方法来取得错误信息字符串,于是考虑在这里做点文章。
代码
class ActiveRecord::ValidateError
attr_reader :error
def initialize(error, format, *args)
@error = error
@format = format
@args = args
end
def to_s
return @format if @args.empty?
@format % @args
end
end
class ActiveRecord::Errors
def self.default_error_messages
def self.default_error_messages
@@_error_messages
end
@@_error_messages = {}
@@default_error_messages.each do |key, value|
@@_error_messages[key] = ActiveRecord::ValidateError.new(key, value)
end
@@_error_messages
end
|