Several related issues:
1.) web_set_locale should probably set only LC_MESSAGES, if we can get away with it
2.) _set_language should be called once per request, not once per translated string
3.) the locale should be reset to (probably) en_US after translation is done (hopefully, after templates are rendered will do), so we don't mess with any other perl code that might be (probably unintentionally) locale-dependent, such as http://pastie.org/4125293 in catalyst (the %f in sprintf uses LC_NUMERIC, breaking the numeric usage of the variable later).