现场问题

时间:2012-03-22 19:22:51

标签: python locale

win32上的Python 2.7.2(默认,2011年6月12日,14:24:46)[MSC v.1500 64位(AMD64)]。

>>> locale.getdefaultlocale()
('ru_RU', 'cp1251')  #ok, Russian locale is set, as per user settings
>>> a  = datetime.date.today()
>>> a.strftime("%B %d")
March 22' #ouch, that's not Russian.
>>> locale.setlocale(locale.LC_ALL, 'russian_russia')
'Russian_Russia.1251'
>>> a.strftime("%B %d")
'Март 22' #now it's ok

那么......为什么不重置默认语言环境不行呢?它与操作系统有关吗?有没有办法做locale.setlocale(convert_it_somehow(locale.getdefaultlocale()))之类的事情?我想要做的就是根据用户的偏好显示日期。谢谢!

1 个答案:

答案 0 :(得分:8)

要实现locales的事情是Python作为编程语言实现而不是应用程序,不能假设环境语言环境设置(通过LANGLC_*环境变量)是否应该应用于用Python编写的程序。因此,Python不设置区域设置。你的程序必须明确地这样做。 Python会为您解析语言环境变量,这就是locale.getdefaultlocale()返回的内容:环境指定的默认语言环境。

活动区域设置(实际使用的区域设置)由locale.getlocale()返回,如果在显式设置区域设置之前运行该区域设置,则会看到它返回(None, None)(至表示未设置区域设置。)如果希望应用程序使用环境指定的默认区域设置,则必须调用locale.setlocale(locale.LC_ALL, '')。 (空字符串表示“无论什么是默认值”,遗憾的是不同于None或不传递参数。)