2012-03-22 138 views
1

Python 2.7.2(默認,2011年6月12日,14:24:46)[MSC v.1500 64位(AMD64)]在win32上。區域設置問題

>>> 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()))這樣做?我想要做的就是根據用戶的喜好顯示日期。謝謝!

回答

8

要實現有關語言環境的一點是,Python作爲一種編程語言實現而不是應用程序,不能假定環境區域設置(通過LANGLC_*環境變量)是否應應用於寫入的程序Python與否。所以,Python不會設置語言環境。你的程序必須明確地這樣做。 Python會爲您解析語言環境變量,這就是locale.getdefaultlocale()返回的內容:由環境指定的默認語言環境。

活躍語言環境,實際使用的一個,是由locale.getlocale()如果你想回來,如果你運行之前明確設置地方你會看到它返回(None, None)(指示沒有區域設置。)您的應用程序使用環境指定的默認語言環境,則必須致電locale.setlocale(locale.LC_ALL, '')。 (空字符串表示「無論是默認值」,不幸的是與None不同或者沒有通過該參數。)