tp5多语言切换

一.配置点击打开链接
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 实现API接口返回的多语言动态数据 为了在ThinkPHP5中实现API接口返回的多语言动态数据,可以遵循以下方法: #### 1. 多语言包设置 首先,在项目根目录下创建`lang`文件夹用于存储不同语言语言包。每个子文件夹代表一种语言环境,例如`zh-cn`(中文简体),`en-us`(英文美国)[^1]。 对于每种语言,定义相应的键值对来表示特定的信息片段。比如: ```php // lang/en-us/message.php return [ 'welcome' => 'Welcome to our website!', ]; // lang/zh-cn/message.php return [ 'welcome' => '欢迎来到我们的网站!', ]; ``` #### 2. 加载指定语言包 通过修改入口文件中的配置或者控制器内部调用来切换当前使用的语言资源。可以在应用初始化阶段设定默认语言,并允许客户端请求时传递参数覆盖此设置[^4]。 ```php use think\Lang; // 设置默认语言为英语 Lang::setLangSet('en-us'); if (!empty($_GET['lang'])) { Lang::setLangSet($_GET['lang']); } ``` #### 3. 获取并输出国际化字符串 当构建响应对象准备发送给前端之前,利用内置函数获取对应于所选语言版本的消息文本。这一步骤通常发生在业务逻辑处理完毕之后、视图渲染之前的时机点上[^3]。 ```php public function index() { $message = lang('welcome'); // 动态加载已配置好的多语言信息 return json([ 'status' => true, 'msg' => $message, ]); } ``` 以上就是在ThinkPHP5框架内完成API接口返回内容支持多种自然语言表达方式的主要步骤概述。值得注意的是,实际操作过程中还需要考虑更多细节问题,如错误提示语句也应纳入到多语言体系之中;另外就是关于如何高效管理这些分散式的翻译条目也是值得深入探讨的话题之一。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值