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