Gestione Delle Lingue Per Utente

Buon giorno,

sono nuovo sia di questo forum, sia di Yii quindi scusatemi in anticipo per la domanda forse semplice.

Ho fatto un po’ di ricerche ma non sono riuscito a trovare la risposta.

Avrei un problema di questo tipo, io ho nel database una tabella utenti con un campo chiamato lang dove ho specificato il codice della lingua e vorrei che dopo che hanno effettuato l’accesso il sistema prenda la lingua dell’utente.

Ho letto la guida e ho trovato questi due metodi:

public string getLanguage()

public void setLanguage(string $language)

così ho provato a mettere nel SiteController nel login il seguente codice:

$user = new User(Yii::app()->user->getId());

Yii::app()->setLanguage( $user->lang );

ma non funziona funziona solo se lo metto nel controller quando genera l’index, ma così facendo funziona solo per quella pagina e non per tutta l’app.

Spero di essermi spiegato, vi ringrazio in anticipo per la pazienza e l’eventuale risposta.

Ciao!

Ad ogni richiesta devi eseguire il comando:


Yii::app()->setLanguage( $user->lang );

Che però ti consiglio di recuperare dalla sessione per non appesantire il carico del database:


Yii::app()->setLanguage( Yii::app()->session['_lang'] );

Poi devi preoccuparti di come recuperare il linguaggio quando non è in sessione:




$user = new User(Yii::app()->user->getId());

Yii::app()->setLanguage( $user->lang );



Quindi imposti sempre la lingua con questa priorità: se non c’è la sessione, la recuperi dall’utente corrente, altrimenti dalla sessione:




if(isset(Yii::app()->session['_lang'])) {

    Yii::app()->setLanguage( Yii::app()->session['_lang'] );

} else {

    $user = new User(Yii::app()->user->getId());

    Yii::app()->setLanguage( $user->lang );

}



Ho scritto questo codice "a sentimento" senza provarlo. Facci sapere se funziona correttamente.

Ho incluso il tuo codice nel metodo init() di controller.php così non ho dovuto specificarlo per ogni controller e sembra funzionare benissimo.

Grazie!