Avatar

Tagesnamen im Header (General)

by Auge ⌂, Wednesday, November 09, 2022, 10:38 (19 days ago) @ Micha

Hallo,

"Um Datumsangaben in anderen Sprachen auszugeben, kann IntlDateFormatter::format() statt date() verwendet werden."


Das sieht aber, zumindest auf den ersten Blick, sehr viel komplexer aus und hat zudem eine gänzlich andere Syntax für den Datumsformatierung.


Das entspricht auch meinem Vorschlag.

Oh, ich habe dein Vorposting gestern Abend nicht noch einmal gelesen und daher ist mir entgangen, dass du genau diesen Vorschlag schon eingebracht hast.

Die Umstellung wäre vermutlich recht einfach. Für die Funktion format_time müsste es dann so aussehen (ungetestet) in seiner einfachsten Form ohne Zeitzone usw.:

function format_time($format, $timestamp = 0) {
$formatter = new IntlDateFormatter(locale_get_default()); // wurde zuvor via setlocale(<array>) gesetzt.
//$formatter->setPattern('d. MMMM Y, hh:mm');
$formatter->setPattern($format);
 
if ($timestamp == 0) 
$timestamp = TIMESTAMP;
 
$date=date_create();
$dateTime = date_timestamp_set($date, $timestamp);
 
if (defined('LOCALE_CHARSET')) {
return iconv(LOCALE_CHARSET,CHARSET, $formatter->format($dateTime));
}
else {
return $formatter->format($dateTime);
}
}

Das Problem ist hierbei jedoch die Angabe $locale, die ein String sein muss. Durch die multiple Belegung in der Sprachdatei haben wir hier aber ein Array …

Hier übersiehst du die Funktionsweise der Funktion setlocale. Mit der Funktion wird aus dem Array $lang['locale'] der erste Eintrag, der auf dem Server funktioniert, herausgesucht und als String zurückgegeben. Nochmal der relevante Ausschnitt aus meinem Testscript (angepasst):

$lang['locale'] = [
    'de_DE.utf8',
    'de_DE',
    'de_DE@euro',
    'de'
];
echo "<pre>Servereinstellung (de-locale): ". print_r(setlocale(LC_ALL, $lang['locale']), true) ."</pre>";
 
// Ausgabe: Servereinstellung (de-locale): de_DE.utf8

… sodass ich auf locale_get_default() zurückgegriffen habe.

Was du nicht machen musst, wenn ich nicht irre.

Final müssten wir noch die Sprachdateien anpassen und auf die neuen Abkürzungen umstellen. Also etwas Fleißarbeit.

Das dürfte der leichteste, wenn auch arbeitsintensivste Teil sein. :-)

Könnte ich übernehmen - habe es schließlich auch verbockt - will aber zunächst wissen, wie Du die Lösung oben bewertest.

Ohne jetzt deinen Code ausprobiert zu haben; wenn in deiner Funktion auch Zeitzonen berücksichtigt werden, passt das. "Verbockt" hast du allerdings nichts. Die PHP-Doku bietet als Ersatz für strftime den Einsatz von date an, obwohl diese Funktion nicht alle Möglichkeiten von strftime bietet. Dass das überhaupt so ist, ist entweder Fehler oder Absicht der PHP-Entwickler. Vielleicht wollen sie ja mittelfristig auch von date weg.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!


Complete thread:

 RSS Feed of thread