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. Hi

    I am using Qtranslate Plugin for language translate.i set French language as default.we are using three language in our site mainly (EN,FR,DE)
    when i am selecting English language then qtranslate translate it successfully.but when i am click on any other link on my site it take french language as defualt.

    so do u know How to store selected language in session or cookie in qtranslate?

  2. Did you try to do it like I described above? For example, put something like this into your template:

    the_date('[:de]l, j. F Y, G:i[:en]l, jS F Y, g:i a[:fr]l, jS F Y, G:i');

    Usually that should be working.

    If you want to get the current language and store it somewhere, try get_locale(). This should return ‚de‘, ‚en‘ or ‚fr‘.

  3. Hi,

    When i write „?lang=en“ in url of your site,then your site trnaslate in english

    am i right?

    then link for „About us“ is like that „http://blog.ginchen.de/en/ueber-mich/“

    How do u do that?How do u maintain „/en/“ in whole site?

  4. Ermm, you can set that somewhere in the options under Settings → Languages. I just can’t look it up exactly right now, because I’m running WordPress 2.8, and qTranslate isn’t 2.8 ready yet, so I can’t open the options page…

    After that, you never need to write „?lang=en“ anymore, but instead you can call ALL pages with „/en/blahblah/“.

    [Edit] It must be somewhere unter „Advanced Settings“ → „URL Modification Mode“.

  5. Hi

    option specified by u is their in admin section.i set that,but when i write url „?lang=de“,then when i am check again in admin section then above option is changed.

    where r u put your .mo files?

    i am putting in „wp-include/languages“ folder.

    i am writing like this
    so i have to specified more things to make as same as u…

  6. My .mo files are in wp-content/languages, but that shouldn’t make any difference. According to the WordPress docs, both locations are fine.

    I have no idea why your settings would be reset when you add „?lang=de“ to the URL… What WordPress version are you using? qTranslate is not yet ready for WordPress 2.8.

  7. (Sorry, I really have to find out why people can’t post code snippets here…)

    Okay, when you make the links yourself, like <a href=“…“><?php echo __(„About us“); ?></a>, then qTranslate cannot recognize them. It will only work with links that are generated automatically by WordPress, for example with wp_list_pages().

    P.S.: You should now be able to post code snippets here. Just put them between `backticks`. :)

  8. Hi,

    one simple question i have to ask u that

    In admin side when we change language,it store that language in cookie(As i found code in qtranslate_core.php on line no 68).then why wordpress is not store language in cookie on frontside?.

    is it possiable on frontside?

  9. Hi,

    I Store my current language in cookie same as admin side.it’s working fine….

    Now New Problem arise
    when i am writing „lang“ querystring in ie 7 then it give me 404 error

    do u have any idea about that?

Schreibe einen Kommentar

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