Регионализация форматов

Предварительный просмотр

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

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

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

Заметка

settings.py Созданный по умолчанию файл для удобства содержит . Обратите внимание, однако, что для включения форматирования чисел с разделителями тысяч, необходимо добавить настройки в файл. Другой способ сделать это - использовать фильтр для форматирования чисел в шаблонах.django-admin startproject USE_L10N = True USE_THOUSAND_SEPARATOR = True intcomma

Заметка

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

Региональные записи в формах

Когда использование формата активно, 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 ©2020 All rights reserved