2012-05-29 31 views
12

試圖瞭解本地化執行到Django的,這裏是我的設置系統日期格式不拾取Django的區域

LANGUAGE_CODE = 'fr-FR' 
USE_L10N = True 

如果我嘗試

>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M') 
     .strftime('%c') 

它會給我'Wed May 30 15:30:00 2012'這是EN區域設置。然而,doc是說:

[...]兩個用戶訪問相同的內容,但在不同的語言,會看到不同的方式,這取決於他們的當前區域[格式格式化日期和數字領域。 ..]

他們在討論爲各自瀏覽器設置的語言環境嗎?
如果沒有,例如我怎樣才能將它設置爲法語?

回答

21

Django的本地化的Django模板和表單的背景下工作的,不能出行環比上漲Python的內部日期時間表示:如果你有USE_L10N = True,並與該地區用戶

When using Django's formatting system, dates and numbers on templates 
will be displayed using the format specified for the current locale. 
...Django will also use localized formats when parsing data in forms. 

所以FR進入10,45轉換成表格,這將被解釋爲英文十進制系統中的10.45。同樣,模板標記{{ value|date:"SHORT_DATE_FORMAT" }}的輸出將根據用戶的區域設置而有所不同。

但是,Python內部strftime('%c')不能訪問Django的設置,而是指在安裝它的機器上設置的語言環境。你可以檢索和更改區域設置的Python分,外加:

>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M').strftime('%c') 
'Wed May 30 15:30:00 2012' 
>>> import locale 
>>> locale.getlocale() 
(None, None) 
>>> locale.getdefaultlocale() 
('en_US', 'UTF-8') 
>>> locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") 
'fr_FR.UTF-8' 
>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M').strftime('%c') 
'Mer 30 mai 15:30:00 2012' 

或通過設置環境變量$LANG

+0

謝謝你的詳細解答。我忘了注意'datetime'顯然與Django無關:)現在,如果我需要通過JSON發送格式化日期列表,這將根據用戶區域設置來格式化它的最佳方式? –

+0

我想這將需要在知道用戶的語言環境後實際組裝JSON。嘗試這個? https://docs.djangoproject.com/en/1.3/howto/i18n/ – Karmel

+0

新問題問[這裏](http://stackoverflow.com/questions/10802680/django-accessing-request-meta-data-from-生產) –

相關問題