Wenn du ein Datum mit dem f:format ViewHelper für verschiedene Sprachen formatieren möchtest sind einig Dinge zu beachten. Wörter wie Monate und Wochentage müssen in der richtigen Sprache ausgegeben werden aber auch das Datumsformat kann sich ändern.
Monate und Wochentage in der richtigen Sprache
Der f:format.date ViewHelper kann verschiedene Regeln für das Datumsformat verwenden. Standardmäßig werden die Regeln der php date() Funktion eingesetzt. Diese Funktion sollte nicht für Datumsangabe in verschiedenen Sprachen benutzt werden. Dazu eignet sich die strftime() Funktion besser.
Wie bringe ich f:format.date dazu strftime() zu verwenden?
Sobald man im f:format.date Viewhelper in der Eigenschaft format das % Zeichen eingibt wird die strftime() Funktion verwendet und das Datum kann in einer anderen Sprache verwendet werden.
1 |
<f:format.date format="%e. %B %G">{dateObject}</f:format.date> // 18. Februar 2017 |
So stellst du die richtige Sprache ein
Wichtig ist noch, dass im TypoScript bei config.locale_all der richtige Wert eingestellt ist. Dieser Wert kann je nach Server abweichend sein. Um herauszufinden welche Werte dein Server unterstützt gibst du einfach locale -a in der Konsole ein. Es wird eine Liste mit allen auf diesem Server verfügbaren Sprachen angezeigt.
Unterschiedliches Datumsformat für Fremdsprachen
In den verschiedenen Sprachen wird das Datum auch anders dargestellt. So wird zum Beispiel aus 18.2.2017 im US-amerikanischen Raum 2/18/2017. Für diese unterschiedlichen Formatierungen lagert man einfach den Wert der format Eigenschaft in die Sprachdatei aus.
Fluid Template
1 |
<f:format.date format="{f:translate(key: 'LLL:EXT:myext/Resources/Private/Language/locallang.xlf:format')}">{dateObject}</f:format.date> |
locallang.xlf
1 2 3 |
<trans-unit id="format"> <source><span class="simpara">%m/%d/%y </span></source> </trans-unit> |
de.locallang.xlf
1 2 3 |
<trans-unit id="format"> <target>%d.<span class="simpara">%m.%y</span></target> </trans-unit> |
„ordinal suffix“ st, nd, rd oder th
Noch ein kleiner Tipp am Ende. Leider unterstützt strftime() keinen Anhang bei englischen Aufzählungen. Wenn man also auf der englischen Website das Datum im Format „February 18th 2017″ schreiben will muss man date() verwenden.
das könnte in der Sprachdatei dann so aussehen:
1 2 3 |
<trans-unit id="format"> <source>M j<\s\up>S<\/\s\up> Y</source> </trans-unit> |
Ich habe hier gleich noch einen <sup> Tag eingebaut damit der Anhang hochgestellt wird.
Getestet mit
TYPO3 7.6.15
Chris
August 13, 2021 — 1:31 pm
Nur schade das man nicht us.locallang.xlf machen kann – wenn man USA, UK usw. trennen möchte / muss … So bleibt leider nur im Fluid mit ner condition v:page auf formatUS und formatUK usw. in der locallang zu zielen. Außer ihr habt n Tipp für mich 😉
Mark Watney
März 29, 2018 — 10:10 am
Uuups, wo bin ich denn da gelandet? 🙂
Werner Seelmann
März 1, 2018 — 10:47 am
Vielen Dank, der Beitrag hat mir sehr geholfen . Ich musste unseren RSS Feed auf der Webseite mit einem mehrsprachigen Datumsformat versehen. Das konnte ich Dank dieser Anleitung sehr schnell umsetzen.
Daniel Stockner
März 1, 2018 — 11:30 am
Hallo Werner! Danke für dein positives Feedback. Es freut uns, dass dir unser Beitrag weiterhelfen konnte.