ThinkPHP5 语言包加载
在项目中,遇到的多语言网站还是比较频繁的
下面来说下怎么加载多语言,此次加载多语言只是用英文(EN)和中文(ZH-CN)示例
只能用为页面显示静态数据转换,数据库则不可
1.在你的项目工程下修改配置文件config.php,默认工程application/config.php
修改以下两句,如果有就修改没有就添加
// 是否开启多语言
'lang_switch_on' => true,
// 默认语言
'default_lang' => 'zh-cn',
2.添加完步骤一之后在你的工程下创建lang文件夹,里面创建zh-cn.php文件,写入以下代码
<?php
return [
'User id' => '会员ID',
'Username' => '用户名',
'Nickname' => '昵称',
];
3.在你的工程下的common.php或者function.php中添加以下代码,这段代码用于检测当前语言并转换
if (!function_exists('CeoeLang'))
{
/**
* 获取语言变量值
* @param string $name 语言变量名
* @param array $vars 动态变量值
* @param string $lang 语言
* @return mixed
*/
function CeoeLang($name, $vars = [], $lang = '')
{
if (is_numeric($name) || !$name)
return $name;
if (!is_array($vars))
{
$vars = func_get_args();
array_shift($vars);
$lang = '';
}
return \think\Lang::get($name, $vars, $lang);
}
}
4.在你的控制器中新增一个类为Index.php及与之对应的模板,再创建一个基类为Base.php用于加载
在Base.php中写入以下代码
<?php
/**
* File Description
*
* @author: Thins <ceoecc@qq.com> 2018/4/9/009
*/
namespace app\index\controller;
use think\Controller;
use think\Lang;
class Base extends Controller
{
public function _initialize()
{
// 语言检测
$lang = strip_tags(Lang::detect());
$controllername = strtolower($this->request->controller());
$this->loadlang($controllername);
// 用于做页面显示当前语言值
$this->assign('language',$lang);
}
/**
* 加载语言文件
* @param string $name
*/
protected function loadlang($name)
{
Lang::load(APP_PATH . $this->request->module() . '/lang/' . Lang::detect() . '/' . str_replace('.', '/', $name) . '.php');
}
}
在Index.php中写入以下代码
<?php
namespace app\index\controller;
class Index extends Base
{
public function index()
{
$this->assign('test',CeoeLang('Username'));
return $this->fetch();
}
}
在模板index.html中添加以下代码
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
{$test}
</body>
</html>
5.打开浏览器访问此项目工程,你会发现默认加载的是中文版,然后你在地址后面加上?lang=en再刷新浏览器就会是英文,如果你不想每次访问连接都加上这一个参数,那么你可以写入缓存,文件,数据库,只要每次检测就行了。
6.根据你的项目树来配置相应的lang,也可以一个模块一个lang文件,依需求而定
7.在这里列举我测试的项目目录
