diff --git a/internal/utils/nodelogutils/utils.go b/internal/utils/nodelogutils/utils.go index e69f1db1..e0f2d033 100644 --- a/internal/utils/nodelogutils/utils.go +++ b/internal/utils/nodelogutils/utils.go @@ -4,22 +4,24 @@ package nodelogutils import ( + "github.com/TeaOSLab/EdgeCommon/pkg/langs" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/iwind/TeaGo/maps" ) // FindCommonTags 查找常用的标签 -func FindNodeCommonTags() []maps.Map { +func FindNodeCommonTags(langCode langs.LangCode) []maps.Map { return []maps.Map{ { - "name": "端口监听", + "name": langs.Message(langCode, codes.AdminLogTagListener), "code": "LISTENER", }, { - "name": "WAF", + "name": langs.Message(langCode, codes.AdminLogTagWAF), "code": "WAF", }, { - "name": "访问日志", + "name": langs.Message(langCode, codes.AdminLogTagAccessLog), "code": "ACCESS_LOG", }, } diff --git a/internal/web/actions/default/clusters/cluster/createNode.go b/internal/web/actions/default/clusters/cluster/createNode.go index f6da2bb8..c65d2b96 100644 --- a/internal/web/actions/default/clusters/cluster/createNode.go +++ b/internal/web/actions/default/clusters/cluster/createNode.go @@ -317,7 +317,7 @@ func (this *CreateNodeAction) RunPost(params struct { "id": grantResp.NodeGrant.Id, "name": grantResp.NodeGrant.Name, "method": grantResp.NodeGrant.Method, - "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method), + "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method, this.LangCode()), "username": grantResp.NodeGrant.Username, } } diff --git a/internal/web/actions/default/clusters/cluster/node/detail.go b/internal/web/actions/default/clusters/cluster/node/detail.go index 824515e4..e9754e60 100644 --- a/internal/web/actions/default/clusters/cluster/node/detail.go +++ b/internal/web/actions/default/clusters/cluster/node/detail.go @@ -219,7 +219,7 @@ func (this *DetailAction) RunGet(params struct { "id": grantResp.NodeGrant.Id, "name": grantResp.NodeGrant.Name, "method": grantResp.NodeGrant.Method, - "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method), + "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method, this.LangCode()), "username": grantResp.NodeGrant.Username, } } diff --git a/internal/web/actions/default/clusters/cluster/node/logs.go b/internal/web/actions/default/clusters/cluster/node/logs.go index 0ac46d09..673da555 100644 --- a/internal/web/actions/default/clusters/cluster/node/logs.go +++ b/internal/web/actions/default/clusters/cluster/node/logs.go @@ -34,7 +34,7 @@ func (this *LogsAction) RunGet(params struct { return } - this.Data["tags"] = nodelogutils.FindNodeCommonTags() + this.Data["tags"] = nodelogutils.FindNodeCommonTags(this.LangCode()) this.Data["nodeId"] = params.NodeId this.Data["dayFrom"] = params.DayFrom diff --git a/internal/web/actions/default/clusters/cluster/node/settings/ssh/index.go b/internal/web/actions/default/clusters/cluster/node/settings/ssh/index.go index 892db726..160e3e54 100644 --- a/internal/web/actions/default/clusters/cluster/node/settings/ssh/index.go +++ b/internal/web/actions/default/clusters/cluster/node/settings/ssh/index.go @@ -59,7 +59,7 @@ func (this *IndexAction) RunGet(params struct { "id": grantResp.NodeGrant.Id, "name": grantResp.NodeGrant.Name, "method": grantResp.NodeGrant.Method, - "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method), + "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method, this.LangCode()), "username": grantResp.NodeGrant.Username, } } diff --git a/internal/web/actions/default/clusters/cluster/settings/index.go b/internal/web/actions/default/clusters/cluster/settings/index.go index fa62b2b0..c371cb16 100644 --- a/internal/web/actions/default/clusters/cluster/settings/index.go +++ b/internal/web/actions/default/clusters/cluster/settings/index.go @@ -51,7 +51,7 @@ func (this *IndexAction) RunGet(params struct { "id": grant.Id, "name": grant.Name, "method": grant.Method, - "methodName": grantutils.FindGrantMethodName(grant.Method), + "methodName": grantutils.FindGrantMethodName(grant.Method, this.LangCode()), } } } diff --git a/internal/web/actions/default/clusters/cluster/updateNodeSSH.go b/internal/web/actions/default/clusters/cluster/updateNodeSSH.go index 7fa99aff..25e530d2 100644 --- a/internal/web/actions/default/clusters/cluster/updateNodeSSH.go +++ b/internal/web/actions/default/clusters/cluster/updateNodeSSH.go @@ -87,7 +87,7 @@ func (this *UpdateNodeSSHAction) RunGet(params struct { "id": grantResp.NodeGrant.Id, "name": grantResp.NodeGrant.Name, "method": grantResp.NodeGrant.Method, - "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method), + "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method, this.LangCode()), } } this.Data["grant"] = grantMap diff --git a/internal/web/actions/default/clusters/grants/create.go b/internal/web/actions/default/clusters/grants/create.go index 5725fcc8..565dd050 100644 --- a/internal/web/actions/default/clusters/grants/create.go +++ b/internal/web/actions/default/clusters/grants/create.go @@ -18,7 +18,7 @@ func (this *CreateAction) Init() { } func (this *CreateAction) RunGet(params struct{}) { - this.Data["methods"] = grantutils.AllGrantMethods() + this.Data["methods"] = grantutils.AllGrantMethods(this.LangCode()) this.Show() } diff --git a/internal/web/actions/default/clusters/grants/createPopup.go b/internal/web/actions/default/clusters/grants/createPopup.go index cefa7aba..c661e161 100644 --- a/internal/web/actions/default/clusters/grants/createPopup.go +++ b/internal/web/actions/default/clusters/grants/createPopup.go @@ -19,7 +19,7 @@ func (this *CreatePopupAction) Init() { } func (this *CreatePopupAction) RunGet(params struct{}) { - this.Data["methods"] = grantutils.AllGrantMethods() + this.Data["methods"] = grantutils.AllGrantMethods(this.LangCode()) this.Show() } @@ -88,7 +88,7 @@ func (this *CreatePopupAction) RunPost(params struct { "id": createResp.NodeGrantId, "name": params.Name, "method": params.Method, - "methodName": grantutils.FindGrantMethodName(params.Method), + "methodName": grantutils.FindGrantMethodName(params.Method, this.LangCode()), "username": params.Username, } diff --git a/internal/web/actions/default/clusters/grants/grant.go b/internal/web/actions/default/clusters/grants/grant.go index 2f4b6e65..f917902e 100644 --- a/internal/web/actions/default/clusters/grants/grant.go +++ b/internal/web/actions/default/clusters/grants/grant.go @@ -36,7 +36,7 @@ func (this *GrantAction) RunGet(params struct { "id": grant.Id, "name": grant.Name, "method": grant.Method, - "methodName": grantutils.FindGrantMethodName(grant.Method), + "methodName": grantutils.FindGrantMethodName(grant.Method, this.LangCode()), "username": grant.Username, "password": strings.Repeat("*", len(grant.Password)), "privateKey": grant.PrivateKey, diff --git a/internal/web/actions/default/clusters/grants/grantutils/utils.go b/internal/web/actions/default/clusters/grants/grantutils/utils.go index ea229e55..16c4f1d4 100644 --- a/internal/web/actions/default/clusters/grants/grantutils/utils.go +++ b/internal/web/actions/default/clusters/grants/grantutils/utils.go @@ -1,24 +1,28 @@ package grantutils -import "github.com/iwind/TeaGo/maps" +import ( + "github.com/TeaOSLab/EdgeCommon/pkg/langs" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" + "github.com/iwind/TeaGo/maps" +) -// 所有的认证类型 -func AllGrantMethods() []maps.Map { +// AllGrantMethods 所有的认证类型 +func AllGrantMethods(langCode langs.LangCode) []maps.Map { return []maps.Map{ { - "name": "用户名+密码", + "name": langs.Message(langCode, codes.AdminNodeGrantMethodUserPassword), "value": "user", }, { - "name": "私钥", + "name": langs.Message(langCode, codes.AdminNodeGrantMethodPrivateKey), "value": "privateKey", }, } } -// 获得对应的认证类型名称 -func FindGrantMethodName(method string) string { - for _, m := range AllGrantMethods() { +// FindGrantMethodName 获得对应的认证类型名称 +func FindGrantMethodName(method string, langCode langs.LangCode) string { + for _, m := range AllGrantMethods(langCode) { if m.GetString("value") == method { return m.GetString("name") } diff --git a/internal/web/actions/default/clusters/grants/index.go b/internal/web/actions/default/clusters/grants/index.go index 09245557..c3ca6406 100644 --- a/internal/web/actions/default/clusters/grants/index.go +++ b/internal/web/actions/default/clusters/grants/index.go @@ -62,7 +62,7 @@ func (this *IndexAction) RunGet(params struct { "name": grant.Name, "method": maps.Map{ "type": grant.Method, - "name": grantutils.FindGrantMethodName(grant.Method), + "name": grantutils.FindGrantMethodName(grant.Method, this.LangCode()), }, "username": grant.Username, "countClusters": countClusters, diff --git a/internal/web/actions/default/clusters/grants/selectPopup.go b/internal/web/actions/default/clusters/grants/selectPopup.go index 71ae96d7..1e6917c6 100644 --- a/internal/web/actions/default/clusters/grants/selectPopup.go +++ b/internal/web/actions/default/clusters/grants/selectPopup.go @@ -33,7 +33,7 @@ func (this *SelectPopupAction) RunGet(params struct { "id": grant.Id, "name": grant.Name, "method": grant.Method, - "methodName": grantutils.FindGrantMethodName(grant.Method), + "methodName": grantutils.FindGrantMethodName(grant.Method, this.LangCode()), "username": grant.Username, "description": grant.Description, }) @@ -55,7 +55,7 @@ func (this *SelectPopupAction) RunGet(params struct { "id": grant.Id, "name": grant.Name, "method": grant.Method, - "methodName": grantutils.FindGrantMethodName(grant.Method), + "methodName": grantutils.FindGrantMethodName(grant.Method, this.LangCode()), "username": grant.Username, "description": grant.Description, }) @@ -92,7 +92,7 @@ func (this *SelectPopupAction) RunPost(params struct { "id": grant.Id, "name": grant.Name, "method": grant.Method, - "methodName": grantutils.FindGrantMethodName(grant.Method), + "methodName": grantutils.FindGrantMethodName(grant.Method, this.LangCode()), } this.Success() diff --git a/internal/web/actions/default/clusters/grants/test.go b/internal/web/actions/default/clusters/grants/test.go index d0fc9dd6..98fd8242 100644 --- a/internal/web/actions/default/clusters/grants/test.go +++ b/internal/web/actions/default/clusters/grants/test.go @@ -37,7 +37,7 @@ func (this *TestAction) RunGet(params struct { "id": grant.Id, "name": grant.Name, "method": grant.Method, - "methodName": grantutils.FindGrantMethodName(grant.Method), + "methodName": grantutils.FindGrantMethodName(grant.Method, this.LangCode()), "username": grant.Username, "password": strings.Repeat("*", len(grant.Password)), "privateKey": grant.PrivateKey, diff --git a/internal/web/actions/default/clusters/grants/update.go b/internal/web/actions/default/clusters/grants/update.go index 15abdd01..cf517b5a 100644 --- a/internal/web/actions/default/clusters/grants/update.go +++ b/internal/web/actions/default/clusters/grants/update.go @@ -21,7 +21,7 @@ func (this *UpdateAction) Init() { func (this *UpdateAction) RunGet(params struct { GrantId int64 }) { - this.Data["methods"] = grantutils.AllGrantMethods() + this.Data["methods"] = grantutils.AllGrantMethods(this.LangCode()) grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: params.GrantId}) if err != nil { @@ -40,7 +40,7 @@ func (this *UpdateAction) RunGet(params struct { "id": grant.Id, "name": grant.Name, "method": grant.Method, - "methodName": grantutils.FindGrantMethodName(grant.Method), + "methodName": grantutils.FindGrantMethodName(grant.Method, this.LangCode()), "username": grant.Username, "password": grant.Password, "privateKey": grant.PrivateKey, diff --git a/internal/web/actions/default/clusters/grants/updatePopup.go b/internal/web/actions/default/clusters/grants/updatePopup.go index 763553e2..eb75e51e 100644 --- a/internal/web/actions/default/clusters/grants/updatePopup.go +++ b/internal/web/actions/default/clusters/grants/updatePopup.go @@ -21,7 +21,7 @@ func (this *UpdatePopupAction) Init() { func (this *UpdatePopupAction) RunGet(params struct { GrantId int64 }) { - this.Data["methods"] = grantutils.AllGrantMethods() + this.Data["methods"] = grantutils.AllGrantMethods(this.LangCode()) grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: params.GrantId}) if err != nil { @@ -123,7 +123,7 @@ func (this *UpdatePopupAction) RunPost(params struct { "id": params.GrantId, "name": params.Name, "method": params.Method, - "methodName": grantutils.FindGrantMethodName(params.Method), + "methodName": grantutils.FindGrantMethodName(params.Method, this.LangCode()), "username": params.Username, } diff --git a/internal/web/actions/default/clusters/logs/index.go b/internal/web/actions/default/clusters/logs/index.go index 03772bd3..a6ae0ed4 100644 --- a/internal/web/actions/default/clusters/logs/index.go +++ b/internal/web/actions/default/clusters/logs/index.go @@ -54,7 +54,7 @@ func (this *IndexAction) RunGet(params struct { } // 常见标签 - this.Data["tags"] = nodelogutils.FindNodeCommonTags() + this.Data["tags"] = nodelogutils.FindNodeCommonTags(this.LangCode()) // 未读数量 countUnreadResp, err := this.RPC().NodeLogRPC().CountNodeLogs(this.AdminContext(), &pb.CountNodeLogsRequest{ diff --git a/internal/web/actions/default/log/index.go b/internal/web/actions/default/log/index.go index 247f7536..c22c55dc 100644 --- a/internal/web/actions/default/log/index.go +++ b/internal/web/actions/default/log/index.go @@ -3,6 +3,7 @@ package log import ( "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/maps" timeutil "github.com/iwind/TeaGo/utils/time" @@ -41,15 +42,15 @@ func (this *IndexAction) RunGet(params struct { this.Data["levelOptions"] = []maps.Map{ { "code": "info", - "name": "信息", + "name": this.Lang(codes.AdminLevelInfo), }, { "code": "warn", - "name": "警告", + "name": this.Lang(codes.AdminLevelWarn), }, { "code": "error", - "name": "错误", + "name": this.Lang(codes.AdminLevelError), }, } diff --git a/internal/web/actions/default/servers/certs/helper.go b/internal/web/actions/default/servers/certs/helper.go index 5dccc1dd..30332a57 100644 --- a/internal/web/actions/default/servers/certs/helper.go +++ b/internal/web/actions/default/servers/certs/helper.go @@ -2,6 +2,8 @@ package certs import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" @@ -10,14 +12,15 @@ import ( ) type Helper struct { + helpers.LangHelper } func NewHelper() *Helper { return &Helper{} } -func (this *Helper) BeforeAction(actionWrapper actions.ActionWrapper) { - var action = actionWrapper.Object() +func (this *Helper) BeforeAction(actionPtr actions.ActionWrapper) { + var action = actionPtr.Object() if action.Request.Method != http.MethodGet { return } @@ -25,7 +28,7 @@ func (this *Helper) BeforeAction(actionWrapper actions.ActionWrapper) { action.Data["teaMenu"] = "servers" var countOCSP int64 = 0 - parentAction, ok := actionWrapper.(actionutils.ActionInterface) + parentAction, ok := actionPtr.(actionutils.ActionInterface) if ok { countOCSPResp, err := parentAction.RPC().SSLCertRPC().CountAllSSLCertsWithOCSPError(parentAction.AdminContext(), &pb.CountAllSSLCertsWithOCSPErrorRequest{}) if err == nil { @@ -33,19 +36,19 @@ func (this *Helper) BeforeAction(actionWrapper actions.ActionWrapper) { } } - var ocspMenuName = "OCSP日志" + var ocspMenuName = this.Lang(actionPtr, codes.AdminCertMenuOCSP) if countOCSP > 0 { ocspMenuName += "(" + types.String(countOCSP) + ")" } var menu = []maps.Map{ { - "name": "证书", + "name": this.Lang(actionPtr, codes.AdminCertMenuCerts), "url": "/servers/certs", "isActive": action.Data.GetString("leftMenuItem") == "cert", }, { - "name": "申请证书", + "name": this.Lang(actionPtr, codes.AdminCertMenuApply), "url": "/servers/certs/acme", "isActive": action.Data.GetString("leftMenuItem") == "acme", }, diff --git a/internal/web/actions/default/servers/components/waf/createSetPopup.go b/internal/web/actions/default/servers/components/waf/createSetPopup.go index 0adb2aec..2465cbaa 100644 --- a/internal/web/actions/default/servers/components/waf/createSetPopup.go +++ b/internal/web/actions/default/servers/components/waf/createSetPopup.go @@ -3,6 +3,7 @@ package waf import ( "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" @@ -41,14 +42,14 @@ func (this *CreateSetPopupAction) RunGet(params struct { // 一些配置 this.Data["connectors"] = []maps.Map{ { - "name": "和(AND)", + "name": this.Lang(codes.AdminWAFConnectorAnd), "value": firewallconfigs.HTTPFirewallRuleConnectorAnd, - "description": "所有规则都满足才视为匹配", + "description": this.Lang(codes.AdminWAFConnectorAndDescription), }, { - "name": "或(OR)", + "name": this.Lang(codes.AdminWAFConnectorOr), "value": firewallconfigs.HTTPFirewallRuleConnectorOr, - "description": "任一规则满足了就视为匹配", + "description": this.Lang(codes.AdminWAFConnectorOrDescription), }, } diff --git a/internal/web/actions/default/servers/components/waf/updateSetPopup.go b/internal/web/actions/default/servers/components/waf/updateSetPopup.go index e5ece57c..417b6496 100644 --- a/internal/web/actions/default/servers/components/waf/updateSetPopup.go +++ b/internal/web/actions/default/servers/components/waf/updateSetPopup.go @@ -4,6 +4,7 @@ import ( "encoding/json" "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" @@ -45,14 +46,14 @@ func (this *UpdateSetPopupAction) RunGet(params struct { // 一些配置 this.Data["connectors"] = []maps.Map{ { - "name": "和(AND)", + "name": this.Lang(codes.AdminWAFConnectorAnd), "value": firewallconfigs.HTTPFirewallRuleConnectorAnd, - "description": "所有规则都满足才视为匹配", + "description": this.Lang(codes.AdminWAFConnectorAndDescription), }, { - "name": "或(OR)", + "name": this.Lang(codes.AdminWAFConnectorOr), "value": firewallconfigs.HTTPFirewallRuleConnectorOr, - "description": "任一规则满足了就视为匹配", + "description": this.Lang(codes.AdminWAFConnectorOrDescription), }, } diff --git a/internal/web/actions/default/servers/groups/group/servergrouputils/menu.go b/internal/web/actions/default/servers/groups/group/servergrouputils/menu.go index d73031a0..3ad29a25 100644 --- a/internal/web/actions/default/servers/groups/group/servergrouputils/menu.go +++ b/internal/web/actions/default/servers/groups/group/servergrouputils/menu.go @@ -5,14 +5,15 @@ package servergrouputils import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/maps" ) -func filterMenuItems(leftMenuItems []maps.Map, groupId int64, urlPrefix string, menuItem string, configInfoResp *pb.FindEnabledServerGroupConfigInfoResponse) []maps.Map { +func filterMenuItems(leftMenuItems []maps.Map, groupId int64, urlPrefix string, menuItem string, configInfoResp *pb.FindEnabledServerGroupConfigInfoResponse, parent *actionutils.ParentAction) []maps.Map { return leftMenuItems } -func filterMenuItems2(leftMenuItems []maps.Map, groupId int64, urlPrefix string, menuItem string, configInfoResp *pb.FindEnabledServerGroupConfigInfoResponse) []maps.Map { +func filterMenuItems2(leftMenuItems []maps.Map, groupId int64, urlPrefix string, menuItem string, configInfoResp *pb.FindEnabledServerGroupConfigInfoResponse, parent *actionutils.ParentAction) []maps.Map { return leftMenuItems } diff --git a/internal/web/actions/default/servers/groups/group/servergrouputils/utils.go b/internal/web/actions/default/servers/groups/group/servergrouputils/utils.go index 8d29e417..40cc6a3b 100644 --- a/internal/web/actions/default/servers/groups/group/servergrouputils/utils.go +++ b/internal/web/actions/default/servers/groups/group/servergrouputils/utils.go @@ -5,6 +5,7 @@ package servergrouputils import ( "errors" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/maps" "github.com/iwind/TeaGo/types" @@ -37,39 +38,39 @@ func InitGroup(parent *actionutils.ParentAction, groupId int64, menuItem string) var urlPrefix = "/servers/groups/group/settings" var leftMenuItems = []maps.Map{ { - "name": "HTTP代理", + "name": parent.Lang(codes.AdminServerMenuSettingHTTPProxy), "url": urlPrefix + "/httpReverseProxy?groupId=" + types.String(groupId), "isActive": menuItem == "httpReverseProxy", "isOn": configInfoResp.HasHTTPReverseProxy, }, { - "name": "TCP代理", + "name": parent.Lang(codes.AdminServerMenuSettingTCPProxy), "url": urlPrefix + "/tcpReverseProxy?groupId=" + types.String(groupId), "isActive": menuItem == "tcpReverseProxy", "isOn": configInfoResp.HasTCPReverseProxy, }, { - "name": "UDP代理", + "name": parent.Lang(codes.AdminServerMenuSettingUDPProxy), "url": urlPrefix + "/udpReverseProxy?groupId=" + types.String(groupId), "isActive": menuItem == "udpReverseProxy", "isOn": configInfoResp.HasUDPReverseProxy, }, } - leftMenuItems = filterMenuItems(leftMenuItems, groupId, urlPrefix, menuItem, configInfoResp) + leftMenuItems = filterMenuItems(leftMenuItems, groupId, urlPrefix, menuItem, configInfoResp, parent) leftMenuItems = append(leftMenuItems, maps.Map{ "name": "-", "url": "", }) leftMenuItems = append(leftMenuItems, maps.Map{ - "name": "访客IP地址", + "name": parent.Lang(codes.AdminServerMenuSettingClientIP), "url": urlPrefix + "/remoteAddr?groupId=" + types.String(groupId), "isActive": menuItem == "remoteAddr", "isOn": configInfoResp.HasRemoteAddrConfig, }) - leftMenuItems = filterMenuItems2(leftMenuItems, groupId, urlPrefix, menuItem, configInfoResp) + leftMenuItems = filterMenuItems2(leftMenuItems, groupId, urlPrefix, menuItem, configInfoResp, parent) parent.Data["leftMenuItems"] = leftMenuItems } diff --git a/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go b/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go index 6cd3477a..e9c4ad8a 100644 --- a/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go +++ b/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go @@ -2,6 +2,8 @@ package locationutils import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" @@ -10,6 +12,7 @@ import ( ) type LocationHelper struct { + helpers.LangHelper } func NewLocationHelper() *LocationHelper { @@ -48,31 +51,31 @@ func (this *LocationHelper) BeforeAction(actionPtr actions.ActionWrapper) { } // 左侧菜单 - action.Data["tinyLeftMenuItems"] = this.createMenus(serverIdString, locationIdString, action.Data.GetString("tinyMenuItem"), currentLocationConfig) + action.Data["tinyLeftMenuItems"] = this.createMenus(serverIdString, locationIdString, action.Data.GetString("tinyMenuItem"), currentLocationConfig, actionPtr) } -func (this *LocationHelper) createMenus(serverIdString string, locationIdString string, secondMenuItem string, locationConfig *serverconfigs.HTTPLocationConfig) []maps.Map { +func (this *LocationHelper) createMenus(serverIdString string, locationIdString string, secondMenuItem string, locationConfig *serverconfigs.HTTPLocationConfig, actionPtr actions.ActionWrapper) []maps.Map { menuItems := []maps.Map{} menuItems = append(menuItems, maps.Map{ - "name": "基本信息", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingBasic), "url": "/servers/server/settings/locations/location?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "basic", "isOff": locationConfig != nil && !locationConfig.IsOn, }) menuItems = append(menuItems, maps.Map{ - "name": "HTTP", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingHTTP), "url": "/servers/server/settings/locations/http?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "http", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.RedirectToHttps != nil && locationConfig.Web.RedirectToHttps.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "源站", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingOrigins), "url": "/servers/server/settings/locations/reverseProxy?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "reverseProxy", "isOn": locationConfig != nil && locationConfig.ReverseProxyRef != nil && locationConfig.ReverseProxyRef.IsPrior, }) - menuItems = filterMenuItems1(locationConfig, menuItems, serverIdString, locationIdString, secondMenuItem) + menuItems = this.filterMenuItems1(locationConfig, menuItems, serverIdString, locationIdString, secondMenuItem, actionPtr) menuItems = append(menuItems, maps.Map{ "name": "-", @@ -80,103 +83,103 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString "isActive": false, }) menuItems = append(menuItems, maps.Map{ - "name": "重写规则", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingRewriteRules), "url": "/servers/server/settings/locations/rewrite?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "rewrite", "isOn": locationConfig != nil && locationConfig.Web != nil && len(locationConfig.Web.RewriteRefs) > 0, }) menuItems = append(menuItems, maps.Map{ - "name": "WAF", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingWAF), "url": "/servers/server/settings/locations/waf?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "waf", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.FirewallRef != nil && locationConfig.Web.FirewallRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "缓存", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingCache), "url": "/servers/server/settings/locations/cache?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "cache", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.Cache != nil && locationConfig.Web.Cache.IsPrior && locationConfig.Web.Cache.IsOn, }) menuItems = append(menuItems, maps.Map{ - "name": "访问鉴权", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingAuth), "url": "/servers/server/settings/locations/access?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "access", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.Auth != nil && locationConfig.Web.Auth.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "防盗链", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingReferers), "url": "/servers/server/settings/locations/referers?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "referer", "isOn": locationConfig.Web != nil && locationConfig.Web.Referers != nil && locationConfig.Web.Referers.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "UA名单", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingUserAgents), "url": "/servers/server/settings/locations/userAgent?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "userAgent", "isOn": locationConfig.Web != nil && locationConfig.Web.UserAgent != nil && locationConfig.Web.UserAgent.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "字符编码", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingCharset), "url": "/servers/server/settings/locations/charset?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "charset", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.Charset != nil && locationConfig.Web.Charset.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "访问日志", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingAccessLog), "url": "/servers/server/settings/locations/accessLog?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "accessLog", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.AccessLogRef != nil && locationConfig.Web.AccessLogRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "统计", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingStat), "url": "/servers/server/settings/locations/stat?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "stat", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.StatRef != nil && locationConfig.Web.StatRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "内容压缩", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingCompress), "url": "/servers/server/settings/locations/compression?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "compression", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.Compression != nil && locationConfig.Web.Compression.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "自定义页面", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingPages), "url": "/servers/server/settings/locations/pages?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "pages", "isOn": locationConfig != nil && locationConfig.Web != nil && (len(locationConfig.Web.Pages) > 0 || (locationConfig.Web.Shutdown != nil && locationConfig.Web.Shutdown.IsPrior)), }) menuItems = append(menuItems, maps.Map{ - "name": "HTTP Header", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingHTTPHeaders), "url": "/servers/server/settings/locations/headers?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "header", "isOn": locationConfig != nil && this.hasHTTPHeaders(locationConfig.Web), }) menuItems = append(menuItems, maps.Map{ - "name": "Websocket", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingWebsocket), "url": "/servers/server/settings/locations/websocket?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "websocket", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.WebsocketRef != nil && locationConfig.Web.WebsocketRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "WebP", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingWebP), "url": "/servers/server/settings/locations/webp?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "webp", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.WebP != nil && locationConfig.Web.WebP.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "静态分发", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingRoot), "url": "/servers/server/settings/locations/web?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "web", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.Root != nil && locationConfig.Web.Root.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "Fastcgi", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingFastcgi), "url": "/servers/server/settings/locations/fastcgi?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "fastcgi", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.FastcgiRef != nil && locationConfig.Web.FastcgiRef.IsPrior, }) - menuItems = filterMenuItems2(locationConfig, menuItems, serverIdString, locationIdString, secondMenuItem) + menuItems = this.filterMenuItems2(locationConfig, menuItems, serverIdString, locationIdString, secondMenuItem, actionPtr) menuItems = append(menuItems, maps.Map{ "name": "-", @@ -185,14 +188,14 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString }) menuItems = append(menuItems, maps.Map{ - "name": "访客IP地址", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingClientIP), "url": "/servers/server/settings/locations/remoteAddr?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "remoteAddr", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.RemoteAddr != nil && locationConfig.Web.RemoteAddr.IsOn, }) menuItems = append(menuItems, maps.Map{ - "name": "请求限制", + "name": this.Lang(actionPtr, codes.AdminServerMenuSettingRequestLimit), "url": "/servers/server/settings/locations/requestLimit?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "requestLimit", "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.RequestLimit != nil && locationConfig.Web.RequestLimit.IsOn, diff --git a/internal/web/actions/default/servers/server/settings/locations/locationutils/menu.go b/internal/web/actions/default/servers/server/settings/locations/locationutils/menu.go index 1ed178b9..169b32ea 100644 --- a/internal/web/actions/default/servers/server/settings/locations/locationutils/menu.go +++ b/internal/web/actions/default/servers/server/settings/locations/locationutils/menu.go @@ -5,13 +5,14 @@ package locationutils import ( "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" + "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" ) -func filterMenuItems1(locationConfig *serverconfigs.HTTPLocationConfig, menuItems []maps.Map, serverIdString string, locationIdString string, secondMenuItem string) []maps.Map { +func (this *LocationHelper) filterMenuItems1(locationConfig *serverconfigs.HTTPLocationConfig, menuItems []maps.Map, serverIdString string, locationIdString string, secondMenuItem string, actionPtr actions.ActionWrapper) []maps.Map { return menuItems } -func filterMenuItems2(locationConfig *serverconfigs.HTTPLocationConfig, menuItems []maps.Map, serverIdString string, locationIdString string, secondMenuItem string) []maps.Map { +func (this *LocationHelper) filterMenuItems2(locationConfig *serverconfigs.HTTPLocationConfig, menuItems []maps.Map, serverIdString string, locationIdString string, secondMenuItem string, actionPtr actions.ActionWrapper) []maps.Map { return menuItems } diff --git a/web/public/js/langs/zh-cn.js b/web/public/js/langs/zh-cn.js index ccf0c017..941737f2 100644 --- a/web/public/js/langs/zh-cn.js +++ b/web/public/js/langs/zh-cn.js @@ -1,2 +1,2 @@ // generated by 'langs generate' -window.LANG_MESSAGES = {"admin_cluster_menu_setting_basic":"基础设置","admin_cluster_menu_setting_cache_policy":"缓存策略","admin_cluster_menu_setting_cc":"CC防护","admin_cluster_menu_setting_ddos_protection":"DDoS防护","admin_cluster_menu_setting_dns":"DNS设置","admin_cluster_menu_setting_health_check":"健康检查","admin_cluster_menu_setting_http3":"HTTP/3","admin_cluster_menu_setting_metrics":"统计指标","admin_cluster_menu_setting_notification":"消息通知","admin_cluster_menu_setting_pages":"自定义页面","admin_cluster_menu_setting_schedule":"智能调度","admin_cluster_menu_setting_service_global":"网站设置","admin_cluster_menu_setting_system_service":"系统服务","admin_cluster_menu_setting_thresholds":"阈值设置","admin_cluster_menu_setting_toa":"TOA设置","admin_cluster_menu_setting_uam":"5秒盾","admin_cluster_menu_setting_waf_actions":"WAF动作","admin_cluster_menu_setting_waf_policy":"WAF策略","admin_cluster_menu_setting_webp":"WebP","admin_cluster_menu_tab_cluster_dashboard":"集群看板","admin_cluster_menu_tab_cluster_delete":"删除集群","admin_cluster_menu_tab_cluster_nodes":"节点列表","admin_cluster_menu_tab_cluster_settings":"集群设置","admin_common_menu_setting_basic":"基础设置","admin_common_menu_setting_cache":"缓存设置","admin_common_menu_setting_cache_policy":"缓存策略","admin_common_menu_setting_ddos_protection":"DDoS防护","admin_common_menu_setting_dns":"DNS设置","admin_common_menu_setting_health_check":"健康检查","admin_common_menu_setting_metrics":"统计指标","admin_common_menu_setting_waf_policy":"WAF策略","admin_common_menu_setting_webp":"WebP","admin_common_system":"系统","admin_dashboard_dns":"DNS","admin_dashboard_events":"事件","admin_dashboard_overview":"概况","admin_dashboard_user":"用户","admin_dashboard_waf":"WAF","admin_db_node_tab_nodes":"数据库节点","admin_menu_admin_recipients":"通知媒介","admin_menu_admins":"系统用户","admin_menu_dashboard":"数据看板","admin_menu_dns":"域名解析","admin_menu_dns_clusters":"集群列表","admin_menu_dns_issues":"问题修复","admin_menu_dns_providers":"DNS服务商","admin_menu_finance":"财务管理","admin_menu_finance_accounts":"用户账户","admin_menu_finance_bills":"费用账单","admin_menu_finance_fee":"计费设置","admin_menu_finance_income":"统计报表","admin_menu_finance_logs":"收支明细","admin_menu_finance_orders":"订单管理","admin_menu_finance_packages":"流量包","admin_menu_logs":"日志审计","admin_menu_node_anti_ddos_products":"高防IP","admin_menu_node_clusters":"集群列表","admin_menu_node_distributed_monitors":"区域监控","admin_menu_node_ip_list":"节点IP","admin_menu_node_logs":"节点日志","admin_menu_node_regions":"区域设置","admin_menu_node_ssh_grants":"节点SSH","admin_menu_nodes":"边缘节点","admin_menu_ns":"智能DNS","admin_menu_ns_access_logs":"访问日志","admin_menu_ns_clusters":"集群管理","admin_menu_ns_domain_batch_operations":"批量操作","admin_menu_ns_domain_groups":"域名分组","admin_menu_ns_domains":"域名管理","admin_menu_ns_node_logs":"运行日志","admin_menu_ns_plans":"套餐设置","admin_menu_ns_resolve_test":"解析测试","admin_menu_ns_routes":"线路管理","admin_menu_ns_settings":"全局配置","admin_menu_ns_user_plans":"用户套餐","admin_menu_plan_user_plans":"已购套餐","admin_menu_plans":"套餐管理","admin_menu_server_access_log_policies":"日志策略","admin_menu_server_access_logs":"访问日志","admin_menu_server_cache_policies":"缓存策略","admin_menu_server_certs":"证书管理","admin_menu_server_global_settings":"通用设置","admin_menu_server_groups":"网站分组","admin_menu_server_ip_lists":"IP名单","admin_menu_server_metrics":"统计指标","admin_menu_server_purge_fetch_caches":"刷新预热","admin_menu_server_scripts":"脚本库","admin_menu_server_traffic_stats":"用量统计","admin_menu_server_waf_policies":"WAF策略","admin_menu_servers":"网站列表","admin_menu_setting_advanced_settings":"高级设置","admin_menu_setting_authority":"商业版本","admin_menu_setting_basic_settings":"基础设置","admin_menu_settings":"系统设置","admin_menu_ticket_category":"分类","admin_menu_tickets":"工单系统","admin_menu_users":"用户设置","admin_node_menu_create_multiple_nodes":"批量创建","admin_node_menu_create_single_node":"单个创建","admin_node_menu_install_auto_register":"自动注册","admin_node_menu_install_manually":"手动安装","admin_node_menu_install_remote":"远程安装(%d)","admin_node_menu_install_remote_upgrade":"远程升级(%d)","admin_node_menu_setting_basic":"基础设置","admin_node_menu_setting_cache":"缓存设置","admin_node_menu_setting_ddos_protection":"DDoS防护","admin_node_menu_setting_dns":"DNS设置","admin_node_menu_setting_schedule":"智能调度","admin_node_menu_setting_ssh":"SSH设置","admin_node_menu_setting_system":"系统设置","admin_node_menu_setting_thresholds":"阈值设置","admin_node_ungrouped_label":"未分组","admin_ns_cluster_tab_delete":"删除集群","admin_ns_cluster_tab_nodes":"节点列表","admin_ns_cluster_tab_setting":"集群设置","admin_server_menu_accesslog_history":"历史","admin_server_menu_accesslog_realtime":"实时","admin_server_menu_accesslog_today":"今天","admin_server_menu_dashboard":"看板","admin_server_menu_setting_access_log":"访问日志","admin_server_menu_setting_auth":"访问鉴权","admin_server_menu_setting_basic":"基本信息","admin_server_menu_setting_cache":"缓存","admin_server_menu_setting_cc":"CC防护","admin_server_menu_setting_charset":"字符编码","admin_server_menu_setting_client_ip":"访客IP地址","admin_server_menu_setting_compress":"内容压缩","admin_server_menu_setting_delete":"删除","admin_server_menu_setting_dns":"DNS","admin_server_menu_setting_domains":"域名","admin_server_menu_setting_fastcgi":"Fastcgi","admin_server_menu_setting_http":"HTTP","admin_server_menu_setting_http_headers":"HTTP Header","admin_server_menu_setting_https":"HTTPS","admin_server_menu_setting_locations":"路由规则","admin_server_menu_setting_origins":"源站","admin_server_menu_setting_others":"其他设置","admin_server_menu_setting_pages":"自定义页面","admin_server_menu_setting_redirects":"URL跳转","admin_server_menu_setting_referers":"防盗链","admin_server_menu_setting_request_limit":"请求限制","admin_server_menu_setting_rewrite_rules":"重写规则","admin_server_menu_setting_root":"静态分发","admin_server_menu_setting_scripts":"边缘脚本","admin_server_menu_setting_stat":"统计","admin_server_menu_setting_tcp":"TCP","admin_server_menu_setting_tls":"TLS","admin_server_menu_setting_traffic_limit":"流量限制","admin_server_menu_setting_uam":"5秒盾","admin_server_menu_setting_udp":"UDP","admin_server_menu_setting_unix":"Unix","admin_server_menu_setting_user_agents":"UA名单","admin_server_menu_setting_waf":"WAF","admin_server_menu_setting_webp":"WebP","admin_server_menu_setting_websocket":"Websocket","admin_server_menu_stat_clients":"终端","admin_server_menu_stat_providers":"运营商","admin_server_menu_stat_regions":"地域分布","admin_server_menu_stat_traffic":"流量统计","admin_server_menu_stat_waf":"WAF","admin_server_tab_access_logs":"日志","admin_server_tab_dashboard":"看板","admin_server_tab_delete":"删除","admin_server_tab_settings":"设置","admin_server_tab_stat":"统计","admin_settings_tab_access_log_databases":"日志数据库","admin_settings_tab_admin_security_settings":"安全设置","admin_settings_tab_admin_server":"Web服务","admin_settings_tab_admin_ui":"管理界面设置","admin_settings_tab_api_nodes":"API节点","admin_settings_tab_authority":"商业版认证","admin_settings_tab_backup":"备份","admin_settings_tab_client_browsers":"浏览器库","admin_settings_tab_client_operation_systems":"操作系统库","admin_settings_tab_database":"数据库","admin_settings_tab_ip_library":"IP库","admin_settings_tab_login":"登录设置","admin_settings_tab_monitor_nodes":"监控节点","admin_settings_tab_profile":"个人资料","admin_settings_tab_transfer":"迁移","admin_settings_tab_updates":"检查更新","admin_settings_tab_user_nodes":"用户节点","admin_settings_tab_user_ui":"用户界面设置"}; +window.LANG_MESSAGES = {"admin_cert_menu_apply":"申请证书","admin_cert_menu_certs":"证书","admin_cert_menu_ocsp":"OCSP日志","admin_cluster_menu_setting_basic":"基础设置","admin_cluster_menu_setting_cache_policy":"缓存策略","admin_cluster_menu_setting_cc":"CC防护","admin_cluster_menu_setting_ddos_protection":"DDoS防护","admin_cluster_menu_setting_dns":"DNS设置","admin_cluster_menu_setting_health_check":"健康检查","admin_cluster_menu_setting_http3":"HTTP/3","admin_cluster_menu_setting_metrics":"统计指标","admin_cluster_menu_setting_notification":"消息通知","admin_cluster_menu_setting_pages":"自定义页面","admin_cluster_menu_setting_schedule":"智能调度","admin_cluster_menu_setting_service_global":"网站设置","admin_cluster_menu_setting_system_service":"系统服务","admin_cluster_menu_setting_thresholds":"阈值设置","admin_cluster_menu_setting_toa":"TOA设置","admin_cluster_menu_setting_uam":"5秒盾","admin_cluster_menu_setting_waf_actions":"WAF动作","admin_cluster_menu_setting_waf_policy":"WAF策略","admin_cluster_menu_setting_webp":"WebP","admin_cluster_menu_tab_cluster_dashboard":"集群看板","admin_cluster_menu_tab_cluster_delete":"删除集群","admin_cluster_menu_tab_cluster_nodes":"节点列表","admin_cluster_menu_tab_cluster_settings":"集群设置","admin_common_canceled":"已取消","admin_common_menu_setting_basic":"基础设置","admin_common_menu_setting_cache":"缓存设置","admin_common_menu_setting_cache_policy":"缓存策略","admin_common_menu_setting_ddos_protection":"DDoS防护","admin_common_menu_setting_dns":"DNS设置","admin_common_menu_setting_health_check":"健康检查","admin_common_menu_setting_metrics":"统计指标","admin_common_menu_setting_waf_policy":"WAF策略","admin_common_menu_setting_webp":"WebP","admin_common_system":"系统","admin_dashboard_dns":"DNS","admin_dashboard_events":"事件","admin_dashboard_overview":"概况","admin_dashboard_user":"用户","admin_dashboard_waf":"WAF","admin_db_node_tab_nodes":"数据库节点","admin_level_error":"错误","admin_level_info":"信息","admin_level_warn":"警告","admin_log_tag_access_log":"访问日志","admin_log_tag_listener":"端口监听","admin_log_tag_script":"脚本","admin_log_tag_waf":"WAF","admin_menu_admin_recipients":"通知媒介","admin_menu_admins":"系统用户","admin_menu_dashboard":"数据看板","admin_menu_dns":"域名解析","admin_menu_dns_clusters":"集群列表","admin_menu_dns_issues":"问题修复","admin_menu_dns_providers":"DNS服务商","admin_menu_finance":"财务管理","admin_menu_finance_accounts":"用户账户","admin_menu_finance_bills":"费用账单","admin_menu_finance_fee":"计费设置","admin_menu_finance_income":"统计报表","admin_menu_finance_logs":"收支明细","admin_menu_finance_orders":"订单管理","admin_menu_finance_packages":"流量包","admin_menu_logs":"日志审计","admin_menu_node_anti_ddos_products":"高防IP","admin_menu_node_clusters":"集群列表","admin_menu_node_distributed_monitors":"区域监控","admin_menu_node_ip_list":"节点IP","admin_menu_node_logs":"节点日志","admin_menu_node_regions":"区域设置","admin_menu_node_ssh_grants":"节点SSH","admin_menu_nodes":"边缘节点","admin_menu_ns":"智能DNS","admin_menu_ns_access_logs":"访问日志","admin_menu_ns_clusters":"集群管理","admin_menu_ns_domain_batch_operations":"批量操作","admin_menu_ns_domain_groups":"域名分组","admin_menu_ns_domains":"域名管理","admin_menu_ns_node_logs":"运行日志","admin_menu_ns_plans":"套餐设置","admin_menu_ns_resolve_test":"解析测试","admin_menu_ns_routes":"线路管理","admin_menu_ns_settings":"全局配置","admin_menu_ns_user_plans":"用户套餐","admin_menu_plan_user_plans":"已购套餐","admin_menu_plans":"套餐管理","admin_menu_server_access_log_policies":"日志策略","admin_menu_server_access_logs":"访问日志","admin_menu_server_cache_policies":"缓存策略","admin_menu_server_certs":"证书管理","admin_menu_server_global_settings":"通用设置","admin_menu_server_groups":"网站分组","admin_menu_server_ip_lists":"IP名单","admin_menu_server_metrics":"统计指标","admin_menu_server_purge_fetch_caches":"刷新预热","admin_menu_server_scripts":"脚本库","admin_menu_server_traffic_stats":"用量统计","admin_menu_server_waf_policies":"WAF策略","admin_menu_servers":"网站列表","admin_menu_setting_advanced_settings":"高级设置","admin_menu_setting_authority":"商业版本","admin_menu_setting_basic_settings":"基础设置","admin_menu_settings":"系统设置","admin_menu_ticket_category":"分类","admin_menu_tickets":"工单系统","admin_menu_user_settings":"用户设置","admin_menu_users":"平台用户","admin_node_grant_method_private_key":"私钥","admin_node_grant_method_user_password":"用户名+密码","admin_node_menu_create_multiple_nodes":"批量创建","admin_node_menu_create_single_node":"单个创建","admin_node_menu_install_auto_register":"自动注册","admin_node_menu_install_manually":"手动安装","admin_node_menu_install_remote":"远程安装(%d)","admin_node_menu_install_remote_upgrade":"远程升级(%d)","admin_node_menu_setting_basic":"基础设置","admin_node_menu_setting_cache":"缓存设置","admin_node_menu_setting_ddos_protection":"DDoS防护","admin_node_menu_setting_dns":"DNS设置","admin_node_menu_setting_schedule":"智能调度","admin_node_menu_setting_ssh":"SSH设置","admin_node_menu_setting_system":"系统设置","admin_node_menu_setting_thresholds":"阈值设置","admin_node_ungrouped_label":"未分组","admin_ns_cluster_menu_access_logs":"访问日志","admin_ns_cluster_menu_answer_setting":"应答模式","admin_ns_cluster_menu_basic":"基础设置","admin_ns_cluster_menu_ddos_protection":"DDoS防护","admin_ns_cluster_menu_dns_recursion":"递归DNS","admin_ns_cluster_menu_doh":"DoH","admin_ns_cluster_menu_soa":"SOA","admin_ns_cluster_menu_tcp":"TCP","admin_ns_cluster_menu_tls":"TLS","admin_ns_cluster_menu_udp":"UDP","admin_ns_cluster_tab_delete":"删除集群","admin_ns_cluster_tab_nodes":"节点列表","admin_ns_cluster_tab_setting":"集群设置","admin_ns_setting_access_logs":"访问日志设置","admin_ns_setting_user":"用户设置","admin_server_copy_setting_current_cluster":"当前集群:%s","admin_server_copy_setting_current_group":"当前分组:%s","admin_server_copy_setting_current_user":"当前用户:%s","admin_server_copy_setting_select_cluster":"选择集群","admin_server_copy_setting_select_group":"选择分组","admin_server_copy_setting_select_server":"选择网站","admin_server_copy_setting_select_user":"选择用户","admin_server_menu_accesslog_history":"历史","admin_server_menu_accesslog_realtime":"实时","admin_server_menu_accesslog_today":"今天","admin_server_menu_dashboard":"看板","admin_server_menu_setting_access_log":"访问日志","admin_server_menu_setting_auth":"访问鉴权","admin_server_menu_setting_basic":"基本信息","admin_server_menu_setting_cache":"缓存","admin_server_menu_setting_cc":"CC防护","admin_server_menu_setting_charset":"字符编码","admin_server_menu_setting_client_ip":"访客IP地址","admin_server_menu_setting_compress":"内容压缩","admin_server_menu_setting_delete":"删除","admin_server_menu_setting_dns":"DNS","admin_server_menu_setting_domains":"域名","admin_server_menu_setting_fastcgi":"Fastcgi","admin_server_menu_setting_http":"HTTP","admin_server_menu_setting_http_headers":"HTTP Header","admin_server_menu_setting_http_proxy":"HTTP代理","admin_server_menu_setting_https":"HTTPS","admin_server_menu_setting_locations":"路由规则","admin_server_menu_setting_origins":"源站","admin_server_menu_setting_others":"其他设置","admin_server_menu_setting_pages":"自定义页面","admin_server_menu_setting_redirects":"URL跳转","admin_server_menu_setting_referers":"防盗链","admin_server_menu_setting_request_limit":"请求限制","admin_server_menu_setting_rewrite_rules":"重写规则","admin_server_menu_setting_root":"静态分发","admin_server_menu_setting_scripts":"边缘脚本","admin_server_menu_setting_stat":"统计","admin_server_menu_setting_tcp":"TCP","admin_server_menu_setting_tcp_proxy":"TCP代理","admin_server_menu_setting_tls":"TLS","admin_server_menu_setting_traffic_limit":"流量限制","admin_server_menu_setting_uam":"5秒盾","admin_server_menu_setting_udp":"UDP","admin_server_menu_setting_udp_proxy":"UDP代理","admin_server_menu_setting_unix":"Unix","admin_server_menu_setting_user_agents":"UA名单","admin_server_menu_setting_waf":"WAF","admin_server_menu_setting_webp":"WebP","admin_server_menu_setting_websocket":"Websocket","admin_server_menu_stat_clients":"终端","admin_server_menu_stat_providers":"运营商","admin_server_menu_stat_regions":"地域分布","admin_server_menu_stat_traffic":"流量统计","admin_server_menu_stat_waf":"WAF","admin_server_tab_access_logs":"日志","admin_server_tab_dashboard":"看板","admin_server_tab_delete":"删除","admin_server_tab_settings":"设置","admin_server_tab_stat":"统计","admin_server_traffic_stat_all_servers":"全部网站(%d)","admin_settings_tab_access_log_databases":"日志数据库","admin_settings_tab_admin_security_settings":"安全设置","admin_settings_tab_admin_server":"Web服务","admin_settings_tab_admin_ui":"管理界面设置","admin_settings_tab_api_nodes":"API节点","admin_settings_tab_authority":"商业版认证","admin_settings_tab_backup":"备份","admin_settings_tab_client_browsers":"浏览器库","admin_settings_tab_client_operation_systems":"操作系统库","admin_settings_tab_database":"数据库","admin_settings_tab_ip_library":"IP库","admin_settings_tab_login":"登录设置","admin_settings_tab_monitor_nodes":"监控节点","admin_settings_tab_profile":"个人资料","admin_settings_tab_transfer":"迁移","admin_settings_tab_updates":"检查更新","admin_settings_tab_user_nodes":"用户节点","admin_settings_tab_user_ui":"用户界面设置","admin_waf_connector_and":"和(AND)","admin_waf_connector_and_description":"所有规则都满足才视为匹配","admin_waf_connector_or":"或(OR)","admin_waf_connector_or_description":"任一规则满足了就视为匹配"};