Для использования переводов в шаблонах Django применяются два шаблонных и немного отличный от Python синтаксис. Чтобы получить доступ к этим тегам, поместите {% load i18n %} в начале вашего шаблона.
Тег {% trans %} помечает строку для перевода:
<title>{% trans "This is the title." %}</title>
Если вы желаете только пометить значение для перевода, но перевести его позже, используйте опцию noop:
<title>{% trans "value" noop %}</title>
Нельзя использовать шаблонные переменные в теге {% trans %} — разрешены только строковые константы, в одиночных или двойных кавычках. Если ваш перевод требует использования переменных (символов подстановки), используйте {% blocktrans %}, например:
{% blocktrans %}This will have {{ value }} inside.{% endblocktrans %}
Для перевода шаблонного выражения — скажем, использование шаблонного фильтра — следует связать выражение с локальной переменной для использования внутри блока перевода:
{% blocktrans with value|filter as myvar %}
This will have {{ myvar }} inside.
{% endblocktrans %}
Если вам необходимо связать более одного выражения внутри тега {% blocktrans %}, объедините выражения с помощью and:
{% blocktrans with book|title as book_t and author|title as author_t %}
This is {{ book_t }} by {{ author_t }}
{% endblocktrans %}
Для множественного числа, укажите обе, единственную и множественную, формы с помощью тега {% plural %}, который используется внутри {% blocktrans %} и {% endblocktrans %}, например:
{% blocktrans count list|length as counter %}
There is only one {{ name }} object.
{% plural %}
There are {{ counter }} {{ name }} objects.
{% endblocktrans %}
С технической точки зрения все блоки и встроенные переводы
используют соответствующие функции
gettext() и
ngettext().
Когда вы используете RequestContext (см. главу «Расширения для шаблонной системы»), ваш шаблон получает доступ к 3 переменным режима перевода:
{{ LANGUAGES }} — это список кортежей, в котором первый элемент является идентификатором языка, а второй — названием этого языка (родное название).
{{ LANGUAGE_CODE }} — это текущий, предпочитаемый пользователем, язык (т.е., en-us). Подробности далее в разделе «How Django Discovers Language Preference».
{{ LANGUAGE_BIDI }} — это текущей метод записи языка. Если True, значит пишут справа налево (иврит, арабский язык). Если False, значит слева направо (английский, французский, русский).
Вы также можете подгрузить эти значения с помощью шаблонных тегов:
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
Обработчики механизма переводов также доступны внутри любого
блочного шаблонного тега, который работает с неизменными
строками. В таких случаях используйте синтаксис
_(), чтобы пометить строку для перевода,
например:
{% some_special_tag _("Page not found") value|yesno:_("yes,no") %}
В этом примере, тег и фильтр увидят уже переведённую строку (т.е., строка будет переведена до передачи шаблонной функции), поэтому им не надо знать о переводе.
| Пред. | Уровень выше | След. |
| Глава 18. Интернационализация | Начало | Создание файлов с переводами |
0 комментариев | Оставьте комментарий