Start · Sprachen · PHP · Referenz · localeconv

localeconv

Funktion

Gibt ein assoziatives Array mit den aktuellen Locale-Einstellungen für Zahlen- und Währungsformatierung zurück.

seit PHP 4.0.5 Kategorie: string

Signatur

localeconv(): array

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

Typ
array
Beschreibung

Ein assoziatives Array mit folgenden Schlüsseln (alle Strings, sofern nicht anders angegeben):

  • decimal_point – Dezimaltrennzeichen für Zahlen
  • thousands_sep – Tausendertrennzeichen für Zahlen
  • grouping – Array mit Zifferngruppierungsregeln
  • int_curr_symbol – Internationales Währungssymbol (z. B. EUR)
  • currency_symbol – Lokales Währungssymbol (z. B. )
  • mon_decimal_point – Dezimaltrennzeichen für Geldbeträge
  • mon_thousands_sep – Tausendertrennzeichen für Geldbeträge
  • mon_grouping – Array mit Gruppierungsregeln für Geldbeträge
  • positive_sign – Vorzeichen für positive Beträge
  • negative_sign – Vorzeichen für negative Beträge
  • int_frac_digits – Internationale Anzahl von Nachkommastellen
  • frac_digits – Lokale Anzahl von Nachkommastellen
  • p_cs_precedes1 wenn Währungssymbol dem positiven Betrag vorangeht
  • p_sep_by_space1 wenn Leerzeichen zwischen Währungssymbol und positivem Betrag
  • n_cs_precedes1 wenn Währungssymbol dem negativen Betrag vorangeht
  • n_sep_by_space1 wenn Leerzeichen zwischen Währungssymbol und negativem Betrag
  • p_sign_posn – Position des Vorzeichens bei positiven Beträgen
  • n_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;
Dezimaltrennzeichen: , Tausendertrennzeichen: . Währungssymbol: € Nachkommastellen: 2

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;
€ 1.234.567,89

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;
    }
}
decimal_point: . thousands_sep: , grouping: [3] int_curr_symbol: USD currency_symbol: $ mon_decimal_point: . mon_thousands_sep: , mon_grouping: [3] positive_sign: negative_sign: - int_frac_digits: 2 frac_digits: 2 p_cs_precedes: 1 p_sep_by_space: 0 n_cs_precedes: 1 n_sep_by_space: 0 p_sign_posn: 1 n_sign_posn: 1

// 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.