nl_langinfo()
Artikel über die PHP-Funktion nl_langinfo(), die spezifische Locale-Informationen wie Wochentagnamen oder Währungssymbole zurückgibt.
Die PHP-Funktion nl_langinfo() gibt eine einzelne locale-spezifische Information zurück — wie den abgekürzten Namen eines Wochentags, das lokale Datumsformat oder das Währungssymbol — für die aktuell aktive Locale. Sie ist ein dünner Wrapper um die gleichnamige C-Bibliotheksfunktion, daher werden die genauen zurückgegebenen Zeichenketten von der Locale-Datenbank Ihres Betriebssystems bestimmt, nicht von PHP selbst.
Diese Seite erklärt die Syntax, die nützlichsten Konstantenelemente, wie nl_langinfo() auf setlocale() reagiert und die Portabilitätseinschränkungen, die Sie kennen sollten, bevor Sie sich darauf verlassen.
Syntax
string nl_langinfo ( int $item )Die Funktion nimmt einen Parameter entgegen, $item: eine ganzzahlige Konstante, die das gewünschte Informationselement benennt. Sie gibt die entsprechende Zeichenkette für die aktuell ausgewählte Locale zurück oder false, wenn $item nicht gültig ist.
Der wichtige Gedanke dabei ist, dass Sie unabhängig von der Sprache immer dieselbe Konstante übergeben. nl_langinfo(ABDAY_1) fragt immer nach „dem abgekürzten Namen des ersten Wochentags"; ob Sie Sun, Dim oder So erhalten, hängt vollständig von der mit setlocale() gesetzten Locale ab. Das macht die Funktion nützlich: Ihr Code bleibt sprachunabhängig, während sich die Ausgabe anpasst.
Gebräuchliche Konstantenelemente
Die Konstanten sind nach Kategorien gruppiert. Die meisten Systeme definieren diese; einige sind plattformspezifisch.
| Konstante | Beschreibung |
|---|---|
ABDAY_1 … ABDAY_7 | Abgekürzte Wochentagsnamen, beginnend mit Sonntag |
DAY_1 … DAY_7 | Vollständige Wochentagsnamen |
ABMON_1 … ABMON_12 | Abgekürzte Monatsnamen |
MON_1 … MON_12 | Vollständige Monatsnamen |
D_T_FMT | Datums- und Zeitformatzeichenkette (wie von strftime() verwendet) |
D_FMT | Datumsformatzeichenkette |
T_FMT | Zeitformatzeichenkette |
AM_STR / PM_STR | Zeichenketten für AM und PM |
CRNCYSTR | Währungssymbol und seine Position |
YESEXPR / NOEXPR | Regex-Muster für eine bejahende / verneinende Antwort |
Hinweis:
DAY_nundABDAY_nsind ab Sonntag indiziert, daher istABDAY_1Sonntag undABDAY_7Samstag.
Ein einfaches Beispiel
Hier aktiviert setlocale() die Locale en_US, anschließend liest nl_langinfo(ABDAY_1) den abgekürzten Namen des ersten Wochentags (Sonntag) für diese Locale aus.
Die Ausgabe lautet:
SunWie die Locale das Ergebnis beeinflusst
Da der Rückgabewert der aktiven Locale folgt, erhalten Sie durch das Wechseln der Locale zwischen Aufrufen übersetzte Ausgaben aus derselben Konstante. Die Konstanten ändern sich nie — nur setlocale() tut das.
<?php
// English
setlocale(LC_ALL, 'en_US.UTF-8');
echo nl_langinfo(MON_1), "\n"; // January
// French — same constant, French output
setlocale(LC_ALL, 'fr_FR.UTF-8');
echo nl_langinfo(MON_1), "\n"; // janvierErwartete Ausgabe (wenn beide Locales auf dem System installiert sind):
January
janvierWenn eine Locale nicht installiert ist, gibt setlocale() false zurück und die vorherige Locale bleibt aktiv, sodass die frühere Sprache möglicherweise wiederholt angezeigt wird. Überprüfen Sie in Produktionscode immer den Rückgabewert von setlocale().
Datums- und Währungsformate auslesen
Zwei der praktischsten Elemente sind die Datums-/Zeitformatzeichenkette und die Währungszeichenkette. Die Formatzeichenkette können Sie direkt an strftime() übergeben:
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
$fmt = nl_langinfo(D_T_FMT); // locale's preferred date+time format
echo $fmt, "\n"; // e.g. %a %d %b %Y %r %Z
echo nl_langinfo(CRNCYSTR), "\n"; // e.g. -$ (currency symbol + position flag)Das führende Zeichen von CRNCYSTR gibt an, wo das Symbol relativ zur Zahl steht (- = davor, + = danach, . = anstelle des Dezimaltrennzeichens). Für vollständige Währungsformatierung empfiehlt sich meist localeconv() oder money_format(), die alle numerischen Details statt einer einzelnen Zeichenkette bereitstellen.
Portabilität und Fallstricke
- Nicht überall verfügbar.
nl_langinfo()ist unter Windows und bei PHP-Builds, die ohne C-langinfo-Unterstützung kompiliert wurden, nicht definiert. Schützen Sie sich mitfunction_exists('nl_langinfo'), wenn Ihr Code plattformübergreifend laufen muss. - Die Locale muss tatsächlich installiert sein. Die Konstante wird anhand der OS-Locale-Datenbank aufgelöst; eine nicht installierte Locale lässt die vorherige stillschweigend aktiv bleiben.
- Zuerst
setlocale()aufrufen. Ohne ein explizitessetlocale()erhalten Sie das, was die Standard-C/POSIX-Locale zurückgibt — in der Regel einfaches Englisch ohne Formatierungsvorteile. - Konstanten sind Ganzzahlen, keine Zeichenketten. Schreiben Sie
nl_langinfo(ABDAY_1), nichtnl_langinfo('ABDAY_1').
Verwandte Funktionen
setlocale()— wählt die Locale aus, aus dernl_langinfo()liest.localeconv()— gibt numerische und monetäre Formatierungsregeln als Array zurück.strftime()— formatiert ein Datum anhand einer Locale-Formatzeichenkette wie der ausD_T_FMT.money_format()— formatiert eine Zahl als Währung für die aktive Locale.