Tipps für Sprachen in REDAXO
Datum in korrekter Sprache ausgeben
Szenario
Die REDAXO-Website verfügt über verschiedene Sprachen. Ein Datum ist im MYSQL-Format hinterlegt und soll in Abhängigkeit der Sprache korrekt formatiert ausgegeben werden.
Lösung
setlocale()
in PHP mit Sprach-Metainfos setzen.
Schritt-für-Schritt-Anleitung
Die Funktion setlocale()
benötigt eine Kombination aus Language Code
und Country Code
.
-
Im Addon Meta Infos unter Sprachen ein neues Feld
clang_country
einfügen:Spaltenname: country Feldbezeichnung: Country Code (ISO 3166) Feldtyp: Text Feldattribut (optional): pattern="[A-Z]{2}"
-
In System unter Sprachen die gewünschten Sprachen anlegen und dabei in den Feldern Code (für
Language Code
) und Country Code den korrekten Sprach- und Region-Codes eintragen, z.B.de
undDE
,de
undAT
,en
undGB
oderen
undUS
.Eine vollständige Liste an korrekten Country-Codes gibt es auf oracle.com: Language Codes und Country Codes
Tipp Die auf dem Server vorhandenen Sprachen kann man wie folgt ermitteln:
<?php
dump(ResourceBundle::getLocales(''));
?>
-
Im project-Addon in der
boot.php
folgenden Code einfügen:$clang = rex_clang::getCurrent(); setlocale(LC_TIME, $clang->getCode()."_".$clang->getValue('country').".utf8");
-
Nun ist der aktuelle Sprachcode überall gesetzt und ein Datum kann ganz einfach mit
rex_formatter::intlDate
formatiert werden, z. B.echo rex_formatter::intlDate(time(), IntlDateFormatter::MEDIUM); // ergibt 12. Dez. 2021
Mehr Informationen zur Datumsformatierung in der Doku