格式本地化¶
概觀¶
Django 的格式系統能夠使用目前語言環境指定的格式,在樣板中顯示日期、時間和數字。它還能處理表單中已本地化的輸入。
存取相同內容的兩個使用者可能會看到以不同方式格式化的日期、時間和數字,具體取決於其目前語言環境的格式。
注意
要啟用帶千位分隔符的數字格式化,需要在您的設定檔中設定 USE_THOUSAND_SEPARATOR = True
。或者,您可以使用 intcomma
在您的樣板中格式化數字。
表單中支援語言環境的輸入¶
啟用格式化後,Django 可以在表單中解析日期、時間和數字時使用本地化格式。這表示它會在猜測使用者在表單上輸入資料時使用的格式時,嘗試不同語言環境的不同格式。
注意
Django 使用不同的格式來顯示資料,與它用於解析資料的格式不同。最值得注意的是,用於解析日期的格式不能使用 %a
(縮寫的星期幾名稱)、%A
(完整的星期幾名稱)、%b
(縮寫的月份名稱)、%B
(完整的月份名稱)或 %p
(上午/下午)。
要啟用表單欄位本地化輸入和輸出資料,請使用其 localize
引數
class CashRegisterForm(forms.Form):
product = forms.CharField()
revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)
在樣板中控制本地化¶
每當 Django 在樣板中輸出值時,它都會嘗試使用特定於語言環境的格式。
但是,使用本地化值可能並不總是合適的 – 例如,如果您輸出設計為機器可讀的 JavaScript 或 XML,您始終需要未本地化的值。您可能還希望在選定的樣板中使用本地化,而不是在所有地方使用本地化。
為了允許對本地化的使用進行精細控制,Django 提供了 l10n
樣板庫,其中包含以下標籤和篩選器。
樣板篩選器¶
localize
¶
強制本地化單個值。
例如
{% load l10n %}
{{ value|localize }}
若要停用單個值的本地化,請使用 unlocalize
。若要控制樣板大部分區塊的本地化,請使用 localize
樣板標籤。
unlocalize
¶
強制列印單個值,而不進行本地化。
例如
{% load l10n %}
{{ value|unlocalize }}
若要強制本地化單個值,請使用 localize
。若要控制樣板大部分區塊的本地化,請使用 localize
樣板標籤。
傳回套用 本地化設定格式的數字(int
、float
或 Decimal
)的字串表示法。
建立自訂格式檔案¶
Django 為許多語言環境提供格式定義,但有時您可能想要建立自己的定義,因為您的語言環境不存在格式檔案,或者您想要覆寫某些值。
若要使用自訂格式,請先指定您放置格式檔案的路徑。若要執行此操作,請將您的 FORMAT_MODULE_PATH
設定為格式檔案將存在的套件,例如
FORMAT_MODULE_PATH = [
"mysite.formats",
"some_app.formats",
]
檔案不會直接放置在這個目錄中,而是放置在以語言環境命名的目錄中,並且必須命名為 formats.py
。請注意不要將敏感資訊放在這些檔案中,因為如果您將字串傳遞給 django.utils.formats.get_format()
(由 date
樣板篩選器使用),則可能會公開檔案中的值。
若要自訂英文格式,需要像這樣的結構
mysite/
formats/
__init__.py
en/
__init__.py
formats.py
其中 formats.py
包含自訂格式定義。例如
THOUSAND_SEPARATOR = "\xa0"
使用不斷行空格(Unicode 00A0
)作為千位分隔符,而不是預設的英文逗號。
提供的語言環境格式的限制¶
某些語言環境對數字使用上下文相關的格式,Django 的本地化系統無法自動處理。
瑞士(德文)¶
瑞士數字格式取決於正在格式化的數字類型。對於貨幣值,逗號用作千位分隔符,小數點用作小數分隔符。對於所有其他數字,逗號用作小數分隔符,空格用作千位分隔符。Django 提供的語言環境格式使用通用分隔符,逗號表示小數,空格表示千位分隔符。