Yii2Yii2 è ancora in beta, e nonostante le minacce di possibili ed imprevedibili cambiamenti già riscuolte molto interesse tra gli sviluppatori: sul wiki e sul repo delle estensioni sono tantissime le pagine dedicate! In effetti è un cambiamento non indifferente per questo popolare framework. Sebbene non abbiamo ancora in progetto alcun upgrade dei nostri applicativi stiamo tenendo un occhio aperto per vedere come evolve la piattaforma, cercando di capire cosa comporterà lo sviluppo sul nuovo framework. Ma vediamo come iniziare ad usare Yii2...

Il metodo preferito per creare una nuova applicazione con Yii2 è composer, il package manager per PHP. Composer è molto utile perché consente una semplice gestione dei sorgenti di terze parti come le estensioni, Yii incluso. La guida ufficiale è molto esauriente sull'argomento quindi non entreremo nel merito, ci focalizzeremo invece sulla configurazione dell'applicativo per la localizzazione italiana e sull'installazione di alcune utilità che ci faranno risparmiare tempo e codice.

 

Configurazione

Come prima cosa dobbiamo dire a Yii che siamo in Italia. Apriamo il file di configurazione (che può essere common/config/main.php nel caso di un'applicazione advanced oppure config/main.php nel caso della base) ed aggiungiamo:

return [
    [...]
    'name' => 'Nome applicazione web',

    'language' => 'it_IT',
    'timeZone' => 'Europe/Rome', 
    [...]
];

in questo modo il framework saprà quali sono le nostre preferenze in termini di ora e soprattutto di formato di output di data, ora, numeri e valute. Questi parametro vengono usati dai Validator e dai Formatter, per la verifica e la visualizzazione dei dati. A differenza di Yii1, che usava una configurazione interna per la formattazione dei dati, Yii2 si basa sull'estensione Intl di PHP.

Nel caso volessimo fare un'applicazione multilingua dobbiamo anche tenere in considerazione la traduzione delle stringhe e dei messaggi che andremo a visualizzare con la funzione \Yii::t. Prima di vedere i dettagli, vale la pena ricordare che questo metodo ha principalmente due parametri: il primo è la categoria del messaggio, mentre il secondo è il messaggio stesso (ci sarebbe anche la possibilità di un terzo parametro per specificare le variabili della stringa, ma vedremo poi). Ad esempio:
\Yii::t('appfrontend','Questo è un messaggio di prova');
significa che la stringa sarà organizzata nella categoria appfrontend. Le categorie dei messaggi sono molto utili per raggruppare messaggi simili, o comunque che rientrano in uno stesso gruppo.

La configurazione della lingua è specificata tramite il componente i18n in questo modo:

'components' => [
    // ...
    'i18n' => [
        'translations' => [
            'app*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                //'basePath' => '@app/messages',
                //'sourceLanguage' => 'en',
                'fileMap' => [
                    'app' => 'app.php',
                    'app/error' => 'error.php',
                ],
            ],
        ],
    ],
],

Vediamo i parametri:

  • app*: è un filtro di ricerca, significa che stiamo specificando la configurazione una determinata categoria (o gruppo di categorie). Questo parametro è molto utile ad esempio nel caso in cui abbiamo un'applicazione scritta in italiano ma usiamo delle estensioni con una lingua nativa diversa (tipicamente inglese);
  • class: è il metodo che userà Yii per trovare le stringhe tradotte, normalmente si usano dei file quindi PhpMessageSource;
  • basePath: è il percorso dove troveremo i file tradotti, di solito è messages all'interno dell'applicazione;
  • sourceLanguage: se omesso prende la lingua dell'applicazione (language che abbiamo messo sopra), altrimenti è possibile specificarlo (come ad esempio nel caso delle estensioni in inglese);
  • fileMap: consente di specificare in quali file Yii troverà le traduzioni per le categorie specificate. In questo caso avremo app.php per i messaggi app, mentre error.php per app/error. E' possibile omettere il parametro, il framework andrà a cercare i file nel percorso BasePath/messages/IdLingua/Categoria.php.

 

Traduzione dei messaggi di Yii

Sempre nella configurazione andiamo a specificare come comportarsi con i messaggi standard del framework:

    'i18n' => [
        'translations' => [
            'yii' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'sourceLanguage' => 'en',
            ],
        ],
    ],

 

Formattazione output

'components' => [
   'formatter' => [
      'class' => 'yii\i18n\Formatter',
   ],
],

 Con questa configurazione potremo poi usare il metodo \Yii::$app->formatter per visualizzare, ad esempio, date e numeri.

 

Gestione delle date

Una menzione particolare la merita la gestione delle date. Normalmente nel database vengono memorizzate nel formato Y-m-d, mentre da noi sono visualizzate come d-m-Y. In Yii1 ci potevamo avvalere dell'estensione i18n-datetime-behavior per gestire la conversione automatica, in Yii2 lo sviluppatore Kartik ha già realizzato una copiosa ed interessante lista di widget ed utilità basati su bootstrap3, inclusa la gestione della conversione delle date di nome date control. Installando questa estensione avremo a disposizione un widget con selettore da calendario, e la gestione automatica della visualizzazione. A differenza della soluzione precedente, Kartik usa un approccio totalmente Javascript, effettuando una conversione sull'evento di cambio del valore del campo. Per la configurazione e le istruzioni di utilizzo rimandiamo alla pagina ufficiale del progetto (o GitHub).Che dire, interessante ma sorpattutto molto utile!

Fateci sapere le vostre estensioni preferite per Yii2, le aggiungeremo a questa lista!

Articolo aggiornato dopo la pubblicazione iniziale.

We use cookies to improve our website and your experience when using it. Cookies used for the essential operation of this site have already been set. To find out more about the cookies we use and how to delete them, see our privacy policy.

  I accept cookies from this site.
EU Cookie Directive Module Information