Topic: [1.2] L10n Languages Automated Switch
Mi sono dovuto picchiare un pò ma alla fine ce l'ho fatta (notare l'ora -> 3.44
) a farlo funzionare a dovere.
Partiamo dal presupposto che usiate la classe "L10n" che permette la manipolazione dei testi dell'applicazione (non dei contenuti) e che quindi dovete studiare un sistema con cui l'utente al momento in cui entra sul sito gli venga mostrato il sito nella sua lingua preferita.
Purtroppo ci sono delle problematiche per gestirle:
- L'utente entra e si deve eseguire un controllo se nell'url è specificata la lingua, in alternativa leggerla dal Browser.
- Controllare che sia presente la lingua dell'utente, in caso contrario caricare quella predefinita.
La classe "L10n" ci aiuta molto in quanto per caricarla basta inizializzarla e darli in settaggio la lingua con cui visualizzare l'applicazione:
// ./app/app_controller.php
function beforeFilter()
{
$this->L10n = new L10n();
$this->L10n->get($language);
}La variabile $language và definita manualmente. Io ho implementato questo metodo con l'aiuto del "Routes" che mi permette di gestire la selezione della lingua anche da URL.
// ./app/app_controller.php
function beforeFilter()
{
$this->L10n = new L10n();
if ( isset($this->params['lang']) )
{
$this->lang = $this->params['lang'];
$this->L10n->get($this->lang);
}
else
{
$this->L10n->get();
$this->lang = $this->L10n->locale;
$this->redirect("/" . $this->lang . "/" . $this->params['url']['url']);
}
}// ./app/config/routes.php
Router::connect("/:lang/:controller/:action/*", array(), array("lang" => ".{3}"));La modifica a "routes.php" ci permette di settare come campo "lang" una stringa di 3 caratteri e verrà passata alla classe "L10n" che caricherà la lingua scelta se presente, in caso contrario quella predefinita (inglese naturalmente, ma è possibile anche impostare manualmente la lingua predefinita dell'applicazione).
Praticamente se andate su un URL tipo "http://cake-blog/posts/view/1" automaticamente venite rediretti con la lingua scelta "http://cake-blog/ita/posts/view/1".
Idee, suggerimenti e/o insulti? ![]()