php是静态语言,Thinkphp静态缓存多语言切换

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

  • 1.首先判断用户有无手动指定语言
  • 2.从session中获得当前语言
  • 3.session里面没有则从cookie里面去取
  • 4.若是cookie里没有,则根据IP段判断
  • 5.若不在指定ip范围内,自动侦测浏览器语言

首先我们在Common/Conf/tags.php配置开启多语言行为

return array(

'app_begin' => array('Behavior\CheckLangBehavior'),

);

接着我们看下ThinkPHP/Library/Behavior/CheckLangBehavior.class.php。其中根据ip程序没有作处理,请建表插入数据库自行解决。

if (!C('LANG_SWITCH_ON',null,false)){

return;

}

// 启用了语言包功能

$langSet = C('DEFAULT_LANG');

$varLang = C('VAR_LANGUAGE',null,'l');

$langList = C('LANG_LIST',null,'en');

// session_start();

// 首先判断用户有无手动指定语言

if(!empty($_GET[$varLang]))

{

$selectLang = $_GET[$varLang];

}

if (isset($selectLang)) {

// 切换语言

$langSet = $selectLang;

$abc='用户自己设置语言';

if (false === stripos($langList, $langSet)) $langSet = C('DEFAULT_LANG');// 非法语言参数

$this->selectLang($langSet);

} else {

// 从session中获得当前语言

$sessionLang = session('rm_selected_language');

if(isset($sessionLang))

{

$abc='从Session中获得';

$langSet = $sessionLang;

if (false === stripos($langList, $langSet)) {

$langSet = C('DEFAULT_LANG');// 非法语言参数

$this->selectLang($langSet); // 刷新成正确的值

}

} else {

if (cookie('rm_selected_language')) {// 获取上次用户的选择

$langSet = cookie('rm_selected_language');

$abc='获取上次用户的选择';

} elseif (null !== $this->getLangTypeByIP()) {

//优先级2 根据IP段判断

$langSet = $this->getLangTypeByIP();

$abc='根据IP段判断';

} elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {// 自动侦测浏览器语言

preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);

//优先级3 根据浏览器语言判断

$langSet = strtolower($matches[1]) == 'zh-cn' ? 'zh' : $matches[1];

$abc='自动侦测浏览器语言';

}

if (false === stripos($langList, $langSet)) $langSet = C('DEFAULT_LANG');// 非法语言参数

$this->selectLang($langSet);

}

}

// 定义当前语言

define('LANG_SET',strtolower($langSet));

define('HELLO',$abc);

// 读取框架语言包

$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);

从以上代码我们发现语言包在Common/lang文件夹下。

标签: 多语言中英文国际化

声明:本文为原创文章,如需转载,请注明来源sucaihuo.com并保留原文链接:http://www.sucaihuo.com/php/166.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值