Tag: TimeHelper

Utilizzare LC_TIME con CakePHP

Il grande team di CakePHP dalla versione 1.3 ha implementato il supporto alle traduzioni LC_TIME. Siccome ho investito un po’ di tempo nella ricerca dei vari elementi che servono ad impostare CakePHP e a capire il suo funzionamento ho pensato di scrivere qui queste informazioni in modo da risparmiare tempo a chi dovrà utilizzarlo dopo di me.

Prima di iniziare dovete sapere come funziona l’internazionalizzazione di CakePHP (Internazionalizzare le tue applicazioni) ed un piccolo appunto sull’i18n qui

Prepariamo CakePHP per LC_TIME

Prima di tutto abbiamo bisogno di un file con i parametri giusti per la nostra lingua, io naturalmente preparo tutto per l’italiano, ma lo potete fare per tutte le lingue che vi servono. Per avere i parametri se avete una macchia Linux a disposizione copiatevi il file /usr/share/i18n/locales/it_IT (it_IT nel mio caso) sul desktop oppure nel caso non avete una macchina a Linux a disposizione scaricatevi questo zip dove trovate tutti i file che erano presenti nel mio server.

Bene! Fatto questo, per far funzionare __ c (), $this->Time->format () e $this->Time->i18nFormat () abbiamo dobbiamo:

  1. creare un file denominato /app/Locale/ita/LC_TIME (ita nel mio caso per l’italiano)
  2. aprite il vostro file i18n di Linux, il mio it_IT
  3. copiate tutto quello che trovate tra LC_TIME  ed END LC_TIME, incollatelo nel file creato nel passaggio 1 e salvate

Attenzione: assicuratevi di aggiungere le definizioni “escape_char” e “comment_char” all’inizio del file LC_TIME appena modificato oppure rischiate di perdere delle ore alla ricerca del perché non funziona la vostra configurazione (come il sottoscritto):

comment_char %
escape_char /

Testiamo LC_TIME appena impostato

Aggiungiamo le seguenti linee ad una delle nostre viste ed aggiungiamo l’helper “Time” nel controller:

$timestamp = time();
 $timestring = $this->Time->format('Y-m-d H:i:s', $timestamp);
 $months = __c('mon',LC_TIME);
 pr("Timestamp = $timestamp");
 pr("Timestring = $timestring");
 pr("strftime() tradotto = " . strftime("%A %e %B %Y", strtotime($timestring)));
 pr("i18nFormat  tradotto = " . $this->Time->i18nFormat($timestring, "%A %e %B %Y"));
 pr("Time::format tradotto = " . $this->Time->format($timestring, '%A %e %B %Y'));
 pr($months);

Il risultato che dovremmo ottenere è questo:

Timestamp = 1353682742
Timestring = 2012-11-23 15:59:02
strftime() tradotto = Friday 23 November 2012
i18nFormat  tradotto = venerd 23 novembre 2012
Time::format tradotto = venerd 23 novembre 2012
Array
(
    [0] => gennaio
    [1] => febbraio
    [2] => marzo
    [3] => aprile
    [4] => maggio
    [5] => giugno
    [6] => luglio
    [7] => agosto
    [8] => settembre
    [9] => ottobre
    [10] => novembre
    [11] => dicembre
)

Per imparare ad utilizzare il formato di LC_TIME leggetevi questa pagina di PHP: strftime()