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

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

请各位大佬轻虐。感谢。

首先,不说其他,肯定是先将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-多语言切换的更多相关文章

  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. lightoj1145 【DP优化求方案】

    题意: 有一个k面的骰子,然后问你n个骰子朝上的面数字之和=s的方案: 思路: dp[i][j] 代表 前 i 个骰子组成 j 有多少种方案: 显然 dp[i][j] = dp[i - 1][j - ...

  2. Lightoj1012【DFS】

    题意: 输出和' @ '相连有多少个' . '包括' @ ',' # '代表墙不能走: 思路: 基础DFS,找到起点,然后跑一下DFS就好了: #include<cstdio> #incl ...

  3. Bloomberg 的一些功能

    FFLO: 查看ETF流动,注意在View点击Contries后选择Asia,查看亚洲流动. 随后对感兴趣的国家点击查看具体股票的流动 关闭Launchpad View之后再次打开: BLP 修改La ...

  4. rsync 同步的艺术

    rsync是类unix系统下的数据镜像备份工具,可以提供快速的增量文件传输. rsync 也可用于本机传输,如: # rsync -v mysql--linux-glibc2.-x86_64.tar. ...

  5. 考虑实现Comparable接口

    考虑实现Comparable接口   compareTo方法没有在Object中声明.相反,它是Comparable接口中唯一的方法.compareTo方法不但允许进行简单的等同性比较,而且允许执行顺 ...

  6. NOIP 2006 T2 金明的预算方案

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...

  7. BZOJ2440(容斥+莫比乌斯函数)

    题目本质: 首先有如下结论: 而通过写一写可以发现: 举例来讲,36及其倍数的数,会被1的倍数加一遍,被4的倍数扣一遍,会被9的倍数扣一遍,而为了最终计数为0,需要再加回来一遍,所以在容斥里面是正号. ...

  8. idea中deployment点击加号没有出现artifact

    转载 在主页面打开ProjectStructure,点击图示的按钮或是按ctrl+shift+alt+s快捷键 打开ProjectStructure后,按照图示依次点击Facets->+号,在弹 ...

  9. CF1043D Mysterious Crime

    思路: 参考了http://codeforces.com/blog/entry/62797,把第一个序列重标号成1,2,3,...,n,在剩下的序列中寻找形如x, x + 1, x + 2, ...的 ...

  10. jQuery和AJAX基础

    jQuery和AJAX基础 jQuery 基础: 1.jQuery 选择器: 元素选择器:$("p"): #id 选择器:$("#test"): .class ...