您的位置:首页 > 编程语言 > PHP开发

Yii实现站点多语言切换

2013-06-27 15:37 696 查看
1. 设置全局默认的语言

在 protected/config/main.php 文件内添加如下代码,默认语言为中文。

'language' => 'zh_cn',
2.控制器根据用户选择动态切换语言

重写protected/components/Controller.php

<?php
/**
* Controller is the customized base controller class.
* All controller classes for this application should extend from this base class.
*/
class Controller extends CController
{
/**
* @var string the default layout for the controller view. Defaults to '//layouts/column1',
* meaning using a single column layout. See 'protected/views/layouts/column1.php'.
*/
public $layout='//layouts/column1';
/**
* @var array context menu items. This property will be assigned to {@link CMenu::items}.
*/
public $menu=array();
/**
* @var array the breadcrumbs of the current page. The value of this property will
* be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
* for more details on how to specify this property.
*/
public $breadcrumbs=array();

/**
* 设置当前站点显示的语言
*/
public function init()
{
if(isset($_GET['lang']) && $_GET['lang'] != "")
{
// 通过传递参数更改语言
Yii::app()->language = $_GET['lang'];
// 设置COOKIE,
Yii::app()->request->cookies['lang'] = new CHttpCookie('lang', $_GET['lang']);
}
else if (isset(Yii::app()->request->cookies['lang']) && Yii::app()->request->cookies['lang']->value != "")
{
// 根据COOKIE中语言类型来设置语言
Yii::app()->language = Yii::app()->request->cookies['lang']->value;
}
else
{
// 根据浏览器语言来设置语言
$lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
Yii::app()->language = strtolower(str_replace('-', '_', $lang[0]));
}
}

/**
* 用于生成多语言链接
* @param type $lang
* @return string
*/
public function langurl($lang = 'en_us')
{
if ($lang == Yii::app()->language)
{
return null;
}

$current_uri = Yii::app()->request->requestUri;
if (strrpos($current_uri, 'lang=')) {
//防止生成的 url 传值出现重复
$langstr = 'lang=' . Yii::app()->language;
$current_uri = str_replace('?' . $langstr . '&', '?', $current_uri);
$current_uri = str_replace('?' . $langstr, '', $current_uri);
$current_uri = str_replace('&' . $langstr, '', $current_uri);
}
if (strrpos($current_uri, '?')) {
return $current_uri . '&lang=' . $lang;
} else {
return $current_uri . '?lang=' . $lang;
}
}

}
3.页面提供切换语言选项

protected/views/layouts/main.php 中添加语言切换链接

<div id="header">
<div id="logo"><?php echo CHtml::encode(Yii::app()->name); ?></div>
<div style="text-align: right">
<?php echo CHtml::link ( ' 中文简体 ' , $this->langurl('zh_cn')) . '| ' .
CHtml::link ( ' 中文繁体 ' , $this->langurl('zh_tw')) . '| ' .
CHtml::link ( ' English ' ,$this->langurl('en_us')) ;
?>
</div>
</div>
4.多语言描述文字

使用Yii:t()或者protected/views下面添加对应语言的页面。

摘自:
http://vsfor.blog.51cto.com/4165449/1184156 http://blog.forecho.com/archives/800
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: