localeconv()
Artículo sobre la función PHP localeconv(), usada para obtener información de formato numérico y monetario según la configuración regional activa.
La función localeconv() de PHP devuelve un array asociativo que describe cómo deben formatearse los números y la moneda en la configuración regional actualmente activa: qué separador decimal usar, qué separador de miles, el símbolo de moneda, dónde van el símbolo y el signo, etc. Lee la configuración regional que se haya establecido con setlocale(), por lo que es el puente entre "¿en qué configuración regional estoy?" y "¿qué dicen realmente las reglas de formato?"
Esta página cubre la sintaxis, todas las claves del array devuelto, un ejemplo ejecutable y el error que confunde a la mayoría de personas: la configuración regional predeterminada devuelve valores mayormente vacíos.
Sintaxis
localeconv(): arraylocaleconv() no acepta ningún argumento y siempre devuelve un array. No tiene modo de fallo: no hay ningún valor que pasar y nunca devuelve false.
Un ejemplo básico
Observa la llamada a setlocale() en la primera línea. Sin ella, el script se ejecuta en la configuración regional C predeterminada, donde la mayoría de los campos monetarios vuelven vacíos — consulta el apartado de errores comunes más abajo.
El array devuelto
localeconv() devuelve estas claves. Las claves simples (decimal_point, thousands_sep) se aplican a los números ordinarios; las claves mon_* se aplican específicamente a los valores monetarios.
| Clave | Significado |
|---|---|
decimal_point | Separador decimal para números no monetarios (p. ej. .) |
thousands_sep | Separador de miles para números no monetarios (p. ej. ,) |
grouping | Array que describe la agrupación de dígitos, p. ej. [3] = grupos de 3 |
int_curr_symbol | Símbolo de moneda internacional, p. ej. USD |
currency_symbol | Símbolo de moneda local, p. ej. $ |
mon_decimal_point | Separador decimal para moneda |
mon_thousands_sep | Separador de miles para moneda |
mon_grouping | Agrupación de dígitos para moneda |
positive_sign / negative_sign | Cadenas de signo para valores positivos / negativos |
int_frac_digits / frac_digits | Número de dígitos fraccionarios (internacional / local) |
p_cs_precedes / n_cs_precedes | 1 si el símbolo de moneda precede a un valor positivo / negativo, 0 si lo sigue |
p_sep_by_space / n_sep_by_space | 1 si un espacio separa el símbolo del valor |
p_sign_posn / n_sign_posn | Dónde se sitúa el signo en relación con el valor y el símbolo |
Para inspeccionar todo el array a la vez, usa print_r():
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
print_r(localeconv());
?>En un sistema con en_US.UTF-8 esto imprime (abreviado):
Array
(
[decimal_point] => .
[thousands_sep] => ,
[int_curr_symbol] => USD
[currency_symbol] => $
[frac_digits] => 2
[p_cs_precedes] => 1
[grouping] => Array ( [0] => 3 )
...
)Error común: la configuración regional predeterminada devuelve valores vacíos
Antes de llamar a localeconv(), PHP se ejecuta en la configuración regional C a menos que se establezca una. En la configuración regional C, casi todos los campos monetarios están vacíos y los campos de conteo de dígitos son 127 (el marcador del estándar C para "valor no disponible"):
<?php
// No setlocale() — default C locale.
$info = localeconv();
var_dump($info['currency_symbol']); // string(0) ""
var_dump($info['frac_digits']); // int(127)
?>Por lo tanto, si localeconv() parece "no devolver nada útil", casi con toda seguridad olvidaste llamar primero a setlocale(). Establece la configuración regional de forma explícita y ten en cuenta que las configuraciones regionales disponibles dependen del sistema operativo en el que se ejecute el script.
¿Cuándo usarlo?
Rara vez llamarás a localeconv() para formatear la salida manualmente — number_format() y la clase NumberFormatter de la extensión intl hacen eso por ti. Es más útil cuando necesitas las reglas brutas de la configuración regional, por ejemplo para:
- crear un formateador personalizado que respete la configuración regional del usuario,
- normalizar la entrada del usuario (sabiendo si
1.234,56usa,o.como separador decimal), - decidir si el símbolo de moneda va antes o después del importe.
Funciones relacionadas
setlocale()— establece la configuración regional quelocaleconv()lee.number_format()— formatea un número con miles agrupados.money_format()— formato de moneda sensible a la configuración regional (eliminado en PHP 8.0).strftime()— formato de fecha/hora sensible a la configuración regional.