用ThinkPHP3.2:
- 语言包功能可分整个项目或者某个模块来设置
- 语言包读取的优先顺序
- 语言包的切换原理
- 以整个项目为例,模块下同理
一、做好配置工作
1.开启多语言行为,在Application/Common/Conf/tags.php(没有则自己创建)
<?php
return array(
// 开启多语言行为
'app_begin' => array('Behavior\CheckLangBehavior'),
);
2.在Application/Common/Conf/config.php配置文件中添加配置项
'LANG_SWITCH_ON' => true, //开启语言包功能
'LANG_AUTO_DETECT' => true,// 自动侦测语言
'LANG_LIST' => 'zh-cn,zh-hk,en_us',//可允许的语言列表
'DEFAULT_LANG' => 'zh-cn',// 默认语言
'VAR_LANGUAGE' => 'l',// 默认语言切换变量
3.准备好相关语言包及内容(一般取名规则:语言简写-地区简写,名字能匹配上就行),如图
二、在项目中使用
1.在控制器中使用L方法获取语言包中的文字:L(‘CeShi’)
2.在模板中使用,如以下代码:
<div class="top-main-right clear">
<a href=""><span class="sina"></span>{$Think.lang.CeShi}</a>
<a href=""><span class="tencent"></span>{$Think.lang.NiHao}</a> |
<a href="" >{$Think.lang.ZSCS}</a> |
<!--控制器中直接使用L方法读取语言包-->
<a href="">{:L('YuYanJianXie')}</a> |
当前语言:
<span class="language-selected">{$Think.lang.YuYanMingCheng}</span>
<div class="language-box">
<ul>
<li><a href="?l=zh-cn">简体中文</a></li>
<li><a href="?l=zh-hk">繁體中文</a></li>
<li><a href="?l=en_us">English</a></li>
</ul>
</div>
</div>
三、前端页面效果图
1.简体中文
2.鼠标移入来切换
3.繁体中文
4.英文
四、注意点
1.读取顺序:
ThinkPHP/Lang/zh-cn.php 框架底层语言包
Application/Common/Lang/zh-cn.php 应用公共语言包
Application/Home/Lang/zh-cn.php Home模块语言包
Application/Home/Lang/zh-cn/user.php Home模块的User控制器语言包
2.配置注意点:开启了自动侦测,优先侦测的,没有开启侦测,优先默认的,自动侦测优先于默认。
3.切换原理:第一次进入网站使用自动侦测的语言包,或者默认的,在我们通过GET方式提交后会更改 $_COOKIE[‘think_language’],网站运行时会先读取cookie来判断使用哪个语言包。
4.自动侦测:在我们开启的多语言行为的文件中,默认位置是:/ThinkPHP/Library/Behavior/CheckLangBehavior.class.php;有需要的也可以在这里自己加上通过地区IP来判断。
// 根据是否启用自动侦测设置获取语言选择
if (C('LANG_AUTO_DETECT',null,true)){
if(isset($_GET[$varLang])){
$langSet = $_GET[$varLang];// url中设置了语言变量
cookie('think_language',$langSet,3600);
}elseif(cookie('think_language')){// 获取上次用户的选择
$langSet = cookie('think_language');
}elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){// 自动侦测浏览器语言
preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
$langSet = $matches[1];
cookie('think_language',$langSet,3600);
}
if(false === stripos($langList,$langSet)) { // 非法语言参数
$langSet = C('DEFAULT_LANG');
}
}
若对你有帮助,请留下一个顶吧 : )