perf: 自定义语言检测中间件
This commit is contained in:
39
app/index/middleware/LoadLangPack.php
Normal file
39
app/index/middleware/LoadLangPack.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\index\middleware;
|
||||
|
||||
use think\Request;
|
||||
|
||||
class LoadLangPack extends \think\middleware\LoadLangPack
|
||||
{
|
||||
// 重写检测语言方法
|
||||
protected function detect(Request $request): string
|
||||
{
|
||||
$domain_detect = env('INDEX_LANG_DETECT.DOMAIN_DETECT', false);
|
||||
if ($domain_detect) {
|
||||
$lang = $this->getLangSet($request, env('INDEX_LANG_DETECT.DOMAIN_RULE', []));
|
||||
if ($lang != '') {
|
||||
return $lang;
|
||||
}
|
||||
}
|
||||
|
||||
return parent::detect($request);
|
||||
}
|
||||
|
||||
// 根据请求及规则获取语言
|
||||
private function getLangSet(Request $request, array $rules): string
|
||||
{
|
||||
$map = [];
|
||||
foreach ($rules as $v) {
|
||||
$val = str_replace(',', ',', $v);
|
||||
$item = explode(',', $v);
|
||||
foreach ($item as $val) {
|
||||
$it = explode('=', $val);
|
||||
$map[$it[0]] = $it[1];
|
||||
}
|
||||
}
|
||||
|
||||
return $map[$request->host()] ?? '';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user