鍍金池/ 教程/ Python/ 格式本地化
點(diǎn)擊劫持保護(hù)
安全問題歸檔
Model 類參考
將遺留數(shù)據(jù)庫(kù)整合到Django
關(guān)聯(lián)對(duì)象參考
內(nèi)建基于類的視圖的API
聚合
Django 中的用戶認(rèn)證
django.contrib.humanize
Django管理文檔生成器
分頁
使用Django輸出CSV
加密簽名
文件儲(chǔ)存API
安全
Django中的測(cè)試
國(guó)際化和本地化
為Django編寫首個(gè)補(bǔ)丁
條件表達(dá)式
日志
模型元選項(xiàng)
部署靜態(tài)文件
執(zhí)行查詢
使用Django認(rèn)證系統(tǒng)
基于類的視圖
中間件
編寫自定義的django-admin命令
Django 的設(shè)置
格式本地化
數(shù)據(jù)庫(kù)訪問優(yōu)化
錯(cuò)誤報(bào)告
基于類的內(nèi)建通用視圖
編寫自定義存儲(chǔ)系統(tǒng)
編寫你的第一個(gè) Django 程序 第3部分
編寫數(shù)據(jù)庫(kù)遷移
使用表單
編寫你的第一個(gè) Django 程序 第2部分
編寫你的第一個(gè) Django 程序 第1部分
如何使用會(huì)話
系統(tǒng)檢查框架
新手入門
信號(hào)
編寫視圖
如何使用WSGI 部署
編寫你的第一個(gè)Django應(yīng)用,第6部分
常見的網(wǎng)站應(yīng)用工具
Widgets
內(nèi)建的視圖
模型實(shí)例參考
視圖層
Django中的密碼管理
高級(jí)教程:如何編寫可重用的應(yīng)用
國(guó)際化和本地化
"本地特色"附加功能
TemplateResponse 和 SimpleTemplateResponse
模式編輯器
文件上傳
快速安裝指南
部署 Django
表單 API
表單素材 ( <code>Media</code> 類)
管理文件
其它核心功能
查找 API 參考
表單
Admin
數(shù)據(jù)庫(kù)函數(shù)
自定義查找
使用基于類的視圖處理表單
管理操作
開發(fā)過程
編寫你的第一個(gè)Django應(yīng)用,第5部分
進(jìn)行原始的sql查詢
模型層
多數(shù)據(jù)庫(kù)
編寫你的第一個(gè) Django 程序 第4部分
Django安全
Django 初探
Django異常
重定向應(yīng)用
按需內(nèi)容處理
管理器
視圖裝飾器
驗(yàn)證器
使用Django輸出PDF
File對(duì)象
Django 的快捷函數(shù)
基于類的通用視圖 —— 索引
為模型提供初始數(shù)據(jù)
模板層
URL調(diào)度器
中間件
模型

格式本地化

概覽

Django的格式化系統(tǒng)可以在模板中使用當(dāng)前地區(qū)特定的格式,來展示日期、時(shí)間和數(shù)字。也可以處理表單中輸入的本地化。

當(dāng)它被開啟時(shí),訪問相同內(nèi)容的兩個(gè)用戶可能會(huì)看到以不同方式格式化的日期、時(shí)間和數(shù)字,這取決于它們的當(dāng)前地區(qū)的格式。

格式化系統(tǒng)默認(rèn)是禁用的。需要在你的設(shè)置文件中設(shè)置USE_L10N = True來啟用它。

注意

為了方便起見,django-admin startproject創(chuàng)建的默認(rèn)的settings.py文件包含了&nbsp;[USE_L10N = True](../../ref/settings.html#std:setting-USE_L10N) 的設(shè)置。但是要注意,要開啟千位分隔符的數(shù)字格式化,你需要在你的設(shè)置文件中設(shè)置USE_THOUSAND_SEPARATOR = True?;蛘?,你也可以在你的模板中使用intcomma來格式化數(shù)字。

注意

USE_I18N 是另一個(gè)獨(dú)立的并且相關(guān)的設(shè)置,它控制著Django是否應(yīng)該開啟翻譯。詳見翻譯。

表單中的本地化識(shí)別輸入

格式化開啟之后,Django可以在表單中使用本地化格式來解析日期、時(shí)間和數(shù)字。也就是說,在表單上輸入時(shí),它會(huì)嘗試不同的格式和地區(qū)來猜測(cè)用戶使用的格式。

注意

Django對(duì)于展示數(shù)據(jù),使用和解析數(shù)據(jù)不同的格式。尤其是,解析日期的格式不能使用%a(星期名稱的縮寫),%A (星期名稱的全稱),%b (月份名稱的縮寫), %B(月份名稱的全稱),或者%p(上午/下午)。

只是使用localize參數(shù),就能開啟表單字段的本地化輸入和輸出:

class CashRegisterForm(forms.Form):
   product = forms.CharField()
   revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)

