[LON-CAPA-dev] I18N and dates

Jeremy Bowers lon-capa-dev@mail.lon-capa.org
Mon, 22 Sep 2003 17:07:36 -0500

Gerd Kortemeyer wrote:
> As a very very first cut, check out the code I already put into 
> "humanTime" to either use your code (in case that the language starts 
> with "en") or "localtime" else.
> - Gerd.

*grin* That'll teach me to open my mouth without checking out the latest 
CVS code ;-)

Looks like "man perllocale" has the goods...


You can switch locales as often as you wish at run time with the 
POSIX::setlocale() function:

         # This functionality not usable prior to Perl 5.004
         require 5.004;

         # Import locale-handling tool set from POSIX module.
         # This example uses: setlocale -- the function call
         #                    LC_CTYPE -- explained below
         use POSIX qw(locale_h);

         # query and save the old locale
         $old_locale = setlocale(LC_CTYPE);

         setlocale(LC_CTYPE, "fr_CA.ISO8859-1");
         # LC_CTYPE now in locale "French, Canada, codeset ISO 8859-1"

         setlocale(LC_CTYPE, "");
         # LC_CTYPE now reset to default defined by LC_ALL/LC_CTYPE/LANG
         # environment variables.  See below for documentation.

         # restore the old locale
         setlocale(LC_CTYPE, $old_locale);


Me again. That "setlocale" stuff looks a little dangerous, since it'll 
almost certainly propogate to the next request for a handler. Maybe a 
"cleanup" handler that resets the locale to a known state is called for, 
and then each handler can fiddle with it without fear it will leak into 
the next request.

Also note this puts us at the mercy of the locales on the system. AFAIK 
this is OK, *every* Linux system I've ever seen has a full locale 
database (in fact, it composes ~10% of the smallest Gentoo install CD 
image IIRC; on my system /usr/share/locale is 101MB now, it's not as 
large on a smaller install).

Also see the security notes on that manpage; I don't see anything 
terrifying but the more eyes the better.