Spec-Zone.ru › Django 1.11

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

Обзор

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

Spec-Zone.ru

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