Spec-Zone.ru › Django 4.1

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

Обзор

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

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

Система форматирования отключена по умолчанию. Для ее включения необходимо установить USE_L10N = True в файле настроек.

Примечание

Для включения форматирования чисел с разделителями тысяч необходимо установить 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)

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

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

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

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

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

localize

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

Этот тег позволяет более тонко управлять локализацией, чем USE_L10N.

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

{% load l10n %}

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

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

Примечание

Значение USE_L10N не учитывается внутри блока {% localize %}.

См. 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/4.1/topics/i18n/formatting/

Spec-Zone.ru

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