PHP: utilizzare le date in italiano
This entry was posted on November 18th, 2009 and is filed under php.
Spesso nei nostri progetti abbiamo bisogno di gestire le date e di stamparle a schermo. L’inconveniente a cui andiamo incontro però è quello di vedere i giorni e i mesi in lingua inglese. Situazione piuttosto scomoda quando il progetto è interamente in lingua italiana e magari è destinato ad una tipologia di clientela che difficilmente ha padronanza con la lingua inglese.
Finora ho risolto il problema con funzioni ad hoc che andavano a modificare la stringa prima di essere stampata a schermo, soluzione non proprio perfetta ma sicuramente funzionante. Da una recentissima discussione con il mio amico @pk86it sono invece venuto a conoscenza di un funzione del PHP che risolve il problema in partenza.
La funzione è chiamata setlocale() ed è una funzione utilizzata per impostare date, valute e molte altre caratteristiche in base al paese scelto. Il suo prototipo è il seguente:
string setlocale ( int $category , string $locale [, string $... ] )
Il primo parametro specifica quale caratteristica vogliamo personalizzare, scelta tra le seguenti:
- LC_ALL for all of the below
- LC_COLLATE for string comparison, see strcoll()
- LC_CTYPE for character classification and conversion, for example strtoupper()
- LC_MONETARY for localeconv()
- LC_NUMERIC for decimal separator (See also localeconv())
- LC_TIME for date and time formatting with strftime()
- LC_MESSAGES for system responses (available if PHP was compiled with libintl)
Il secondo, invece, contiene il codice della regione.
Bisogna soffermarsi un momento però sul secondo paramentro in quanto c’è una differenza a seconda del sistema operativo su cui è utilizzato il PHP. Purtroppo il codice regione non è uguale per UNIX e Windows ma utilizzano un codice differente. Per ottenere il codice della regione di cui necessitiamo è possibile far riferimento ai seguenti documenti:
Nel nostro caso abbiamo che i codici per l’Italia sono i seguenti:
- Windows: “ita”
- Unix: “it_IT”
Come abbiamo visto dal prototipo quindi dobbiamo passare alla funzione la categoria che vogliamo personalizzare e il codice della regione. Nel nostro caso la categoria è “LC_TIME” ma se vogliamo una cosa generalizzata possiamo utilizzare anche “LC_ALL”.
All’inizio del nostro codice quindi basterà la seguente riga di codice per risolvere il problema:
//unix setlocale(LC_TIME, 'it_IT'); //windows setlocale(LC_TIME, 'ita');
Volendo stampare la data odierna in lingua italiana quindi ci basterà chiamare la seguente funzione:
echo strftime("%d %B %Y");
Prima di chiudere l’articolo volevo riprendere la piccola precisazione fatta per il codice della regione. In questo articolo ho trattato solo Windows e Unix in quanto i sistemi sicuramente più usati. Sono in molti infatti a utilizzare un serve PHP in locale su Windows per effettuare le prove e sappiamo benissimo che un server sicuro è installato su un sistema Unix. Probabilmente per sistemi operativi diversi ci sarà un codice di regione diverso ma basterà una breve ricerca per trovare il codice corrispondente.








