def localize(locale, object, format = :default, options = nil)
raise ArgumentError, "Object must be a Date, DateTime or Time object. #{object.inspect} given." unless object.respond_to?(:strftime)
type = object.respond_to?(:sec) ? 'time' : 'date'
formats = translate(locale, "#{type}.formats""#{type}.formats")
format = formats[format.to_sym] if formats && formats[format.to_sym]
format = format.to_s.dup
if lookup(locale, "date.standalone_abbr_day_names""date.standalone_abbr_day_names")
format.gsub!(LOCALIZE_STANDALONE_ABBR_DAY_NAMES_MATCH,
translate(locale, "date.standalone_abbr_day_names""date.standalone_abbr_day_names")[object.wday])
end
format.gsub!(/%a/, translate(locale, "date.abbr_day_names""date.abbr_day_names")[object.wday])
if lookup(locale, "date.standalone_day_names""date.standalone_day_names")
format.gsub!(LOCALIZE_STANDALONE_DAY_NAMES_MATCH,
translate(locale, "date.standalone_day_names""date.standalone_day_names")[object.wday])
end
format.gsub!(/%A/, translate(locale, "date.day_names""date.day_names")[object.wday])
if lookup(locale, "date.standalone_abbr_month_names""date.standalone_abbr_month_names")
format.gsub!(LOCALIZE_ABBR_MONTH_NAMES_MATCH) do
$1 + $2 + translate(locale, "date.abbr_month_names""date.abbr_month_names")[object.mon]
end
format.gsub!(/%b/, translate(locale, "date.standalone_abbr_month_names""date.standalone_abbr_month_names")[object.mon])
else
format.gsub!(/%b/, translate(locale, "date.abbr_month_names""date.abbr_month_names")[object.mon])
end
if lookup(locale, "date.standalone_month_names""date.standalone_month_names")
format.gsub!(LOCALIZE_MONTH_NAMES_MATCH) do
$1 + $2 + translate(locale, "date.month_names""date.month_names")[object.mon]
end
format.gsub!(/%B/, translate(locale, "date.standalone_month_names""date.standalone_month_names")[object.mon])
else
format.gsub!(/%B/, translate(locale, "date.month_names""date.month_names")[object.mon])
end
format.gsub!(/%p/, translate(locale, "time.#{object.hour < 12 ? :am : :pm}""time.#{object.hour < 12 ? :am : :pm}")) if object.respond_to? :hour
object.strftime(format)
end