Seite 1 von 1

jinja und Internationalisierung / gettext

Verfasst: Freitag 20. Oktober 2006, 08:59
von jens
Unter http://trac.pocoo.org/wiki/HowtoInternationalize kann man nachsehen, wie pocoo mit jinja Templates und darin erhaltenen Text umgeht. Beispiel:

Code: Alles auswählen

{% for user in users %}
    {% trans %}
        {{ user.name }} is {{ user.age }} years old.
    {% endtrans %}
{% endfor %}

{% trans "A small string with %d chars.", myvar %}
Ohne Internationalisierung würde es eigentlich so aussehen:

Code: Alles auswählen

{% for user in users %}
        {{ user.name }} is {{ user.age }} years old.
{% endfor %}

A small string with {{ myvar }} chars."
Also wesentlich aufgeräumter, oder anders herum, durch gettext muß man das Template verkomplizieren...

Warum ist das so?
Man möchte den Textanteil im Template in möglichst logischen Blöcken "extrahieren" um diesen in die .po Datei zu packen...

Ich frage mich allerdings, ob es nicht evtl. auch ohne die zusätzlichen {% trans %} Markierungen gehen kann ;)

Meine Idee...
Man müsste sich also Überlegen, wie man auch ohne Markierung die Texte in möglichst logischen Zusammenhang heraus lösen kann... Am einfachsten würde das wohl bei HTML Templates funktionieren. Dort kann man sich zum einen an den Block-Elementen orientieren. Außerdem könnte man alle Schleifen-Abschnitte zur Unterteilung benutzten...

Bei Text-Templates, wie das obrige müßte man das Template einfach in Abschnitte einteilen. Quasi als eine Art Markup verarbeiten. Demnach würde man den Text innerhalb der for-Schleife ausscheiden und danach ist nur ein Absatz, der zusammen behandelt wird.

Zu welchen Problemen es bei komplizierten Templates kommen wird, weiß ich nicht... Probleme wird es natürlich bei plural geben. z.B.:

Code: Alles auswählen

{% for user in users %}
    {% trans pluralizing user.mails %}
        The user {{ user.name }} has only one mail address: {{ user.mail }}
    {% plural %}
        The user {{ user.name }} has {{ user.mails|count }} mail addresses.
    {% endtrans %}
{% endfor %}
Da wird man wohl einfach nicht um eine zusätzliche Markierung auskommen. Ich wüsste spontan zumindest keine Lösung dafür...

Hatte ich mir gestern vor dem einschlafen überlegt... Was haltet ihr davon?