格式化本地化

概述¶ T0>

Django的格式化系统能够使用为当前locale指定的格式在模板中显示日期,时间和数字。 它也处理表单中的本地化输入。

启用后,访问相同内容的两个用户可能会看到不同格式的日期,时间和数字,具体取决于当前语言环境的格式。

格式化系统默认是禁用的。 要启用它,必须在设置文件中设置USE_L10N = True

注意

The default settings.py file created by django-admin startproject includes USE_L10N = True for convenience. 但是请注意,要启用数千格式的分隔符,必须在您的设置中设置USE_THOUSAND_SEPARATOR = True设置文件。 或者,您可以使用intcomma格式化模板中的数字。

注意

There is also an independent but related USE_I18N setting that controls if Django should activate translation. 请参阅Translation了解更多详情。

在表单中的区域感知输入

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

注意

Django使用不同的格式将数据显示给用于解析数据的数据。 Most notably, the formats for parsing dates can’t use the %a (abbreviated weekday name), %A (full weekday name), %b (abbreviated month name), %B (full month name), or %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模板库。

模板标签

localize

启用或禁用所包含块中模板变量的本地化。

这个标签允许比USE_L10N更细粒度的本地化控制。

要激活或停用模板块的本地化,请使用:

{% load l10n %}

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

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

注意

{% 本地化 %} t3中不考虑USE_L10N的值>阻止。

请参阅localizeunlocalize,以获取将在每个变量的基础上执行相同工作的模板过滤器。

模板过滤器

localize

强制单个值的本地化。

例如:

{% load l10n %}

{{ value|localize }}

要禁用单个值的本地化,请使用unlocalize 要控制大部分模板的本地化,请使用localize模板标记。

unlocalize

强制单个值在不本地化的情况下打印。

例如:

{% load l10n %}

{{ value|unlocalize }}

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

创建自定义格式文件

Django提供了许多语言环境的格式定义,但是有时您可能想创建自己的语言环境,因为格式文件不存在于您的语言环境中,或者因为您想要覆盖某些值。

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

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

文件不是直接放在这个目录下,而是放在一个名为locale的目录下,并且必须命名为formats.py 注意不要将敏感信息放在这些文件中,因为如果将字符串传递给django.utils.formats.get_format()(由date使用)模板过滤器)。

要自定义英文格式,需要这样的结构:

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

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

THOUSAND_SEPARATOR = '\xa0'

使用非分隔符(Unicode 00A0)作为千位分隔符,而不是默认的英文逗号。

提供的区域设置格式的限制

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

瑞士(德语)

瑞士数字格式取决于正在格式化的数字的类型。 对于货币值,逗号用作千位分隔符和小数点分隔符的小数点。 对于所有其他数字,逗号用作小数点分隔符和空格作为千​​位分隔符。 Django提供的语言环境格式使用通用分隔符,逗号用于十进制和空格分隔符。