1. 程式人生 > >tp5多語言開啟

tp5多語言開啟

在config.php中配置檔案

// 是否開啟多語言
    'lang_switch_on'         => true,
    'lang_list'              => ['zh-cn','en-us'],
    'default_filter'         => '',
    'lang_auto_detect'       => true,
    'VAR_LANGUAGE'          => 'lang',  // 預設語言切換變數
    // 預設全域性過濾方法 用逗號分隔多個
    'default_filter'         => '',
    // 預設語言
    'default_lang'           => 'zh-cn',

然後在application目錄下新建lang資料夾

在html中

<script>
    $('.but').click(function () {
        var data = {'lang': $(this).attr('lang')}
        $.get("{:url('index/index/lang')}", data, function () {
            location.reload();
        })
    })
</script>

<a id="dd-wzqz" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Change language:<span class="caret"></span></a>
                    <ul class="dropdown-menu" aria-labelledby="dd-wzqz">
                        <li><a href="" lang="cn" class="but">Chinese (Simplified)</a></li>
                        <li><a href="" lang="en" class="but">English</a></li>
                        <li><a href="" lang="jp" class="but">Japanese</a></li>
                    </ul>

請求控制器:

建構函式中:

//多語言
        if(!(Cookie::has('think_var'))){
            $this->lang();
        }
        $this->assign('think_lang',Cookie::get('think_var'));

//語言切換
    public function lang() {
        $lang = input('?get.lang') ? input('get.lang') : 'cn';
        switch ($lang) {
            
            case 'cn':   //中文
                cookie('think_var', 'zh-cn');
                break;
            
            case 'en':   //英文
                cookie('think_var', 'en-us');
                break;
            
            case 'jp':    //日語
                cookie('think_var', 'jp');
                break;
            
            //預設語言
            default:
                cookie('think_var', 'zh-cn');
        }
    }

在語言包裡lang/en-us.php中

<?php

return [
    "HEANDER_LANG"=>"HEANDER_LANG",
    "HEANDER_LANG_CHT"=>"HEANDER_LANG_CHT",
    "HEANDER_LANG_EN"=>"English",
    'name'=>'english name',
];

?>

最後替換D:\WWW\picture\thinkphp\library\think\Lang.php檔案的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;
        }
        return self::$range;
    }