Локализация форматов
Обзор
Система форматирования Django может отображать даты, время и числа в шаблонах, используя формат, указанный для текущей локали. Она также обрабатывает локализованный ввод в формах.
Два пользователя, просматривающие одно и то же содержимое, могут видеть даты, время и числа в разных форматах в зависимости от форматов для их текущей локали.
Примечание
Чтобы включить форматирование чисел с разделителями тысяч, необходимо установить USE_THOUSAND_SEPARATOR = True в файле настроек. Также можно использовать intcomma для форматирования чисел в шаблоне.
Локализованный ввод в формах
Если форматирование включено, 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 %}
{{ 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/6.0/topics/i18n/formatting/