天天看點

django 1.8 官方文檔翻譯:9-1-4 格式本地化格式本地化

格式本地化

概覽

Django的格式化系統可以在模闆中使用目前

地區

特定的格式,來展示日期、時間和數字。也可以處理表單中輸入的本地化。

當它被開啟時,通路相同内容的兩個使用者可能會看到以不同方式格式化的日期、時間和數字,這取決于它們的目前地區的格式。

格式化系統預設是禁用的。需要在你的設定檔案中設定

USE_L10N = True

來啟用它。

注意

為了友善起見,

django-admin startproject建立的預設的

settings.py

檔案包含了 

[

USE_L10N = True

](../../ref/settings.html#std:setting-USE_L10N) 的設定。

但是要注意,要開啟千位分隔符的數字格式化,你需要在你的設定檔案中設定

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)
           

在模闆中控制本地化

當你使用

USE_L10N

來開啟格式化的時候,Django會嘗試使用地區特定的格式,無論值在模闆的什麼位置輸出。

然而,這對于本地化的值不可能總是十分合适,如果你在輸出JavaScript或者機器閱讀的XML,你會想要使用去本地化的值。你也可能想隻在特定的模闆中使用本地化,而不是任何位置都使用。

DJango提供了

l10n

模闆庫,包含以下标簽和過濾器,來實作對本地化的精細控制。

模闆标簽

localize

在包含的代碼塊内開啟或關閉模闆變量的本地化。

這個标簽可以對本地化進行比

USE_L10N

更加精細的操作。

這樣做來為一個模闆激活或禁用本地化:

{% load l10n %}

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

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

在 

{% localize %}

代碼塊内并不遵循f

USE_L10N

的值。

對于在每個變量基礎上執行相同工作的模闆過濾器,參見

localize

unlocalize

模闆過濾器

強制單一值的本地化。

例如:

{% load l10n %}

{{ value|localize }}
           

使用

unlocalize

來在單一值上禁用本地化。使用

localize

模闆标簽來在大塊的模闆區域内控制本地化。

unlocalize

強制單一值不帶本地化輸出。

{% load l10n %}

{{ value|unlocalize }}
           

localize

來強制單一值的本地化。使用

localize

建立自定義的格式檔案

Django為許多地區提供了格式定義,但是有時你可能想要建立你自己的格式,因為你的的确并沒有現成的格式檔案,或者你想要覆寫其中的一些值。

Changed in Django 1.8:

添加了指定

FORMAT_MODULE_PATH

為清單的功能。之前隻支援單一的字元串值。

指定你首先放置格式檔案的位置來使用自定義格式。把你的

FORMAT_MODULE_PATH

設定設定為格式檔案存在的包名來使用它,例如:

FORMAT_MODULE_PATH = [
    'mysite.formats',
    'some_app.formats',
]
           

檔案并不直接放在這個目錄中,而是放在和地區名稱相同的目錄中,檔案也必須名為

formats.py

需要這樣一個結構來自定義英文格式:

mysite/
    formats/
        __init__.py
        en/
            __init__.py
            formats.py
           

其中

formats.py

包含自定義的格式定義。例如:

from __future__ import unicode_literals

THOUSAND_SEPARATOR = '\xa0'
           

使用非間斷空格(Unicode

00A0

)作為千位分隔符,來代替英語中預設的逗号。

提供本地化格式的限制

一些地區對數字使用上下文敏感的格式,Django的本地化系統不能自動處理它。

瑞士(德語)

瑞士的數字格式化取決于被格式化的數字類型。對于貨币值,使用逗号作為千位分隔符,以及使用小數點作為十進制分隔符。對于其它數字,逗号用于十進制分隔符,空格用于千位分隔符。Django提供的本地格式使用通用的分隔符,即逗号用于十進制分隔符,空格用于千位分隔符。

譯者: Django 文檔協作翻譯小組 ,原文: ocalized Web UI formatting and form input 本文以 CC BY-NC-SA 3.0 協定釋出,轉載請保留作者署名和文章出處。 人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。