Yii框架中如何使用Yii::t()实现文本信息翻译和文件翻译

1.设置本地化语言

在protected/config文件夹下的main.php中做如下设置:

return array(
    ‘basePath‘=>dirname(__FILE__).DIRECTORY_SEPARATOR.‘..‘,
    ‘name‘=>‘My Web Application‘,
    ‘sourceLanguage‘=>‘en_us‘,
    ‘language‘=>‘zh_cn‘,

2.定义翻译文件

这里我使用的时通过PHP文件实现文本信息翻译(更多方法说明参考Yii框架官方指南系列48——专题:国际化 (I18N)),通过这个方法实现翻译之前先要在protected/messages下创建一个名为localID的文件夹(在本例中是zh_cn),然后在该文件夹下创建一个自定义的php文件(不能命名为yii,因为该名称只能被yii框架内部使用),本例中我们创建一个app.php:

return array(
    ‘My Web Application‘=>‘我的web站点‘,
    ‘Home‘=>‘首页‘,
    ‘About‘=>‘关于‘,
    ‘Contact‘=>‘联系我们‘,
    ‘Login‘=>‘登录‘,
    ‘Logout‘=>‘退出‘,
 );

3.使用翻译

调用方法很简单,只需通过内置的Yii::t()方法调用即可:

Yii::t(‘app‘,‘My Web Application‘)

比如我们可以在protected/views/layouts/main.php中对网站标题和导航条进行翻译:

<div id="header">
    <div id="logo"><?php echo CHtml::encode(Yii::t(‘app‘,Yii::app()->name)); ?></div>
</div><!-- header -->
<div id="mainmenu">
    <?php $this->widget(‘zii.widgets.CMenu‘,array(
        ‘items‘=>array(
            array(‘label‘=>Yii::t(‘app‘,‘Home‘), ‘url‘=>array(‘/site/index‘)),
            array(‘label‘=>Yii::t(‘app‘,‘About‘), ‘url‘=>array(‘/site/page‘, ‘view‘=>‘about‘)),
            array(‘label‘=>Yii::t(‘app‘,‘Contact‘), ‘url‘=>array(‘/site/contact‘)),
            array(‘label‘=>Yii::t(‘app‘,‘Login‘), ‘url‘=>array(‘/site/login‘), ‘visible‘=>Yii::app()->user->isGuest),
            array(‘label‘=>Yii::t(‘app‘,‘Logout‘).‘ (‘.Yii::app()->user->name.‘)‘, ‘url‘=>array(‘/site/logout‘), ‘visible‘=>!Yii::app()->user->isGuest)
        ),
     )); ?>
</div><!-- mainmenu -->

4.视图文件翻译

比如我们想要实现site/index.php的视图文件翻译,那么需要先在protected/views/site文件夹下先创建zh_cn文件夹,然后将site/index.php拷贝到site/zh_cn/文件夹下,然后对zh_cn文件夹下的index.php文件夹进行翻译:

<?php
    /* @var $this SiteController */
    $this->pageTitle=Yii::t("app",Yii::app()->name);
?>
<h1>欢迎来到 <i><?php echo CHtml::encode(Yii::t("app",Yii::app()->name)); ?></i></h1>
<p>祝贺! 你已经成功安装了你的Yii应用。</p>
<p>你可以通过修改下面两个文件来改变这个页面的内容:</p>
<ul>
     <li>视图文件: <code><?php echo __FILE__; ?></code></li>
     <li>布局文件: <code><?php echo $this->getLayoutFile(‘main‘); ?></code></li>
</ul>
<p>想要了解更多关于开发这个应用的内容,可以参考这篇<a href="http://www.yiiframework.com/doc/">文档</a>。如果有什么疑问的话,可以免费在<a href="http://www.yiiframework.com/forum/">论坛</a>里提问。</p>

至此,我们就简单完成了site/index页面的翻译工作,预览如下:

5.了解更多

传递参数

在php翻译源中的定义:

# protected/messages/zh_cn/app.php
<?php
    return array(
        // Other stuff.
        ‘The username {username} is not available.‘ => ‘用户名{username}无效。‘,
        // More other stuff.
    );

调用实现翻译语句:

echo Yii::t(‘app‘, ‘The username {username} is not available.‘, array(‘{username}‘ => $username));

处理复数

比如如果我们处理这样的翻译:

echo Yii::t(‘app‘, ‘The item has been added to your cart.|The {n} items have been added to your cart.‘, $num);

相应的app.php中的代码如下:

# protected/messages/es_mx/app.php
<?php
    return array(
        ‘n==1#The item has been added to your cart.| n>1#The items have been added to your cart.‘ =>
           ‘东西已经放到你的购物车了。|所有东西都已经放到你的购物车了。‘,
    );
时间: 2024-10-12 03:32:47

Yii框架中如何使用Yii::t()实现文本信息翻译和文件翻译的相关文章

使用Yii框架中遇到的三个问题

以下由我们在信易网络公司开发项目的时候终结出的一些经验 1.main.php文件中欲引入全局变量的问题 还原一下此问题:在Yii框架中,main.php一般会作为整个应用的配置文件,保存Application的各种参数,直接return数组.在使用的过程中,因为main.php文件一定会被Yii提前加载,所以将一些全局性的操作也放在了此文件,加载一些类操作啥的没有什么问题,当有一次加了一个全局变量,并且在其它地方使用global获取全局变量时,发现无论我如何努力都得到的是NULL.各种尝试后,终

Yii框架中使用mongodb扩展

前提条件:安装了mongodb数据库 安装了mongo的php驱动 下载Yii的mongo扩展: 下载链接:http://pan.baidu.com/s/1rPtx0 官方下载链接:https://github.com/canni/YiiMongoDbSuite 得到文件:YiiMongoDbSuite.tar.gz 解包,并将该文件放至应用的/protected/extensions文件夹下面 确保文件夹名称为:YiiMongoDbSuite 配置应用 1 vi /protected/conf

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因在YII框架的使用过程中,我们可以使用foreach直接遍历findAll等方法返回的对象的属性为什么呢?其实这与CModel实现的接口相关,接下来我们看下其实现的整个过程对于一个我们定义的model,它会继承虚类CActiveRecord,CActiveRecord类继承于CModel,如下所示: class special extends CActiveRecord { } abstract class CAct

Yii 框架中安装 memcache 及配置和测试

安装php_memcache.dll扩展 1.首先将php_memcache.dll文件放入E:\server\php\ext目录下 (php_memcache.dll下载地址:http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/)   一定要根据自己的php版本以及Thread Safety来下载相应的php_memcache.dll,Thread Safety可以在   phpinfo()中查看,enabled表示ts版

YII框架中save()和insert()的用法差异

要了解YII框架中save()和insert()的用法差异,首先查看一下手册中关于两个方法的定义: http://www.yiichina.com/api/CActiveRecord#save-detail save() 方法 源码: framework/db/ar/CActiveRecord.php#784 保存当前的记录. 插入记录到数据表的一行, 如果它的isNewRecord属性为true(通常情况下使用的‘new’运算符来创建记录). 否则, 将被用于更新表中的相应行(通常情况下,使用

yii框架中关于控制器中filter过滤器和外部action的使用

在yii框架中,控制器的过滤器分为执行前和执行后,这里举例是在执行控制器前的过滤. 需要在components/文件夹下定义公共的TestAction.php文件,并且实现run()方法.这个action是各个控制器公用的. class TestController extends Controller { /** * 定义外部的action * @return array */ public function actions() { return array( 'testa' => array

Yii框架中使用PHPExcel导出Excel文件

最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法: 1.首先在config\main.php中添加对PHPExcel的引用,我的方式是这样: 1 2 3 4 5 6 7 8 // autoloading model and component classes     'import'=>array(                  'application.models.*',         'application.components.*',

Yii框架中的SQL用法

Yii框架的SQL User::find()->all(); //返回所有用户数据: User::findOne($id); //返回 主键 id=1 的一条数据: User::find()->where(['name' => 'ttt'])->one(); //返回 ['name' => 'ttt'] 的一条数据: User::find()->where(['name' => 'ttt'])->all(); //返回 ['name' => 'ttt'

yii框架中cMenu的使用

最近在使用yii框架的时候,想做一个头部导航的分类,因为在开发的时候,考虑到了要兼容移动端,所以,内嵌了bootstrap,其实,yii在处理分类,多级分类的时候还是挺简单的,下面就让我们看看具体的一个例子吧: <nav class="navbar navbar-default" role="navigation"> <div class="navbar-header"> <button type="but