# 格式本地化
## 概覽
Django的格式化系統可以在模板中使用當前[_地區_](index.html#term-locale-name)特定的格式,來展示日期、時間和數字。也可以處理表單中輸入的本地化。
當它被開啟時,訪問相同內容的兩個用戶可能會看到以不同方式格式化的日期、時間和數字,這取決于它們的當前地區的格式。
格式化系統默認是禁用的。需要在你的設置文件中設置[`USE_L10N = True`](../../ref/settings.html#std:setting-USE_L10N)來啟用它。
注意
為了方便起見,[`django-admin startproject創建的默認的`settings.py`文件包含了 `](../../ref/django-admin.html#django-admin-startproject)`[`USE_L10N = True`](../../ref/settings.html#std:setting-USE_L10N) 的設置。`但是要注意,要開啟千位分隔符的數字格式化,你需要在你的設置文件中設置[`USE_THOUSAND_SEPARATOR = True`](../../ref/settings.html#std:setting-USE_THOUSAND_SEPARATOR)。或者,你也可以在你的模板中使用[`intcomma`](../../ref/contrib/humanize.html#std:templatefilter-intcomma)來格式化數字。
注意
[`USE_I18N`](../../ref/settings.html#std:setting-USE_I18N) 是另一個獨立的并且相關的設置,它控制著Django是否應該開啟翻譯。詳見[_翻譯_](translation.html)。
## 表單中的本地化識別輸入
格式化開啟之后,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`](../../ref/settings.html#std:setting-USE_L10N)來開啟格式化的時候,Django會嘗試使用地區特定的格式,無論值在模板的什么位置輸出。
然而,這對于本地化的值不可能總是十分合適,如果你在輸出JavaScript或者機器閱讀的XML,你會想要使用去本地化的值。你也可能想只在特定的模板中使用本地化,而不是任何位置都使用。
DJango提供了`l10n`模板庫,包含以下標簽和過濾器,來實現對本地化的精細控制。
### 模板標簽
#### localize
在包含的代碼塊內開啟或關閉模板變量的本地化。
這個標簽可以對本地化進行比[`USE_L10N`](../../ref/settings.html#std:setting-USE_L10N)更加精細的操作。
這樣做來為一個模板激活或禁用本地化:
```
{% load l10n %}
{% localize on %}
{{ value }}
{% endlocalize %}
{% localize off %}
{{ value }}
{% endlocalize %}
```
注意
在 `{% localize %}`代碼塊內并不遵循f [`USE_L10N`](../../ref/settings.html#std:setting-USE_L10N)的值。
對于在每個變量基礎上執行相同工作的模板過濾器,參見[`localize`](#std:templatefilter-localize) 和 [`unlocalize`](#std:templatefilter-unlocalize)。
### 模板過濾器
#### localize
強制單一值的本地化。
例如:
```
{% load l10n %}
{{ value|localize }}
```
使用[`unlocalize`](#std:templatefilter-unlocalize)來在單一值上禁用本地化。使用[`localize`](#std:templatetag-localize) 模板標簽來在大塊的模板區域內控制本地化。
#### unlocalize
強制單一值不帶本地化輸出。
例如:
```
{% load l10n %}
{{ value|unlocalize }}
```
使用[`localize`](#std:templatefilter-localize)來強制單一值的本地化。使用[`localize`](#std:templatetag-localize)模板標簽來在大塊的模板區域內控制本地化。
## 創建自定義的格式文件
Django為許多地區提供了格式定義,但是有時你可能想要創建你自己的格式,因為你的的確并沒有現成的格式文件,或者你想要覆寫其中的一些值。
Changed in Django 1.8:
添加了指定[`FORMAT_MODULE_PATH`](../../ref/settings.html#std:setting-FORMAT_MODULE_PATH)為列表的功能。之前只支持單一的字符串值。
指定你首先放置格式文件的位置來使用自定義格式。把你的[`FORMAT_MODULE_PATH`](../../ref/settings.html#std:setting-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 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html),原文:[ocalized Web UI formatting and form input](https://docs.djangoproject.com/en/1.8/topics/i18n/formatting/)。
>
> 本文以 [CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 協議發布,轉載請保留作者署名和文章出處。
>
> [Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html)人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。
- 新手入門
- 從零開始
- 概覽
- 安裝
- 教程
- 第1部分:模型
- 第2部分:管理站點
- 第3部分:視圖和模板
- 第4部分:表單和通用視圖
- 第5部分:測試
- 第6部分:靜態文件
- 高級教程
- 如何編寫可重用的應用
- 為Django編寫首個補丁
- 模型層
- 模型
- 模型語法
- 元選項
- 模型類
- 查詢集
- 執行查詢
- 查找表達式
- 模型的實例
- 實例方法
- 訪問關聯對象
- 遷移
- 模式編輯器
- 編寫遷移
- 高級
- 管理器
- 原始的SQL查詢
- 聚合
- 多數據庫
- 自定義查找
- 條件表達式
- 數據庫函數
- 其它
- 遺留的數據庫
- 提供初始數據
- 優化數據庫訪問
- 視圖層
- 基礎
- URL配置
- 視圖函數
- 快捷函數
- 裝飾器
- 參考
- 內建的視圖
- TemplateResponse 對象
- 文件上傳
- 概覽
- File 對象
- 儲存API
- 管理文件
- 自定義存儲
- 基于類的視圖
- 概覽
- 內建顯示視圖
- 內建編輯視圖
- API參考
- 分類索引
- 高級
- 生成 CSV
- 生成 PDF
- 中間件
- 概覽
- 內建的中間件類
- 模板層
- 基礎
- 面向設計師
- 語言概覽
- 人性化
- 面向程序員
- 表單
- 基礎
- 概覽
- 表單API
- 內建的Widget
- 高級
- 整合媒體
- 開發過程
- 設置
- 概覽
- 應用程序
- 異常
- 概覽
- django-admin 和 manage.py
- 添加自定義的命令
- 測試
- 介紹
- 部署
- 概述
- WSGI服務器
- 部署靜態文件
- 通過email追蹤代碼錯誤
- Admin
- 管理操作
- 管理文檔生成器
- 安全
- 安全概述
- 說明Django中的安全問題
- 點擊劫持保護
- 加密簽名
- 國際化和本地化
- 概述
- 本地化WEB UI格式化輸入
- “本地特色”
- 常見的網站應用工具
- 認證
- 概覽
- 使用認證系統
- 密碼管理
- 日志
- 分頁
- 會話
- 數據驗證
- 其它核心功能
- 按需內容處理
- 重定向
- 信號
- 系統檢查框架