perf: 自定义语言检测中间件
This commit is contained in:
20
.example.env
20
.example.env
@@ -47,8 +47,8 @@ REFRESH_TOKEN_LIFETIME = 1209600; # 刷新令牌有效期
|
||||
RESOURCE_IMAGES_DOMAIN = http://local.orico.com; # 图片资源服务器地址
|
||||
RESOURCE_VIDEOS_DOMAIN = http://local.orico.com; # 视频资源服务器地址
|
||||
|
||||
# 视图模板规则配置
|
||||
[VIEW_TPL]
|
||||
# 前台视图模板规则配置
|
||||
[INDEX_VIEW_TPL]
|
||||
# 视图目录
|
||||
# query 规则:URL参数 mtpl=1 表示移动端访问
|
||||
# 例如:http://xxxx.com?mtpl=1
|
||||
@@ -64,3 +64,19 @@ RULE_DOMAIN_SCHEME[] = http
|
||||
RULE_DOMAIN_SCHEME[] = https
|
||||
# domain 规则域名
|
||||
RULE_DOMAIN_HOST = mobile.orico.cn
|
||||
|
||||
# 前台语言检测配置
|
||||
[INDEX_LANG_DETECT]
|
||||
# 是否启用域名检测方式来检测语言
|
||||
DOMAIN_DETECT = true
|
||||
# 域名规则
|
||||
# 格式:域名=语言
|
||||
# 例如:mobile.orico.cn=zh-cn
|
||||
DOMAIN_RULE[] = orico.cn=zh-cn
|
||||
DOMAIN_RULE[] = orico.com.cn=zh-cn
|
||||
DOMAIN_RULE[] = www.orico.cn=zh-cn
|
||||
DOMAIN_RULE[] = www.orico.com.cn=zh-cn
|
||||
DOMAIN_RULE[] = ow.f2b211.com=zh-cn
|
||||
DOMAIN_RULE[] = orico.cc=en-us
|
||||
DOMAIN_RULE[] = www.orico.cc=en-us
|
||||
DOMAIN_RULE[] = ow.us.f2b211.com=en-us
|
||||
|
||||
@@ -194,14 +194,14 @@ if (!function_exists('get_platform')) {
|
||||
} else {
|
||||
// 在非移动端环境,根据配置规则判断是否要显示移动端
|
||||
$view_cfg = $view_cfg = [
|
||||
'rule' => env('VIEW_TPL.RULE', 'query'),
|
||||
'rule' => env('INDEX_VIEW_TPL.RULE', 'query'),
|
||||
'query' => [
|
||||
'name' => env('VIEW_TPL.RULE_QUERY_NAME', 'mtpl'),
|
||||
'value' => env('VIEW_TPL.RULE_QUERY_VALUE', '1'),
|
||||
'name' => env('INDEX_VIEW_TPL.RULE_QUERY_NAME', 'mtpl'),
|
||||
'value' => env('INDEX_VIEW_TPL.RULE_QUERY_VALUE', '1'),
|
||||
],
|
||||
'domain' => [
|
||||
'scheme' => env('VIEW_TPL.RULE_DOMAIN_SCHEME', ['http']),
|
||||
'host' => env('VIEW_TPL.RULE_DOMAIN_HOST'),
|
||||
'scheme' => env('INDEX_VIEW_TPL.RULE_DOMAIN_SCHEME', ['http']),
|
||||
'host' => env('INDEX_VIEW_TPL.RULE_DOMAIN_HOST'),
|
||||
],
|
||||
];
|
||||
if ($view_cfg['rule'] == 'query') {
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
// 这是系统自动生成的middleware定义文件
|
||||
return [
|
||||
// 启用多语言支持
|
||||
think\middleware\LoadLangPack::class,
|
||||
// think\middleware\LoadLangPack::class,
|
||||
app\index\middleware\LoadLangPack::class,
|
||||
// 确认请求来源
|
||||
app\index\middleware\ConfirmRequestFrom::class,
|
||||
];
|
||||
|
||||
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