zoukankan      html  css  js  c++  java
  • thinkphp5 开启多语言

    一.配置点击打开链接
    1.开启语言包功能
    'lang_switch_on' => true,
    2.支持的语言列表
    'lang_list' => ['zh-cn','en-us'],
    二.语言定义(默认语言无需定义,下面会提到原因及使用)方法
    1.文件定义
    框架或模块目录langen-us.php
    return [
    '按钮1'=>'button1',//表示模板内使用{:lang('按钮1')}获得的字符在英文状态下显示为button1
    '按钮2'=>'button2',
    '其它语言变量'=>'Other language variables',
    ];
    ps:如果还需要加载其他的语言包,可以在自动检测语言之后,用load方法进行加载:
    hinkLang::load(路径lang语言.php');
    2.动态定义在控制器方法中
    a.单个设置
    hinkLang::set($name, $value,'zh-cn');//$name $value是键值对
    hinkLang::set($name, $value,'en-us');
    如 hinkLang::set('按钮', 'button','en-us');//表示模板内使用{:lang('按钮')}获得的字符在英文状态下显示为button
    b.批量设置
    hinkLang::set(['按钮1'=>'button1','按钮2'=>'button2'],'','en-us');
    ps:
    1.动态定义优先
    2.默认语言无需语言包或动态设置,控制器方法,模板内在需要的地方可以直接使用默认语言变量,再编写其它语言包或动态设置其它语言(需保证默认语言变量是其它语言变量的键值)即可切换,
    如使用语言为中(默认)英文,那么只要编写英文语言包
    return [
    '中文'=>'Chinese',
    //.........
    ];
    模板使用{:lang('中文')},那么在中文状态下会显示'中文',英文状态下会显示'Chinese',
    模板使用{:lang('中文中文')},那么在中英文状态下都会显示'中文中文',英文状态下无效,因为中文语言变量'中文中文'与英文语言变量的键值'中文'不一致
    三.在项目(貌似模块无效)公共文件(common.php)中选择自动侦测当前语言
    hinkLang::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-zd-]+)/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>

  • 相关阅读:
    迭代器模式(Iterator.hasNaxt())
    命令模式(Command、Recevier、Invoker)(电脑开机命令)
    中介者模式(Mediator、ConcreteMediator、Colleague Class)(租房中介)
    Python记录
    Spring Boot 处理网页表单
    Spring Boot 使用MySQL数据库
    Spring Boot入门
    codeforces 798 D. Mike and distribution
    Codeforces Round #412 C. Success Rate
    hdu 1754 I Hate It (线段树)
  • 原文地址:https://www.cnblogs.com/ihuangjianxin/p/9579117.html
Copyright © 2011-2022 走看看