Spec-Zone.ru › Django 6.0

Локализация форматов

Обзор

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

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

Примечание

Чтобы включить форматирование чисел с разделителями тысяч, необходимо установить USE_THOUSAND_SEPARATOR = True в файле настроек. Также можно использовать intcomma для форматирования чисел в шаблоне.

Примечание

Существует связанная настройка USE_I18N, которая определяет, должна ли Django активировать перевод. Подробнее см. в разделе Перевод.

Локализованный ввод в формах

Если форматирование включено, 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 %}

Если локализация отключена, применяются форматы из настроек локализации.

См. 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/6.0/topics/i18n/formatting/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API