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(): arraylocaleconv() 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
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üssel | Bedeutung |
|---|---|
decimal_point | Dezimaltrennzeichen für nicht-monetäre Zahlen (z. B. .) |
thousands_sep | Tausendertrennzeichen für nicht-monetäre Zahlen (z. B. ,) |
grouping | Array zur Beschreibung der Ziffergruppierung, z. B. [3] = Gruppen von 3 |
int_curr_symbol | Internationales Währungssymbol, z. B. USD |
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 | Ziffergruppierung für Geldbeträge |
positive_sign / negative_sign | Vorzeichenzeichenfolgen für positive / negative Werte |
int_frac_digits / frac_digits | Anzahl der Nachkommastellen (international / lokal) |
p_cs_precedes / n_cs_precedes | 1, wenn das Währungssymbol einem positiven / negativen Wert voransteht, 0, wenn es folgt |
p_sep_by_space / n_sep_by_space | 1, wenn ein Leerzeichen Symbol und Wert trennt |
p_sign_posn / n_sign_posn | Position 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, dielocaleconv()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.