thinkphp关于多语言支持的一个问题

浏览:700 发布日期:2010/03/16
- 普通 - 未处理
我不确定这个是不是一个bug,或者作者就是这样设计的,我遇到的情况是这样的。

我需要多语言支持,并且设置了默认语言是en,并且打开了自动检查语言的选项,配置如下:


'LANG_SWITCH_ON'=>true, // 开启多语言功能
'LANG_AUTO_DETECT'=>true,//以前是没有这项的。
'DEFAULT_LANG'=>'en', // 设置默认语言为en

我希望达到的效果是,但用户浏览器是什么语言就显示什么语言,用户选择了其他语言,这传递l/xx来显示。
如果用户的语言和选择的语言我都做了相应的版本,那么没有任何问题,
但是如果用户浏览器选择了一个我没有支持的语言,程序就挂了,但是我希望是他可以使用默认语言en来显示,这样不至于页面上显示一些多语言的变量。我找到了语言相关的代码“checkLanguage”,修改如下:

static private function checkLanguage()
{
$langSet = C('DEFAULT_LANG');
// 不开启语言包功能,仅仅加载框架语言文件直接返回
if (!C('LANG_SWITCH_ON')){
L(include THINK_PATH.'/Lang/'.$langSet.'.php');
return;
}
// 启用了语言包功能
// 根据是否启用自动侦测设置获取语言选择
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\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
$langSet = $matches[1];
cookie('think_language',$langSet,3600);
}
}
// 定义当前语言
define('LANG_SET',strtolower($langSet));
$isIncludeNothing = true;
if (App::readLanguageFile($langSet, $isIncludeNothing)){
$langSet = C('DEFAULT_LANG');
App::readLanguageFile($langSet, $isIncludeNothing);
}
}

static private function readLanguageFile($langSet, $isIncludeNothing){
// 加载框架语言包
if(is_file(THINK_PATH.'/Lang/'.$langSet.'.php')){
L(include THINK_PATH.'/Lang/'.$langSet.'.php');
$isIncludeNothing = false;
}
// 读取项目公共语言包
if (is_file(LANG_PATH.$langSet.'/common.php')){
L(include LANG_PATH.$langSet.'/common.php');
$isIncludeNothing = false;
}
$group = '';
// 读取当前分组公共语言包
if (defined('GROUP_NAME')){
$group = GROUP_NAME.C('TMPL_FILE_DEPR');
if (is_file(LANG_PATH.$langSet.'/'.$group.'lang.php')){
L(include LANG_PATH.$langSet.'/'.$group.'lang.php');
$isIncludeNothing = false;
}
}
// 读取当前模块语言包
if (is_file(LANG_PATH.$langSet.'/'.$group.strtolower(MODULE_NAME).'.php')){
L(include LANG_PATH.$langSet.'/'.$group.strtolower(MODULE_NAME).'.php');
$isIncludeNothing = false;
}
return $isIncludeNothing;
}



如果不做这样的修改,似乎无法完成文档上说的,使用默认语言的效果。

最后赞美一下tp,我用着很爽,思路和感觉就像是在使用struts2+ibatis一样。感谢作者的劳动:)
评论(
后面还有条评论,点击查看>>