jinja und Internationalisierung / gettext

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 20. Oktober 2006, 08:59

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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten