ThinkPHP5多语言使用初探

用TP5开发已经好久了,包括之前做多国语言的项目,但是在实际开发中却一直没有使用过thinkphp5自带的多语言处理。今天闲来无事给自己开发新项目中心血来潮用了一下,结果我这个老司机一不小心就入了坑。其实入坑并不可怕,最重要的是解决问题。因此本篇笔记也分享给其他使用thinkphp5多语言的朋友们。

开发项目首先要看开发文档!!!

在TP5的官方开发文档中是这样用的,第一步开启多语言支持,在项目配置文件config.php文件中配置以下两项内容。如果是单独某个模块开启的话,相关配置写在某个模块应用下面即可,这是TP的常用方法,不多说明。

  1. // 是否开启多语言
  2. 'lang_switch_on'         => false,
  3. // 默认语言
  4. 'default_lang'           => 'zh-cn',

第二步,我们可以任意在以下目录中创建我们的语言包文件。系统默认加载三个语言包

  1. 框架语言包: thinkphp\lang\当前语言.php
  2. 应用语言包: application\lang\当前语言.php
  3. 模块语言包: application\模块\lang\当前语言.php

完成上述两个步骤后你会发现其实多语言已经可以用了。

ThinkPHP5多语言使用初探

但是只能把所有的想要使用的信息以数组的形式放在lang目录下的zh-cn.php文件中,写成其他形式的语言包是无法使用的。比如波波建了一个中文的语言包目录,想着一个控制器对应一个语言包,方便后期管理,不然都写在一个文件中的话,随着项目的日臻完善,语言包文件会非常大,不利于加载,更不利于维护。

我们看到官方开发文档中说明,如果语言包不放在这三个位置的时候,需要用Lang::load('文件路径')加载的。因此波波采用了一个折中的办法,用户访问一个控制器,就加载这个控制器对应的语言包。

文件夹目录结构如上图所示,我们需要建立一个BasicController.php文件。添加如下代码。

  1. /**
  2.   * 基础接口SDK
  3.   * @param Request|null $request
  4.   */
  5.  public function __construct(Request $request = null)
  6.  {
  7.      define('MODULE_NAME',request()->module());
  8.      define('CONTROLLER_NAME',request()->controller());
  9.      define('ACTION_NAME',request()->action());
  10.      //多语言处理
  11.      $langType = emptyempty($_COOKIE['think_var'])?Config::get('default_lang'):$_COOKIE['think_var'];
  12.      Lang::load(APP_PATH . 'api/lang/'. $langType .'/'.strtolower( CONTROLLER_NAME ) .'.php' );
  13.  }

写业务逻辑的时候继承下这个控制器就可以了。

关于thinkPHP5多语言的使用如果您有其他心得,也欢迎留言分享。官方文档:https://www.kancloud.cn/manual/thinkphp5/118132

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!