Spec-Zone.ru › Django 1.9

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

Обзор

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

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

Система форматирования по умолчанию отключена. Для её включения необходимо установить USE_L10N = True в файле настроек.

Примечание

Файл по умолчанию settings.py , созданный django-admin startproject, включает USE_L10N = True для удобства. Однако, чтобы включить форматирование чисел с разделителями тысяч, необходимо установить 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.

Создание пользовательских файлов форматов

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

Добавлена возможность указать FORMAT_MODULE_PATH в виде списка. Ранее поддерживалось только одно строковое значение.

Чтобы использовать пользовательские форматы, сначала укажите путь, где будут размещаться файлы форматов. Для этого просто установите настройку 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 содержат пользовательские определения форматов. Например:

from __future__ import unicode_literals

THOUSAND_SEPARATOR = '\xa0'

чтобы использовать неразрывный пробел (Unicode 00A0) в качестве разделителя тысяч вместо стандартной запятой для английского языка.

Ограничения предоставленных форматов локалей

Некоторые локали используют контекстно-зависимые форматы для чисел, которые система локализации Django не может автоматически обработать.

Швейцария (немецкий)

Форматирование чисел в Швейцарии зависит от типа числа, которое форматируется. Для денежных значений используется запятая как разделитель тысяч и точка как разделитель десятичных знаков. Для всех других чисел используется запятая как разделитель десятичных знаков и пробел как разделитель тысяч. Предоставленный Django формат локали использует общие разделители: запятая для разделителя десятичных знаков и пробел для разделителя тысяч.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.9/topics/i18n/formatting/

Spec-Zone.ru

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