W3docs

nl_langinfo()

Notre article présente la fonction PHP nl_langinfo(), utilisée pour récupérer des informations de localisation utiles pour travailler avec différentes langues.

La fonction PHP nl_langinfo() retourne une seule information spécifique à la locale — comme le nom abrégé d'un jour de la semaine, le format de date local ou le symbole monétaire — pour la locale actuellement active. C'est un simple wrapper autour de la fonction de bibliothèque C du même nom, donc les chaînes exactes qu'elle retourne sont déterminées par la base de données de locale de votre système d'exploitation, et non par PHP lui-même.

Cette page explique la syntaxe, les constantes d'élément les plus utiles, la façon dont nl_langinfo() réagit à setlocale(), et les avertissements de portabilité à connaître avant de s'y fier.

Syntaxe

string nl_langinfo ( int $item )

La fonction prend un paramètre, $item : une constante entière qui désigne l'information souhaitée. Elle retourne la chaîne correspondante pour la locale actuellement sélectionnée, ou false si $item n'est pas valide.

L'idée importante est que vous passez la même constante quelle que soit la langue. nl_langinfo(ABDAY_1) demande toujours « le nom abrégé du premier jour de la semaine » ; que vous obteniez Sun, Dim ou So dépend entièrement de la locale définie avec setlocale(). C'est ce qui rend la fonction utile : votre code reste indépendant de la langue tandis que la sortie s'adapte.

Constantes d'élément courantes

Les constantes sont regroupées par catégorie. La plupart des systèmes les définissent ; certaines sont spécifiques à la plateforme.

ConstanteDescription
ABDAY_1ABDAY_7Noms abrégés des jours de la semaine, à partir du dimanche
DAY_1DAY_7Noms complets des jours de la semaine
ABMON_1ABMON_12Noms abrégés des mois
MON_1MON_12Noms complets des mois
D_T_FMTChaîne de format de date et d'heure (utilisée par strftime())
D_FMTChaîne de format de date
T_FMTChaîne de format d'heure
AM_STR / PM_STRChaînes pour AM et PM
CRNCYSTRSymbole monétaire et sa position
YESEXPR / NOEXPRExpressions régulières pour une réponse affirmative / négative

Remarque : DAY_n et ABDAY_n sont indexés à partir du dimanche, donc ABDAY_1 correspond au dimanche et ABDAY_7 au samedi.

Un exemple de base

php— editable, runs on the server

Ici, setlocale() active la locale en_US, puis nl_langinfo(ABDAY_1) lit le nom abrégé du premier jour de la semaine (dimanche) pour cette locale.

Le résultat est :

Sun

Comment la locale modifie le résultat

Comme la valeur de retour suit la locale active, changer de locale entre les appels vous donne une sortie traduite avec la même constante. Les constantes ne changent jamais — seul setlocale() change.

<?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

Résultat attendu (lorsque les deux locales sont installées sur le système) :

January
janvier

Si une locale n'est pas installée, setlocale() retourne false et la locale précédente reste en vigueur, vous pouvez donc voir la langue précédente répétée. Vérifiez toujours la valeur de retour de setlocale() dans le code de production.

Lecture des formats de date et de devise

Deux des éléments les plus pratiques sont la chaîne de format date/heure et la chaîne de devise. Vous pouvez passer directement la chaîne de format à 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)

Le premier caractère de CRNCYSTR indique où le symbole se place par rapport au nombre (- = avant, + = après, . = à la place du séparateur décimal). Pour le formatage monétaire complet, vous préférerez généralement localeconv() ou money_format(), qui exposent chaque détail numérique plutôt qu'une seule chaîne.

Portabilité et points d'attention

  • Non disponible partout. nl_langinfo() est indéfinie sous Windows et dans les builds PHP compilés sans le support C langinfo. Protégez votre code avec function_exists('nl_langinfo') s'il doit fonctionner sur plusieurs plateformes.
  • La locale doit être réellement installée. La constante est résolue par rapport à la base de données de locale du système d'exploitation ; une locale non installée laisse silencieusement la précédente active.
  • setlocale() en premier. Sans setlocale() explicite, vous obtenez ce que retourne la locale par défaut C/POSIX — généralement de l'anglais basique sans fioritures de formatage.
  • Les constantes sont des entiers, pas des chaînes. Écrivez nl_langinfo(ABDAY_1), pas nl_langinfo('ABDAY_1').

Fonctions associées

  • setlocale() — sélectionne la locale que nl_langinfo() utilise.
  • localeconv() — retourne les règles de formatage numérique et monétaire sous forme de tableau.
  • strftime() — formate une date en utilisant une chaîne de format de locale telle que celle provenant de D_T_FMT.
  • money_format() — formate un nombre en devise pour la locale active.

Pratique

Pratique
Que fait la fonction nl_langinfo() en PHP ?
Que fait la fonction nl_langinfo() en PHP ?
Was this page helpful?