def localize(locale, object, format = :default, options = {})
raise ArgumentError, "Object must be a Date, DateTime or Time object. #{object.inspect} given." unless object.respond_to?(:strftime)
if Symbol === format
key = format
type = object.respond_to?(:sec) ? 'time' : 'date'
format = I18n.t("#{type}.formats.#{key}""#{type}.formats.#{key}", options.merge(:raise => true, :object => object, :locale => locale))
end
format = format.to_s.gsub(/%[aAbBp]/) do |match|
case match
when '%a' then I18n.t("date.abbr_day_names""date.abbr_day_names", :locale => locale, :format => format)[object.wday]
when '%A' then I18n.t("date.day_names""date.day_names", :locale => locale, :format => format)[object.wday]
when '%b' then I18n.t("date.abbr_month_names""date.abbr_month_names", :locale => locale, :format => format)[object.mon]
when '%B' then I18n.t("date.month_names""date.month_names", :locale => locale, :format => format)[object.mon]
when '%p' then I18n.t("time.#{object.hour < 12 ? :am : :pm}""time.#{object.hour < 12 ? :am : :pm}", :locale => locale, :format => format) if object.respond_to? :hour
end
end
object.strftime(format)
end