一.配置点击打开链接
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 开启多语言的更多相关文章

  1. ThinkPHP5 打开多语言支持

    1.在thinkphp\start.php 页面中添加多语言的切换函数的参数格式,本贴目前只支持两种语言,并注意必须全部小写!全部小写!!全部小写!!!,注意这一步很关键 Lang::setAllow ...

  2. 开启C语言的学习之门

    本人是一枚工业界的码农,为了职业道路越来越宽广决定向上位机方面进军,C语言曾经在大学里面学过点皮毛但是离应用远远不够,尽量每天在工作之余更新自己学习的进度,同时也希望有大神能给予在编程道路上的指导,话 ...

  3. Kibana开启中文语言

    Kibana在6.7以后的版本,支持了多种语言.并且自带在安装包里. 开启方式: 找到Kibana配置文件所在:config/kibana.yml找到配置:i18n.locale: "en& ...

  4. ThinkPHP5.0-多语言切换

    这两天做得项目中需要多语言切换,于是乎就看了看文档,感觉有些乱,就使用了终极必杀--百度. 借鉴了网上各位大佬所集成.整理出一篇比较适合类似我这种比较菜的随笔吧. 请各位大佬轻虐.感谢. 首先,不说其 ...

  5. ThinkPHP5 远程命令执行漏洞分析

    本文首发自安全脉搏,转载请注明出处. 前言 ThinkPHP官方最近修复了一个严重的远程代码执行漏洞.这个主要漏洞原因是由于框架对控制器名没有进行足够的校验导致在没有开启强制路由的情况下可以构造恶意语 ...

  6. Module Zero之语言管理

    返回<Module Zero学习目录> 概览介绍 如何开启 管理语言 管理本地化文本 概览介绍 ABP定义了一个健壮的UI本地化系统,它可用于服务端和客户端.它允许在不同的资源中(Reso ...

  7. thinkphp多语言设置

    thinkphp多语言设置有点'高大上',为什么说它有点'高大上'呢?因为本人设置了好久才弄好,而本人之所以弄了好久的原因,竟然是因为'开启语言设置必须得先开启初始化系统的行为类',所以,在这里,因为 ...

  8. LINQ——语言级集成查询入门指南(1)

    本文主要是对语言级集成查询或简称为LINQ做一个介绍,包括LINQ是什么,不是什么,并对它在语言特性方面做一个简短的回顾,然后举一些使用LINQ的实际例子进行说明. 语言级集成查询是什么? 在我过去写 ...

  9. nopCommerce 3.9 大波浪系列 之 路由扩展 [多语言Seo的实现]

    一.nop种的路由注册 在Global.asax,Application_Start()方法中会进行路由注册,代码如下. public static void RegisterRoutes(Route ...

随机推荐

  1. BZOJ1048:[HAOI2007]分割矩阵(记忆化搜索DP)

    Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个), 这样分割了(n-1)次后,原矩阵被分割成 ...

  2. BZOJ1012:[JSOI2008]最大数maxnumber(线段树)

    Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L 个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. ...

  3. 【模板】Tarjan算法与有向图的强连通性

    概念 流图 给定一个有向图G= (V,E),若存在r∈V满足,满足从r出发能够到达V中所有的点,则称G是一个流图,记为(G,r),其中r是流图的源点. 流图的搜索树 在一个流图(G,r)上从r出发,进 ...

  4. 使用python编写svn钩子

    同上一篇trac中安装插件的文章的出发点一样,感觉用文档和口头制定规则在执行上会有偏差并且需要经常引导新人去熟悉规则. 所以,又费了几个小时去琢磨怎么改进svn提交代码的钩子,现有的钩子的功能比较简单 ...

  5. PHP文档

    http://php.net/manual/zh/function.socket-close.php

  6. web前端时间戳转时间类型显示

    1.jsp头部加:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> ...

  7. Oracle插入(insert into)

    Oracle插入(insert into) 转载:http://www.oraclejsq.com/article/010100199.html Oracle对表数据的插入是使用insert命令来执行 ...

  8. Web | ES6的异步编程

    js对于异步操作有三个解决方案,分别是Promise,generator,async/await. 下面分别说说这三种方案的一些基础. Promise promise对象用于表示一个异步操作的最终状态 ...

  9. ubuntu 如何进行文件、夹删除等操作

    rm [选项] 文件-f, --force 强力删除,不要求确认-i 每删除一个文件或进入一个子目录都要求确认-I 在删除超过三个文件或者递归删除前要求确认-r, -R 递归删除子目录-d, --di ...

  10. 『ACM C++』 PTA 天梯赛练习集L1 | 027-028

    死亡周二,今天去看惊奇队长了!!!真的很佩服国外的后期特效大片技术,要是我们国内也能实现这样的技术能力就好了~ 羡慕max -------------------------------------- ...