Spec-Zone.ru › Django 1.8

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

Обзор

Система форматирования 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.8/topics/i18n/formatting/

Spec-Zone.ru

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