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.
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;
}
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: