Spec-Zone.ru › Django 5.1

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

Обзор

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

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

Примечание

Для включения форматирования чисел с разделителями тысяч необходимо установить 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)

Управление локализацией в шаблонах

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/5.1/topics/i18n/formatting/

Spec-Zone.ru

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