localeconv()
Découvrez la fonction PHP localeconv() pour obtenir les informations de formatage numérique et monétaire d'une locale active.
La fonction PHP localeconv() retourne un tableau associatif décrivant comment les nombres et les devises doivent être formatés dans la locale actuellement active — quel séparateur décimal utiliser, quel séparateur de milliers, le symbole monétaire, où placer le symbole et le signe, etc. Elle lit la locale définie en dernier par setlocale(), ce qui en fait le lien entre « dans quelle locale suis-je » et « quelles sont les règles de formatage ».
Cette page couvre la syntaxe, chaque clé du tableau retourné, un exemple exécutable, ainsi que l'écueil qui piège la plupart des développeurs : la locale par défaut retourne principalement des valeurs vides.
Syntaxe
localeconv(): arraylocaleconv() ne prend aucun argument et retourne toujours un tableau. Elle n'a pas de mode d'échec — il n'y a aucune valeur à passer, et elle ne retourne jamais false.
Un exemple simple
Remarquez l'appel à setlocale() à la première ligne. Sans lui, le script s'exécute dans la locale C par défaut, où la plupart des champs monétaires reviennent vides — voir l'écueil ci-dessous.
Le tableau retourné
localeconv() retourne ces clés. Les clés simples (decimal_point, thousands_sep) s'appliquent aux nombres ordinaires ; les clés mon_* s'appliquent spécifiquement aux valeurs monétaires.
| Clé | Signification |
|---|---|
decimal_point | Séparateur décimal pour les nombres non monétaires (ex. .) |
thousands_sep | Séparateur de milliers pour les nombres non monétaires (ex. ,) |
grouping | Tableau décrivant le groupement des chiffres, ex. [3] = groupes de 3 |
int_curr_symbol | Symbole monétaire international, ex. USD |
currency_symbol | Symbole monétaire local, ex. $ |
mon_decimal_point | Séparateur décimal pour les montants |
mon_thousands_sep | Séparateur de milliers pour les montants |
mon_grouping | Groupement des chiffres pour les montants |
positive_sign / negative_sign | Chaînes de signe pour les valeurs positives / négatives |
int_frac_digits / frac_digits | Nombre de chiffres fractionnaires (international / local) |
p_cs_precedes / n_cs_precedes | 1 si le symbole monétaire précède une valeur positive / négative, 0 s'il suit |
p_sep_by_space / n_sep_by_space | 1 si une espace sépare le symbole de la valeur |
p_sign_posn / n_sign_posn | Position du signe par rapport à la valeur et au symbole |
Pour inspecter tout le tableau en une fois, utilisez print_r() :
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
print_r(localeconv());
?>Sur un système en_US.UTF-8, cela affiche (abrégé) :
Array
(
[decimal_point] => .
[thousands_sep] => ,
[int_curr_symbol] => USD
[currency_symbol] => $
[frac_digits] => 2
[p_cs_precedes] => 1
[grouping] => Array ( [0] => 3 )
...
)Écueil : la locale par défaut retourne des valeurs vides
Avant d'appeler localeconv(), PHP s'exécute dans la locale C sauf si vous en définissez une. Dans la locale C, presque tous les champs monétaires sont vides et les champs de comptage de chiffres valent 127 (marqueur de « valeur non disponible » de la norme C) :
<?php
// No setlocale() — default C locale.
$info = localeconv();
var_dump($info['currency_symbol']); // string(0) ""
var_dump($info['frac_digits']); // int(127)
?>Donc si localeconv() semble « ne rien retourner d'utile », vous avez presque certainement oublié d'appeler setlocale() auparavant. Définissez la locale explicitement, et sachez que les locales disponibles dépendent du système d'exploitation sur lequel le script s'exécute.
Quand l'utiliser ?
Vous appelleriez rarement localeconv() pour formater manuellement une sortie — number_format() et la classe NumberFormatter de l'extension intl s'en chargent pour vous. Elle est surtout utile lorsque vous avez besoin des règles brutes de la locale, par exemple pour :
- construire un formateur personnalisé qui respecte la locale de l'utilisateur,
- normaliser une saisie utilisateur (savoir si
1.234,56utilise,ou.comme séparateur décimal), - décider si le symbole monétaire va avant ou après le montant.
Fonctions associées
setlocale()— définir la locale quelocaleconv()lit.number_format()— formater un nombre avec regroupement des milliers.money_format()— formatage monétaire sensible à la locale (supprimé en PHP 8.0).strftime()— formatage de date/heure sensible à la locale.