How to get ruby's strftime to have localized dates


February 2012.
Here is how to use ruby's strftime in French:

require 'date'
newv = [
{'Janvier' => 1, 'Février' => 2, 'Mars' => 3, 'Avril' => 4, 'Mai' => 5, 'Juin' => 6, 'Juillet' => 7, 'Août' => 8, 'Septembre'=> 9, 'Octobre' =>10, 'Novembre' =>11, 'Décembre' => 12},
{'Dimanche' => 0, 'Lundi' => 1, 'Mardi' => 2, 'Mercredi' => 3, 'Jeudi'=> 4, 'Vendredi' => 5, 'Samedi' => 6},
{'jan' => 1, 'fév' => 2, 'mar' => 3, 'avr' => 4, 'mai' => 5, 'juin' => 6, 'juil' => 7, 'aoû' => 8, 'sep' => 9, 'oct' =>10, 'nov' =>11, 'déc' => 12},
{'dim' => 0, 'lun' => 1, 'mar' => 2, 'mer' => 3, 'jeu' => 4, 'ven' => 5, 'sam' => 6},
[nil] + %w(Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre),
%w(Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi),
[nil] + %w(jan fév mar avr mai juin juil aoû sep oct nov déc),
%w(dim lun mar mer jeu ven sam)
]
Date::FRENCH_MONTHS=newv[0]
Date::FRENCH_DAYS=newv[1]
Date::FRENCH_ABBR_MONTHS=newv[2]
Date::FRENCH_ABBR_DAYS=newv[3]
Date::FRENCH_MONTHNAMES=newv[4]
Date::FRENCH_DAYNAMES=newv[5]
Date::FRENCH_ABBR_MONTHNAMES=newv[6]
Date::FRENCH_ABBR_DAYNAMES=newv[7]

class Time

def strftime_french(format)
format = format.dup
format.gsub!(/%a/, Date::FRENCH_ABBR_DAYNAMES[self.wday])
format.gsub!(/%A/, Date::FRENCH_DAYNAMES[self.wday])
format.gsub!(/%b/, Date::FRENCH_ABBR_MONTHNAMES[self.mon])
format.gsub!(/%B/, Date::FRENCH_MONTHNAMES[self.mon])
self.strftime(format)
end
end

class Date

def strftime_french(format)
format = format.dup
format.gsub!(/%a/, Date::FRENCH_ABBR_DAYNAMES[self.wday])
format.gsub!(/%A/, Date::FRENCH_DAYNAMES[self.wday])
format.gsub!(/%b/, Date::FRENCH_ABBR_MONTHNAMES[self.mon])
format.gsub!(/%B/, Date::FRENCH_MONTHNAMES[self.mon])
self.strftime(format)
end
end

I did not want to override strftime, because a lot of libraries use it, and this can lead to unexpected behavior (e.g. the imap protocol use dates like 05 Feb 2012 which would get translated as 05 Fév 2012 and trigger an error).