Yii Framework Forum: Multi language... come fare? - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Multi language... come fare? Rate Topic: -----

#1 User is offline   webby 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 24-March 11

Posted 08 April 2011 - 02:26 AM

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???
0

#2 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 08 April 2011 - 02:42 AM

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.
0

#3 User is offline   webby 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 24-March 11

Posted 12 April 2011 - 01:35 AM

View Postzaccaria, on 08 April 2011 - 02:42 AM, said:

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
0

#4 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 12 April 2011 - 03:13 AM

In config php mettici:

	/* 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.
0

#5 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 12 April 2011 - 08:31 AM

senso io?
0

#6 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

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?
0

#7 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

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.
0

#8 User is offline   webby 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 24-March 11

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?????????????
0

#9 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 26 May 2011 - 07:26 AM

Take a look here, there is an example of form for submitting the language.In the example there is a ddl, you can use some buttons.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users