本地格式化Link to this heading

概况Link to this heading

Django 的格式化系统可以在模板中使用指定的格式化工具为当前的 locale 来显示日期、时间和数字。

两个用户访问相同的内容可能会根据其当前区域设置的格式,以不同的方式看到日期、时间和数字的格式化方式。

表单中感知本地语言环境输入Link to this heading

格式化开启后,当在表单里解析日期、时间和数字时,Django 可以使用本地化格式。这意味着猜测用户在表单上的输入时所使用的格式化时,会对不同语言环境尝试不同的格式化。

使用 localize 参数来使表单字段能本地化输入和输出数据:

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

在模板中控制本地化Link to this heading

Django 在模板中输出值时会尽量使用与区域设置相关的格式。

然而,使用本地化值可能并不总是合适的——比如,如果你正在输出机器可读的 JavaScript 或 XML ,则始终需要非本地化的值。你也可以在已选的模板里使用本地化,而不是在所有地方使用。

为了更好的控制本地化的使用,Django 提供 l10n 模板库,它包含以下的 tags 和 filters。

模板标签Link to this heading

localizeLink to this heading

在模板里启用和禁用模板变量本地化。

要在模板块中启用或禁用本地化,请使用:

Django template
{% load l10n %}

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

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

当本地化被禁用时,将应用 本地化设置 的格式。

查看 localizeunlocalize 来获取在每个变量基础上执行相同任务的模板过滤器。

模板过滤器Link to this heading

localizeLink to this heading

对单一值的强制本地化

例如:

Django template
{% load l10n %}

{{ value|localize }}

对单一值取消本地化,使用 unlocalize 。要控制大部分模板的本地化,请使用 localize 模板标签。

unlocalizeLink to this heading

强制地让单一值不被本地化。

例如:

Django template
{% load l10n %}

{{ value|unlocalize }}

对单一值强制本地化,使用 localize 。要控制大部分模板的本地化,请使用 localize 模板标签。

返回应用了 本地化设置 格式的数字(intfloatDecimal)的字符串表示。

创建自定义的格式化文件Link to this heading

Django 为许多地区提供了格式定义,但有时你可能想创建自己的格式,因为你的地区不存在一个格式文件,或者你想覆盖一些值。

要使用自定义格式化,你首先要指定格式化文件的路径,需要将 FORMAT_MODULE_PATH 设置为格式化文件所在的包路径,例如:

Code
FORMAT_MODULE_PATH = [
    "mysite.formats",
    "some_app.formats",
]

文件不能直接放置在这个目录里,而是要放在本地语言环境的目录中,而且必须命名为 formats.py 。要注意不要在这些文件里放置敏感信息,因为如果你把字符串传递给 django.utils.formats.get_format() (使用 date 模板过滤器),那么内部值会被暴露。

要自定义英文格式,需要类似以下结构:

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

formats.py 包含自定义格式化定义。例如:

Code
THOUSAND_SEPARATOR = "\xa0"

使用不换行空格(硬空格 Unicode 00A0 )作为千位分隔符,而不是英语的默认逗号。

提供本地语言环境格式化的局限性Link to this heading

一些本地语言环境为数字使用上下文相关的格式化,而 Django 本地化系统不能自动处理。

Switzerland (German)Link to this heading

瑞士数字格式化取决于要格式化的数字类型。对于货币值,用逗号作为千位分隔符,小数点作为小数点分隔符。对于其他数字,逗号用作小数点分隔符,空格用作千分位分隔符。Django 提供的本地语言环境格式化使用通用分隔符,小数点用逗号,千分位分隔符用空格。