在Windows上设置Python语言环境的正确方法是什么?

我试图以感知区域的方式对string列表进行sorting。 我已经使用Babel库来处理其他i18n相关任务,但不支持sorting。 Python的locale模块提供了一个strcoll函数,但要求将进程的语言环境设置为我要使用的语言环境。 有种痛苦,但我可以忍受。

问题是,我似乎无法真正设置区域设置。 locale模块的文档给出了这个例子:

 import locale locale.setlocale(locale.LC_ALL, 'de_DE') 

当我运行它,我得到这个:

 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python26\Lib\locale.py", line 494, in setlocale locale.Error: unsupported locale setting 

我究竟做错了什么?

看来你正在使用Windows。 区域设置string在那里不同。 更精确地看看文档:

 locale.setlocale(locale.LC_ALL, 'de_DE') # use German locale; name might vary with platform 

在Windows上,我认为它会是这样的:

 locale.setlocale(locale.LC_ALL, 'deu_deu') 

MSDN有一个语言string和国家/地区string的列表

Ubuntu的

在Ubuntu上,你可能有这个问题,因为你的系统没有安装本地的。

从shell尝试一下:

 $> locale -a 

并检查是否find您感兴趣的语言环境,否则您必须安装它:

 $> sudo apt-get install language-pack-XXX 

其中XXX是你的语言(在我的情况下“xxx = it”,意大利语区域)然后运行dpkg-reconfigure

 $> sudo dpkg-reconfigure locales 

之后,在你的python shell中再次尝试:

 >>> import locale >>> locale.setlocale(locale.LC_ALL,'it_IT.UTF-8') 

(这是意大利语区域,这是我所需要的)

你不应该传递一个明确的locale来setlocale,这是错误的。 让它从环境中找出来。 你必须传递一个空string

 import locale locale.setlocale(locale.LC_ALL, '') 

从locale.setlocale文档:

 locale.setlocale(category, locale=None): """ Set the locale for the given category. The locale can be a string, an iterable of two strings (language code and encoding), or None. """" 

在Linux(特别是Ubuntu)下,你可以使用

 locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8') 

要么

 locale.setlocale(locale.LC_ALL, ('de', 'utf-8')) 

如果系统上未安装语言环境,则会出现相同的错误。 所以,请确保您的系统上安装了语言环境:

 $ locale -a # to list the currently installed locales $ (sudo) locale-gen de_DE.UTF-8 # to install new locale 

这是在Windows上执行此操作的唯一方法(德语语言环境的示例):

 import locale locale.setlocale(category=locale.LC_ALL, locale="German") # Not locale="de_DE"