• 3.1
  • 3.2
  • 6.1
  • Версия документации: 5.0

Формат локализации

Обзор

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

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

Примечание

Чтобы включить форматирование чисел с помощью разделителей тысяч, необходимо в файле настроек установить USE_THUSAND_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 %}

Когда локализация отключена, применяются форматы localization settings.

Обратитесь к шаблонным фильтрам localize и unlocalize для реализации аналогичного контроля на уровне одного значения.

Шаблонные фильтры

localize

Включает локализацию для одного значения.

Например:

{% load l10n %}

{{ value|localize }}

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

unlocalize

Обеспечивает вывод одного значения в нелокализированном виде.

Например:

{% load l10n %}

{{ value|unlocalize }}

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

Возвращает строковое представление чисел (int, float или Decimal) с примененными форматами настроек локализации <settings-l10n>.

Создание собственных форматов

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 локализованное форматирование использует вариант для большинства чисел.

Back to Top