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