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???
Puoi salvare nella session dello user la lingua scelta (fai una action ad hoc nel siteController):
/**
* 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
/* 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.
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.