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

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

请各位大佬轻虐。感谢。

首先,不说其他,肯定是先将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. Qt解析CSV文件

    最近需要解析Excel文件,于是顺带写了解析CSV的代码 定义数据类型LX::Sheet #ifndef LX_H #define LX_H #include <QString> #inc ...

  2. CSA Round #53 (Div. 2 only) Histogram Partition(模拟)

    传送门 题意 给出一个数组A,你有一个数组B(一开始全为0),询问多少次操作后B转化为A 一次操作:选择一段区间,加上某个正整数 分析 构建一个栈, 输入一个数,若当前栈空或栈顶元素比输入小,则加入栈 ...

  3. python 如何在 command 中能够找到 其他module

    部分代码如下: __author__ = 'norsd' # coding=utf8 # 上句说明使用utf8编码 try: import os import sys import time #关键语 ...

  4. 洛谷P2568 GCD(莫比乌斯反演)

    传送门 这题和p2257一样……不过是n和m相同而已…… 所以虽然正解是欧拉函数然而直接改改就行了所以懒得再码一遍了2333 不过这题卡空间,记得mu开short,vis开bool //minamot ...

  5. react native 获取地图需要的SHA1

    1.从电脑的根目录进入.android文件 2.进入.android文件后输入 keytool -v -list -keystore debug.keystore 3.回车输入密码,(可以直接回车不用 ...

  6. 最新的vue没有dev-server.js文件,如何进行后台数据模拟?

    最新的vue里dev-server.js被替换成了webpack-dev-conf.js 在模拟后台数据的时候直接在webpack-dev-conf.js文件中修改 第一步,在const portfi ...

  7. mysql 巧用存储过程

    根据距离排序 CREATE DEFINER=`ln` PROCEDURE `Proc_4`(IN `lon1` double,IN `lat1` double,IN `PageStart` int,I ...

  8. python入门之流程控制

    if else 格式: if 条件 command1 command2elif 条件: command3    command4 else: command3 command4 注意条件后和else后 ...

  9. C51 笔记

    一 关于宏常量的长度:C51中定义一个常数宏(默认是16位的),如果用宏表示一个32位的宏而不加'L'标志的话就会出错.如 #define BLOCK_A_BASEADDR  18*64*1024 / ...

  10. 使用em和rem替代px

    rem是指根元素的字体大小,默认情况下html的字体大小为:16px=1rem.而em是相对单位,是基于它的祖先元素计算的. 如果我们不指定html和body的字体大小,要得到12px的rem需要这样 ...