W3docs

localeconv()

Articolo sulla funzione PHP localeconv(), usata per ottenere le informazioni di formattazione per un locale specificato.

La funzione PHP localeconv() restituisce un array associativo che descrive come numeri e valute devono essere formattati nel locale attualmente attivo — quale separatore decimale utilizzare, quale separatore delle migliaia, il simbolo di valuta, dove vanno il simbolo e il segno, e così via. Legge qualsiasi locale impostato con setlocale(), quindi rappresenta il collegamento tra "in quale locale mi trovo" e "cosa dicono effettivamente le regole di formattazione."

Questa pagina tratta la sintassi, ogni chiave nell'array restituito, un esempio eseguibile e il problema che mette in difficoltà la maggior parte delle persone: il locale predefinito restituisce valori per lo più vuoti.

Sintassi

localeconv(): array

localeconv() non accetta alcun argomento e restituisce sempre un array. Non ha modalità di errore — non c'è alcun valore da passare e non restituisce mai false.

Un esempio di base

php— editable, runs on the server

Si noti la chiamata a setlocale() nella prima riga. Senza di essa, lo script viene eseguito nel locale predefinito C, dove la maggior parte dei campi monetari viene restituita vuota — si veda il problema descritto di seguito.

L'array restituito

localeconv() restituisce queste chiavi. Le chiavi semplici (decimal_point, thousands_sep) si applicano ai numeri ordinari; le chiavi mon_* si applicano specificamente ai valori monetari.

ChiaveSignificato
decimal_pointSeparatore decimale per numeri non monetari (es. .)
thousands_sepSeparatore delle migliaia per numeri non monetari (es. ,)
groupingArray che descrive il raggruppamento delle cifre, es. [3] = gruppi di 3
int_curr_symbolSimbolo di valuta internazionale, es. USD
currency_symbolSimbolo di valuta locale, es. $
mon_decimal_pointSeparatore decimale per valori monetari
mon_thousands_sepSeparatore delle migliaia per valori monetari
mon_groupingRaggruppamento delle cifre per valori monetari
positive_sign / negative_signStringhe di segno per valori positivi / negativi
int_frac_digits / frac_digitsNumero di cifre frazionarie (internazionale / locale)
p_cs_precedes / n_cs_precedes1 se il simbolo di valuta precede un valore positivo / negativo, 0 se segue
p_sep_by_space / n_sep_by_space1 se uno spazio separa il simbolo dal valore
p_sign_posn / n_sign_posnDove si trova il segno rispetto al valore e al simbolo

Per ispezionare l'intero array in una volta sola, usare print_r():

<?php
setlocale(LC_ALL, 'en_US.UTF-8');
print_r(localeconv());
?>

Per un sistema en_US.UTF-8 questo stampa (abbreviato):

Array
(
    [decimal_point] => .
    [thousands_sep] => ,
    [int_curr_symbol] => USD
    [currency_symbol] => $
    [frac_digits] => 2
    [p_cs_precedes] => 1
    [grouping] => Array ( [0] => 3 )
    ...
)

Problema: il locale predefinito restituisce valori vuoti

Prima di chiamare localeconv(), PHP viene eseguito nel locale C a meno che non ne venga impostato uno. Nel locale C quasi tutti i campi monetari sono vuoti e i campi con il conteggio delle cifre valgono 127 (il marcatore dello standard C per "valore non disponibile"):

<?php
// No setlocale() — default C locale.
$info = localeconv();
var_dump($info['currency_symbol']);  // string(0) ""
var_dump($info['frac_digits']);      // int(127)
?>

Quindi se localeconv() sembra "non restituire nulla di utile," quasi certamente si è dimenticato di chiamare prima setlocale(). Impostare il locale in modo esplicito, ed essere consapevoli che i locale disponibili dipendono dal sistema operativo su cui viene eseguito lo script.

Quando utilizzarla?

Raramente si chiama localeconv() per formattare l'output manualmente — number_format() e la classe NumberFormatter dell'estensione intl lo fanno al posto vostro. È più utile quando si hanno bisogno delle regole di locale grezze, ad esempio per:

  • costruire un formattatore personalizzato che rispetti il locale dell'utente,
  • normalizzare l'input dell'utente (sapendo se 1.234,56 usa , o . come separatore decimale),
  • decidere se il simbolo di valuta va prima o dopo l'importo.

Funzioni correlate

  • setlocale() — imposta il locale da cui localeconv() legge.
  • number_format() — formatta un numero con migliaia raggruppate.
  • money_format() — formattazione valuta in base al locale (rimossa in PHP 8.0).
  • strftime() — formattazione data/ora in base al locale.

Esercitazione

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