Spec-Zone.ru › Django 2.1

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

Обзор

Система форматирования 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.

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

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/2.1/topics/i18n/formatting/

Spec-Zone.ru

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