格式本地化¶
概述¶
Django的格式化系统能够使用为当前 语言环境 指定的格式在模板中显示日期,时间和数字。它还处理表单中的本地化输入。
启用后,访问相同内容的两个用户可能会根据当前语言环境的格式,以不同的方式查看日期,时间和数字的格式。
默认情况下禁用格式化系统。要启用它,需要在设置文件中设置 USE_L10N = True
。
注解
为方便起见,django-admin startproject
创建的默认 settings.py
文件包括 USE_L10N = True
。但请注意,要启用具有千位分隔符的数字格式,必须在设置文件中设置 USE_THOUSAND_SEPARATOR = True
。或者,您可以使用 intcomma
格式化模板中的数字。
表单中的区域意识输入¶
启用格式化后,Django可以在解析表单中的日期,时间和数字时使用本地化格式。这意味着当在表单上输入数据时猜测用户使用的格式时,它会为不同的区域设置尝试不同的格式。
注解
Django使用不同的格式来显示数据,用于解析数据。最值得注意的是,解析日期的格式不能使用 %a
(缩写工作日名称),%A
(完整工作日名称),%b
(缩写月份名称),%B
(完整月份名称)或 %p
(AM/PM)。
要启用表单字段来本地化输入和输出数据,只需使用其 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
模板库。
创建自定义格式文件¶
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
包含自定义格式定义。例如:
from __future__ import unicode_literals
THOUSAND_SEPARATOR = '\xa0'
使用不间断空格(Unicode 00A0
)作为千分隔符,而不是英语的默认值,一个逗号。