I use POSIX locales with HTML::Template or SSI for internationalization. It works pretty well. I'm sure any decent templating system would do (Template Toolkit, anyone?).
use POSIX 'locale_h';
my $loc = "de_DE.utf-8";
or die "Invalid locale $loc";
This code is probably from perllocale, which is another great source for this sort of thing.
BTW AM/PM is AFAIK strictly an Anglophone thing. No other language uses it. But the one that really gets you is the decimal/comma inversion on the European continent: 3,14 vs 300.000.000 EUR or 300 000 000 EUR. =)