Python - 默认语言环境不起作用

Python - 默认语言环境不起作用

情况如下:

In [1]: import datetime

In [2]: import locale

In [3]: locale.getlocale()
Out[3]: ('es_ES', 'UTF-8')

In [4]: locale.getdefaultlocale()
Out[4]: ('es_ES', 'UTF-8')

In [5]: datetime.datetime.strftime(datetime.datetime.today(), '%B')
Out[5]: 'July'

但输出应该是julio

如果我设置了语言环境,那么它就可以工作

In [6]: locale.setlocale(locale.LC_ALL, 'es_ES.UTF8')
Out[6]: 'es_ES.UTF8'

In [7]: datetime.datetime.strftime(datetime.datetime.today(), '%B')
Out[7]: 'julio'

它发生在 Python2 (2.7.10) 和 Python3 (3.5.0+) 中

系统语言环境设置为西班牙语

LANG=es_ES.UTF-8
LANGUAGE=
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC=es_ES.UTF-8
LC_TIME=es_ES.UTF-8
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY=es_ES.UTF-8
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER=es_ES.UTF-8
LC_NAME=es_ES.UTF-8
LC_ADDRESS=es_ES.UTF-8
LC_TELEPHONE=es_ES.UTF-8
LC_MEASUREMENT=es_ES.UTF-8
LC_IDENTIFICATION=es_ES.UTF-8
LC_ALL=

编辑:

看到locale输出后,我意识到 LC_ALL 未设置。我/etc/default/locale按照提示检查了一下这里我发现了一个混合的场景。

LANG="es_ES.UTF-8"
LC_ALL=
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"

可能是因为我从 15.04 更新到了 15.10?不管怎样,我把LC_ALL其余变量都填上并改成es_ES,再次locale-gen以 root 身份执行。但是,即使重启系统,情况也是一样的。

答案1

通常情况下,您不应将其LC_ALL永久设置为全局环境变量。如果您在桌面上这样做,则设置语言/区域设置的 GUI 将变得毫无用处。

对于你的 Python 程序,你需要以下行:

locale.setlocale(locale.LC_ALL, '')

它使区域设置(即命令的输出locale)在 Python 程序中有效。

相关内容