If you do:

Yii::t('test', "example message");

"example message" must be in the language defined over Yii::app()->sourceLanguage. If you set sourceLanguage to something else (eg: xx), you can then provide translation for your original sourceLanguage - "xx" does not exist and is used as a dummy.

Yii::app()->sourceLanguage = 'xx';

Yii::app()->language = 'en';

Yii::t('test', "0001");

You must provide this file: "protected/messages/en/test.php":

return array(

   '0001' => 'example message';

);


在config/main.php 里设置了sourceLanguage和language。        

 'sourceLanguage'=>'zh_cn',

   'language'=>'zh_cn', 

发现yii:t()将不生效 :blink: 


 原因在于CMessageSource.php里76行,                 

if($language!==$this->getLanguage())

    return $this->translateMessage($category,$message,$language);

else

    return $message; 这个时候由于 sourceLanguage = language;直接return $message;

sourceLanguage 代表你的数据源语言标记

language 表示当前语言标记

假如两者相同,就没有必要转换了~ 如:

 Yii::t('app','Hello');

 就标识数据源应该为英文了 

Yii::t('app','您好'); 

数据源应该为中文              


Yii::t('app', 'Path alias "{alias}" is redefined.',   array('{alias}'=>$alias))