W3docs

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(): array

localeconv() 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

php— editable, runs on the server

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.

ClaveSignificado
decimal_pointSeparador decimal para números no monetarios (p. ej. .)
thousands_sepSeparador de miles para números no monetarios (p. ej. ,)
groupingArray que describe la agrupación de dígitos, p. ej. [3] = grupos de 3
int_curr_symbolSímbolo de moneda internacional, p. ej. USD
currency_symbolSímbolo de moneda local, p. ej. $
mon_decimal_pointSeparador decimal para moneda
mon_thousands_sepSeparador de miles para moneda
mon_groupingAgrupación de dígitos para moneda
positive_sign / negative_signCadenas de signo para valores positivos / negativos
int_frac_digits / frac_digitsNúmero de dígitos fraccionarios (internacional / local)
p_cs_precedes / n_cs_precedes1 si el símbolo de moneda precede a un valor positivo / negativo, 0 si lo sigue
p_sep_by_space / n_sep_by_space1 si un espacio separa el símbolo del valor
p_sign_posn / n_sign_posnDó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,56 usa , 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 que localeconv() 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.

Práctica

Práctica
¿Qué hace la función localeconv() en PHP?
¿Qué hace la función localeconv() en PHP?
Was this page helpful?