La comunità italiana su CakePHP

You are not logged in. Please login or register.


Pages: 1

Atom RSS

Posts [ 2 ]

Namaless

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 sad ) 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:

  1. L'utente entra e si deve eseguire un controllo se nell'url è specificata la lingua, in alternativa leggerla dal Browser.
  2. 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? lol

Namaless

Re: [1.2] L10n Languages Automated Switch

Dimenticavo.. L'unico problema riscontrato è questo:
Non viene passata la lingua in automatico. Praticamente l'internazionalizzazione funziona per via del redirect con url + lingua, ma praticamente ogni volta che cliccate su un link, venite rediretti.. insomma non và bene..
Su internet ho trovato questa soluzione, ma come dice un'utente in un commento lo si può fare perchè le funzioni private non esistono, visto che è compatibile php4 (uno dei pochi vantaggi..), però così funziona.

// ./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']);
    }
        
    $router =& Router::getInstance();
    $router->__paths[0]["base"] = $router->__paths[0]["base"] . "/" . $this->lang;
}

Posts [ 2 ]

Guest posting is disabled. You must login or register to post a reply.

Pages: 1

Topic info

1 guests and 0 users are reading this topic now


Forum quick jump menu

Currently used extensions: pun_topic_online_users, pun_karma, pun_admin_hook_navigator, pun_bbcode. Copyright © 2008 PunBB

[ Generated in 0.027 seconds, 10 queries executed ]