W3docs

localeconv()

Die PHP-Funktion localeconv() gibt ein assoziatives Array mit Formatierungsregeln für Zahlen und Währungen der aktuellen Locale zurück.

Die PHP-Funktion localeconv() gibt ein assoziatives Array zurück, das beschreibt, wie Zahlen und Währungen in der aktuell aktiven Locale formatiert werden sollen — welches Dezimaltrennzeichen verwendet wird, welches Tausendertrennzeichen, das Währungssymbol, die Position von Symbol und Vorzeichen und so weiter. Sie liest die Locale, die zuletzt mit setlocale() gesetzt wurde, und ist damit die Brücke zwischen „In welcher Locale befinde ich mich?" und „Was schreiben die Formatierungsregeln tatsächlich vor?".

Diese Seite behandelt die Syntax, alle Schlüssel des zurückgegebenen Arrays, ein ausführbares Beispiel und den häufigen Fallstrick: Die Standard-Locale liefert größtenteils leere Werte.

Syntax

localeconv(): array

localeconv() erwartet keine Argumente und gibt immer ein Array zurück. Es gibt keinen Fehlermodus — es gibt nichts zu übergeben, und die Funktion gibt niemals false zurück.

Ein einfaches Beispiel

php— editable, runs on the server

Beachten Sie den setlocale()-Aufruf in der ersten Zeile. Ohne ihn läuft das Skript in der Standard-Locale C, in der die meisten Währungsfelder leer zurückgegeben werden — siehe den Fallstrick weiter unten.

Das zurückgegebene Array

localeconv() gibt folgende Schlüssel zurück. Die einfachen Schlüssel (decimal_point, thousands_sep) gelten für gewöhnliche Zahlen; die mon_*-Schlüssel gelten speziell für Geldbeträge.

SchlüsselBedeutung
decimal_pointDezimaltrennzeichen für nicht-monetäre Zahlen (z. B. .)
thousands_sepTausendertrennzeichen für nicht-monetäre Zahlen (z. B. ,)
groupingArray zur Beschreibung der Ziffergruppierung, z. B. [3] = Gruppen von 3
int_curr_symbolInternationales Währungssymbol, z. B. USD
currency_symbolLokales Währungssymbol, z. B. $
mon_decimal_pointDezimaltrennzeichen für Geldbeträge
mon_thousands_sepTausendertrennzeichen für Geldbeträge
mon_groupingZiffergruppierung für Geldbeträge
positive_sign / negative_signVorzeichenzeichenfolgen für positive / negative Werte
int_frac_digits / frac_digitsAnzahl der Nachkommastellen (international / lokal)
p_cs_precedes / n_cs_precedes1, wenn das Währungssymbol einem positiven / negativen Wert voransteht, 0, wenn es folgt
p_sep_by_space / n_sep_by_space1, wenn ein Leerzeichen Symbol und Wert trennt
p_sign_posn / n_sign_posnPosition des Vorzeichens relativ zu Wert und Symbol

Um das gesamte Array auf einmal zu inspizieren, verwenden Sie print_r():

<?php
setlocale(LC_ALL, 'en_US.UTF-8');
print_r(localeconv());
?>

Auf einem en_US.UTF-8-System gibt dies (gekürzt) aus:

Array
(
    [decimal_point] => .
    [thousands_sep] => ,
    [int_curr_symbol] => USD
    [currency_symbol] => $
    [frac_digits] => 2
    [p_cs_precedes] => 1
    [grouping] => Array ( [0] => 3 )
    ...
)

Fallstrick: Die Standard-Locale liefert leere Werte

Bevor Sie localeconv() aufrufen, läuft PHP in der C-Locale, sofern Sie keine andere gesetzt haben. In der C-Locale sind fast alle Währungsfelder leer, und die Ziffernanzahl-Felder haben den Wert 127 (der C-Standard-Marker für „Wert nicht verfügbar"):

<?php
// No setlocale() — default C locale.
$info = localeconv();
var_dump($info['currency_symbol']);  // string(0) ""
var_dump($info['frac_digits']);      // int(127)
?>

Wenn localeconv() also „nichts Nützliches zurückgibt", haben Sie höchstwahrscheinlich vergessen, zuerst setlocale() aufzurufen. Setzen Sie die Locale explizit, und beachten Sie, dass die verfügbaren Locales vom Betriebssystem abhängen, auf dem das Skript ausgeführt wird.

Wann würde ich es verwenden?

Sie werden localeconv() selten aufrufen, um Ausgaben manuell zu formatieren — number_format() und die Klasse NumberFormatter aus der intl-Erweiterung erledigen das für Sie. Am nützlichsten ist sie, wenn Sie die rohen Locale-Regeln benötigen, zum Beispiel um:

  • einen benutzerdefinierten Formatierer zu erstellen, der die Locale des Benutzers berücksichtigt,
  • Benutzereingaben zu normalisieren (zu wissen, ob 1.234,56 , oder . als Dezimaltrennzeichen verwendet),
  • zu entscheiden, ob das Währungssymbol vor oder nach dem Betrag steht.

Verwandte Funktionen

  • setlocale() — setzt die Locale, die localeconv() ausliest.
  • number_format() — formatiert eine Zahl mit gruppierten Tausendern.
  • money_format() — locale-bewusste Währungsformatierung (in PHP 8.0 entfernt).
  • strftime() — locale-bewusste Datums-/Zeitformatierung.

Übungen

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