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

  • 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静态缓存多语言切换相关推荐

  1. thinkphp htmls.php,ThinkPHP静态缓存简单配置和使用方法详解

    本文实例讲述了ThinkPHP静态缓存简单配置和使用方法.分享给大家供大家参考,具体如下: 根据ThinkPHP官方手册:ThinkPHP内置了静态缓存类,通过静态缓存规则定义来实现了可配置的静态缓存 ...

  2. 某大型政务网站的优化咨询案例(视频点播VOD+GZIP压缩+静态文件CDN+Redis缓存+全文索引)

    2022年圣诞节到来啦,很高兴这次我们又能一起度过~ 这次分享关于一个对某大型政务网站的优化咨询的案例,发生在今年的下半年,已过去一段时间,并取得了良好的成果!* 项目背景 某大型政务网站准备上线,需 ...

  3. C 语言编程 — 静态库、动态库和共享库

    目录 文章目录 目录 文章目录 程序函数库 静态链接 创建静态库文件 动态链接 创建共享库文件 共享库文件的名字 共享库文件的存储路径 LD_LIBRARY_PATH 环境变量 ldconfig 指令 ...

  4. c 全局变量多线程调用_c语言局部变量 静态局部变量 全局变量与静态全局变量...

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  5. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  6. c 语言程序设计阚道宏,C语言用宏实现静态多态

    综述 多态性是面向对象程序设计的一个重要特征. 在C++语言中,多态指的是:具有不同功能的函数可以用同一个函数名,可以用一个函数名调用不同内容的函数. C++的多态分为两种: 1. 静态多态性(编译时 ...

  7. 动态语言,静态类型,强类型定义语言,弱类型定义语言,

    1 动态语言和静态语言 通常我们所说的动态语言.静态语言是指动态类型语言和静态类型语言.    1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时 ...

  8. 随机森林c语言编程,一种基于随机森林的C语言源代码静态评分方法与流程

    本发明涉及评分领域及机器学习领域,它特别涉及一种基于随机森林的c语言源代码静态评分的构建方法. 背景技术: c语言源代码静态评分是指对根据一定的题目描述做出解答的c语言源代码进行评分.目前,主要流行的 ...

  9. 强/若类型语言 动/静态语言

    弱/强类型指的是语言类型系统的类型检查的严格程度.动/静态指的是变量与类型的绑定方法. 弱类型相对于强类型来说类型检查更不严格,比如说允许变量类型的隐式转换,允许强制类型转换等等.强类型语言一般不允许 ...

最新文章

  1. 菜鸟也来学习ORACLE(1)_linux下安装oracle 11g
  2. [基础]Linux文件说明
  3. TurboMail邮件系统支持HTTPS双向认证
  4. VTK:小部件之ImageTracerWidget
  5. 项目管理工具project软件学习(一) - 项目信息设置
  6. SpringCloud工作笔记089---SpringBoot中Mybatis使用Condition_Criteria如何筛选日期类型数据
  7. Coinbase报告:DeFi协议总锁仓价值已超250亿美元,同比增长2500%
  8. NLP简报(Issue#9)
  9. ArcGIS矢量数据重分类
  10. 徐静蕾2008十大青春语录
  11. java中求某个时间跳过节假日和周末
  12. 脚本录制软件python 按键精灵 tc_《脚》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  13. 用ImageMagick转换缩小JPG图像提高图像质量的方法
  14. 面试宝典之高分回答面试题(一)
  15. 华为OD机试 - 天然蓄水库(Java JS Python)
  16. Ubuntu内核编译教程-编译Linux4.5.0内核
  17. 那些提升开发人员工作效率的在线工具
  18. 从《偷天情缘》看A/B测试的问题
  19. 分布式的版本控制工具(Git)
  20. 【操作系统】Operating System Conceptions第一章知识整理总结

热门文章

  1. Spring Boot 企业实战_前夕
  2. python如何实时捕捉cmd显示_如何从Python脚本中捕获Python解释器和/或CMD.EXE的输出? -问答-阿里云开发者社区-阿里云...
  3. laravel8找不到控制器_找一个“靠谱儿”的烟雾探测器方案,难不难?
  4. JAVA ulimit,java-从linux中的jvm中查找硬打开和软打开文件限制(ulimit -n和ulimit -Hn)
  5. mysql sum函数返回类型_MySQL的sum函数返回的门类
  6. python对象属性赋值_关于python对象 中dict属性赋值的疑问
  7. sql left join用法_图解 SQL 中 JOIN 的各种用法
  8. 连接驱动_在jdbc中完成对于jdbc参数、jdbc变量,加载驱动,创建连接的封装
  9. 计算机上没有office2010,《我安装了office2010,为什么桌面-右键-新建中没有excel呢?》 excel文件找不到...
  10. layui 分页ajax,实现Ajax异步的layui分页