tp5多语言切换

xiaoxiao2021-02-28  8

一.配置点击打开链接 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>

转载请注明原文地址: https://www.6miu.com/read-1750146.html

最新回复(0)