主要参考链接:
http://www.thinkphp.cn/topic/26190.html
http://www.poluoluo.com/jzxy/201403/265003.html
先说说我目前的情况:
1.Application/home/conf/下新建了一个tags.php,内容如下
<?php
//中英文切换需要的文件,似乎只要第一行app_begin就可以了
return array(
// 添加下面一行定义即可
'app_begin' => array('Behavior\CheckLangBehavior'), //注意这里,官方的文档解释感觉有误(大家自行分辨),TP3.2.3用Behavior\CheckLang会出错,提示:Class 'Behavior\CheckLang' not found
'LANG_SWITCH_ON' => true, // 开启语言包功能
'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效
'LANG_LIST' => 'zh-cn,en-us', // 允许切换的语言列表 用逗号分隔
'VAR_LANGUAGE' => 'l', // 默认语言切换变量,注意到上面发的链接了么,l=zh-cn,就是在这里定义l这个变量
);
?>2.Application/home/conf/config.php中添加如下 //中英文切换语言包配置项
'LANG_SWITCH_ON' => true, //开启语言包功能
'LANG_AUTO_DETECT' => true, // 自动侦测语言
'DEFAULT_LANG' => 'zh-cn', // 默认语言
'LANG_LIST' => 'zh-cn,en-us', //必须写可允许的语言列表
'VAR_LANGUAGE' => 'l', // 默认语言切换变量3.把thinkphp中的Library中的Behavior\Checklangbehavior文件拷贝到:application/common/behavior中(没有文件夹的时候新建了一个):并且namespase改写成:namespace Common\Behavior;
use Think\Behavior;
use Think\Hook;
整体如下
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Common\Behavior;
use Think\Behavior;
use Think\Hook;
/**
* 语言检测 并自动加载语言包
*/
class CheckLangBehavior {
// 行为扩展的执行入口必须是run
public function run(&$params){
// 检测语言
$this->checkLanguage();
}
/**
* 语言检查
* 检查浏览器支持语言,并自动加载语言包
* @access private
* @return void
*/
private function checkLanguage() {
// 不开启语言包功能,仅仅加载框架语言文件直接返回
if (!C('LANG_SWITCH_ON',null,false)){
return;
}
$langSet = C('DEFAULT_LANG');
$varLang = C('VAR_LANGUAGE',null,'l');
$langList = C('LANG_LIST',null,'zh-cn');
// 启用了语言包功能
// 根据是否启用自动侦测设置获取语言选择
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');
}
}
// 定义当前语言
define('LANG_SET',strtolower($langSet));
// 读取框架语言包
$file = THINK_PATH.'Lang/'.LANG_SET.'.php';
if(LANG_SET != C('DEFAULT_LANG') && is_file($file))
L(include $file);
// 读取应用公共语言包
$file = LANG_PATH.LANG_SET.'.php';
if(is_file($file))
L(include $file);
// 读取模块语言包
$file = MODULE_PATH.'Lang/'.LANG_SET.'.php';
if(is_file($file))
L(include $file);
// 读取当前控制器语言包
$file = MODULE_PATH.'Lang/'.LANG_SET.'/'.strtolower(CONTROLLER_NAME).'.php';
if (is_file($file))
L(include $file);
}
}4.application/home中,建立lang文件夹,在下面建立:zh_cn.php文件<?php
return array(
'welcome'=>'欢迎使用ThinkPHP',
'test'=>'你正在测试',
'message'=>'消息',
);
?>5.在index.html中插入其中如下代码 <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 class="result">{$Think.lang.message}</div>
<div class="result">{:L("message")}</div>
</div>但是发现运行情况如下:
就是说没起作用吗?哪里有问题?怎么改?
另外我还试了其他各种方法,也不行!包括下面这种方式:
在home\lang下建立了en-us和zh-cn文件夹,里面分别建立了common.php文件,文件中是数组配置信息,还有文件添加在了其他路径的,我都试了下,也是不行。

唯一成功过的一次!!!就是我直接把如下代码添加到thinkPHP/lang/zh-cn.php中了:
'_SELECT_NOT_EXIST_' => '记录不存在!',
'_EXPRESS_ERROR_' => '表达式错误',
'_TOKEN_ERROR_' => '表单令牌错误',
'_RECORD_HAS_UPDATE_' => '记录已经更新',
'_NOT_ALLOW_PHP_' => '模板禁用PHP代码',
'_PARAM_ERROR_' => '参数错误或者未定义',
'_ERROR_QUERY_EXPRESS_' => '错误的查询条件',
'welcome'=>'欢迎使用ThinkPHP',
'test'=>'你正在测试',
'message'=>'消息',en-us同理:'_EXPRESS_ERROR_' => 'Expression errors',
'_TOKEN_ERROR_' => "Form's token errors",
'_RECORD_HAS_UPDATE_' => 'Record has been updated',
'_NOT_ALLOW_PHP_' => 'PHP codes are not allowed in the template',
'_PARAM_ERROR_' => 'Parameter error or undefined',
'_ERROR_QUERY_EXPRESS_' => 'Query express error',
'welcome'=>'Welcome to use thinkphp',
'test'=>'you are testing',
'message'=>'you get a message',这样的方式可以成功:

但是这样放在thinkPHP中和底层通知消息在一起不好吧?我好想知道的问题怎么解决,已经整了一天了,谢谢大家!
最佳答案