ThinkPHP5.0-多语言切换
这两天做得项目中需要多语言切换,于是乎就看了看文档,感觉有些乱,就使用了终极必杀--百度。
借鉴了网上各位大佬所集成。整理出一篇比较适合类似我这种比较菜的随笔吧。
请各位大佬轻虐。感谢。
首先,不说其他,肯定是先将config.php 中将配置修改
//是否开启多语言
'lang_switch_on' => true,
//语言种类
'lang_list' => ['zh-cn','en-us'],
//自动侦测语言
'lang_auto_detect' => true,
//
'VAR_LANGUAGE' => 'lang',
//默认全局过滤方法 用逗号分隔多个
'default_filter' => '',
//默认语言
'default_lang' => 'zh-cn',
然后根据文档说明:
本渣是在应用下新建的文件夹,即在application下新建一个lang 文件夹,我是要中英文切换所以就新建了zh-cn.php和en-us.php
其中zh-cn.php内容:
- return [
- 'test'=> "中文",
- 'name'=>'叶子',
- ];
英文en-us.php内容:
- return [
- 'test'=> "English",
- 'name'=>'wind find',
- ];
然后在控制器构造函数中添加:
- public function _initialize()
- {
- if(!(Cookie::has('think_var'))){
- $this->lang();
- }
- $this->assign('think_lang',Cookie::get('think_var'));
- }
在当前控制器中添加lang方法
- public function lang()
- {
- $lang = input('?get.lang') ? input('get.lang') : 'cn';
- switch ($lang) {
- //中文
- case 'cn':
- cookie('think_var', 'zh-cn');
- break;
- //英文
- case 'en':
- cookie('think_var', 'en-us');
- break;
- default:
- cookie('think_var', 'zh-cn');
- break;
- }
- }
前台模板页面代码(模板输出方式有两种一种是{$Think.lang.test},一种是{:lang('test')}):
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>前台</title>
- <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
- </head>
- <body class="gray-bg">
- <span>{$Think.lang.test}--{:lang('test')}</span>
- <span>{$Think.lang.name}</span>
- <br/>
- <button type="button" lang='cn' class="btn">中文</button>
- <button type="button" lang='en' class="btn">英文</button>
- <button type="button" lang='其他语言' class="btn">其他语言</button>
- <script type="text/javascript">
- $('.btn').click(function(){
- var data = {'lang':$(this).attr('lang')}
- $.get("{:url('index/lang')}",data,function(){
- location.reload();
- })
- })
- </script>
- </body>
- </html>
然后最最最重要的一点,必须将\thinkphp\library\think\Lang.php 中的detect()方法修改:
- /**
- * 自动侦测设置获取语言选择
- * @return string
- */
- public static function detect() {
- // 自动侦测设置获取语言选择
- $langSet = Config::get('default_lang');
- if (isset($_GET[self::$langDetectVar])) {
- // url中设置了语言变量
- $langSet = strtolower($_GET[self::$langDetectVar]);
- Cookie::set(self::$langCookieVar, $langSet, 3600);
- } elseif (Cookie::get(self::$langCookieVar)) {
- // 获取上次用户的选择
- $langSet = strtolower(Cookie::get(self::$langCookieVar));
- } elseif ($langSet) {
- // 获取默认语言
- Cookie::set(self::$langCookieVar, $langSet, 3600);
- } elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
- // 自动侦测浏览器语言
- preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
- $langSet = strtolower($matches[1]);
- Cookie::set(self::$langCookieVar, $langSet, 3600);
- }
- if (empty(self::$allowLangList) || in_array($langSet, self::$allowLangList)) {
- // 合法的语言
- self::$range = $langSet;
- }
- return self::$range;
- }
接下来就是见证结果的时刻咯:
就这样完成咯。
本文主要借鉴:https://blog.csdn.net/qq_24038207/article/details/72627940
再次感谢萧风_2016大大。感谢。
路过的各位大佬,如有不满意地方,请轻虐。不胜感激。
如有需要,个人整理的TP5多语言代码:
链接: https://pan.baidu.com/s/17oIdfkjh2xSGWKSVy-_w2Q 提取码: qa9u
2019年03月04号
ThinkPHP5.0-多语言切换的更多相关文章
- thinkphp5.0中英文切换
首先来看下它的配置: // 是否开启多语言 'lang_switch_on' => true, //语音列表 'lang_list' => ['zh-cn','en-us'], // 获取 ...
- ThinkPHP5.0框架开发--第1章 Tp5.0安装
ThinkPHP5.0框架开发--第1章 Tp5.0安装 第1章 Tp5.0 安装 ======================================================== 今 ...
- Android app应用多语言切换功能实现
最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...
- ABP的语言切换
在ABP官网http://www.aspnetboilerplate.com/创建一个Multi Page Web Application项目并打开,在Web项目下可以找到一个Controllers/ ...
- android 语言切换过程分析
android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本 ...
- QT实现多语言切换
功能需求: 网盘客户端要能够实现多国语言的切换,第一版要支持中.英文的切换.在实现过程中感觉QT对多国语言的支持还是很不错的,制作多语言包很方便,切换的逻辑也很简单.下面就来看一下QT中如何制作多语言 ...
- Android 应用内多语言切换
最近公司的 App 里需要用到多语言切换,简单来说,就是如果用户没有选择语言选项时,App 默认跟随系统语言,如果用户在 App 内进行了语言设置,那么就使用用户设置的语言.当然,你会发现,App 的 ...
- C# winForm资源文件实现多语言切换
这是我目前看到过最简单的多语言切换了 操作步驟 介面上的多語 Step1.將表單的Localizable屬性設為True Step2.切換表單的Language屬性為欲使用的語系 設完後會在分頁標籤上 ...
- 在使用Qt5.8完成程序动态语言切换时遇到的问题
因为之前了解过一些Qt国际化的东西,所以在写程序的时候需要显示给用户的字符都使用了 tr(" ")的形式,然后使用 Qt Linguist得到相应的 qm(Qt message)文 ...
随机推荐
- 451. Sort Characters By Frequency (sort map)
Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...
- HDU1597【二分瞎搞】
题意: 求第n个数: 思路: 可以看到一种序列: 1 12 123 1234 12345 123456 1234567 12345678 123456789 1234567891 1234567891 ...
- Unity2D研究院之自动生成动画、AnimationController、Prefab(一)
http://www.xuanyusong.com/archives/3243 国庆了,回家了.时刻还是要吃一颗学习的心,在家了也要抽出时间好好学习一下.之前MOMO一直没研究过Unity2D,今天研 ...
- chmod 详解
http://man.linuxde.net/chmod chmod u+x,g+w f01 //为文件f01设置自己可以执行,组员可以写入的权限 chmod u=rwx,g=rw,o=r f01 c ...
- 构建使用SQL服务器的ASP.net Core2.0 API
web api的教程非常少,使用 core2.0的更少,微软提供了一个aspnet core2的教程,也提供了EF core中访问SQL服务器的教程,参考这些教程可以做出使用sql server的as ...
- 有趣的JS存储 连等问题
五个月不见了,你是不是和我一样又帅了,今天我们先来看一道经典的关于JS存储的题目,来一场紧张又刺激的脑内吃鸡大战吧: var a = {n:1}; a.x = a = {n:2}; console.l ...
- python 操作mysql数据库存
代码: 说明:由于我本机没有安装数据库,数据库是在远程访问的,故地址不是localhost # __author__ = 'STEVEN' import pymysql host = '10.1.1. ...
- 排错:expected unqualified-id before string constant
一个低级但是不好定位的编译错误,常见的问题是: 1. 语句的 { 括号不匹配. 2. 缺少 : , 特别是类的定义或声明,枚举的定义. 3. 变量名或函数名使用了保留字.
- android的handle
Handler的定义: 用来接收子线程发送过来的数据,并利用该数据直接更新主线程的UI. 安卓中,一个应用启动时会开启一个主线程(UI线程),他的责任是负责管理界面中的控件.比如当你点击一个Butt ...
- Nginx upstream负载均衡配置
1.在http节点下添加 upstream test { server 127.0.0.1:16010; server 127.0.0.1:16011; } 2.把server 节点下 ...