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

mat*_*jes 2 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=
Run Code Online (Sandbox Code Playgroud)

您可以看到将LC_TIME其设置为de_DE.UTF-8。但是当我启动python时,未设置此语言环境:

>>> import locale
>>> locale.getlocale(locale.LC_TIME)
(None, None)
Run Code Online (Sandbox Code Playgroud)

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

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

我必须为python使用系统区域设置做什么?

Mar*_*ers 5

从locale模块背景文档:

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

您需要使用显式设置语言环境locale.setlocale()。使用空字符串表示需要使用用户配置:

locale.setlocale(locale.LC_TIME, '')
Run Code Online (Sandbox Code Playgroud)

这是标准行为;底层C级区域系统明确地开始在C现场,无论环境变量的,因为你不能假设当前程序实际上想要或需要的荣誉用户设置。