Vorrei realizzare un sito in tre lingue: inglese, italiano e francese
ho delle pagine statiche e una parte dinamica in cui il gestore del sito potrà inserire delle news composte da:
titolo, descrizione e data
Vorrei creare un widget con le classiche 3 bandierine, di default la lingua italiana e in base alla bandierina cliccata il sito dovrebbe trasformarsi nella rispettiva lingua!
Ho cercato di capire come potrebbe funzionare tale processo, per quanto riguarda label e messaggi di sistema da quanto ho capito CPhpMessageSource definisce un file per ogni nazione con le rispettive traduzioni poi per i messaggi della parte dinamica dovrei utilizzare CDbMessagge Source con memorizzazione nel data base.
Ora per rendere la vita semplice all'utilizzatore del sito potrei creare una tabella e dunque un model con i campi:
id, titolo_it, titolo_en, titolo_fr, descrizione_it,descrizione_en,descrizione_fr e data. in questo modo creando con GII il CRUD l'utente può inserire tutto in una singola schermata!
Ora come realizzare le bandierine e soprattutto in base alla bandierina cliccata come caricare i campi giusti nella VIEW?? immagino uno scenario del genere: ho in query string il parametro language e in base a quello nella view con delle IF posso scegliere quali campi visualizzare... forse è una porcata!!!! avete una soluzione da suggerirmi???
Page 1 of 1
Multi language... come fare?
#2
Posted 08 April 2011 - 02:42 AM
Puoi salvare nella session dello user la lingua scelta (fai una action ad hoc nel siteController):
Questa imposta anche il tema. Questi dati li carichi all onInit della applicazione. Io uso un behavior per questo:
Qua imposto un po' di cose: la lingua, di conseguenza il nome dell'applicazione e le preferenze per la lingua di alcuni widget.
/**
* set the application language or the theme according to the choice of the user
* see protected/components/sectionMenu
* see protected/components/theme
*/
public function actionSettings()
{
if (isset($_POST['language']))
Yii::app()->user->setState('applicationLanguage',$_POST['language']);
if (isset($_POST['theme']))
Yii::app()->user->setState('theme',$_POST['theme']);
$this->redirect($_POST['url']);
}
Questa imposta anche il tema. Questi dati li carichi all onInit della applicazione. Io uso un behavior per questo:
<?php
/**
* ApplicationConfigBehavior is a behavior for the application.
* It loads additional config paramenters that cannot be statically
* written in config/main
*/
class ApplicationConfigBehavior extends CBehavior
{
/**
* Declares events and the event handler methods
* See yii documentation on behaviour
*/
public function events()
{
return array_merge(parent::events(), array(
'onBeginRequest'=>'beginRequest',
));
}
/**
* Load configuration that cannot be put in config/main
*/
public function beginRequest()
{
//Yii::app()->cache->flush();
// load parameters from db
if ($config=Config::model()->find())
{
Yii::app()->params['serverIdentificator']=$config->server_identificator;
Yii::app()->params['exclude_blocked']=$config->exclude_ip;
Yii::app()->params['salt']=$config->salt;
Yii::app()->params['maxDiffTime']=$config->max_time_in_page;
}
// set theme
if ($this->owner->user->getState('theme'))
$this->owner->theme=$this->owner->user->getState('theme');
else
Yii::app()->theme='wood';
// set the user language
//if the user choosed a language, we use the choosen one
if ($this->owner->user->getState('applicationLanguage'))
$this->owner->language=$this->owner->user->getState('applicationLanguage');
else
$this->owner->language='ru';
$this->owner->name=Yii::t('main', 'Birch');
if ($this->owner->language=='en')
$this->owner->widgetFactory->widgets['CJuiDatePicker']['language']='';
else
$this->owner->widgetFactory->widgets['CJuiDatePicker']['language']=$this->owner->language;
}
}
Qua imposto un po' di cose: la lingua, di conseguenza il nome dell'applicazione e le preferenze per la lingua di alcuni widget.
#3
Posted 12 April 2011 - 01:35 AM
zaccaria, on 08 April 2011 - 02:42 AM, said:
Puoi salvare nella session dello user la lingua scelta (fai una action ad hoc nel siteController):
Questa imposta anche il tema. Questi dati li carichi all onInit della applicazione. Io uso un behavior per questo:
Qua imposto un po' di cose: la lingua, di conseguenza il nome dell'applicazione e le preferenze per la lingua di alcuni widget.
/**
* set the application language or the theme according to the choice of the user
* see protected/components/sectionMenu
* see protected/components/theme
*/
public function actionSettings()
{
if (isset($_POST['language']))
Yii::app()->user->setState('applicationLanguage',$_POST['language']);
if (isset($_POST['theme']))
Yii::app()->user->setState('theme',$_POST['theme']);
$this->redirect($_POST['url']);
}
Questa imposta anche il tema. Questi dati li carichi all onInit della applicazione. Io uso un behavior per questo:
<?php
/**
* ApplicationConfigBehavior is a behavior for the application.
* It loads additional config paramenters that cannot be statically
* written in config/main
*/
class ApplicationConfigBehavior extends CBehavior
{
/**
* Declares events and the event handler methods
* See yii documentation on behaviour
*/
public function events()
{
return array_merge(parent::events(), array(
'onBeginRequest'=>'beginRequest',
));
}
/**
* Load configuration that cannot be put in config/main
*/
public function beginRequest()
{
//Yii::app()->cache->flush();
// load parameters from db
if ($config=Config::model()->find())
{
Yii::app()->params['serverIdentificator']=$config->server_identificator;
Yii::app()->params['exclude_blocked']=$config->exclude_ip;
Yii::app()->params['salt']=$config->salt;
Yii::app()->params['maxDiffTime']=$config->max_time_in_page;
}
// set theme
if ($this->owner->user->getState('theme'))
$this->owner->theme=$this->owner->user->getState('theme');
else
Yii::app()->theme='wood';
// set the user language
//if the user choosed a language, we use the choosen one
if ($this->owner->user->getState('applicationLanguage'))
$this->owner->language=$this->owner->user->getState('applicationLanguage');
else
$this->owner->language='ru';
$this->owner->name=Yii::t('main', 'Birch');
if ($this->owner->language=='en')
$this->owner->widgetFactory->widgets['CJuiDatePicker']['language']='';
else
$this->owner->widgetFactory->widgets['CJuiDatePicker']['language']=$this->owner->language;
}
}
Qua imposto un po' di cose: la lingua, di conseguenza il nome dell'applicazione e le preferenze per la lingua di alcuni widget.
Questi dati li carichi all onInit della applicazione. Io uso un behavior per questo??? cos'è un BEHAVIOR??? dove devo mettere questa classe??? e soprattutto devo specificare qualcosa in CONFIG/MAIN.PHP ?? grazie
#4
Posted 12 April 2011 - 03:13 AM
In config php mettici:
Per le domande di senso tipo cos'e' un behavior, dai un'occhio alla documentazione.
/* the behavior that loads other paramenters that can be loaded only runtime * see protected/components/ApplicationConfigBehavior.php */ 'behaviors'=>array( 'runTimeConfig'=>array( 'class'=>'ApplicationConfigBehavior' ) ),
Per le domande di senso tipo cos'e' un behavior, dai un'occhio alla documentazione.
#6
Posted 13 April 2011 - 01:31 AM
No, domande di senso tipo:
Dio esiste?
Dove andiamo?
Perche' viviamo?
Perche' programmiamo invece di essere su una spiaggia delle maldivie con un Martini e una Ruby?
Qual'e' lo scopo della vita?
Dio esiste?
Dove andiamo?
Perche' viviamo?
Perche' programmiamo invece di essere su una spiaggia delle maldivie con un Martini e una Ruby?
Qual'e' lo scopo della vita?
#7
Posted 15 April 2011 - 07:34 PM
Lo scopo della vita è avere 16/17 anni, comprare una rivista a caso, scoprire per caso che c'è un inserto di php3. (che cavolo è php?) Poi fare una pagina in php e trascinarla dentro al browser. Non va! Diamine. Dopo un anno noti "http://" e scopri che un anno prima sei stato uno scemo. Dopo qualche anno scopri che ... wow php va anche su Linux! 10 anni dopo ami quell'aneddoto ed anche yii e qualcuno ti saluta scavalcando il banale "ciao" ma dicendo "echo ciao" o anche solo semplicemente "php!". Questo è il senso della vita.
#8
Posted 26 May 2011 - 02:54 AM
Sono ancora alle prese con il multilanguage!!!
Ho creato in SiteController l'actionSettings ed ho impostato ApplicationConfigBehavior in component con relativo richiamo in main
Ora vorrei nelle pagine dunque nelle varie view le famose bandierine con le lingue, per consentire all'utente di cambiare la lingua come si fa?
?
?
?
Ho creato in SiteController l'actionSettings ed ho impostato ApplicationConfigBehavior in component con relativo richiamo in main
Ora vorrei nelle pagine dunque nelle varie view le famose bandierine con le lingue, per consentire all'utente di cambiare la lingua come si fa?
Share this topic:
Page 1 of 1

Help















