Start · Sprachen · PHP · Referenz · nl_langinfo

nl_langinfo

Funktion

Gibt spezifische Locale- und Sprachinformationen anhand eines Konstanten-Schlüssels zurück, z. B. Wochentagnamen, Datums- oder Zahlenformate.

seit PHP 4.1.0 Kategorie: string

Signatur

nl_langinfo(int $item): string|false

Beschreibung

nl_langinfo() fragt Informationen über die aktuell gesetzte Locale ab. Im Gegensatz zu localeconv(), das numerische und Währungsformatierungen zurückgibt, erlaubt nl_langinfo() den gezielten Zugriff auf einzelne Locale-Elemente – etwa die vollständigen Namen der Wochentage, Monatsnamen, das bevorzugte Datum-/Uhrzeitformat oder den Zeichensatz der Locale.

Die Funktion basiert auf dem POSIX-Standard nl_langinfo() und ist auf Unix-ähnlichen Systemen (Linux, macOS) verfügbar. Unter Windows steht sie nicht zur Verfügung. Vor dem Aufruf sollte die gewünschte Locale mit setlocale() gesetzt werden, da nl_langinfo() die aktuell aktive Locale verwendet.

Als Parameter wird eine der vordefinierten Konstanten übergeben, wie ABDAY_1 (Kurzname des ersten Wochentags), DAY_1 bis DAY_7 (vollständige Wochentagnamen), MON_1 bis MON_12 (Monatsnamen), D_FMT (bevorzugtes Datumsformat), T_FMT (bevorzugtes Zeitformat), CODESET (Zeichensatz) u. v. m.

Die Funktion ist nützlich, wenn Anwendungen lokalisierte Ausgaben erzeugen müssen, ohne auf externe Bibliotheken wie intl zurückgreifen zu können. Für portable Lösungen empfiehlt sich jedoch die Intl-Extension, da diese plattformunabhängig arbeitet.

Parameter

Name Typ Default Beschreibung
$item Pflicht int Eine vordefinierte Konstante, die das abzufragende Locale-Element bestimmt. Beispiele: ABDAY_1ABDAY_7 (Kurzwochentage), DAY_1DAY_7 (vollständige Wochentage), MON_1MON_12 (Monatsnamen), ABMON_1ABMON_12 (Kurzmonatsnamen), D_FMT, T_FMT, D_T_FMT, CODESET, RADIXCHAR, THOUSEP, YESSTR, NOSTR u. a.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die angeforderte Locale-Information als Zeichenkette zurück. Im Fehlerfall (ungültiger item-Wert oder fehlende Unterstützung des Systems) wird false zurückgegeben.

Beispiele

Wochentagnamen und Monatsnamen der deutschen Locale abfragen

<?php
// Deutsche Locale setzen (muss auf dem System installiert sein)
setlocale(LC_ALL, 'de_DE.UTF-8');

// Vollständige Wochentagnamen ausgeben (DAY_1 = Sonntag nach POSIX-Standard)
$tage = [DAY_1, DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7];
foreach ($tage as $tag) {
    echo nl_langinfo($tag) . "\n";
}

echo "---\n";

// Monatsnamen ausgeben
for ($i = MON_1; $i <= MON_12; $i++) {
    echo nl_langinfo($i) . "\n";
}
Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag --- Januar Februar März April Mai Juni Juli August September Oktober November Dezember

Datums-/Zeitformat und Zeichensatz der Locale ermitteln

<?php
setlocale(LC_ALL, 'de_DE.UTF-8');

// Bevorzugtes Datum-/Zeit-Format
echo 'Datum-Format: '     . nl_langinfo(D_FMT)   . "\n";
echo 'Zeit-Format: '      . nl_langinfo(T_FMT)   . "\n";
echo 'Datum+Zeit-Format: '. nl_langinfo(D_T_FMT) . "\n";
echo 'Zeichensatz: '      . nl_langinfo(CODESET)  . "\n";
echo 'Dezimaltrennzeichen: ' . nl_langinfo(RADIXCHAR) . "\n";
echo 'Tausendertrennzeichen: ' . nl_langinfo(THOUSEP) . "\n";

// Aktuelles Datum mit lokalem Format ausgeben
$format = nl_langinfo(D_FMT);
echo 'Heute: ' . strftime($format) . "\n";
Datum-Format: %d.%m.%Y Zeit-Format: %T Datum+Zeit-Format: %a %d %b %Y %T %Z Zeichensatz: UTF-8 Dezimaltrennzeichen: , Tausendertrennzeichen: . Heute: 15.06.2025

// Wichtig · Fallstricke

Plattformverfügbarkeit: nl_langinfo() ist nicht auf Windows-Systemen verfügbar. Auf Windows existiert die Funktion nicht, was bei plattformübergreifenden Projekten berücksichtigt werden muss. Eine Alternative ist die Intl-Extension (z. B. IntlDateFormatter), die plattformunabhängig funktioniert.

Locale muss installiert sein: Die gewünschte Locale muss auf dem Betriebssystem installiert sein (z. B. locale-gen de_DE.UTF-8 unter Debian/Ubuntu), sonst fällt setlocale() zurück und nl_langinfo() liefert Daten der Standard-Locale (meist englisch).

POSIX-Wochentag-Zählung: DAY_1 entspricht nach POSIX-Standard dem Sonntag, DAY_2 dem Montag usw. – das weicht von der ISO-8601-Konvention (Montag = erster Tag) ab und kann zu Verwirrung führen.

strftime() ist ab PHP 8.1 veraltet: Die Kombination mit nl_langinfo(D_FMT) und strftime() zur Datumsformatierung funktioniert, jedoch ist strftime() seit PHP 8.1 als deprecated markiert. Als Alternative bietet sich IntlDateFormatter an.