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