django blocktrans и i18n в шаблонах - PullRequest
10 голосов
/ 28 ноября 2009

У меня проблема с i18n в django:

Это прекрасно работает:

{% trans cat.name %}  

cat.name будет переведено

Но это не работает:

{% blocktrans with cat.name|slugify as cat_slug %}{{ cat_slug }}{% endblocktrans %}  

cat.name не переведено

Если я поменяю фильтр:

{% blocktrans with cat.name|capfirst as cat_slug %}{{ cat_slug }}{% endblocktrans %}  

Я вижу, что фильтр работает, но перевода нет ...

Ответы [ 5 ]

18 голосов
/ 21 декабря 2009

Я только начинаю с интернационализации Django, но я думаю, что вы не понимаете, как тег {% blocktrans %} обрабатывает заполнители.

Смысл blocktrans - разрешить перевод текста вокруг . Внутри {{...}}.

ничего не переведется

Если вы посмотрите на сгенерированный файл .po, вы увидите, что следующий код шаблона:

{% blocktrans %}This is my variable: {{variable}}{% endblocktrans %}

Будет преобразован во что-то вроде следующего:

msgid:"This is my variable: %s"

Я не думаю, что вы можете перевести переменную в теге blocktrans. Вы, вероятно, можете делать постоянные строки с {% blocktrans with _("string") as x %}{{x}}{% endblocktrans %}, но я не могу понять, почему вы хотите.

Я думаю, вам придется делать то, что вы хотите в своем представлении или коде модели.

9 голосов
/ 29 ноября 2009

Это работает:

{% filter slugify %}{% trans cat.name %}{% endfilter %}
3 голосов
/ 08 июля 2015

Как отметил Том, blocktrans сохранит то, что вы поместите в оператор with, вместо того, чтобы переводить его. Что вам нужно сделать, это использовать с перед переводом. В вашем примере это будет выглядеть так:

{% with cat_slug=cat.name|slugify %}
    {% trans cat_slug %}
{% endwith %}

P.S. Я знаю, что отвечаю на 6-летний вопрос, но я уже несколько раз сталкивался с этой ситуацией и не видел ТАКОГО вопроса / ответа, который бы справился с этим.

1 голос
/ 29 ноября 2009
{% blocktrans with cat.name as cat_slug %}{{ cat_slug|capfirst }}{% endblocktrans %}

?

РЕДАКТИРОВАТЬ: вы были правы, документ говорит, что фильтр должен быть помещен в blocktrans

0 голосов
/ 12 августа 2016
{% blocktrans with cat_slug=cat.name|capfirst %}{{ cat_slug }}{% endblocktrans %}  
...