2009-11-28 5 views
9

У меня есть проблема i18n в Джанго:Джанго blocktrans и i18n в шаблонах

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

{% 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 %} 

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

ответ

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

? 

EDIT: Вы были правы, док говорит фильтр чтобы быть помещены в blocktrans

+0

кажется, что переменная не переводится {% blocktrans с cat.name как cat_slug%} {{cat_slug}} {% endblocktrans%} это также не переводится ... – Julien

9

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

{% filter slugify %}{% trans cat.name %}{% endfilter %} 
+0

Это тоже помогло мне : Я хотел «linebreaksbr'' переведенный текст. –

16

Я только начинаю с интернационализации 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 %}, но я не могу думать, зачем вам это нужно.

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

3

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

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

P.S. Я знаю, что я отвечаю на вопрос 6yr, но я столкнулся с этой точной ситуацией пару раз и не видел вопроса/ответа SO, который его обрабатывает.

0
{% blocktrans with cat_slug=cat.name|capfirst %}{{ cat_slug }}{% endblocktrans %} 
Смежные вопросы