Yii实现站点多语言切换

本文介绍如何在Yii框架中实现多语言支持,包括设置全局默认语言、根据用户选择动态切换语言、提供页面语言切换选项及多语言描述文字的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值