Локализация форматов
Обзор
Система форматирования 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/3.0/topics/i18n/formatting/