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.
| Costante | Descrizione |
|---|---|
ABDAY_1 … ABDAY_7 | Nomi abbreviati dei giorni della settimana, a partire da domenica |
DAY_1 … DAY_7 | Nomi completi dei giorni della settimana |
ABMON_1 … ABMON_12 | Nomi abbreviati dei mesi |
MON_1 … MON_12 | Nomi completi dei mesi |
D_T_FMT | Stringa di formato data e ora (come usata da strftime()) |
D_FMT | Stringa di formato data |
T_FMT | Stringa di formato ora |
AM_STR / PM_STR | Stringhe per AM e PM |
CRNCYSTR | Simbolo di valuta e la sua posizione |
YESEXPR / NOEXPR | Pattern regex per una risposta affermativa / negativa |
Nota:
DAY_neABDAY_nsono indicizzati a partire da domenica, quindiABDAY_1è domenica eABDAY_7è sabato.
Un esempio di base
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 è:
SunCome 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"; // janvierOutput atteso (quando entrambe le localizzazioni sono installate nel sistema):
January
janvierSe 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 supportolanginfodella libreria C. Proteggere confunction_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 unsetlocale()esplicito, si ottiene qualunque cosa restituisca la localizzazione predefinitaC/POSIX— di solito inglese semplice senza formattazioni particolari. - Le costanti sono interi, non stringhe. Scrivere
nl_langinfo(ABDAY_1), nonnl_langinfo('ABDAY_1').
Funzioni correlate
setlocale()— seleziona la localizzazione da cuinl_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 diD_T_FMT.money_format()— formatta un numero come valuta per la localizzazione attiva.