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

Обзор

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

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

По умолчанию система форматирования отключена. Для его включения необходимо указать в вашем файле настроек.USE_L10N = True

Примечание

settings.pyФайл по умолчанию, созданный для удобства, включает . Обратите внимание, однако, что для включения форматирования чисел с разделителями тысяч необходимо установить его в вашем файле настроек. В качестве альтернативы вы можете использовать для форматирования чисел в вашем шаблоне.django-admin startprojectUSE_L10N = TrueUSE_THOUSAND_SEPARATOR = Trueintcomma

Примечание

Существует также независимый, но связанный 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, использует общие разделители, запятую для десятичной дроби и пробел для разделителей тысяч.

Copyright ©2021 All rights reserved