W3docs

nl_langinfo()

Guida alla funzione PHP nl_langinfo(), usata per ottenere informazioni sulla localizzazione attiva come nomi dei giorni, formati di data e valuta.

La funzione PHP nl_langinfo() restituisce una singola informazione specifica della localizzazione — come il nome abbreviato di un giorno della settimana, il formato della data locale o il simbolo di valuta — per la localizzazione attualmente attiva. È un sottile wrapper attorno all'omonima funzione della libreria C, quindi le stringhe esatte che restituisce sono determinate dal database delle localizzazioni del sistema operativo, non da PHP stesso.

Questa pagina spiega la sintassi, le costanti degli elementi più utili, come nl_langinfo() reagisce a setlocale() e le avvertenze di portabilità da conoscere prima di affidarsi ad essa.

Sintassi

string nl_langinfo ( int $item )

La funzione accetta un parametro, $item: una costante intera che indica il tipo di informazione desiderata. Restituisce la stringa corrispondente per la localizzazione attualmente selezionata, oppure false se $item non è valido.

L'idea importante è che si passa la stessa costante indipendentemente dalla lingua. nl_langinfo(ABDAY_1) chiede sempre "il nome abbreviato del primo giorno della settimana"; che si ottenga Sun, Dim o So dipende interamente dalla localizzazione impostata con setlocale(). È questo che rende la funzione utile: il codice rimane indipendente dalla lingua mentre l'output si adatta.

Costanti degli elementi comuni

Le costanti sono raggruppate per categoria. La maggior parte dei sistemi le definisce; alcune sono specifiche della piattaforma.

CostanteDescrizione
ABDAY_1ABDAY_7Nomi abbreviati dei giorni della settimana, a partire da domenica
DAY_1DAY_7Nomi completi dei giorni della settimana
ABMON_1ABMON_12Nomi abbreviati dei mesi
MON_1MON_12Nomi completi dei mesi
D_T_FMTStringa di formato data e ora (come usata da strftime())
D_FMTStringa di formato data
T_FMTStringa di formato ora
AM_STR / PM_STRStringhe per AM e PM
CRNCYSTRSimbolo di valuta e la sua posizione
YESEXPR / NOEXPRPattern regex per una risposta affermativa / negativa

Nota: DAY_n e ABDAY_n sono indicizzati a partire da domenica, quindi ABDAY_1 è domenica e ABDAY_7 è sabato.

Un esempio di base

php— editable, runs on the server

Qui setlocale() attiva la localizzazione en_US, quindi nl_langinfo(ABDAY_1) legge il nome abbreviato del primo giorno della settimana (domenica) per quella localizzazione.

L'output è:

Sun

Come la localizzazione cambia il risultato

Poiché il valore restituito segue la localizzazione attiva, cambiare localizzazione tra una chiamata e l'altra produce output tradotto dalla stessa costante. Le costanti non cambiano mai — solo setlocale() lo fa.

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

Output atteso (quando entrambe le localizzazioni sono installate nel sistema):

January
janvier

Se una localizzazione non è installata, setlocale() restituisce false e la localizzazione precedente rimane attiva, quindi si potrebbe vedere la lingua precedente ripetuta. Verificare sempre il valore restituito da setlocale() nel codice di produzione.

Lettura dei formati di data e valuta

Due degli elementi più pratici sono la stringa di formato data/ora e la stringa di valuta. È possibile passare direttamente la stringa di formato 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)

Il carattere iniziale di CRNCYSTR indica dove il simbolo va rispetto al numero (- = prima, + = dopo, . = al posto del punto decimale). Per la formattazione monetaria completa di solito è preferibile usare localeconv() o money_format(), che espongono ogni dettaglio numerico invece di una singola stringa.

Portabilità e avvertenze

  • Non è disponibile ovunque. nl_langinfo() non è definita su Windows e su build PHP compilate senza il supporto langinfo della libreria C. Proteggere con function_exists('nl_langinfo') se il codice deve essere eseguito su più piattaforme.
  • La localizzazione deve essere effettivamente installata. La costante viene risolta rispetto al database delle localizzazioni del sistema operativo; una localizzazione non installata lascia silenziosamente attiva quella precedente.
  • Prima setlocale(). Senza un setlocale() esplicito, si ottiene qualunque cosa restituisca la localizzazione predefinita C/POSIX — di solito inglese semplice senza formattazioni particolari.
  • Le costanti sono interi, non stringhe. Scrivere nl_langinfo(ABDAY_1), non nl_langinfo('ABDAY_1').

Funzioni correlate

  • setlocale() — seleziona la localizzazione da cui nl_langinfo() legge.
  • localeconv() — restituisce le regole di formattazione numerica e monetaria come array.
  • strftime() — formatta una data usando una stringa di formato locale come quella di D_T_FMT.
  • money_format() — formatta un numero come valuta per la localizzazione attiva.

Pratica

Pratica
Cosa fa la funzione nl_langinfo() in PHP?
Cosa fa la funzione nl_langinfo() in PHP?
Was this page helpful?