2010-05-28 4 views
10

В соответствии с this section в документах Django я должен использовать {% blocktrans %} для случаев, когда мне нужно перевести плюрализацию. Однако, например, как пример, нет ли чего-то более удобного, что я могу сделать?Django template {% trans%} pluralization

{% blocktrans count video.views.count as views %} 
The video has been viewed <span>{{ views }}</span> time 
{% plural %} 
The video has been viewed <span>{{ views }}</span> times 
{% endblocktrans %} 

Я попытался сделать следующее:

{% blocktrans %}time{% plural %}times{% endblocktrans %} 

Но бросил TemplateSyntaxError: 'blocktrans' doesn't allow other block tags (seen u'plural') inside it

+3

Это делает его очень трудно для переводчиков, как вы вынуждаете упорядочение слов; что, если для перевода требуется иметь множественную форму перед '{{views}}'? Наглядным выражением на самом деле является путь. – bouke

ответ

12

Вы забыли count variable as variable_name в теге blocktrans

Значение этой переменной будет использоваться для обнаружить, если это множественное число или нет.

{% blocktrans count variable as variable_name %} 
    time 
    {% plural %} 
    {{ variable_name }} times 
{% endblocktrans %} 
+0

А теперь я вижу :) Я все еще чувствую, что должен быть более удобный способ, чем это: {% trans "Видео было просмотрено"%} {{video.views.count}} {% blocktrans count video.views.count как views%} time {% plural%} times {% endblocktrans%} – jmagnusson

+1

Ссылка на документы https://docs.djangoproject.com/ru/dev/topics/i18n/translation/#std: templatetag-blocktrans – Gesias

-1

Вы можете использовать:

{% blocktrans with video.views.count|pluralize as foo and video.views.count as views %} 
The video has been viewed <span>{{ views }}</span> time{{ foo }} 
{% endblocktrans %} 
+2

... это побеждает использование blocktrans. Вместо этого он создает больше головоломок. Лучше пойти на '{% plural%}' решение. – vdboor