Signatur
Beschreibung
localeconv() liefert detaillierte Formatierungsinformationen, die vom aktuell gesetzten Locale (via setlocale()) abhängen. Das zurückgegebene Array enthält Angaben zu Dezimaltrennzeichen, Tausendertrennzeichen, Währungssymbolen, Vorzeichenformatierung und weiteren Zahlen-Konventionen gemäß dem jeweiligen Kulturraum.
Die Funktion ist besonders nützlich, wenn Anwendungen Zahlen oder Geldbeträge korrekt nach den Regeln einer bestimmten Sprache oder Region formatieren sollen – etwa Komma statt Punkt als Dezimaltrennzeichen im deutschsprachigen Raum oder das Euro-Symbol in einer europäischen Locale.
Die zurückgegebenen Werte spiegeln die Einstellungen der Locale-Kategorien LC_NUMERIC und LC_MONETARY wider. Wurde kein Locale gesetzt, entsprechen die Werte der System-Standard-Locale. Das Array enthält unter anderem die Schlüssel decimal_point, thousands_sep, currency_symbol, int_curr_symbol, mon_decimal_point, mon_thousands_sep und weitere POSIX-konforme Felder.
Im Unterschied zu number_format() nimmt localeconv() selbst keine Formatierung vor, sondern stellt lediglich die Formatierungsparameter bereit, die man anschließend manuell oder in Kombination mit anderen Funktionen verwenden kann.
Rückgabewert
Ein assoziatives Array mit folgenden Schlüsseln (alle Strings, sofern nicht anders angegeben):
decimal_point– Dezimaltrennzeichen für Zahlenthousands_sep– Tausendertrennzeichen für Zahlengrouping– Array mit Zifferngruppierungsregelnint_curr_symbol– Internationales Währungssymbol (z. B.EUR)currency_symbol– Lokales Währungssymbol (z. B.€)mon_decimal_point– Dezimaltrennzeichen für Geldbeträgemon_thousands_sep– Tausendertrennzeichen für Geldbeträgemon_grouping– Array mit Gruppierungsregeln für Geldbeträgepositive_sign– Vorzeichen für positive Beträgenegative_sign– Vorzeichen für negative Beträgeint_frac_digits– Internationale Anzahl von Nachkommastellenfrac_digits– Lokale Anzahl von Nachkommastellenp_cs_precedes–1wenn Währungssymbol dem positiven Betrag vorangehtp_sep_by_space–1wenn Leerzeichen zwischen Währungssymbol und positivem Betragn_cs_precedes–1wenn Währungssymbol dem negativen Betrag vorangehtn_sep_by_space–1wenn Leerzeichen zwischen Währungssymbol und negativem Betragp_sign_posn– Position des Vorzeichens bei positiven Beträgenn_sign_posn– Position des Vorzeichens bei negativen Beträgen
Beispiele
Locale-Informationen für Deutsch (Deutschland) ausgeben
<?php
setlocale(LC_ALL, 'de_DE.UTF-8');
$locale = localeconv();
echo 'Dezimaltrennzeichen: ' . $locale['decimal_point'] . PHP_EOL;
echo 'Tausendertrennzeichen: ' . $locale['thousands_sep'] . PHP_EOL;
echo 'Währungssymbol: ' . $locale['currency_symbol'] . PHP_EOL;
echo 'Nachkommastellen: ' . $locale['frac_digits'] . PHP_EOL;
Zahl locale-korrekt formatieren mit localeconv()
<?php
setlocale(LC_ALL, 'de_DE.UTF-8');
$locale = localeconv();
$zahl = 1234567.89;
// Manuelles Formatieren anhand der Locale-Werte
$formatiert = number_format(
$zahl,
$locale['frac_digits'],
$locale['decimal_point'],
$locale['thousands_sep']
);
echo $locale['currency_symbol'] . ' ' . $formatiert . PHP_EOL;
Alle Locale-Felder ausgeben
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
$locale = localeconv();
foreach ($locale as $schluessel => $wert) {
if (is_array($wert)) {
echo $schluessel . ': [' . implode(', ', $wert) . ']' . PHP_EOL;
} else {
echo $schluessel . ': ' . $wert . PHP_EOL;
}
}
// Wichtig · Fallstricke
Systemabhängigkeit: localeconv() ist vollständig von den auf dem Server installierten Locales abhängig. Falls das gewünschte Locale nicht installiert ist, kann setlocale() scheitern und die Funktion gibt die System-Standard-Werte zurück. Auf Windows-Systemen weichen die verfügbaren Locale-Bezeichnungen (z. B. German_Germany) von POSIX-Bezeichnungen ab.
Thread-Sicherheit: Da Locale-Einstellungen global und prozessweit gelten, kann setlocale() in einer Mehrbenutzerumgebung (z. B. PHP-FPM mit mehreren gleichzeitigen Anfragen im selben Prozess) zu Race Conditions führen. Für eine robuste Lösung empfiehlt sich die Verwendung der NumberFormatter-Klasse aus der Intl-Erweiterung, die Locales anfrage-lokal verwaltet.
Rückgabe unveränderlich: Das zurückgegebene Array kann nicht direkt zur Laufzeit verändert werden; Änderungen erfordern einen erneuten setlocale()-Aufruf gefolgt von einem neuen localeconv()-Aufruf.