Yii Framework Forum: Yii::t Non Mi Funziona - Yii Framework Forum

Jump to content

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

Yii::t Non Mi Funziona Rate Topic: -----

#1 User is offline   danielemm 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 13-April 13

Posted 19 April 2013 - 05:44 PM

Salve,
sto procedendo con la traduzione delle stringhe nella mia app.

Ho creato una cartella it/apploc.php con dentro

<?php
    return array(
        "msg1"        =>  "errore!"
    );
?>


e nel mio codice ho provato

Yii::app()->language='it';
$translated_string = Yii::t("apploc","msg1");


ma il risultato è "msg1" e non "errore!"
Cosa mi perdo?
0

#2 User is offline   sensorario 

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

Posted 19 April 2013 - 05:58 PM

Che cosa hai inserito nel file di configurazione?
0

#3 User is offline   Fabrizio Caldarelli 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 311
  • Joined: 21-March 13
  • Location:Rome, Italy

Posted 19 April 2013 - 06:04 PM

Hai già letto qui?

http://www.yiiframew.../en/topics.i18n
0

#4 User is offline   danielemm 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 13-April 13

Posted 20 April 2013 - 02:04 AM

ho inserito questo in components:

'messages'=>array(
            'class'=>'CPhpMessageSource',
            ),



che poi, se non sbaglio, dovrebbe essere il modo di default.
0

#5 User is offline   sensorario 

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

Posted 20 April 2013 - 08:54 AM

CPhpMessageSource non bassa dal database. Io credo tu abbia bisogno di CDbMessageSource per distaccarti da files php ed usare voci pescate dal database. Puoi anche costruirti una tua interfaccia per creare tutte le lingue che preferisci.
0

#6 User is offline   danielemm 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 13-April 13

Posted 20 April 2013 - 09:12 AM

View Postsensorario, on 20 April 2013 - 08:54 AM, said:

CPhpMessageSource non bassa dal database. Io credo tu abbia bisogno di CDbMessageSource per distaccarti da files php ed usare voci pescate dal database. Puoi anche costruirti una tua interfaccia per creare tutte le lingue che preferisci.


no un attimo, io sono stracontento se funzionasse da file (non mi interessa per ora pescarli dal database).
Il fatto è che comunque non mi restituisce la traduzione e non capisco dove sbaglio :(
0

#7 User is offline   Fabrizio Caldarelli 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 311
  • Joined: 21-March 13
  • Location:Rome, Italy

Posted 20 April 2013 - 09:35 AM

View Postdanielemm, on 20 April 2013 - 09:12 AM, said:

no un attimo, io sono stracontento se funzionasse da file (non mi interessa per ora pescarli dal database).
Il fatto è che comunque non mi restituisce la traduzione e non capisco dove sbaglio :(


Ho provato il tuo codice e funziona perfettamente (nel senso che visualizza "errore").

Dove hai salvato lil file apploc.php?

Il percorso dev'essere:

[DOC_ROOT]/protected/messages/it/apploc.php
0

#8 User is offline   danielemm 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 13-April 13

Posted 20 April 2013 - 10:13 AM

View PostFabrizio Caldarelli, on 20 April 2013 - 09:35 AM, said:

Ho provato il tuo codice e funziona perfettamente (nel senso che visualizza "errore").

Dove hai salvato lil file apploc.php?

Il percorso dev'essere:

[DOC_ROOT]/protected/messages/it/apploc.php


ho creato dentro protected/messages due cartelle "it" e "en" con i file apploc.php.

ora per scrupolo mi sono visto la funzione t del framework e vedo che mi ritorna $message (quindi quella che io uso come chiave) nel caso in cui il terzo parametro $params non viene specificato (if($params===array()))
Ora intuisco ma non appoggio l'idea di scrivere per esteso il messaggio in lingua madre in $message e poi usarlo come chiave per la traduzione.
Vorrei semplicemente che prendesse il contenuto di quella chiave cosicchè da assegnare una stringa di identificazione e non il messaggio.
Mi pare un po' troppo sporco.

public static function t($category,$message,$params=array(),$source=null,$language=null)
	{
		if(self::$_app!==null)
		{
			if($source===null)
				$source=($category==='yii'||$category==='zii')?'coreMessages':'messages';
			if(($source=self::$_app->getComponent($source))!==null)
				$message=$source->translate($category,$message,$language);
		}
		/*** QUI RITORNA $MESSAGE SE IL TERZO PARMETRO NON VIENE SPECIFICATO */
               if($params===array())
			return $message;
		if(!is_array($params))
			$params=array($params);
		if(isset($params[0])) // number choice
		{
			if(strpos($message,'|')!==false)
			{
				if(strpos($message,'#')===false)
				{
					$chunks=explode('|',$message);
					$expressions=self::$_app->getLocale($language)->getPluralRules();
					if($n=min(count($chunks),count($expressions)))
					{
						for($i=0;$i<$n;$i++)
							$chunks[$i]=$expressions[$i].'#'.$chunks[$i];

						$message=implode('|',$chunks);
					}
				}
				$message=CChoiceFormat::format($message,$params[0]);
			}
			if(!isset($params['{n}']))
				$params['{n}']=$params[0];
			unset($params[0]);
		}
		return $params!==array() ? strtr($message,$params) : $message;
	}

0

#9 User is offline   Fabrizio Caldarelli 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 311
  • Joined: 21-March 13
  • Location:Rome, Italy

Posted 20 April 2013 - 10:25 AM

public static function t($category,$message,$params=array(),$source=null,$language=null)
	{
		if(self::$_app!==null)
		{
			if($source===null)
				$source=($category==='yii'||$category==='zii')?'coreMessages':'messages';
			if(($source=self::$_app->getComponent($source))!==null)
				$message=$source->translate($category,$message,$language);
		}
		/*** QUI RITORNA $MESSAGE SE IL TERZO PARMETRO NON VIENE SPECIFICATO */
               if($params===array())
			return $message;


Occhio però che quando ti ritorna $message, questa viene modificata nel blocco immediatamente precedente,
ovvero (self::$_app!==null) ... e ad occhio esegue le istruzioni:

$source=($category==='yii'||$category==='zii')?'coreMessages':'messages';
$source=self::$_app->getComponent($source);
$message=$source->translate($category,$message,$language);

quindi la variabile $message viene modificata nel frattempo.

Quindi anche se metti i file nella cartella che ti ho indicato, ancora non funziona?
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