下面由thinkphp框架教程欄目給大家介紹thinkphp 6.0 多語言優(yōu)化擴(kuò)展包,希望對需要的朋友有所幫助!
think-lang
ThinkPHP 6.0 多語言優(yōu)化擴(kuò)展包
https://github.com/TLingC/think-lang
特色
- 支持通過如 mywebsite.com/zh-hans/ 的二級目錄訪問對應(yīng)語言頁面。
- 支持每種語言的語言包單獨(dú)成目錄,目錄下可設(shè)有二級目錄。
安裝
composer require tlingc/think-lang
使用
基礎(chǔ)配置
請參照 官方文檔(https://www.kancloud.cn/manual/thinkphp6_0/1037637) 進(jìn)行相關(guān)配置。同時注意如下與官方文檔的不同點(diǎn)。
開啟和加載語言包
中間件名稱為:
'tlingclangmiddlewareLoadLangPack',
由于多語言通過二級目錄訪問,使用Cookie保存語言 功能無效。
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
語言文件定義
自動加載的應(yīng)用語言文件:
// 單應(yīng)用模式applang當(dāng)前語言.php applang當(dāng)前語言*.php applang當(dāng)前語言**.php// 多應(yīng)用模式app應(yīng)用lang當(dāng)前語言.php app應(yīng)用lang當(dāng)前語言*.php app應(yīng)用lang當(dāng)前語言**.php
請注意此擴(kuò)展包沒有對語言包解析行為進(jìn)行修改,語言文件的文件名不會影響語言分組,在多個文件中存在相同定義時會導(dǎo)致被覆蓋。
路由設(shè)置
使用二級目錄訪問對應(yīng)語言頁面,必須使用路由定義,同時建議開啟 強(qiáng)制路由 模式。
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 助手函數(shù)
在應(yīng)用公共文件 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);}
對比官方提供的助手函數(shù),增加了 $lang 及 $replace 參數(shù)。
普通跳轉(zhuǎn),生成url時會自動帶上前方的語言名稱。
url('/welcome')
如需僅替換url中的語言名稱(如在語言選擇器中使用),把 $replace 參數(shù)置為 true 即可。
TODO
- 整合路由定義方法。
- 整合重寫url參數(shù)。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END