在模板中控制本地化

當(dāng)你使用USE_L10N來開啟格式化的時(shí)候,Django會(huì)嘗試使用地區(qū)特定的格式,無論值在模板的什么位置輸出。

然而,這對(duì)于本地化的值不可能總是十分合適,如果你在輸出JavaScript或者機(jī)器閱讀的XML,你會(huì)想要使用去本地化的值。你也可能想只在特定的模板中使用本地化,而不是任何位置都使用。

DJango提供了l10n模板庫(kù),包含以下標(biāo)簽和過濾器,來實(shí)現(xiàn)對(duì)本地化的精細(xì)控制。

模板標(biāo)簽

localize

在包含的代碼塊內(nèi)開啟或關(guān)閉模板變量的本地化。

這個(gè)標(biāo)簽可以對(duì)本地化進(jìn)行比USE_L10N更加精細(xì)的操作。

這樣做來為一個(gè)模板激活或禁用本地化:

{% load l10n %}

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

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

注意

在 {% localize %}代碼塊內(nèi)并不遵循f USE_L10N的值。

對(duì)于在每個(gè)變量基礎(chǔ)上執(zhí)行相同工作的模板過濾器,參見localizeunlocalize

模板過濾器

localize

強(qiáng)制單一值的本地化。

例如:

{% load l10n %}

{{ value|localize }}

使用unlocalize來在單一值上禁用本地化。使用localize 模板標(biāo)簽來在大塊的模板區(qū)域內(nèi)控制本地化。

unlocalize

強(qiáng)制單一值不帶本地化輸出。

例如:

{% load l10n %}

{{ value|unlocalize }}

使用localize來強(qiáng)制單一值的本地化。使用localize模板標(biāo)簽來在大塊的模板區(qū)域內(nèi)控制本地化。

創(chuàng)建自定義的格式文件

Django為許多地區(qū)提供了格式定義,但是有時(shí)你可能想要?jiǎng)?chuàng)建你自己的格式,因?yàn)槟愕牡拇_并沒有現(xiàn)成的格式文件,或者你想要覆寫其中的一些值。

Changed in Django 1.8:

添加了指定FORMAT_MODULE_PATH為列表的功能。之前只支持單一的字符串值。

指定你首先放置格式文件的位置來使用自定義格式。把你的FORMAT_MODULE_PATH設(shè)置設(shè)置為格式文件存在的包名來使用它,例如:

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

文件并不直接放在這個(gè)目錄中,而是放在和地區(qū)名稱相同的目錄中,文件也必須名為formats.py。

需要這樣一個(gè)結(jié)構(gòu)來自定義英文格式:

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

其中formats.py包含自定義的格式定義。例如:

from __future__ import unicode_literals

THOUSAND_SEPARATOR = '\xa0'

使用非間斷空格(Unicode 00A0)作為千位分隔符,來代替英語中默認(rèn)的逗號(hào)。

提供本地化格式的限制

一些地區(qū)對(duì)數(shù)字使用上下文敏感的格式,Django的本地化系統(tǒng)不能自動(dòng)處理它。

瑞士(德語)

瑞士的數(shù)字格式化取決于被格式化的數(shù)字類型。對(duì)于貨幣值,使用逗號(hào)作為千位分隔符,以及使用小數(shù)點(diǎn)作為十進(jìn)制分隔符。對(duì)于其它數(shù)字,逗號(hào)用于十進(jìn)制分隔符,空格用于千位分隔符。Django提供的本地格式使用通用的分隔符,即逗號(hào)用于十進(jìn)制分隔符,空格用于千位分隔符。

譯者:Django 文檔協(xié)作翻譯小組,原文:ocalized Web UI formatting and form input。

本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉(zhuǎn)載請(qǐng)保留作者署名和文章出處。

Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質(zhì)。交流群:467338606。

上一篇:Django 的設(shè)置下一篇:信號(hào)