W3docs

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.

ConstanteDescripción
ABDAY_1ABDAY_7Nombres abreviados de los días de la semana, comenzando por el domingo
DAY_1DAY_7Nombres completos de los días de la semana
ABMON_1ABMON_12Nombres abreviados de los meses
MON_1MON_12Nombres completos de los meses
D_T_FMTCadena de formato de fecha y hora (como la usa strftime())
D_FMTCadena de formato de fecha
T_FMTCadena de formato de hora
AM_STR / PM_STRCadenas para AM y PM
CRNCYSTRSímbolo de moneda y su posición
YESEXPR / NOEXPRPatrones regex para una respuesta afirmativa / negativa

Nota: DAY_n y ABDAY_n se indexan desde el domingo, por lo que ABDAY_1 es el domingo y ABDAY_7 es el sábado.

Un ejemplo básico

php— editable, runs on the server

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:

Sun

Có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";   // janvier

Salida esperada (cuando ambas configuraciones regionales están instaladas en el sistema):

January
janvier

Si 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 de langinfo de C. Protégete con function_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 un setlocale() explícito, obtienes lo que devuelve la configuración regional predeterminada C/POSIX — normalmente inglés simple sin detalles de formato.
  • Las constantes son enteros, no cadenas. Escribe nl_langinfo(ABDAY_1), no nl_langinfo('ABDAY_1').

Funciones relacionadas

  • setlocale() — selecciona la configuración regional que lee nl_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 de D_T_FMT.
  • money_format() — formatea un número como moneda para la configuración regional activa.

Práctica

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