Automatisch lokalisierte Zeitformatierungen

Ein nur knapp dokumentiertes Feature ist die Lokalisierung von String innerhalb von Templatetags und Filtern. Dort reicht es, den betreffenden String in einen gettext-Shortcut zu setzen:

{{ _("hello world")|upper }}

Dieser Token würde als HELLO WORLD ausgegeben und natürlich auch mit den betreffenden .po Dateien lokalisierbar sein. Richtig sinnvoll wird es beim date Filter. Bisher hast du vielleicht das Datum fest vorgegeben:

{{ entry.published|date:"d.m.Y H:M:S" }}

Funktioniert im Deutschen ganz gut, aber da ja bekannterweise jede Sprache das Datum und die Zeit irgendwie anders formatiert, ist es eine gute Idee, die Formatierung auch lokalisierbar anzubieten:

{{ entry.published|date:_("DATETIME_FORMAT") }}

Schaut ein wenig komisch aus, funktioniert aber. :-) Clevererweise kennt Django bereits den i18n-String DATETIME_FORMAT und liefert für jede mitgelieferte Sprache die entsprechende Formatierung in den gettext-Katalogen mit. Je nach Locale-Einstellung ist die Ausgabe landestypisch:

de-de: 21. März 2009, 20:24
en-us: March 21, 2009, 8:24 p.m.
pt-br: 21 de Março de 2009 às 20:24

Neben DATETIME_FORMAT werden auch gleich DATE_FORMAT, TIME_FORMAT, YEAR_MONTH_FORMAT und MONTH_DAY_FORMAT mitgeliefert. :-)


  • Stefan March 23, 2009

    Sehr praktisch, vielen Dank für den Tipp. Ich habe neulich erst das ganze mit (msgid "g:i a", msgstr "H:i") lokalisiert. Funktioniert auch, aber so ist es natürlich schicker.

  • Delle March 27, 2009

    finzt nicht !

    In template /home/detlef/0-webapp/csm_todo_my/templates/gates/detail_gate.html, error at line 127 Caught an exception while rendering: 'BoundField' object has no attribute 'day'

    {{ form.abgabe|date:_("DATETIME_FORMAT") }}
    
  • Martin Mahner March 27, 2009

    @Delle: Ich habe deine Fehlermeldung gekürzt. Für lange Fehlermeldungen nutze bitte www.dpaste.de.

    Das was du willst funktioniert nicht bei Formularfeldern, es ist für DateTime-Objekte aus Model-Instanzen gedacht.

    Bei Formfeldern musst du das format-Argument des entsprechenden [Widgets][1] anpassen.

    [1]: http://docs.djangoproject.com/en/dev/ref/forms/widgets/#d...

  • Oliver May 16, 2009

    Sehr guter Tipp. Danke dafür.


Comments closed

Sorry, new comments are no longer allowed for this entry.

Write me an email if you have feedback or any questions regarding this post. If you found this post useful and just want to say thank you then don't forget that I have an Amazon Wishlist. :-)


↑ to the elevators

© 2001—2010 Martin Mahner. This is an I ♥ Django Project.

Admin | Generated: Sat, 24 Jul 2010 19:45:20 +0200