這兩天做得項目中需要多語言切換,於是乎就看了看文檔,感覺有些亂,就使用了終極必殺--百度。
借鑒了網上各位大佬所集成。整理出一篇比較適合類似我這種比較菜的隨筆吧。
請各位大佬輕虐。感謝。
首先,不說其他,肯定是先將config.php 中將配置修改
//是否開啟多語言
'lang_switch_on' => true,
//語言種類
'lang_list' => ['zh-cn','en-us'],
//自動偵測語言
'lang_auto_detect' => true,
//
'VAR_LANGUAGE' => 'lang',
//默認全局過濾方法 用逗號分隔多個
'default_filter' => '',
//默認語言
'default_lang' => 'zh-cn',
然后根據文檔說明:
本渣是在應用下新建的文件夾,即在application下新建一個lang 文件夾,我是要中英文切換所以就新建了zh-cn.php和en-us.php
其中zh-cn.php內容:
return [ 'test'=> "中文", 'name'=>'葉子', ];
英文en-us.php內容:
return [ 'test'=> "English", 'name'=>'wind find', ];
然后在控制器構造函數中添加:
public function _initialize() { if(!(Cookie::has('think_var'))){ $this->lang(); } $this->assign('think_lang',Cookie::get('think_var')); }
在當前控制器中添加lang方法
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; default: cookie('think_var', 'zh-cn'); break; } }
前台模板頁面代碼(模板輸出方式有兩種一種是{$Think.lang.test},一種是{:lang('test')}):
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>前台</title> <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script> </head> <body class="gray-bg"> <span>{$Think.lang.test}--{:lang('test')}</span> <span>{$Think.lang.name}</span> <br/> <button type="button" lang='cn' class="btn">中文</button> <button type="button" lang='en' class="btn">英文</button> <button type="button" lang='其他語言' class="btn">其他語言</button> <script type="text/javascript"> $('.btn').click(function(){ var data = {'lang':$(this).attr('lang')} $.get("{:url('index/lang')}",data,function(){ location.reload(); }) }) </script> </body> </html>
然后最最最重要的一點,必須將\thinkphp\library\think\Lang.php 中的detect()方法修改:
/** * 自動偵測設置獲取語言選擇 * @return string */ 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; }
接下來就是見證結果的時刻咯:
就這樣完成咯。
本文主要借鑒:https://blog.csdn.net/qq_24038207/article/details/72627940
再次感謝蕭風_2016大大。感謝。
路過的各位大佬,如有不滿意地方,請輕虐。不勝感激。
如有需要,個人整理的TP5多語言代碼:
鏈接: https://pan.baidu.com/s/17oIdfkjh2xSGWKSVy-_w2Q 提取碼: qa9u
2019年03月04號