thinkphp5 开启多语言
一.配置点击打开链接
1.开启语言包功能
'lang_switch_on' => true,
2.支持的语言列表
'lang_list' => ['zh-cn','en-us'],
二.语言定义(默认语言无需定义,下面会提到原因及使用)方法
1.文件定义
框架或模块目录\lang\en-us.php
return [
'按钮1'=>'button1',//表示模板内使用{:lang('按钮1')}获得的字符在英文状态下显示为button1
'按钮2'=>'button2',
'其它语言变量'=>'Other language variables',
];
ps:如果还需要加载其他的语言包,可以在自动检测语言之后,用load方法进行加载:
\think\Lang::load(路径\lang\语言.php');
2.动态定义在控制器方法中
a.单个设置
\think\Lang::set($name, $value,'zh-cn');//$name $value是键值对
\think\Lang::set($name, $value,'en-us');
如\think\Lang::set('按钮', 'button','en-us');//表示模板内使用{:lang('按钮')}获得的字符在英文状态下显示为button
b.批量设置
\think\Lang::set(['按钮1'=>'button1','按钮2'=>'button2'],'','en-us');
ps:
1.动态定义优先
2.默认语言无需语言包或动态设置,控制器方法,模板内在需要的地方可以直接使用默认语言变量,再编写其它语言包或动态设置其它语言(需保证默认语言变量是其它语言变量的键值)即可切换,
如使用语言为中(默认)英文,那么只要编写英文语言包
return [
'中文'=>'Chinese',
//.........
];
模板使用{:lang('中文')},那么在中文状态下会显示'中文',英文状态下会显示'Chinese',
模板使用{:lang('中文中文')},那么在中英文状态下都会显示'中文中文',英文状态下无效,因为中文语言变量'中文中文'与英文语言变量的键值'中文'不一致
三.在项目(貌似模块无效)公共文件(common.php)中选择自动侦测当前语言
\think\Lang::detect();
ps:convention.php里有个'default_lang' => 'zh-cn',貌似设置无效.为使之有效,可以修改detect方法如下
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;
}
}
4.自动侦测浏览器语言
四.控制器方法编写(模块/Index.php)
//转英文
public function enlang() {
$lang=input('lang');
switch ($lang) {
case 'en':
cookie('think_var', 'en-us');
break;
case 'zn':
cookie('think_var', 'zh-cn');
break;
default:
cookie('think_var','zh-cn');
break;
}
}
五.模板使用(index.html)
<button class='n layui-btn' type="button" lang='en'>{:lang('英文')}</button>
<button class='n layui-btn layui-btn-danger' lang='zn' type="button">{:lang('中文')}</button>
<button type="button" lang='其它语言'>{:lang('按钮3')}</button>
{:lang('其它语言变量')}
语言的使用是通过设置cookie来实现的,由于cookie的特性,所以设置后需要刷新才能成功
模板发送ajax请求成功后刷新页面
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.js"></script>
<script>
$('.n').click(function(){
var data={'lang':$(this).attr('lang')};
$.get("{:url('Index/enlang')}",data,function(){
location.reload();
})
})
</script>
thinkphp5 开启多语言的更多相关文章
- ThinkPHP5 打开多语言支持
1.在thinkphp\start.php 页面中添加多语言的切换函数的参数格式,本贴目前只支持两种语言,并注意必须全部小写!全部小写!!全部小写!!!,注意这一步很关键 Lang::setAllow ...
- 开启C语言的学习之门
本人是一枚工业界的码农,为了职业道路越来越宽广决定向上位机方面进军,C语言曾经在大学里面学过点皮毛但是离应用远远不够,尽量每天在工作之余更新自己学习的进度,同时也希望有大神能给予在编程道路上的指导,话 ...
- Kibana开启中文语言
Kibana在6.7以后的版本,支持了多种语言.并且自带在安装包里. 开启方式: 找到Kibana配置文件所在:config/kibana.yml找到配置:i18n.locale: "en& ...
- ThinkPHP5.0-多语言切换
这两天做得项目中需要多语言切换,于是乎就看了看文档,感觉有些乱,就使用了终极必杀--百度. 借鉴了网上各位大佬所集成.整理出一篇比较适合类似我这种比较菜的随笔吧. 请各位大佬轻虐.感谢. 首先,不说其 ...
- ThinkPHP5 远程命令执行漏洞分析
本文首发自安全脉搏,转载请注明出处. 前言 ThinkPHP官方最近修复了一个严重的远程代码执行漏洞.这个主要漏洞原因是由于框架对控制器名没有进行足够的校验导致在没有开启强制路由的情况下可以构造恶意语 ...
- Module Zero之语言管理
返回<Module Zero学习目录> 概览介绍 如何开启 管理语言 管理本地化文本 概览介绍 ABP定义了一个健壮的UI本地化系统,它可用于服务端和客户端.它允许在不同的资源中(Reso ...
- thinkphp多语言设置
thinkphp多语言设置有点'高大上',为什么说它有点'高大上'呢?因为本人设置了好久才弄好,而本人之所以弄了好久的原因,竟然是因为'开启语言设置必须得先开启初始化系统的行为类',所以,在这里,因为 ...
- LINQ——语言级集成查询入门指南(1)
本文主要是对语言级集成查询或简称为LINQ做一个介绍,包括LINQ是什么,不是什么,并对它在语言特性方面做一个简短的回顾,然后举一些使用LINQ的实际例子进行说明. 语言级集成查询是什么? 在我过去写 ...
- nopCommerce 3.9 大波浪系列 之 路由扩展 [多语言Seo的实现]
一.nop种的路由注册 在Global.asax,Application_Start()方法中会进行路由注册,代码如下. public static void RegisterRoutes(Route ...
随机推荐
- Django中的CBV和FBV
Django中的CBV和FBV 一. CBV CBV是采用面向对象的方法写视图文件. CBV的执行流程: 浏览器向服务器端发送请求,服务器端的urls.py根据请求匹配url,找到要执行的视图类,执 ...
- R基础-适合于纯小白
#说明 文中‘test’均为模拟名称,原始编码为GKB方式###1.R语言介绍#### 偏统计 ###2.Rstudio和R的基本操作#### #2.1查看R语言自带的数据集#### data() # ...
- 33、springboot整合springcloud
Spring Cloud Spring Cloud是一个分布式的整体解决方案.Spring Cloud 为开发者提供了在分布式系统 (配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token ...
- 3、Dubbo-环境搭建
官方推荐使用 Zookeeper 注册中心 3.1).[windows]-安装zookeeper 开发中均在Linux中安装!!! 1.下载zookeeper 网址 https://archive.a ...
- virtualbox+vagrant学习-4-Vagrantfile-8-WinSSH
WinSSH WinSSH通信器是专门为OpenSSH的Windows本机端口构建的.它不依赖于类posix的环境,这种环境消除了额外的软件安装(如cygwin)以获得适当功能的需求. 想获得更多的信 ...
- sudo 启动tomcat报错没有java环境
报错: Cannot find ./catalina.shThe file is absent or does not have execute permissionThis file is need ...
- Xcode引入了第三方的类库之后真机调试提示莫名其妙的错误
其中的解决方法就是修改Build Setting里面的Build Active Architecture Only(仅仅编译动态代码),将这个里面的值修改为YES即可.
- 前端调用接口得到的数据跟postman跑出来的数据里数字部份不相等
昨天碰到这样一个场景,调用后端接口返回的数据发现所有数据都是正常的,只有一个商品ID的最后两位是错的,每一个商品都是,导致无法进行商品的上下架和删除, 经过查资料发现: 浏览器解析数字的坑,一旦超出一 ...
- c++高精度计算(加法)
本文提供给刚入坑的新手 关于高精度的计算网上百度一下可以了解到许多 今天我分享的只是一些自己的心得,更详细的可以去看原博主的原创文章(https://blog.csdn.net/fanyun_01/a ...
- C++练习 | 运算符重载练习
#include <iostream> #include <cmath> #include <cstring> #include <iomanip> u ...