ThinkPHP 6.0 多語言優化拓展包
- 2020 年 2 月 16 日
- 筆記
think-lang
ThinkPHP 6.0 多語言優化拓展包
特色
- 支援通過如
mywebsite.com/zh-hans/
的二級目錄訪問對應語言頁面。 - 支援每種語言的語言包單獨成目錄,目錄下可設有二級目錄。
安裝
composer require tlingc/think-lang
使用
基礎配置
請參照 官方文檔 進行相關配置。同時注意如下與官方文檔的不同點。
開啟和載入語言包
中間件名稱為:
'tlingclangmiddlewareLoadLangPack',
由於多語言通過二級目錄訪問,使用Cookie保存語言
功能無效。
語言文件定義
自動載入的應用語言文件:
// 單應用模式 applang當前語言.php applang當前語言*.php applang當前語言**.php // 多應用模式 app應用lang當前語言.php app應用lang當前語言*.php app應用lang當前語言**.php
請注意此拓展包沒有對語言包解析行為進行修改,語言文件的文件名不會影響語言分組,在多個文件中存在相同定義時會導致被覆蓋。
路由設置
使用二級目錄訪問對應語言頁面,必須使用路由定義,同時建議開啟 強制路由
模式。
use thinkfacadeConfig; Route::view('/', 'index/index'); $langs = Config::get('lang.allow_lang_list'); foreach($langs as $lang){ Route::rule($lang . '/', 'index/index'); Route::rule($lang . '/welcome', 'index/welcome'); }
重寫 url
助手函數
在應用公共文件 common.php
中加入。
use thinkfacadeRequest; use thinkfacadeLang; use thinkfacadeRoute; use thinkrouteUrl as UrlBuild; function url(string $url = '', array $vars = [], $suffix = true, $domain = false, $lang = true, $replace = false): UrlBuild { if (!$lang) { if($replace) { $explode = explode('/', Request::url(), 3); $url = $url . $explode[2]; } return Route::buildUrl($url, $vars)->suffix($suffix)->domain($domain); } $lang = Lang::getLangSet(); return Route::buildUrl('/' . $lang . $url, $vars)->suffix($suffix)->domain($domain); }
對比官方提供的助手函數,增加了 $lang
及 $replace
參數。
普通跳轉,生成url時會自動帶上前方的語言名稱。
url('/welcome')
如需僅替換url中的語言名稱(如在語言選擇器中使用),把 $replace
參數置為 true
即可。
TODO
- [ ] 整合路由定義方法。
- [ ] 整合重寫
url
參數。
協議
MIT