Deutsch English
WordPress Read this post in English

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.<b\r />M<b\r />Y');

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');


Kommentare

1 2 3 4

  1. 18. Juli 2012
    3:39 Uhr

    Trevor

    Dominik’s solution worked for me! Thanks dude!

  2. 15. Dezember 2011
    17:14 Uhr

    Ginchen flag

    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. ;)

  3. 15. Dezember 2011
    1:53 Uhr

    Trevor

    I should add that characters with umlaut’s are working perfectly fine in every other area of the website.

  4. 15. Dezember 2011
    1:50 Uhr

    Trevor

    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.

  5. 24. Mai 2010
    22:37 Uhr

    Ginchen flag

    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. 24. Mai 2010
    14:15 Uhr

    bineet flag

    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.

  7. 6. November 2009
    14:53 Uhr

    Dominik Rockenschaub flag

    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.

  8. 24. Oktober 2009
    13:14 Uhr

    Ginchen flag

    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.

  9. 24. Oktober 2009
    8:17 Uhr

    Ashish flag

    Hi

    Qtranslate is working fine in my local system but in live site it is not working fine

    i had upload all .mo files from my local to live

    Qtranslate plugin is also active

    http://www.ma-nany.com/baby-sitter.php?reg=baby&action=register⟨=en

    this is url of live site

    only „Username“ is translateble

    Please help it’s urgent

  10. 13. Oktober 2009
    13:23 Uhr

    Thomas flag

    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….!

1 2 3 4

Kommentieren

Erlaubtes HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <p> <pre lang="" line="" escaped=""> <q cite=""> <strike> <strong> <img src="" alt="" class="" width="" height=""> | Codeschnipsel können in `backticks` gepostet werden. Beispiel: `<?php echo "Hi!"; ?>`