nl_langinfo()
Artículo sobre la función PHP nl_langinfo(), usada para obtener información de localización como nombres de días, formatos de fecha y símbolos de moneda.
La función PHP nl_langinfo() devuelve un único dato de información específica de la configuración regional — como el nombre abreviado de un día de la semana, el formato de fecha local o el símbolo de moneda — para la configuración regional activa en ese momento. Es una envoltura delgada sobre la función de la biblioteca C del mismo nombre, por lo que las cadenas exactas que devuelve las decide la base de datos de configuración regional de tu sistema operativo, no PHP en sí mismo.
Esta página explica la sintaxis, las constantes de elemento más útiles, cómo reacciona nl_langinfo() ante setlocale() y las advertencias de portabilidad que debes conocer antes de depender de ella.
Sintaxis
string nl_langinfo ( int $item )La función acepta un parámetro, $item: una constante entera que nombra el dato que deseas. Devuelve la cadena correspondiente para la configuración regional actualmente seleccionada, o false si $item no es válido.
La idea importante es que se pasa la misma constante independientemente del idioma. nl_langinfo(ABDAY_1) siempre solicita "el nombre abreviado del primer día de la semana"; si obtienes Sun, Dim o So depende completamente de la configuración regional que hayas establecido con setlocale(). Eso es lo que hace útil a la función: tu código permanece independiente del idioma mientras la salida se adapta.
Constantes de elemento comunes
Las constantes están agrupadas por categoría. La mayoría de los sistemas definen estas; algunas son específicas de plataforma.
| Constante | Descripción |
|---|---|
ABDAY_1 … ABDAY_7 | Nombres abreviados de los días de la semana, comenzando por el domingo |
DAY_1 … DAY_7 | Nombres completos de los días de la semana |
ABMON_1 … ABMON_12 | Nombres abreviados de los meses |
MON_1 … MON_12 | Nombres completos de los meses |
D_T_FMT | Cadena de formato de fecha y hora (como la usa strftime()) |
D_FMT | Cadena de formato de fecha |
T_FMT | Cadena de formato de hora |
AM_STR / PM_STR | Cadenas para AM y PM |
CRNCYSTR | Símbolo de moneda y su posición |
YESEXPR / NOEXPR | Patrones regex para una respuesta afirmativa / negativa |
Nota:
DAY_nyABDAY_nse indexan desde el domingo, por lo queABDAY_1es el domingo yABDAY_7es el sábado.
Un ejemplo básico
Aquí setlocale() activa la configuración regional en_US, luego nl_langinfo(ABDAY_1) lee el nombre abreviado del primer día de la semana (domingo) para esa configuración regional.
La salida es:
SunCómo la configuración regional cambia el resultado
Dado que el valor de retorno sigue la configuración regional activa, cambiar de configuración regional entre llamadas produce salida traducida a partir de la misma constante. Las constantes nunca cambian — solo lo hace setlocale().
<?php
// English
setlocale(LC_ALL, 'en_US.UTF-8');
echo nl_langinfo(MON_1), "\n"; // January
// French — same constant, French output
setlocale(LC_ALL, 'fr_FR.UTF-8');
echo nl_langinfo(MON_1), "\n"; // janvierSalida esperada (cuando ambas configuraciones regionales están instaladas en el sistema):
January
janvierSi una configuración regional no está instalada, setlocale() devuelve false y la configuración regional anterior permanece en vigor, por lo que podrías ver el idioma anterior repetido. Comprueba siempre el valor de retorno de setlocale() en el código de producción.
Lectura de los formatos de fecha y moneda
Dos de los elementos más prácticos son la cadena de formato de fecha/hora y la cadena de moneda. Puedes pasar la cadena de formato directamente a strftime():
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
$fmt = nl_langinfo(D_T_FMT); // locale's preferred date+time format
echo $fmt, "\n"; // e.g. %a %d %b %Y %r %Z
echo nl_langinfo(CRNCYSTR), "\n"; // e.g. -$ (currency symbol + position flag)El carácter inicial de CRNCYSTR indica dónde va el símbolo en relación con el número (- = antes, + = después, . = en lugar del punto decimal). Para el formateo monetario completo generalmente querrás usar localeconv() o money_format(), que exponen cada detalle numérico en lugar de una sola cadena.
Portabilidad y advertencias
- No está disponible en todos lados.
nl_langinfo()no está definida en Windows ni en compilaciones de PHP sin soporte delanginfode C. Protégete confunction_exists('nl_langinfo')si tu código debe ejecutarse en múltiples plataformas. - La configuración regional debe estar instalada. La constante se resuelve contra la base de datos de configuración regional del SO; una configuración regional no instalada silenciosamente deja activa la anterior.
setlocale()primero. Sin unsetlocale()explícito, obtienes lo que devuelve la configuración regional predeterminadaC/POSIX— normalmente inglés simple sin detalles de formato.- Las constantes son enteros, no cadenas. Escribe
nl_langinfo(ABDAY_1), nonl_langinfo('ABDAY_1').
Funciones relacionadas
setlocale()— selecciona la configuración regional que leenl_langinfo().localeconv()— devuelve las reglas de formato numérico y monetario como un array.strftime()— formatea una fecha usando una cadena de formato de configuración regional como la deD_T_FMT.money_format()— formatea un número como moneda para la configuración regional activa.