格式本地化

概觀

Django 的格式系統能夠使用目前語言環境指定的格式,在樣板中顯示日期、時間和數字。它還能處理表單中已本地化的輸入。

存取相同內容的兩個使用者可能會看到以不同方式格式化的日期、時間和數字,具體取決於其目前語言環境的格式。

注意

要啟用帶千位分隔符的數字格式化,需要在您的設定檔中設定 USE_THOUSAND_SEPARATOR = True。或者,您可以使用 intcomma 在您的樣板中格式化數字。

注意

有一個相關的 USE_I18N 設定,它控制 Django 是否應該啟用翻譯。詳情請參閱翻譯

表單中支援語言環境的輸入

啟用格式化後,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 %}

{% localize on %}
    {{ value }}
{% endlocalize %}

{% localize off %}
    {{ value }}
{% endlocalize %}

停用本地化後,會套用 本地化設定格式。

請參閱 localizeunlocalize,以取得將在每個變數的基礎上執行相同工作的樣板篩選器。

樣板篩選器

localize

強制本地化單個值。

例如

{% load l10n %}

{{ value|localize }}

若要停用單個值的本地化,請使用 unlocalize。若要控制樣板大部分區塊的本地化,請使用 localize 樣板標籤。

unlocalize

強制列印單個值,而不進行本地化。

例如

{% load l10n %}

{{ value|unlocalize }}

若要強制本地化單個值,請使用 localize。若要控制樣板大部分區塊的本地化,請使用 localize 樣板標籤。

傳回套用 本地化設定格式的數字(intfloatDecimal)的字串表示法。

建立自訂格式檔案

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 提供的語言環境格式使用通用分隔符,逗號表示小數,空格表示千位分隔符。

返回頂部