Yii 国际化的实现







Yii 国际化的实现第一在 main.php 配置文件里加上'language'=>'zh_cn', 告诉程序这是中文的,你去找中文包去(zh_cn).第二在你对应的 model 里面加上以下代码,例如 Post model,

    
    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
        return array(
            'p_id'         => Yii::t('models/Post','id'),
            'p_title'      => Yii::t('models/Post','title'),
            'p_content'  => Yii::t('models/Post','content'),
            'p_addtime'     => 'PAddtime',
        );
    }
    
    
    Yii::t() 就是自动去找你的资源文件。参数第一个是路径,不用加.php, 后面是对应的名字
    
第三在 messages/ 下面新建 zh_cn/models/Post.php,内容是如下
<?php
return  array(
    'Post'    => 'y1_post',
    'id'    => '编号',
    'title'    => '标题',
    'content'=>'内容'

);

之后就好了。如果你还有英文以及其它语道理是一样的。

——————————————————————————————————————————

全局配置

第一在 main.php 配置文件里加上'language'=>'zh_cn' 或'sourceLanguage'=>'zh_cn' , 告诉程序这是中文的,你去找中文包去(zh_cn).

第二在你对应的 model 里面加上以下代码,例如 Post model,

Java代码   收藏代码
  1. public function rules()  
  2. {  
  3.     return array(  
  4.         array('password','compare''message'=>Yii::t('models/Post','content')),  
  5.     );  
  6. }  
  7. public function attributeLabels()  
  8. {  
  9.     return array(  
  10.         'p_id'         => Yii::t('models/Post','id'),  
  11.         'p_title'      => Yii::t('models/Post','title'),  
  12.         'p_content'  => Yii::t('models/Post','content'),  
  13.         'p_addtime'     => 'PAddtime',  
  14.     );  
  15. }  

得到某一个

Java代码   收藏代码
  1. $model->getAttributeLabel('p_content');    

 

Yii::t() 就是自动去找你的资源文件。参数第一个是路径,不用加.php, 后面是对应的名字

第三在 messages/ 下面新建 zh_cn/models/Post.php,内容是如下 不要命名成系统默认的YII,Zii

Java代码   收藏代码
  1. <?php  
  2. return  array(  
  3.     'Post'    => 'y1_post',  
  4.     'id'    => '编号',  
  5.     'title'    => '标题',  
  6.     'content'=>'内容'  
  7. );  

之后就好了。如果你还有英文以及其它语道理是一样的。

To get current language: 
$lang = Yii::app()->language;

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

部分配置

我们可以在应用程序配置文件进行设置,这样该设置将会对整个网站起作用 。但是我们只想翻译登录表单 ,所以我们只需要在SiteController::actionLogin()方法内进行设置,所以该设置只会在渲染登录表单时有效。所以打开该文件,在方法的开头按照如下形式设置目标语言

Java代码   收藏代码
  1. public function init() {  
  2.     if (Yii::app()->getRequest()->getServerName()=='cn.domain.com') {                 
  3.             Yii::app()->language='zh_cn';  
  4.     }  
  5. }  
 
Java代码   收藏代码
  1. public function actionLogin()   
  2. {  
  3.     Yii::app()->language = 'zh_cn'

    ————————————————————————————————————————————————

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))

In summary, in order to use message translation, the following steps are needed:

  1. Call Yii::t() at appropriate places;

  2. Create PHP translation files as protected/messages/LocaleID/CategoryName.php. Each file simply returns an array of message translations. Note, this assumes you are using the default CPhpMessageSource to store the translated messages.

  3. Configure CApplication::sourceLanguage and CApplication::language.


    
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值