<?php //Yii 构建多语言站点
/*
方法一: 使用yii-multilanguage 扩展
优:设置简单,使用便捷,容错性强,可以对默认语言 en_us进行再翻译
缺:url结构变化,对SEO可能有部分负面影响
网址:https://github.com/mishamx/yii-multilanguage
*/
//下载扩展后 解压文件到对应目录 url/protected/extensions/yii-multilanguage/MLUrlManager.php
//查看 readme 中的说明内容,修改 config/main 中的 urlManager 设置
// languages 数组中增删自己需要的语言,如:zh_cn , zh_tw , en_us 等
//创建对应的翻译文件 如:
/* url/protected/messages/
./zh_cn/ main.php <?php return array('Home'=>'首页','Test'=>'测试',);
./zh_tw/ main.php <?php return array('Home'=>'首頁','Test'=>'測試',);
./en_us/ main.php <?php return array('Home'=>'Home Page','Test'=>'Try Now',);
*/
//视图或布局对应位置 调用示例如下
echo CHtml::link('简体中文',Yii::app()->UrlManager->changeLanguage('zh_cn')) .'|'.
CHtml::link('繁体中文',Yii::app()->UrlManager->changeLanguage('zh_tw')) .'|'.
CHtml::link('英文',Yii::app()->UrlManager->changeLanguage('en_us')) .'<br />';
//在需要使用翻译部分的地方 使用示例如下
echo Yii::t('main','Test');
//参数一 'main'为对应翻译目录下的文件名, 参数二'Test'为翻译文件所返回数组中的 键名
// 最终输出对应键值,若无键值则直接输出键值
/*************************************************************************************************************
方法二:修改 Controller 初始化操作
优: 比较直观
缺点: 不同页面的语言链接即时生成,可能对加载速度及部分性能造成影响
*/
//同方法一,创建对应的目录及翻译文件
//添加如下代码至 url/protected/components/Controller.php 文件中
public function init()
{
//Yii::app()->charset = 'utf-8';//防止多语言乱码
$lang = Yii::app()->request->getParam('lang');
if(isset($lang) && $lang !="")
{
Yii::app()->language= $lang;
setcookie('lang',$lang);
}else if(isset($_COOKIE['lang']) && $_COOKIE['lang'] != "")
{
Yii::app()->language=$_COOKIE['lang'];
}else{
//Yii::app()->language = 'en_us';//en_us 为系统默认语言,若部分英文翻译不同,语言目录请勿命名为en_us
}
}
public function langurl($lang = 'en_us'){ //用于生成多语言链接
if($lang == Yii::app()->language) return '';
$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;
}
///在视图或布局文件中创建 语言切换链接 示例
echo CHtml::link ( ' 中文 ' , $this->langurl('zh_cn')) . '| ' . CHtml::link ( 'English' ,$this->langurl('en_us')) ;
//在需要使用翻译部分的地方 使用示例如下
echo Yii::t('main','Test');
/******************************************************************************************/
Yii实现站点多语言切换
原创
©著作权归作者所有:来自51CTO博客作者乄尐的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:HTML 标签可用属性整理收集
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Android应用实现多语言切换
关于Android应用实现多语言切换,有好几种办法,网上也搜到很多资料,这里有个简单有效的办法。 步骤如下:&nb
Android 国际化 多语言 语言切换 -
jquery实现前端多语言切换
有时,产品的用户是其他国家(如英语国家)的,这时候就
jQuery jquery bundle sed -
android多语言切换
android多语言切换
xml android java