似乎什么都没有得救.假设你设置一次你的语言环境我错了,然后系统会记住这个
是的,locale.setlocale()
用Python 调用不会影响未来的python
进程.请改为配置环境变量,请参阅如何在Ubuntu中设置所有语言环境设置.
Bash的"日期"方法似乎以某种方式获取区域设置.
date
setlocale(LC_ALL, "")
在开始时 调用,即每个进程至少调用setlocale()
一次以启用$LANG
语言环境而不是C
语言环境.
setlocale(LC_ALL, '')
$LANG
首先根据变量设置语言环境,而不是$LANGUAGE
(它是相关但不同的:"GNU gettext搜索路径按顺序包含'LC_ALL','LC_CTYPE','LANG'和'LANGUAGE'.").
设置LC_TIME
类别(在Ubuntu上)就足够了:
>>> import locale >>> import time >>> time.strftime('%A') 'Tuesday' >>> locale.getlocale(locale.LC_TIME) ('en_US', 'UTF-8') >>> locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8') 'ru_RU.UTF-8' >>> time.strftime('%A') '???????' >>> locale.getlocale(locale.LC_TIME) ('ru_RU', 'UTF-8')
如果setlocale()
尚未引发,locale.Error: unsupported locale setting
则成功设置相应的区域设置类别.
您还可以获取工作日名称知道其位置(在更改语言环境的同一个python会话中):
>>> import calendar >>> calendar.day_name[1] '???????' >>> locale.nl_langinfo(locale.DAY_3) '???????'
在不修改全局状态的情况下,在给定语言环境中打印工作日的可移植方法是使用babel
模块:
>>> from datetime import date >>> from babel.dates import format_date # $ pip install babel >>> format_date(date.today(), format='EEEE', locale='en') 'Tuesday' >>> format_date(date.today(), format='EEEE', locale='ru') '???????' >>> format_date(date.today(), format='EEEE', locale='nl') 'dinsdag'