Spec-Zone.ru › Django 3.2

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

Обзор

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

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

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

Примечание

Файл по умолчанию settings.py , созданный django-admin startproject, включает 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/3.1/topics/i18n/formatting/

Spec-Zone.ru

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