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
php是静态语言,Thinkphp静态缓存多语言切换相关推荐
- thinkphp htmls.php,ThinkPHP静态缓存简单配置和使用方法详解
本文实例讲述了ThinkPHP静态缓存简单配置和使用方法.分享给大家供大家参考,具体如下: 根据ThinkPHP官方手册:ThinkPHP内置了静态缓存类,通过静态缓存规则定义来实现了可配置的静态缓存 ...
- 某大型政务网站的优化咨询案例(视频点播VOD+GZIP压缩+静态文件CDN+Redis缓存+全文索引)
2022年圣诞节到来啦,很高兴这次我们又能一起度过~ 这次分享关于一个对某大型政务网站的优化咨询的案例,发生在今年的下半年,已过去一段时间,并取得了良好的成果!* 项目背景 某大型政务网站准备上线,需 ...
- C 语言编程 — 静态库、动态库和共享库
目录 文章目录 目录 文章目录 程序函数库 静态链接 创建静态库文件 动态链接 创建共享库文件 共享库文件的名字 共享库文件的存储路径 LD_LIBRARY_PATH 环境变量 ldconfig 指令 ...
- c 全局变量多线程调用_c语言局部变量 静态局部变量 全局变量与静态全局变量...
基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...
- 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...
- c 语言程序设计阚道宏,C语言用宏实现静态多态
综述 多态性是面向对象程序设计的一个重要特征. 在C++语言中,多态指的是:具有不同功能的函数可以用同一个函数名,可以用一个函数名调用不同内容的函数. C++的多态分为两种: 1. 静态多态性(编译时 ...
- 动态语言,静态类型,强类型定义语言,弱类型定义语言,
1 动态语言和静态语言 通常我们所说的动态语言.静态语言是指动态类型语言和静态类型语言. 1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时 ...
- 随机森林c语言编程,一种基于随机森林的C语言源代码静态评分方法与流程
本发明涉及评分领域及机器学习领域,它特别涉及一种基于随机森林的c语言源代码静态评分的构建方法. 背景技术: c语言源代码静态评分是指对根据一定的题目描述做出解答的c语言源代码进行评分.目前,主要流行的 ...
- 强/若类型语言 动/静态语言
弱/强类型指的是语言类型系统的类型检查的严格程度.动/静态指的是变量与类型的绑定方法. 弱类型相对于强类型来说类型检查更不严格,比如说允许变量类型的隐式转换,允许强制类型转换等等.强类型语言一般不允许 ...
最新文章
- 菜鸟也来学习ORACLE(1)_linux下安装oracle 11g
- [基础]Linux文件说明
- TurboMail邮件系统支持HTTPS双向认证
- VTK:小部件之ImageTracerWidget
- 项目管理工具project软件学习(一) - 项目信息设置
- SpringCloud工作笔记089---SpringBoot中Mybatis使用Condition_Criteria如何筛选日期类型数据
- Coinbase报告:DeFi协议总锁仓价值已超250亿美元,同比增长2500%
- NLP简报(Issue#9)
- ArcGIS矢量数据重分类
- 徐静蕾2008十大青春语录
- java中求某个时间跳过节假日和周末
- 脚本录制软件python 按键精灵 tc_《脚》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
- 用ImageMagick转换缩小JPG图像提高图像质量的方法
- 面试宝典之高分回答面试题(一)
- 华为OD机试 - 天然蓄水库(Java JS Python)
- Ubuntu内核编译教程-编译Linux4.5.0内核
- 那些提升开发人员工作效率的在线工具
- 从《偷天情缘》看A/B测试的问题
- 分布式的版本控制工具(Git)
- 【操作系统】Operating System Conceptions第一章知识整理总结
热门文章
- Spring Boot 企业实战_前夕
- python如何实时捕捉cmd显示_如何从Python脚本中捕获Python解释器和/或CMD.EXE的输出?
-问答-阿里云开发者社区-阿里云...
- laravel8找不到控制器_找一个“靠谱儿”的烟雾探测器方案,难不难?
- JAVA ulimit,java-从linux中的jvm中查找硬打开和软打开文件限制(ulimit -n和ulimit -Hn)
- mysql sum函数返回类型_MySQL的sum函数返回的门类
- python对象属性赋值_关于python对象 中dict属性赋值的疑问
- sql left join用法_图解 SQL 中 JOIN 的各种用法
- 连接驱动_在jdbc中完成对于jdbc参数、jdbc变量,加载驱动,创建连接的封装
- 计算机上没有office2010,《我安装了office2010,为什么桌面-右键-新建中没有excel呢?》 excel文件找不到...
- layui 分页ajax,实现Ajax异步的layui分页