W3docs

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.

KonstanteBeschreibung
ABDAY_1ABDAY_7Abgekürzte Wochentagsnamen, beginnend mit Sonntag
DAY_1DAY_7Vollständige Wochentagsnamen
ABMON_1ABMON_12Abgekürzte Monatsnamen
MON_1MON_12Vollständige Monatsnamen
D_T_FMTDatums- und Zeitformatzeichenkette (wie von strftime() verwendet)
D_FMTDatumsformatzeichenkette
T_FMTZeitformatzeichenkette
AM_STR / PM_STRZeichenketten für AM und PM
CRNCYSTRWährungssymbol und seine Position
YESEXPR / NOEXPRRegex-Muster für eine bejahende / verneinende Antwort

Hinweis: DAY_n und ABDAY_n sind ab Sonntag indiziert, daher ist ABDAY_1 Sonntag und ABDAY_7 Samstag.

Ein einfaches Beispiel

php— editable, runs on the server

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:

Sun

Wie 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";   // janvier

Erwartete Ausgabe (wenn beide Locales auf dem System installiert sind):

January
janvier

Wenn 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 mit function_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 explizites setlocale() 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), nicht nl_langinfo('ABDAY_1').

Verwandte Funktionen

  • setlocale() — wählt die Locale aus, aus der nl_langinfo() liest.
  • localeconv() — gibt numerische und monetäre Formatierungsregeln als Array zurück.
  • strftime() — formatiert ein Datum anhand einer Locale-Formatzeichenkette wie der aus D_T_FMT.
  • money_format() — formatiert eine Zahl als Währung für die aktive Locale.

Übung

Übung
Was macht die Funktion nl_langinfo() in PHP?
Was macht die Funktion nl_langinfo() in PHP?
Was this page helpful?