[Tutor] locale.set/getlocale asymmetry
eryksun
eryksun at gmail.com
Thu Feb 21 07:33:14 CET 2013
On Wed, Feb 20, 2013 at 3:56 PM, Albert-Jan Roskam <fomcl at yahoo.com> wrote:
> Ah, I always wondered about that. So getdefaultlocale() always returns
> the same as getlocale() on Linux?
On Linux, getdefaultlocale looks for the locale name in environment
variables (LC_ALL, LC_CTYPE, LANG, and LANGUAGE), with a default of
'C', and parses the name with _parse_localename. It can't use
setlocale(LC_ALL, '') because that would actually set the default
state.
getlocale() returns the parsed locale for the current LC_CTYPE config,
not the system default locale.
> So basically, the locale specification may differ:
> [A] between OS families (Unix, Windows, ...)
> [B] between OS versions (Windows XP, Windows 7, ...)?
For a GUI application, your toolkit may have tools to abstract away
platform details. For example Qt QLocale:
>>> # set API v1 QString for this example
... import sip; sip.setapi('QString', 1)
>>> from PyQt4.QtCore import QLocale, QString
>>> QLocale.setDefault(QLocale('nl_NL'))
>>> QString('1234,56').toDouble()
(1234.56, True)
> One additional question: when is it REALLY necessary to specify a
> locale variant modifier, e.g. en_US.cp1252 at euro, or perhaps the
> more eccentric nl_NL.cp874 at preeuro (dutch locale, thai/latin codepage ;-)
It's for clowns like me to do this:
>>> setlocale(LC_ALL, 'en_US.UTF-8 at yadnom')
'en_US.UTF-8 at yadnom'
>>> calendar.day_name[0]
'yadnoM'
>>> calendar.day_abbr[0]
'noM'
On Debian Linux, I copied the original en_US to
/usr/local/share/i18n/locales/en_US at yadnom, modified the LC_TIME
config, updated /etc/locale.gen, and ran the locale-gen script to
update /usr/lib/locale/locale-archive.
More seriously, a system administrator may have a good reason to
create a modified locale for LC_MESSAGES, etc, so I guess you should
ask sys admins if/how they use this.
More information about the Tutor
mailing list