mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-03 12:20:28 +08:00
添加多语言最基础代码
This commit is contained in:
@@ -3,6 +3,8 @@ package configloaders
|
||||
import (
|
||||
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
||||
"github.com/TeaOSLab/EdgeAdmin/internal/rpc"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs"
|
||||
"github.com/iwind/TeaGo/maps"
|
||||
@@ -47,6 +49,7 @@ func loadAdminModuleMapping() (map[int64]*AdminModuleList, error) {
|
||||
IsSuper: m.IsSuper,
|
||||
Fullname: m.Fullname,
|
||||
Theme: m.Theme,
|
||||
Lang: m.Lang,
|
||||
}
|
||||
|
||||
for _, pbModule := range m.Modules {
|
||||
@@ -158,50 +161,63 @@ func UpdateAdminTheme(adminId int64, theme string) {
|
||||
}
|
||||
}
|
||||
|
||||
// FindAdminLang 查找某个管理员选择的语言
|
||||
func FindAdminLang(adminId int64) string {
|
||||
locker.Lock()
|
||||
defer locker.Unlock()
|
||||
|
||||
list, ok := sharedAdminModuleMapping[adminId]
|
||||
if ok {
|
||||
return list.Lang
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
|
||||
// AllModuleMaps 所有权限列表
|
||||
func AllModuleMaps() []maps.Map {
|
||||
func AllModuleMaps(langCode string) []maps.Map {
|
||||
var m = []maps.Map{
|
||||
{
|
||||
"name": "看板",
|
||||
"name": langs.Message(langCode, codes.AdminMenuDashboard),
|
||||
"code": AdminModuleCodeDashboard,
|
||||
"url": "/dashboard",
|
||||
},
|
||||
{
|
||||
"name": "网站列表",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServers),
|
||||
"code": AdminModuleCodeServer,
|
||||
"url": "/servers",
|
||||
},
|
||||
{
|
||||
"name": "边缘节点",
|
||||
"name": langs.Message(langCode, codes.AdminMenuNodes),
|
||||
"code": AdminModuleCodeNode,
|
||||
"url": "/clusters",
|
||||
},
|
||||
{
|
||||
"name": "域名解析",
|
||||
"name": langs.Message(langCode, codes.AdminMenuDNS),
|
||||
"code": AdminModuleCodeDNS,
|
||||
"url": "/dns",
|
||||
},
|
||||
}
|
||||
if teaconst.IsPlus {
|
||||
m = append(m, maps.Map{
|
||||
"name": "智能DNS",
|
||||
"name": langs.Message(langCode, codes.AdminMenuNS),
|
||||
"code": AdminModuleCodeNS,
|
||||
"url": "/ns",
|
||||
})
|
||||
}
|
||||
m = append(m, []maps.Map{
|
||||
{
|
||||
"name": "平台用户",
|
||||
"name": langs.Message(langCode, codes.AdminMenuUsers),
|
||||
"code": AdminModuleCodeUser,
|
||||
"url": "/users",
|
||||
},
|
||||
{
|
||||
"name": "系统用户",
|
||||
"name": langs.Message(langCode, codes.AdminMenuAdmins),
|
||||
"code": AdminModuleCodeAdmin,
|
||||
"url": "/admins",
|
||||
},
|
||||
{
|
||||
"name": "财务管理",
|
||||
"name": langs.Message(langCode, codes.AdminMenuFinance),
|
||||
"code": AdminModuleCodeFinance,
|
||||
"url": "/finance",
|
||||
},
|
||||
@@ -210,12 +226,12 @@ func AllModuleMaps() []maps.Map {
|
||||
if teaconst.IsPlus {
|
||||
m = append(m, []maps.Map{
|
||||
{
|
||||
"name": "套餐管理",
|
||||
"name": langs.Message(langCode, codes.AdminMenuPlans),
|
||||
"code": AdminModuleCodePlan,
|
||||
"url": "/plans",
|
||||
},
|
||||
{
|
||||
"name": "工单系统",
|
||||
"name": langs.Message(langCode, codes.AdminMenuTickets),
|
||||
"code": AdminModuleCodeTicket,
|
||||
"url": "/tickets",
|
||||
},
|
||||
@@ -224,12 +240,12 @@ func AllModuleMaps() []maps.Map {
|
||||
|
||||
m = append(m, []maps.Map{
|
||||
{
|
||||
"name": "日志审计",
|
||||
"name": langs.Message(langCode, codes.AdminMenuLogs),
|
||||
"code": AdminModuleCodeLog,
|
||||
"url": "/log",
|
||||
},
|
||||
{
|
||||
"name": "系统设置",
|
||||
"name": langs.Message(langCode, codes.AdminMenuSettings),
|
||||
"code": AdminModuleCodeSetting,
|
||||
"url": "/settings",
|
||||
},
|
||||
|
||||
@@ -7,6 +7,7 @@ type AdminModuleList struct {
|
||||
Modules []*systemconfigs.AdminModule
|
||||
Fullname string
|
||||
Theme string
|
||||
Lang string
|
||||
}
|
||||
|
||||
func (this *AdminModuleList) Allow(module string) bool {
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/TeaOSLab/EdgeAdmin/internal/oplogs"
|
||||
"github.com/TeaOSLab/EdgeAdmin/internal/rpc"
|
||||
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao"
|
||||
"github.com/iwind/TeaGo/actions"
|
||||
"github.com/iwind/TeaGo/logs"
|
||||
@@ -148,3 +149,12 @@ func (this *ParentAction) AdminContext() context.Context {
|
||||
func (this *ParentAction) ViewData() maps.Map {
|
||||
return this.Data
|
||||
}
|
||||
|
||||
func (this *ParentAction) Lang() string {
|
||||
var lang = configloaders.FindAdminLang(this.AdminId())
|
||||
if len(lang) > 0 {
|
||||
// TODO check language still exists
|
||||
return lang
|
||||
}
|
||||
return langs.ParseLangFromAction(this)
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ func (this *AdminAction) RunGet(params struct {
|
||||
|
||||
// 权限
|
||||
moduleMaps := []maps.Map{}
|
||||
for _, m := range configloaders.AllModuleMaps() {
|
||||
for _, m := range configloaders.AllModuleMaps(this.Lang()) {
|
||||
code := m.GetString("code")
|
||||
isChecked := false
|
||||
for _, module := range admin.Modules {
|
||||
|
||||
@@ -20,7 +20,7 @@ func (this *CreatePopupAction) Init() {
|
||||
}
|
||||
|
||||
func (this *CreatePopupAction) RunGet(params struct{}) {
|
||||
this.Data["modules"] = configloaders.AllModuleMaps()
|
||||
this.Data["modules"] = configloaders.AllModuleMaps(this.Lang())
|
||||
this.Show()
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ func (this *UpdateAction) RunGet(params struct {
|
||||
}
|
||||
|
||||
// 权限
|
||||
var moduleMaps = configloaders.AllModuleMaps()
|
||||
var moduleMaps = configloaders.AllModuleMaps(this.Lang())
|
||||
for _, m := range moduleMaps {
|
||||
code := m.GetString("code")
|
||||
isChecked := false
|
||||
|
||||
@@ -39,7 +39,7 @@ func (this *IndexAction) RunGet(params struct{}) {
|
||||
module, ok := configloaders.FindFirstAdminModule(this.AdminId())
|
||||
if ok {
|
||||
if module != "dashboard" {
|
||||
for _, m := range configloaders.AllModuleMaps() {
|
||||
for _, m := range configloaders.AllModuleMaps(this.Lang()) {
|
||||
if m.GetString("code") == module {
|
||||
this.RedirectURL(m.GetString("url"))
|
||||
return
|
||||
|
||||
@@ -5,36 +5,38 @@ package helpers
|
||||
|
||||
import (
|
||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
||||
"github.com/iwind/TeaGo/maps"
|
||||
)
|
||||
|
||||
func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnreadIPItems int64) []maps.Map {
|
||||
func FindAllMenuMaps(langCode string, nodeLogsType string, countUnreadNodeLogs int64, countUnreadIPItems int64) []maps.Map {
|
||||
return []maps.Map{
|
||||
{
|
||||
"code": "dashboard",
|
||||
"module": configloaders.AdminModuleCodeDashboard,
|
||||
"name": "数据看板",
|
||||
"name": langs.Message(langCode, codes.AdminMenuDashboard),
|
||||
"icon": "dashboard",
|
||||
},
|
||||
{
|
||||
"code": "servers",
|
||||
"module": configloaders.AdminModuleCodeServer,
|
||||
"name": "网站列表",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServers),
|
||||
"subtitle": "",
|
||||
"icon": "clone outsize",
|
||||
"subItems": []maps.Map{
|
||||
{
|
||||
"name": "访问日志",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServerAccessLogs),
|
||||
"url": "/servers/logs",
|
||||
"code": "log",
|
||||
},
|
||||
{
|
||||
"name": "证书管理",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServerCerts),
|
||||
"url": "/servers/certs",
|
||||
"code": "cert",
|
||||
},
|
||||
{
|
||||
"name": "网站分组",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServerGroups),
|
||||
"url": "/servers/groups",
|
||||
"code": "group",
|
||||
},
|
||||
@@ -44,12 +46,12 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread
|
||||
"code": "",
|
||||
},
|
||||
{
|
||||
"name": "缓存策略",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServerCachePolicies),
|
||||
"url": "/servers/components/cache",
|
||||
"code": "cache",
|
||||
},
|
||||
{
|
||||
"name": "刷新预热",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServerPurgeFetchCaches),
|
||||
"url": "/servers/components/cache/batch",
|
||||
"code": "cacheBatch",
|
||||
},
|
||||
@@ -59,12 +61,12 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread
|
||||
"code": "",
|
||||
},
|
||||
{
|
||||
"name": "WAF策略",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServerWAFPolicies),
|
||||
"url": "/servers/components/waf",
|
||||
"code": "waf",
|
||||
},
|
||||
{
|
||||
"name": "IP名单",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServerIPLists),
|
||||
"url": "/servers/iplists",
|
||||
"code": "iplist",
|
||||
"badge": countUnreadIPItems,
|
||||
@@ -75,12 +77,12 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread
|
||||
"code": "",
|
||||
},
|
||||
{
|
||||
"name": "统计指标",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServerMetrics),
|
||||
"url": "/servers/metrics",
|
||||
"code": "metric",
|
||||
},
|
||||
{
|
||||
"name": "通用设置",
|
||||
"name": langs.Message(langCode, codes.AdminMenuServerGlobalSettings),
|
||||
"url": "/servers/components",
|
||||
"code": "global",
|
||||
},
|
||||
@@ -89,28 +91,28 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread
|
||||
{
|
||||
"code": "clusters",
|
||||
"module": configloaders.AdminModuleCodeNode,
|
||||
"name": "边缘节点",
|
||||
"name": langs.Message(langCode, codes.AdminMenuNodes),
|
||||
"subtitle": "",
|
||||
"icon": "cloud",
|
||||
"subItems": []maps.Map{
|
||||
{
|
||||
"name": "集群列表",
|
||||
"name": langs.Message(langCode, codes.AdminMenuNodeClusters),
|
||||
"url": "/clusters",
|
||||
"code": "cluster",
|
||||
},
|
||||
{
|
||||
"name": "节点日志",
|
||||
"name": langs.Message(langCode, codes.AdminMenuNodeLogs),
|
||||
"url": "/clusters/logs?type=" + nodeLogsType,
|
||||
"code": "log",
|
||||
"badge": countUnreadNodeLogs,
|
||||
},
|
||||
{
|
||||
"name": "区域设置",
|
||||
"name": langs.Message(langCode, codes.AdminMenuNodeRegions),
|
||||
"url": "/clusters/regions",
|
||||
"code": "region",
|
||||
},
|
||||
{
|
||||
"name": "节点SSH",
|
||||
"name": langs.Message(langCode, codes.AdminMenuNodeSSHGrants),
|
||||
"url": "/clusters/grants",
|
||||
"code": "grant",
|
||||
},
|
||||
@@ -119,22 +121,22 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread
|
||||
{
|
||||
"code": "dns",
|
||||
"module": configloaders.AdminModuleCodeDNS,
|
||||
"name": "域名解析",
|
||||
"name": langs.Message(langCode, codes.AdminMenuDNS),
|
||||
"subtitle": "",
|
||||
"icon": "globe",
|
||||
"subItems": []maps.Map{
|
||||
{
|
||||
"name": "集群列表",
|
||||
"name": langs.Message(langCode, codes.AdminMenuDNSClusters),
|
||||
"url": "/dns",
|
||||
"code": "cluster",
|
||||
},
|
||||
{
|
||||
"name": "DNS服务商",
|
||||
"name": langs.Message(langCode, codes.AdminMenuDNSProviders),
|
||||
"url": "/dns/providers",
|
||||
"code": "provider",
|
||||
},
|
||||
{
|
||||
"name": "问题修复",
|
||||
"name": langs.Message(langCode, codes.AdminMenuDNSIssues),
|
||||
"url": "/dns/issues",
|
||||
"code": "issue",
|
||||
},
|
||||
@@ -143,36 +145,36 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread
|
||||
{
|
||||
"code": "users",
|
||||
"module": configloaders.AdminModuleCodeUser,
|
||||
"name": "平台用户",
|
||||
"name": langs.Message(langCode, codes.AdminMenuUsers),
|
||||
"icon": "users",
|
||||
},
|
||||
{
|
||||
"code": "admins",
|
||||
"module": configloaders.AdminModuleCodeAdmin,
|
||||
"name": "系统用户",
|
||||
"name": langs.Message(langCode, codes.AdminMenuAdmins),
|
||||
"subtitle": "",
|
||||
"icon": "user secret",
|
||||
},
|
||||
{
|
||||
"code": "log",
|
||||
"module": configloaders.AdminModuleCodeLog,
|
||||
"name": "日志审计",
|
||||
"name": langs.Message(langCode, codes.AdminMenuLogs),
|
||||
"icon": "history",
|
||||
},
|
||||
{
|
||||
"code": "settings",
|
||||
"module": configloaders.AdminModuleCodeSetting,
|
||||
"name": "系统设置",
|
||||
"name": langs.Message(langCode, codes.AdminMenuSettings),
|
||||
"subtitle": "",
|
||||
"icon": "setting",
|
||||
"subItems": []maps.Map{
|
||||
{
|
||||
"name": "基础设置",
|
||||
"name": langs.Message(langCode, codes.AdminMenuSettingBasicSettings),
|
||||
"url": "/settings",
|
||||
"code": "basic",
|
||||
},
|
||||
{
|
||||
"name": "高级设置",
|
||||
"name": langs.Message(langCode, codes.AdminMenuSettingAdvancedSettings),
|
||||
"url": "/settings/advanced",
|
||||
"code": "advanced",
|
||||
},
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/TeaOSLab/EdgeAdmin/internal/rpc"
|
||||
"github.com/TeaOSLab/EdgeAdmin/internal/setup"
|
||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/index/loginutils"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs"
|
||||
@@ -119,7 +120,7 @@ func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam
|
||||
if teaconst.IsDemoMode {
|
||||
if action.Request.Method == http.MethodPost {
|
||||
var actionName = action.Spec.ClassName[strings.LastIndex(action.Spec.ClassName, ".")+1:]
|
||||
var denyPrefixes = []string{"Update", "Create", "Delete", "Truncate", "Clean", "Clear", "Reset", "Add", "Remove", "Sync"}
|
||||
var denyPrefixes = []string{"Update", "Create", "Delete", "Truncate", "Clean", "Clear", "Reset", "Add", "Remove", "Sync", "Run", "Exec"}
|
||||
for _, prefix := range denyPrefixes {
|
||||
if strings.HasPrefix(actionName, prefix) {
|
||||
action.Fail(teaconst.ErrorDemoOperation)
|
||||
@@ -255,7 +256,16 @@ func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam
|
||||
if !action.Data.Has("teaMenu") {
|
||||
action.Data["teaMenu"] = ""
|
||||
}
|
||||
action.Data["teaModules"] = this.modules(actionPtr, adminId, uiConfig)
|
||||
|
||||
// 语言
|
||||
// Language
|
||||
var lang = configloaders.FindAdminLang(adminId)
|
||||
if len(lang) == 0 {
|
||||
lang = langs.ParseLangFromAction(action)
|
||||
}
|
||||
action.Data["teaLang"] = lang
|
||||
|
||||
action.Data["teaModules"] = this.modules(lang, actionPtr, adminId, uiConfig)
|
||||
action.Data["teaSubMenus"] = []map[string]interface{}{}
|
||||
action.Data["teaTabbar"] = []map[string]interface{}{}
|
||||
if len(uiConfig.Version) == 0 {
|
||||
@@ -290,7 +300,7 @@ func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam
|
||||
}
|
||||
|
||||
// 菜单配置
|
||||
func (this *userMustAuth) modules(actionPtr actions.ActionWrapper, adminId int64, adminUIConfig *systemconfigs.AdminUIConfig) []maps.Map {
|
||||
func (this *userMustAuth) modules(langCode string, actionPtr actions.ActionWrapper, adminId int64, adminUIConfig *systemconfigs.AdminUIConfig) []maps.Map {
|
||||
// 父级动作
|
||||
var action = actionPtr.Object()
|
||||
|
||||
@@ -309,7 +319,7 @@ func (this *userMustAuth) modules(actionPtr actions.ActionWrapper, adminId int64
|
||||
}
|
||||
|
||||
var result = []maps.Map{}
|
||||
for _, m := range FindAllMenuMaps(nodeLogsType, countUnreadNodeLogs, countUnreadIPItems) {
|
||||
for _, m := range FindAllMenuMaps(langCode, nodeLogsType, countUnreadNodeLogs, countUnreadIPItems) {
|
||||
if m.GetString("code") == "finance" && !configloaders.ShowFinance() {
|
||||
continue
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user