Spec-Zone.ru › Django 5.0

Локализация форматов

Обзор

Система форматирования Django способна отображать даты, время и числа в шаблонах с использованием формата, указанного для текущего локального языка. Она также обрабатывает локализованный ввод в формах.

Два пользователя, имеющие доступ к одному и тому же контенту, могут увидеть даты, время и числа, отформатированные по-разному, в зависимости от форматов их текущего локального языка.

Примечание

Чтобы включить форматирование чисел с разделителями тысяч, необходимо установить USE_THOUSAND_SEPARATOR = True в файле настроек. В качестве альтернативы, можно использовать intcomma для форматирования чисел в шаблоне.

Примечание

Существует связанная настройка USE_I18N, которая управляет включением перевода в Django. Дополнительные сведения см. в разделе Перевод.

Локализованный ввод в формах

При включенном форматировании 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)

Управление локализацией в шаблонах

Django пытается использовать локальный формат, когда выводит значение в шаблоне.

Однако использование локализованных значений не всегда уместно – например, если вы выводите JavaScript или XML, предназначенные для машинного чтения, вам всегда нужны нелокализованные значения. Возможно, вы также захотите использовать локализацию в выбранных шаблонах, а не везде.

Для тонкого управления использованием локализации Django предоставляет библиотеку шаблонов l10n, которая содержит следующие теги и фильтры.

Теги шаблонов

localize

Включает или отключает локализацию переменных шаблона в содержащемся блоке.

Для активации или деактивации локализации для блока шаблона используйте:

{% load l10n %}

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

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

См. localize и unlocalize для фильтров шаблонов, которые выполняют ту же работу на уровне каждой переменной.

Фильтры шаблонов

localize

Принудительно выполняет локализацию одного значения.

Например:

{% load l10n %}

{{ value|localize }}

Чтобы отключить локализацию для одного значения, используйте unlocalize. Для управления локализацией большой части шаблона используйте тег шаблона localize.

unlocalize

Принудительно выводит одно значение без локализации.

Например:

{% load l10n %}

{{ value|unlocalize }}

Чтобы принудительно выполнить локализацию одного значения, используйте localize. Для управления локализацией большой части шаблона используйте тег шаблона localize.

Возвращает строковое представление нелокализованных чисел (int, float, или Decimal).

Создание пользовательских файлов форматов

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 содержит пользовательские определения форматов. Например:

THOUSAND_SEPARATOR = "\xa0"

чтобы использовать неразрывный пробел (Unicode 00A0) в качестве разделителя тысяч вместо стандартной запятой для английского языка.

Ограничения предоставленных форматов локалей

Некоторые локали используют контекстно-зависимые форматы для чисел, с которыми система локализации Django не может автоматически работать.

Швейцария (немецкий)

Форматирование чисел в Швейцарии (немецкий) зависит от типа числа, которое форматируется. Для денежных значений используется запятая как разделитель тысяч и десятичная точка как разделитель десятичных знаков. Для всех других чисел запятая используется как десятичный разделитель, а пробел – как разделитель тысяч. Предоставленный Django формат локали использует универсальные разделители: запятая для десятичных знаков и пробел для разделителя тысяч.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.0/topics/i18n/formatting/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API