ThinkPHP5 語言包加載


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.在這里列舉我測試的項目目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM