Python不使用环境中的语言环境

时间:2018-01-15 20:27:00

标签: python locale

我有一个python程序(jrnl),它应该以德语文本打印星期几。但是,它始终打印英文名称。

以下是locale的输出:

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

您可以看到LC_TIME设置为de_DE.UTF-8。但是当我启动python时,这个语言环境没有设置:

>>> import locale
>>> locale.getlocale(locale.LC_TIME)
(None, None)

所以我的工作日用英文显示:

>>> from time import gmtime, strftime
>>> strftime("%A, %d %b %Y %H:%M:%S +0000", gmtime())
'Monday, 15 Jan 2018 20:22:30 +0000'

如何让python使用系统区域设置?

1 个答案:

答案 0 :(得分:5)

来自locale module background documentation

  

最初,当程序启动时,无论用户的首选语言环境是什么,语言环境都是C语言环境。

您需要使用locale.setlocale()显式设置区域设置;使用空字符串表示需要使用用户配置:

locale.setlocale(locale.LC_TIME, '')

这是标准行为;无论环境变量如何,底层C级语言环境系统explicitly starts in the C locale,因为您不能假设当前程序实际上需要或需要遵守用户设置。