Хостинг Django от «Джино»
Table of contents

Определение переводимых строк в шаблоне

Для использования переводов в шаблонах 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") %}

В этом примере, тег и фильтр увидят уже переведённую строку (т.е., строка будет переведена до передачи шаблонной функции), поэтому им не надо знать о переводе.


Ищем Python программистов

Found misprint?
Select it with the mouse and hit Enter
Ctrl-Enter
Processed:
33 1 199 25


The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!

We are glad to hear your questions, comments or suggestions!
(Open in new tab)

Users number: 601

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
ЯМ:41001223475816


© 2008-2012 Ruslan Popov @ gmail.com Powered by Django 1.2.5