这两天做得项目中需要多语言切换,于是乎就看了看文档,感觉有些乱,就使用了终极必杀--百度。

借鉴了网上各位大佬所集成。整理出一篇比较适合类似我这种比较菜的随笔吧。

请各位大佬轻虐。感谢。

首先,不说其他,肯定是先将config.php 中将配置修改

  1.  

//是否开启多语言
'lang_switch_on' => true,
//语言种类
'lang_list' => ['zh-cn','en-us'],
//自动侦测语言
'lang_auto_detect' => true,
//
'VAR_LANGUAGE' => 'lang',
//默认全局过滤方法 用逗号分隔多个
'default_filter' => '',
//默认语言
'default_lang' => 'zh-cn',

  1.  

然后根据文档说明:

本渣是在应用下新建的文件夹,即在application下新建一个lang 文件夹,我是要中英文切换所以就新建了zh-cn.php和en-us.php

其中zh-cn.php内容:

  1. return [
  2. 'test'=> "中文",
  3. 'name'=>'叶子',
  4. ];

英文en-us.php内容:

  1. return [
  2. 'test'=> "English",
  3. 'name'=>'wind find',
  4. ];

然后在控制器构造函数中添加:

  1. public function _initialize()
  2. {
  3. if(!(Cookie::has('think_var'))){
  4. $this->lang();
  5. }
  6. $this->assign('think_lang',Cookie::get('think_var'));
  7. }

在当前控制器中添加lang方法

  1. public function lang()
  2. {
  3. $lang = input('?get.lang') ? input('get.lang') : 'cn';
  4. switch ($lang) {
  5. //中文
  6. case 'cn':
  7. cookie('think_var', 'zh-cn');
  8. break;
  9. //英文
  10. case 'en':
  11. cookie('think_var', 'en-us');
  12. break;
  13. default:
  14. cookie('think_var', 'zh-cn');
  15. break;
  16. }
  17. }

前台模板页面代码(模板输出方式有两种一种是{$Think.lang.test},一种是{:lang('test')}):

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>前台</title>
  6. <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  7. </head>
  8.  
  9. <body class="gray-bg">
  10.  
  11. <span>{$Think.lang.test}--{:lang('test')}</span>
  12. <span>{$Think.lang.name}</span>
  13. <br/>
  14. <button type="button" lang='cn' class="btn">中文</button>
  15. <button type="button" lang='en' class="btn">英文</button>
  16. <button type="button" lang='其他语言' class="btn">其他语言</button>
  17. <script type="text/javascript">
  18. $('.btn').click(function(){
  19. var data = {'lang':$(this).attr('lang')}
  20. $.get("{:url('index/lang')}",data,function(){
  21. location.reload();
  22. })
  23. })
  24. </script>
  25. </body>
  26. </html>

然后最最最重要的一点,必须将\thinkphp\library\think\Lang.php 中的detect()方法修改:

  1. /**
  2. * 自动侦测设置获取语言选择
  3. * @return string
  4. */
  5. public static function detect() {
  6. // 自动侦测设置获取语言选择
  7. $langSet = Config::get('default_lang');
  8. if (isset($_GET[self::$langDetectVar])) {
  9. // url中设置了语言变量
  10. $langSet = strtolower($_GET[self::$langDetectVar]);
  11. Cookie::set(self::$langCookieVar, $langSet, 3600);
  12. } elseif (Cookie::get(self::$langCookieVar)) {
  13. // 获取上次用户的选择
  14. $langSet = strtolower(Cookie::get(self::$langCookieVar));
  15. } elseif ($langSet) {
  16. // 获取默认语言
  17. Cookie::set(self::$langCookieVar, $langSet, 3600);
  18. } elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
  19. // 自动侦测浏览器语言
  20. preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
  21. $langSet = strtolower($matches[1]);
  22. Cookie::set(self::$langCookieVar, $langSet, 3600);
  23. }
  24. if (empty(self::$allowLangList) || in_array($langSet, self::$allowLangList)) {
  25. // 合法的语言
  26. self::$range = $langSet;
  27. }
  28. return self::$range;
  29. }

接下来就是见证结果的时刻咯:

就这样完成咯。

本文主要借鉴:https://blog.csdn.net/qq_24038207/article/details/72627940

再次感谢萧风_2016大大。感谢。

路过的各位大佬,如有不满意地方,请轻虐。不胜感激。

如有需要,个人整理的TP5多语言代码:

链接: https://pan.baidu.com/s/17oIdfkjh2xSGWKSVy-_w2Q 提取码: qa9u

2019年03月04号

ThinkPHP5.0-多语言切换的更多相关文章

  1. thinkphp5.0中英文切换

    首先来看下它的配置: // 是否开启多语言 'lang_switch_on' => true, //语音列表 'lang_list' => ['zh-cn','en-us'], // 获取 ...

  2. ThinkPHP5.0框架开发--第1章 Tp5.0安装

    ThinkPHP5.0框架开发--第1章 Tp5.0安装 第1章 Tp5.0 安装 ======================================================== 今 ...

  3. Android app应用多语言切换功能实现

    最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...

  4. ABP的语言切换

    在ABP官网http://www.aspnetboilerplate.com/创建一个Multi Page Web Application项目并打开,在Web项目下可以找到一个Controllers/ ...

  5. android 语言切换过程分析

    android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本 ...

  6. QT实现多语言切换

    功能需求: 网盘客户端要能够实现多国语言的切换,第一版要支持中.英文的切换.在实现过程中感觉QT对多国语言的支持还是很不错的,制作多语言包很方便,切换的逻辑也很简单.下面就来看一下QT中如何制作多语言 ...

  7. Android 应用内多语言切换

    最近公司的 App 里需要用到多语言切换,简单来说,就是如果用户没有选择语言选项时,App 默认跟随系统语言,如果用户在 App 内进行了语言设置,那么就使用用户设置的语言.当然,你会发现,App 的 ...

  8. C# winForm资源文件实现多语言切换

    这是我目前看到过最简单的多语言切换了 操作步驟 介面上的多語 Step1.將表單的Localizable屬性設為True Step2.切換表單的Language屬性為欲使用的語系 設完後會在分頁標籤上 ...

  9. 在使用Qt5.8完成程序动态语言切换时遇到的问题

    因为之前了解过一些Qt国际化的东西,所以在写程序的时候需要显示给用户的字符都使用了 tr(" ")的形式,然后使用 Qt Linguist得到相应的 qm(Qt message)文 ...

随机推荐

  1. 451. Sort Characters By Frequency (sort map)

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  2. HDU1597【二分瞎搞】

    题意: 求第n个数: 思路: 可以看到一种序列: 1 12 123 1234 12345 123456 1234567 12345678 123456789 1234567891 1234567891 ...

  3. Unity2D研究院之自动生成动画、AnimationController、Prefab(一)

    http://www.xuanyusong.com/archives/3243 国庆了,回家了.时刻还是要吃一颗学习的心,在家了也要抽出时间好好学习一下.之前MOMO一直没研究过Unity2D,今天研 ...

  4. chmod 详解

    http://man.linuxde.net/chmod chmod u+x,g+w f01 //为文件f01设置自己可以执行,组员可以写入的权限 chmod u=rwx,g=rw,o=r f01 c ...

  5. 构建使用SQL服务器的ASP.net Core2.0 API

    web api的教程非常少,使用 core2.0的更少,微软提供了一个aspnet core2的教程,也提供了EF core中访问SQL服务器的教程,参考这些教程可以做出使用sql server的as ...

  6. 有趣的JS存储 连等问题

    五个月不见了,你是不是和我一样又帅了,今天我们先来看一道经典的关于JS存储的题目,来一场紧张又刺激的脑内吃鸡大战吧: var a = {n:1}; a.x = a = {n:2}; console.l ...

  7. python 操作mysql数据库存

    代码: 说明:由于我本机没有安装数据库,数据库是在远程访问的,故地址不是localhost # __author__ = 'STEVEN' import pymysql host = '10.1.1. ...

  8. 排错:expected unqualified-id before string constant

    一个低级但是不好定位的编译错误,常见的问题是: 1. 语句的 { 括号不匹配. 2. 缺少 : , 特别是类的定义或声明,枚举的定义. 3. 变量名或函数名使用了保留字.

  9. android的handle

    Handler的定义:  用来接收子线程发送过来的数据,并利用该数据直接更新主线程的UI. 安卓中,一个应用启动时会开启一个主线程(UI线程),他的责任是负责管理界面中的控件.比如当你点击一个Butt ...

  10. Nginx upstream负载均衡配置

    1.在http节点下添加 upstream test {     server 127.0.0.1:16010;     server 127.0.0.1:16011; } 2.把server 节点下 ...