2009-11-28 13 views
9

Ich habe ein Problem i18n in django:django blocktrans und i18n in Vorlagen

Dies funktioniert:

{% trans cat.name %} 

cat.name wird

übersetzt werden, aber das funktioniert nicht:

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

cat.name ist nicht übersetzt

Wenn ich die Filter zu ändern:

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

kann ich sehen, dass die Filter funktionieren, aber es gibt keine Übersetzung ...

Antwort

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

? 

EDIT: Sie haben Recht die Doc sagt der Filter wie in den blocktrans platziert werden

+0

es scheint, dass der var nicht {% blocktrans mit cat.name als cat_slug%} übersetzt {{cat_slug}} {% endblocktrans%} dies auch nicht übersetzt ... – Julien

9

Dies funktioniert:

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

Das half mir auch : Ich wollte "linebreaksbr" etwas übersetzten Text haben. –

16

Ich stehe gerade erst mit der Internationalisierung von Django an, aber ich glaube, Sie verstehen nicht, wie das {% blocktrans %}-Tag Platzhalter behandelt.

Der Punkt blocktrans ist es, den Text um die Platzhalter zu übersetzen. Es wird nichts innerhalb {{...}} übersetzen.

Wenn man sich die erzeugte .po Datei anschauen, werden Sie, dass die folgende Vorlage Code sehen:

msgid:"This is my variable: %s" 

ich nicht:

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

in etwa wie folgt erhalten umgewandelt wird Ich denke, Sie können eine Variable innerhalb eines blocktrans-Tags übersetzen. Sie können wahrscheinlich konstante Strings mit {% blocktrans with _("string") as x %}{{x}}{% endblocktrans %} tun, aber ich kann nicht denken, warum Sie wollen.

Sie müssen tun, was Sie in Ihrer Sicht oder Modell-Code denke ich.

3

Wie Tom darauf hingewiesen hat, behält blocktrans das, was Sie in die with-Anweisung geschrieben haben, statt es zu übersetzen. Was Sie tun müssen, ist die Verwendung vor der Übersetzung. In Ihrem Beispiel würde es so aussehen:

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

P.S. Ich weiß, dass ich eine 6-jährige Frage beantworte, aber ich habe diese genaue Situation schon ein paar Mal gesehen und habe keine SO-Frage/Antwort gesehen, die damit klarkommt.

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