在項目中,遇到的多語言網站仍是比較頻繁的php
下面來講下怎麼加載多語言,這次加載多語言只是用英文(EN)和中文(ZH-CN)示例html
只能用爲頁面顯示靜態數據轉換,數據庫則不可數據庫
1.在你的項目工程下修改配置文件config.php,默認工程application/config.php瀏覽器
修改如下兩句,若是有就修改沒有就添加緩存
// 是否開啓多語言
'lang_switch_on' => true,
// 默認語言
'default_lang' => 'zh-cn',
2.添加完步驟一以後在你的工程下建立lang文件夾,裏面建立zh-cn.php文件,寫入如下代碼app
<?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用於加載fetch
在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中寫入如下代碼this
<?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.在這裏列舉我測試的項目目錄