A-A+
PHP中简单实现多语言自动切换功能
相信有很多同学浏览过多多语言切换的网站,感觉好像很牛的样子,今天就给各位带来了一篇使用PHP来进行多语言自动切换的功能介绍。相信很多同学都不知道原来PHP还可以做语言切换,我们一起来看看,PHP是怎么实现的!
1.在Home(你取的项目名)的config.php中添加如下配置
<?php
return
array
(
//'配置项'=>'配置值'
'LANG_SWITCH_ON'
=> true,
//开启语言包功能
'LANG_AUTO_DETECT'
=> true,
// 自动侦测语言
'DEFAULT_LANG'
=>
'zh-cn'
,
// 默认语言
'LANG_LIST'
=>
'en-us,zh-cn,zh-tw'
,
//必须写可允许的语言列表
'VAR_LANGUAGE'
=>
'l'
,
// 默认语言切换变量
);
?>
2.Home的conf文件夹里添加一个php文件(tag.php),添加如下代码:
return
array
(
// 添加下面一行定义即可
'app_begin'
=>
array
(
'CheckLang'
)
);
3.把Extend/Behavior/CheckLangBehavior.class.php 文件复制到Home/lib/Behavior/中(完整版的thinkphp包才有,没有的话请自行创建)
CheckLangBehavior.class.php代码:
<?php
defined(
'THINK_PATH'
)
or
exit
();
/**
* 语言检测 并自动加载语言包
* @category Extend
* @package Extend
* @subpackage Behavior
*/
class
CheckLangBehavior
extends
Behavior {
// 行为参数定义(默认值) 可在项目配置中覆盖
protected
$options
=
array
(
'LANG_SWITCH_ON'
=> false,
// 默认关闭语言包功能
'LANG_AUTO_DETECT'
=> true,
// 自动侦测语言 开启多语言功能后有效
'LANG_LIST'
=>
'zh-cn'
,
// 允许切换的语言列表 用逗号分隔
'VAR_LANGUAGE'
=>
'l'
,
// 默认语言切换变量
);
// 行为扩展的执行入口必须是run
public
function
run(&
$params
){
// 开启静态缓存
$this
->checkLanguage();
}
/**
* 语言检查
* 检查浏览器支持语言,并自动加载语言包
* @access private
* @return void
*/
private
function
checkLanguage() {
// 不开启语言包功能,仅仅加载框架语言文件直接返回
if
(!C(
'LANG_SWITCH_ON'
)){
return
;
}
$langSet
= C(
'DEFAULT_LANG'
);
// 启用了语言包功能
// 根据是否启用自动侦测设置获取语言选择
if
(C(
'LANG_AUTO_DETECT'
)){
if
(isset(
$_GET
[C(
'VAR_LANGUAGE'
)])){
$langSet
=
$_GET
[C(
'VAR_LANGUAGE'
)];
// 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
(C(
'LANG_LIST'
),
$langSet
)) {
// 非法语言参数
$langSet
= C(
'DEFAULT_LANG'
);
}
}
// 定义当前语言
define(
'LANG_SET'
,
strtolower
(
$langSet
));
$group
=
''
;
$path
= (defined(
'GROUP_NAME'
) && C(
'APP_GROUP_MODE'
)==1) ? BASE_LIB_PATH.
'Lang/'
.LANG_SET.
'/'
: LANG_PATH.LANG_SET.
'/'
;
// 读取项目公共语言包
if
(
is_file
(LANG_PATH.LANG_SET.
'/common.php'
))
L(
include
LANG_PATH.LANG_SET.
'/common.php'
);
// 读取分组公共语言包
if
(defined(
'GROUP_NAME'
)){
if
(C(
'APP_GROUP_MODE'
)==1){
// 独立分组
$file
=
$path
.
'common.php'
;
}
else
{
// 普通分组
$file
=
$path
.GROUP_NAME.
'.php'
;
$group
= GROUP_NAME.C(
'TMPL_FILE_DEPR'
);
}
if
(
is_file
(
$file
))
L(
include
$file
);
}
// 读取当前模块语言包
if
(
is_file
(
$path
.
$group
.
strtolower
(MODULE_NAME).
'.php'
))
L(
include
$path
.
$group
.
strtolower
(MODULE_NAME).
'.php'
);
}
}
4.在Home里的lang文件夹下创建3个语言文件夹。分别是zh-cn en-us zh-tw,
在这三个文件夹里各创建一个common.php文件,如图:
在common.php 里对应写上
<?php
return
array
(
'welcome'
=>
'Welcome to use thinkphp'
,
);
?>
<?php
return
array
(
'welcome'
=>
'欢迎使用ThinkPHP'
,
);
<?php
return
array
(
'welcome'
=>
'歡迎使用ThinkPHP'
,
);
?>
5.在tpl/Index/文件夹下创建视图 index.html
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=utf-8"
>
<title>ThinkPHP示例:多语言</title>
</head>
<body>
<div
class
=
"main"
>
<div>切换语言:<a href=
"?l=zh-cn"
>简体中文</a> | <a href=
"?l=zh-tw"
>繁体中文</a> | <a href=
"?l=en-us"
>英文</a></div>
<div
class
=
"result"
>{
$Think
.lang.welcome}</div>
</div>
</body>
</html>
大功告成!
后台语言要进行语言切换的话, 在每句话之前加L,如:
public
function
index(){
print
L(
'add_user_error'
);
//add_user_error只是语言变量,具体的语言要到语言包里写
$this
->display();
}
根据自己的需要来做修改使用吧,希望可以给各位带来帮助。