Datumsformatierung mit qTranslate


Vor fast einem Jahr beschrieb ich hier, wie ich es geschafft hatte, in meinem WordPress-Theme zwei unterschiedliche Datumsformate für deutsch und englisch einzurichten. Vor allem Benutzer des Plugins „qTranslate“ verschlug es deshalb des öfteren hierher, denn ich hatte eine – zwar eher verworrene, aber eben funktionierende – Lösung gefunden, das Datum für jede Sprache in einem eigenen Format anzuzeigen, da die vom Autor empfohlene Methode damals bei mir nicht funktioniert hatte. Elf Monate später aber hat sich das Plugin natürlich ganz schön weiterentwickelt und bietet gleich vier Varianten für die Formatierung des Datums an.

Ich will mal zeigen, wie ich für diese Seite hier vorgegangen bin. Zuerst habe ich in den erweiterten qTranslate-Optionen den Haken bei „Benutze emulierte date Funktion“ gesetzt. Das bedeutet, daß man in seinem Template nun wie gewohnt the_date() benutzen kann, qTranslate aber automatisch so Dinge wie Wochentage oder Monatsnamen auf die jeweilige Sprache umstellt. Man braucht also nicht wie früher die qTranslate-Funktion qtrans_formatPostDateTime() zu benutzen! Diese Einstellung empfinde ich von allen als die komfortabelste.

Eine ganz einfache Datumsanzeige ohne Zusatztext (etwa „Sonntag, 19. April 2009“) könnte dann z. B. so aussehen:

the_date('l, j. F Y');

Für diese Seite wollte ich gerne eine Anzeige haben wie „19. Apr 2009“. Das geht wie folgt:

the_date('j. M Y');

Dazwischen habe ich anschließend noch jeweils einen Zeilenumbruch eingefügt:

the_date('j.MY');

Das „r“ muß man in diesem Fall mit einem Backslash schützen, da es von der date()-Funktion bereits belegt ist. Überhaupt muß man bei allem zusätzlichen Text, den man in sein Datum einbauen möchte, aufpassen, ob er Buchstaben enthält, die von der Funktion als Formatparameter erkannt werden. Diese muß man dann alle escapen. Beispiel:

the_date('l, j. F Y \u\m G:i \U\h\r');

In einem solchen Fall muß man sämtliche Buchstaben der Wörter „um“ und „Uhr“ escapen, weil sie sonst alle von der date()-Funktion interpretiert werden und irgendein Murks herauskommt:

Sonntag, 2. November 2008 00000011 7:04 122560586907Sun, 02 Nov 2008 07:04:29 +0100

Wenn man nun gerne auf deutsch die Worte „um“ und „Uhr“ in seinem Datum haben möchte, auf englisch jedoch „at“ und „am“/„pm“, dann kann man dank der (relativ) neuen qTranslate-Quicktags jetzt einfach zwei verschiedene Formate angeben:

the_date('[:de]l, j. F Y \u\m G:i \U\h\r[:en]l, jS F Y \a\t g:i a');

Dieses Beispiel würde auf deutsch so etwas ausgeben wie „Sonntag, 19. April 2009 um 4:18 Uhr“ und auf englisch entsprechend „Sunday, 19th April 2009 at 4:18 am“.

Eine Auflistung aller Parameter für die date()-Funktion findet man auf php.net.

P.S.: Die alte qTranslate-Funktion qtrans_formatCommentDateTime() benötigt man dementsprechend jetzt auch nicht mehr. Stattdessen nimmt man die normale WordPress-Funktion comment_date(), z. B. so:

comment_date('[:de]j. F Y[:en]jS F, Y');

40 Antworten zu “Datumsformatierung mit qTranslate”

  1. Prima, eine Seite mit Tipps für qTranslate. Gerade hab ich das richtige Datum selbst mit Trial&Error im Template und qTranslate für die neue Website hingebügelt. Mir kommen die Parameter schon zu den Ohren heraus….!

  2. I don’t see any problem? I click on English, the page is in English, click on French, the page is in French, click German, the page is German.
    So you mean the stuff like „Welcome to Baby Sitter Registration“ or „Enter E-mail and Username“? That is not inside the default .mo files, of course. You can either enter that in your template manually like _e('[:en]English text[:de]German text[:fr]French text'); or add the sentences to your .mo files.

  3. i’ve got the same problems and for a reason local it is still working, but not on my webserver. so i had to find another solution to get my dates multilingual.

    here is what worked for me and what is used by wordpress itself:

    <?php echo date_i18n( "d. F Y", strtotime(get_the_time("Y-m-d")) ); ?>

    You can also realize different formats, by checking what get_locale() gives you back.

  4. hi qtranslate plugin does not work in my theme in local wamp server on my system and how we can add hindi language in this plugin
    pleaase help me .
    thisplugin change backend content in different language but pronf end it is not work properly.

  5. Well, you have to create a new language in your WordPress backend under „Languages“, for example:

    Language code: hi
    Flag: in.png
    Locale: hi_IN
    

    Also, you have to download a Hindi .mo file and put it inside your wp-content/languages folder.
    You can get one here.

  6. Hi, thanks for the tips! I’ve got my site running WordPress 3.2.1 and qtranslate 2.5.24. The dates show fine in both English and German using just:

    <?php the_time('j F Y') ?>

    . June will display as Juni in the German version, and October as Oktober. Perfect. BUT… come to March, and it shows as M?rch… as if it cannot deal with characters with an umlaut, like ä.

    Any ideas? Thanks in advance.

  7. Hmmm, it’s a problem with the encoding. It shouldn’t be happening, if everything (server, database, WordPress) is set to UTF-8. So maybe one of them isn’t?

    Anyway, you could try to wrap it in utf8_encode(), like this:
    <?php utf8_encode(the_time('j F Y')) ?>
    Maybe that will help. (The corresponding command for decoding is utf8_decode(), but I think you need ENcode.) However, no guarantees that it will work. ;)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert