Kirby 2 HowTo: Datum, Wochen- und Monatsnamen in Landessprache formatieren

Optionen in Kirby zur Ausgabe von Monats- und Tagesnamen in Landessprache

Seit mehreren Jahren nutzen wir nun schon das dateibasierte CMS Kirby und sind damit recht zufrieden. Das Allermeiste funktioniert intuitiv - und wenn doch mal etwas schwieriger wird, findet man im Forum in aller Regel kompetente Antworten.

Dennoch gibt es natürlich auch bei dieser Software "Eigenheiten", bei denen einem die Intuition nicht weiterhilft. In diese Kategorie gehört sicher die international korrekte Darstellung von Datum und Uhrzeit - speziell wenn man Tages- und Monatsnamen in Landessprache ausgeschrieben anzeigen möchte.

Grundsätzlich gibt es mehrere Implementierungsoptionen:

1) Do-it-yourself

Eine technisch einfache Lösung bestünde darin, sich über die l()-Funktion und Arrays mit den Datums- und Tagesnamen seine eigene Übersetzung zu bauen. Nachteilig ist dabei allerdings, dass man bei Änderungen (z.B. neue Sprache hinzu) ganz auf sich allein gestellt ist und die Implementierung komplett selbst pflegen muss. Wir nennen daher diese Option nur der Vollständigkeit halber - es gibt aus unserer Sicht bessere Alternativen.

2) IntlDateFormatter aus der PHP-Erweiterung intl verwenden

Die PHP-Klasse "IntlDateFormatter" lässt sich einfach nutzen, um die lokalisierten Monats- und Tagesnamen zu erhalten und unterstützt eine Vielzahl von Sprachen.

Man erzeugt sich dafür zuerst ein Formatierer-Objekt:

<?php $formatter = datefmt_create($language->code(), IntlDateFormatter::LONG, IntlDateFormatter::NONE); >?

und nutzt dieses dann zur Ausgabe:

<?php echo datefmt_format( $formatter, $page->date()); ?>

Die Standard-Formatierfunktionen fürs Datum (IntlDateFormatter::LONG im Beispiel oben) und die Zeit (IntlDateFormatter::NONE im Beispiel) waren bislang für unsere Zwecke flexibel genug.

Achtung, für diesen Lösungsweg müssen zwei Voraussetzungen erfüllt sein:

  1. PHP 5.3 oder neuer. Das sollte aber wohl inzwischen weitestgehend der Fall sein.
  2. Die PHP-Erweiterung "intl" muss eingebunden sein. Im macOS-eigenen PHP ist das leider nicht der Fall.

3) "strftime" als Funktion zur Datumsformatierung einstellen

Mit Kirby 2.1 ist eine Konfigurations-Option eingeführt worden, die die Ausgabe korrekt formatierter Daten nochmals leichter macht. In site/config/config.php lässt sich nun definieren:

c::set('date.handler', 'strftime');

Leider ist die Arbeit damit noch nicht getan, denn die Format-Parameter für date und strfdate sind unterschiedlich!
So müsste z.B. die Spezifikation für ein US-amerikanisches Datumsformat mit ausgeschriebenem Monatsnamen von 'F jS, Y' in '%B %e%O, %Y' umgeschrieben werden.

Achtung: Das gilt auch für Zeitstempel, z.B. aus der Sitemap. Diese verwenden eine Formatierung nach ISO 8601, also z.B. date('c'). Diese muss umgeschrieben werden in z.B. date('%FT%TZ').

Fazit:

  • Für Kirby ab Version 2.1 würden wir empfehlen, strftime als Datums-Handler zu verwenden.
  • Für alle frühere Versionen ist aus unserer Sicht der IntlDateFormatter die beste Wahl.

Quellen: