ThinkPHP 6.0 多語言優化拓展包

  • 2020 年 2 月 16 日
  • 筆記

think-lang

ThinkPHP 6.0 多語言優化拓展包

特色

  1. 支援通過如 mywebsite.com/zh-hans/ 的二級目錄訪問對應語言頁面。
  2. 支援每種語言的語言包單獨成目錄,目錄下可設有二級目錄。

安裝

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