部分中文转换为多语言代号

This commit is contained in:
刘祥超
2023-06-28 16:19:05 +08:00
parent bd57d35d63
commit 9db82b0bea
18 changed files with 656 additions and 164 deletions

View File

@@ -51,9 +51,10 @@ func runGenerate() {
var dirRegexp = regexp.MustCompile(`^[a-z]+-[a-z]+$`) var dirRegexp = regexp.MustCompile(`^[a-z]+-[a-z]+$`)
var jsonFileNameRegexp = regexp.MustCompile(`^([a-zA-Z0-9]+)(_([a-zA-Z0-9]+))+\.json$`) var jsonFileNameRegexp = regexp.MustCompile(`^([a-zA-Z0-9]+)(_([a-zA-Z0-9]+))+\.json$`)
var messageCodeRegexp = regexp.MustCompile(`^[a-zA-Z0-9_]+$`) var messageCodeRegexp = regexp.MustCompile(`^[a-zA-Z0-9_]+$`)
var jsonCommentRegexp = regexp.MustCompile(`//.+`)
var messageCodes = []string{} var messageCodes = []string{}
var messageMaps = map[string]map[string]string{} // lang => { K:V } var langMaps = map[string]*langs.Lang{} // lang => *langs.Lang
var defaultLang = langs.DefaultManager().DefaultLang() var defaultLang = langs.DefaultManager().DefaultLang()
for _, file := range files { for _, file := range files {
@@ -65,11 +66,11 @@ func runGenerate() {
var langCode = dirName var langCode = dirName
var isBaseLang = langCode == defaultLang var isBaseLang = langCode == defaultLang
func() { var processOk = func() bool {
jsonFiles, err := filepath.Glob(rootDir + "/" + dirName + "/*.json") jsonFiles, err := filepath.Glob(rootDir + "/" + dirName + "/*.json")
if err != nil { if err != nil {
fmt.Println("[ERROR]list json files failed: " + err.Error()) fmt.Println("[ERROR]list json files failed: " + err.Error())
return return false
} }
for _, jsonFile := range jsonFiles { for _, jsonFile := range jsonFiles {
@@ -82,21 +83,24 @@ func runGenerate() {
data, err := os.ReadFile(jsonFile) data, err := os.ReadFile(jsonFile)
if err != nil { if err != nil {
fmt.Println("[ERROR]read json file '" + jsonFile + "' failed: " + err.Error()) fmt.Println("[ERROR]read json file '" + jsonFile + "' failed: " + err.Error())
return return false
} }
// remove comments in json
data = jsonCommentRegexp.ReplaceAll(data, []byte{})
var m = map[string]string{} // code => value var m = map[string]string{} // code => value
err = json.Unmarshal(data, &m) err = json.Unmarshal(data, &m)
if err != nil { if err != nil {
fmt.Println("[ERROR]decode json file '" + jsonFile + "' failed: " + err.Error()) fmt.Println("[ERROR]decode json file '" + jsonFile + "' failed: " + err.Error())
return return false
} }
var newM = map[string]string{} var newM = map[string]string{}
for code, value := range m { for code, value := range m {
if !messageCodeRegexp.MatchString(code) { if !messageCodeRegexp.MatchString(code) {
fmt.Println("[ERROR]invalid message code '" + code + "'") fmt.Println("[ERROR]invalid message code '" + code + "'")
return return false
} }
var fullCode = module + "_" + code var fullCode = module + "_" + code
@@ -106,28 +110,42 @@ func runGenerate() {
newM[fullCode] = value newM[fullCode] = value
} }
finalMap, ok := messageMaps[langCode] finalLang, ok := langMaps[langCode]
if !ok { if !ok {
finalMap = map[string]string{} finalLang = langs.NewLang(langCode)
messageMaps[langCode] = finalMap langMaps[langCode] = finalLang
} }
for code, value := range newM { for code, value := range newM {
finalMap[code] = value finalLang.Set(code, value)
} }
} }
return true
}() }()
if !processOk {
return
}
}
// compile
for langCode, lang := range langMaps {
err = lang.Compile()
if err != nil {
fmt.Println("[ERROR]compile '" + langCode + "' failed: " + err.Error())
return
}
} }
// check message codes // check message codes
fmt.Println("checking message codes ...") fmt.Println("checking message codes ...")
var defaultMessageMap = map[string]string{} var defaultMessageMap = map[string]string{}
for langCode, messageMap := range messageMaps { for langCode, messageLang := range langMaps {
if langCode == defaultLang { // only check lang not equal to 'en-us' if langCode == defaultLang { // only check lang not equal to 'en-us'
defaultMessageMap = messageMap defaultMessageMap = messageLang.GetAll()
continue continue
} }
for messageCode := range messageMap { for messageCode := range messageLang.GetAll() {
if !lists.ContainsString(messageCodes, messageCode) { if !lists.ContainsString(messageCodes, messageCode) {
fmt.Println("[ERROR]message code '" + messageCode + "' in lang '" + langCode + "' not exist in default lang file ('" + defaultLang + "')") fmt.Println("[ERROR]message code '" + messageCode + "' in lang '" + langCode + "' not exist in default lang file ('" + defaultLang + "')")
return return
@@ -150,11 +168,16 @@ import(
const ( const (
` `
for _, messageCode := range messageCodes { for index, messageCode := range messageCodes {
// add comment to message code // add comment to message code
comment, _, _ := strings.Cut(defaultMessageMap[messageCode], "\n") comment, _, _ := strings.Cut(defaultMessageMap[messageCode], "\n")
codesSource += upperWords(messageCode) + " langs.MessageCode = " + strconv.Quote(messageCode) + " // " + comment + "\n" codesSource += upperWords(messageCode) + " langs.MessageCode = " + strconv.Quote(messageCode) + " // " + comment
// add NL
if index != len(messageCodes)-1 {
codesSource += "\n"
}
} }
codesSource += ` codesSource += `
@@ -175,7 +198,7 @@ const (
} }
// generate messages_LANG.go // generate messages_LANG.go
for langCode, messageMap := range messageMaps { for langCode, messageLang := range langMaps {
var langFile = strings.ReplaceAll("messages/messages_"+langCode+".go", "-", "_") var langFile = strings.ReplaceAll("messages/messages_"+langCode+".go", "-", "_")
fmt.Println("generating '" + langFile + "' ...") fmt.Println("generating '" + langFile + "' ...")
@@ -192,7 +215,7 @@ func init() {
langs.Load("` + langCode + `", map[string]string{ langs.Load("` + langCode + `", map[string]string{
` `
for code, value := range messageMap { for code, value := range messageLang.GetAll() {
source += strconv.Quote(code) + ": " + strconv.Quote(value) + ",\n" source += strconv.Quote(code) + ": " + strconv.Quote(value) + ",\n"
} }
@@ -214,8 +237,8 @@ func init() {
} }
} }
// generate language javascript files for EdgeAdmin // generate language javascript files for EdgeAdmin and EdgeUser (commercial versions)
for lang, messageMap := range messageMaps { for lang, messageLang := range langMaps {
if lang != defaultLang { if lang != defaultLang {
// TODO merge messageMap with default message map // TODO merge messageMap with default message map
} }
@@ -226,7 +249,26 @@ func init() {
var targetDir = filepath.Dir(targetFile) var targetDir = filepath.Dir(targetFile)
dirStat, _ := os.Stat(targetDir) dirStat, _ := os.Stat(targetDir)
if dirStat != nil { if dirStat != nil {
messageMapJSON, err := json.Marshal(messageMap)
var prefix = ""
switch component {
case "EdgeAdmin":
prefix = "admin_"
case "EdgeUser":
prefix = "user_"
}
if len(prefix) == 0 {
continue
}
var filteredMessages = map[string]string{}
for code, value := range messageLang.GetAll() {
if strings.HasPrefix(code, prefix) {
filteredMessages[code] = value
}
}
messageMapJSON, err := json.Marshal(filteredMessages)
if err != nil { if err != nil {
fmt.Println("[ERROR]marshal message map failed: " + err.Error()) fmt.Println("[ERROR]marshal message map failed: " + err.Error())
return return
@@ -264,12 +306,16 @@ func upperWord(word string) string {
// special words // special words
switch word { switch word {
case "api", "http", "https", "tcp", "udp", "ip", "dns", "ns", "waf", "acme", "ssh", "toa": case "api", "http", "https", "tcp", "tls", "udp", "ip", "dns", "ns",
"waf", "acme", "ssh", "toa", "http2", "http3", "uam", "cc",
"db", "isp", "sni", "ui":
return strings.ToUpper(word) return strings.ToUpper(word)
case "ipv6": case "ipv6":
return "IPv6" return "IPv6"
case "ddos": case "ddos":
return "DDoS" return "DDoS"
case "webp":
return "WebP"
} }
return strings.ToUpper(word[:1]) + word[1:] return strings.ToUpper(word[:1]) + word[1:]

View File

@@ -66,6 +66,18 @@ func ParseVariables(source string, replacer func(varName string) (value string))
return builder.String() return builder.String()
} }
func ParseVariablesError(source string, replacer func(varName string) (value string, err error)) (string, error) {
var resultErr error
var result = ParseVariables(source, func(varName string) (value string) {
replacedValue, err := replacer(varName)
if err != nil {
resultErr = err
}
return replacedValue
})
return result, resultErr
}
// ParseVariablesFromHolders 从占位中分析变量 // ParseVariablesFromHolders 从占位中分析变量
func ParseVariablesFromHolders(holders VariableHolders, replacer func(varName string) (value string)) string { func ParseVariablesFromHolders(holders VariableHolders, replacer func(varName string) (value string)) string {
// no variables // no variables

View File

@@ -7,68 +7,187 @@ import (
) )
const ( const (
AdminDashboardDNS langs.MessageCode = "admin_dashboard_dns" // DNS AdminClusterMenuSettingBasic langs.MessageCode = "admin_cluster_menu_setting_basic" // 基础设置
AdminDashboardEvents langs.MessageCode = "admin_dashboard_events" // 事件 AdminClusterMenuSettingCachePolicy langs.MessageCode = "admin_cluster_menu_setting_cache_policy" // 缓存策略
AdminDashboardOverview langs.MessageCode = "admin_dashboard_overview" // 概况 AdminClusterMenuSettingCC langs.MessageCode = "admin_cluster_menu_setting_cc" // CC防护
AdminDashboardUser langs.MessageCode = "admin_dashboard_user" // 用户 AdminClusterMenuSettingDDoSProtection langs.MessageCode = "admin_cluster_menu_setting_ddos_protection" // DDoS防护
AdminDashboardWAF langs.MessageCode = "admin_dashboard_waf" // WAF AdminClusterMenuSettingDNS langs.MessageCode = "admin_cluster_menu_setting_dns" // DNS设置
AdminMenuAdminRecipients langs.MessageCode = "admin_menu_admin_recipients" // 通知媒介 AdminClusterMenuSettingHealthCheck langs.MessageCode = "admin_cluster_menu_setting_health_check" // 健康检查
AdminMenuAdmins langs.MessageCode = "admin_menu_admins" // 系统用户 AdminClusterMenuSettingHTTP3 langs.MessageCode = "admin_cluster_menu_setting_http3" // HTTP/3
AdminMenuDashboard langs.MessageCode = "admin_menu_dashboard" // 数据看板 AdminClusterMenuSettingMetrics langs.MessageCode = "admin_cluster_menu_setting_metrics" // 统计指标
AdminMenuDNS langs.MessageCode = "admin_menu_dns" // 域名解析 AdminClusterMenuSettingNotification langs.MessageCode = "admin_cluster_menu_setting_notification" // 消息通知
AdminMenuDNSClusters langs.MessageCode = "admin_menu_dns_clusters" // 集群列表 AdminClusterMenuSettingPages langs.MessageCode = "admin_cluster_menu_setting_pages" // 自定义页面
AdminMenuDNSIssues langs.MessageCode = "admin_menu_dns_issues" // 问题修复 AdminClusterMenuSettingSchedule langs.MessageCode = "admin_cluster_menu_setting_schedule" // 智能调度
AdminMenuDNSProviders langs.MessageCode = "admin_menu_dns_providers" // DNS服务商 AdminClusterMenuSettingServiceGlobal langs.MessageCode = "admin_cluster_menu_setting_service_global" // 网站设置
AdminMenuFinance langs.MessageCode = "admin_menu_finance" // 财务管理 AdminClusterMenuSettingSystemService langs.MessageCode = "admin_cluster_menu_setting_system_service" // 系统服务
AdminMenuFinanceAccounts langs.MessageCode = "admin_menu_finance_accounts" // 用户账户 AdminClusterMenuSettingThresholds langs.MessageCode = "admin_cluster_menu_setting_thresholds" // 阈值设置
AdminMenuFinanceBills langs.MessageCode = "admin_menu_finance_bills" // 费用账单 AdminClusterMenuSettingTOA langs.MessageCode = "admin_cluster_menu_setting_toa" // TOA设置
AdminMenuFinanceFee langs.MessageCode = "admin_menu_finance_fee" // 计费设置 AdminClusterMenuSettingUAM langs.MessageCode = "admin_cluster_menu_setting_uam" // 5秒盾
AdminMenuFinanceIncome langs.MessageCode = "admin_menu_finance_income" // 统计报表 AdminClusterMenuSettingWAFActions langs.MessageCode = "admin_cluster_menu_setting_waf_actions" // WAF动作
AdminMenuFinanceLogs langs.MessageCode = "admin_menu_finance_logs" // 收支明细 AdminClusterMenuSettingWAFPolicy langs.MessageCode = "admin_cluster_menu_setting_waf_policy" // WAF策略
AdminMenuFinanceOrders langs.MessageCode = "admin_menu_finance_orders" // 订单管理 AdminClusterMenuSettingWebP langs.MessageCode = "admin_cluster_menu_setting_webp" // WebP
AdminMenuFinancePackages langs.MessageCode = "admin_menu_finance_packages" // 流量包 AdminClusterMenuTabClusterDashboard langs.MessageCode = "admin_cluster_menu_tab_cluster_dashboard" // 集群看板
AdminMenuLogs langs.MessageCode = "admin_menu_logs" // 日志审计 AdminClusterMenuTabClusterDelete langs.MessageCode = "admin_cluster_menu_tab_cluster_delete" // 删除集群
AdminMenuNodeAntiDDoSProducts langs.MessageCode = "admin_menu_node_anti_ddos_products" // 高防IP AdminClusterMenuTabClusterNodes langs.MessageCode = "admin_cluster_menu_tab_cluster_nodes" // 节点列表
AdminMenuNodeClusters langs.MessageCode = "admin_menu_node_clusters" // 集群列表 AdminClusterMenuTabClusterSettings langs.MessageCode = "admin_cluster_menu_tab_cluster_settings" // 集群设置
AdminMenuNodeDistributedMonitors langs.MessageCode = "admin_menu_node_distributed_monitors" // 区域监控 AdminCommonMenuSettingBasic langs.MessageCode = "admin_common_menu_setting_basic" // 基础设置
AdminMenuNodeIPList langs.MessageCode = "admin_menu_node_ip_list" // 节点IP AdminCommonMenuSettingCache langs.MessageCode = "admin_common_menu_setting_cache" // 缓存设置
AdminMenuNodeLogs langs.MessageCode = "admin_menu_node_logs" // 节点日志 AdminCommonMenuSettingCachePolicy langs.MessageCode = "admin_common_menu_setting_cache_policy" // 缓存策略
AdminMenuNodeRegions langs.MessageCode = "admin_menu_node_regions" // 区域设置 AdminCommonMenuSettingDDoSProtection langs.MessageCode = "admin_common_menu_setting_ddos_protection" // DDoS防护
AdminMenuNodeSSHGrants langs.MessageCode = "admin_menu_node_ssh_grants" // 节点SSH AdminCommonMenuSettingDNS langs.MessageCode = "admin_common_menu_setting_dns" // DNS设置
AdminMenuNodes langs.MessageCode = "admin_menu_nodes" // 边缘节点 AdminCommonMenuSettingHealthCheck langs.MessageCode = "admin_common_menu_setting_health_check" // 健康检查
AdminMenuNS langs.MessageCode = "admin_menu_ns" // 智能DNS AdminCommonMenuSettingMetrics langs.MessageCode = "admin_common_menu_setting_metrics" // 统计指标
AdminMenuNSAccessLogs langs.MessageCode = "admin_menu_ns_access_logs" // 访问日志 AdminCommonMenuSettingWAFPolicy langs.MessageCode = "admin_common_menu_setting_waf_policy" // WAF策略
AdminMenuNSClusters langs.MessageCode = "admin_menu_ns_clusters" // 集群管理 AdminCommonMenuSettingWebP langs.MessageCode = "admin_common_menu_setting_webp" // WebP
AdminMenuNSDomainBatchOperations langs.MessageCode = "admin_menu_ns_domain_batch_operations" // 批量操作 AdminCommonSystem langs.MessageCode = "admin_common_system" // 系统
AdminMenuNSDomainGroups langs.MessageCode = "admin_menu_ns_domain_groups" // 域名分组 AdminDashboardDNS langs.MessageCode = "admin_dashboard_dns" // DNS
AdminMenuNSDomains langs.MessageCode = "admin_menu_ns_domains" // 域名管理 AdminDashboardEvents langs.MessageCode = "admin_dashboard_events" // 事件
AdminMenuNSNodeLogs langs.MessageCode = "admin_menu_ns_node_logs" // 运行日志 AdminDashboardOverview langs.MessageCode = "admin_dashboard_overview" // 概况
AdminMenuNSPlans langs.MessageCode = "admin_menu_ns_plans" // 套餐设置 AdminDashboardUser langs.MessageCode = "admin_dashboard_user" // 用户
AdminMenuNSResolveTest langs.MessageCode = "admin_menu_ns_resolve_test" // 解析测试 AdminDashboardWAF langs.MessageCode = "admin_dashboard_waf" // WAF
AdminMenuNSRoutes langs.MessageCode = "admin_menu_ns_routes" // 线路管理 AdminDBNodeTabNodes langs.MessageCode = "admin_db_node_tab_nodes" // 数据库节点
AdminMenuNSSettings langs.MessageCode = "admin_menu_ns_settings" // 全局配置 AdminMenuAdminRecipients langs.MessageCode = "admin_menu_admin_recipients" // 通知媒介
AdminMenuNSUserPlans langs.MessageCode = "admin_menu_ns_user_plans" // 用户套餐 AdminMenuAdmins langs.MessageCode = "admin_menu_admins" // 系统用户
AdminMenuPlanUserPlans langs.MessageCode = "admin_menu_plan_user_plans" // 已购套餐 AdminMenuDashboard langs.MessageCode = "admin_menu_dashboard" // 数据看板
AdminMenuPlans langs.MessageCode = "admin_menu_plans" // 套餐管理 AdminMenuDNS langs.MessageCode = "admin_menu_dns" // 域名解析
AdminMenuServerAccessLogPolicies langs.MessageCode = "admin_menu_server_access_log_policies" // 日志策略 AdminMenuDNSClusters langs.MessageCode = "admin_menu_dns_clusters" // 集群列表
AdminMenuServerAccessLogs langs.MessageCode = "admin_menu_server_access_logs" // 访问日志 AdminMenuDNSIssues langs.MessageCode = "admin_menu_dns_issues" // 问题修复
AdminMenuServerCachePolicies langs.MessageCode = "admin_menu_server_cache_policies" // 缓存策略 AdminMenuDNSProviders langs.MessageCode = "admin_menu_dns_providers" // DNS服务商
AdminMenuServerCerts langs.MessageCode = "admin_menu_server_certs" // 证书管理 AdminMenuFinance langs.MessageCode = "admin_menu_finance" // 财务管理
AdminMenuServerGlobalSettings langs.MessageCode = "admin_menu_server_global_settings" // 通用设置 AdminMenuFinanceAccounts langs.MessageCode = "admin_menu_finance_accounts" // 用户账户
AdminMenuServerGroups langs.MessageCode = "admin_menu_server_groups" // 网站分组 AdminMenuFinanceBills langs.MessageCode = "admin_menu_finance_bills" // 费用账单
AdminMenuServerIPLists langs.MessageCode = "admin_menu_server_ip_lists" // IP名单 AdminMenuFinanceFee langs.MessageCode = "admin_menu_finance_fee" // 计费设置
AdminMenuServerMetrics langs.MessageCode = "admin_menu_server_metrics" // 统计指标 AdminMenuFinanceIncome langs.MessageCode = "admin_menu_finance_income" // 统计报表
AdminMenuServerPurgeFetchCaches langs.MessageCode = "admin_menu_server_purge_fetch_caches" // 刷新预热 AdminMenuFinanceLogs langs.MessageCode = "admin_menu_finance_logs" // 收支明细
AdminMenuServerScripts langs.MessageCode = "admin_menu_server_scripts" // 脚本库 AdminMenuFinanceOrders langs.MessageCode = "admin_menu_finance_orders" // 订单管理
AdminMenuServerTrafficStats langs.MessageCode = "admin_menu_server_traffic_stats" // 用量统计 AdminMenuFinancePackages langs.MessageCode = "admin_menu_finance_packages" // 流量包
AdminMenuServerWAFPolicies langs.MessageCode = "admin_menu_server_waf_policies" // WAF策略 AdminMenuLogs langs.MessageCode = "admin_menu_logs" // 日志审计
AdminMenuServers langs.MessageCode = "admin_menu_servers" // 网站列表 AdminMenuNodeAntiDDoSProducts langs.MessageCode = "admin_menu_node_anti_ddos_products" // 高防IP
AdminMenuSettingAdvancedSettings langs.MessageCode = "admin_menu_setting_advanced_settings" // 高级设置 AdminMenuNodeClusters langs.MessageCode = "admin_menu_node_clusters" // 集群列表
AdminMenuSettingAuthority langs.MessageCode = "admin_menu_setting_authority" // 商业版本 AdminMenuNodeDistributedMonitors langs.MessageCode = "admin_menu_node_distributed_monitors" // 区域监控
AdminMenuSettingBasicSettings langs.MessageCode = "admin_menu_setting_basic_settings" // 基础设置 AdminMenuNodeIPList langs.MessageCode = "admin_menu_node_ip_list" // 节点IP
AdminMenuSettings langs.MessageCode = "admin_menu_settings" // 系统设置 AdminMenuNodeLogs langs.MessageCode = "admin_menu_node_logs" // 节点日志
AdminMenuTicketCategory langs.MessageCode = "admin_menu_ticket_category" // 分类 AdminMenuNodeRegions langs.MessageCode = "admin_menu_node_regions" // 区域设置
AdminMenuTickets langs.MessageCode = "admin_menu_tickets" // 工单系统 AdminMenuNodeSSHGrants langs.MessageCode = "admin_menu_node_ssh_grants" // 节点SSH
AdminMenuUsers langs.MessageCode = "admin_menu_users" // 用户设置 AdminMenuNodes langs.MessageCode = "admin_menu_nodes" // 边缘节点
AdminMenuNS langs.MessageCode = "admin_menu_ns" // 智能DNS
AdminMenuNSAccessLogs langs.MessageCode = "admin_menu_ns_access_logs" // 访问日志
AdminMenuNSClusters langs.MessageCode = "admin_menu_ns_clusters" // 集群管理
AdminMenuNSDomainBatchOperations langs.MessageCode = "admin_menu_ns_domain_batch_operations" // 批量操作
AdminMenuNSDomainGroups langs.MessageCode = "admin_menu_ns_domain_groups" // 域名分组
AdminMenuNSDomains langs.MessageCode = "admin_menu_ns_domains" // 域名管理
AdminMenuNSNodeLogs langs.MessageCode = "admin_menu_ns_node_logs" // 运行日志
AdminMenuNSPlans langs.MessageCode = "admin_menu_ns_plans" // 套餐设置
AdminMenuNSResolveTest langs.MessageCode = "admin_menu_ns_resolve_test" // 解析测试
AdminMenuNSRoutes langs.MessageCode = "admin_menu_ns_routes" // 线路管理
AdminMenuNSSettings langs.MessageCode = "admin_menu_ns_settings" // 全局配置
AdminMenuNSUserPlans langs.MessageCode = "admin_menu_ns_user_plans" // 用户套餐
AdminMenuPlanUserPlans langs.MessageCode = "admin_menu_plan_user_plans" // 已购套餐
AdminMenuPlans langs.MessageCode = "admin_menu_plans" // 套餐管理
AdminMenuServerAccessLogPolicies langs.MessageCode = "admin_menu_server_access_log_policies" // 日志策略
AdminMenuServerAccessLogs langs.MessageCode = "admin_menu_server_access_logs" // 访问日志
AdminMenuServerCachePolicies langs.MessageCode = "admin_menu_server_cache_policies" // 缓存策略
AdminMenuServerCerts langs.MessageCode = "admin_menu_server_certs" // 证书管理
AdminMenuServerGlobalSettings langs.MessageCode = "admin_menu_server_global_settings" // 通用设置
AdminMenuServerGroups langs.MessageCode = "admin_menu_server_groups" // 网站分组
AdminMenuServerIPLists langs.MessageCode = "admin_menu_server_ip_lists" // IP名单
AdminMenuServerMetrics langs.MessageCode = "admin_menu_server_metrics" // 统计指标
AdminMenuServerPurgeFetchCaches langs.MessageCode = "admin_menu_server_purge_fetch_caches" // 刷新预热
AdminMenuServerScripts langs.MessageCode = "admin_menu_server_scripts" // 脚本库
AdminMenuServerTrafficStats langs.MessageCode = "admin_menu_server_traffic_stats" // 用量统计
AdminMenuServerWAFPolicies langs.MessageCode = "admin_menu_server_waf_policies" // WAF策略
AdminMenuServers langs.MessageCode = "admin_menu_servers" // 网站列表
AdminMenuSettingAdvancedSettings langs.MessageCode = "admin_menu_setting_advanced_settings" // 高级设置
AdminMenuSettingAuthority langs.MessageCode = "admin_menu_setting_authority" // 商业版本
AdminMenuSettingBasicSettings langs.MessageCode = "admin_menu_setting_basic_settings" // 基础设置
AdminMenuSettings langs.MessageCode = "admin_menu_settings" // 系统设置
AdminMenuTicketCategory langs.MessageCode = "admin_menu_ticket_category" // 分类
AdminMenuTickets langs.MessageCode = "admin_menu_tickets" // 工单系统
AdminMenuUsers langs.MessageCode = "admin_menu_users" // 用户设置
AdminNodeMenuCreateMultipleNodes langs.MessageCode = "admin_node_menu_create_multiple_nodes" // 批量创建
AdminNodeMenuCreateSingleNode langs.MessageCode = "admin_node_menu_create_single_node" // 单个创建
AdminNodeMenuInstallAutoRegister langs.MessageCode = "admin_node_menu_install_auto_register" // 自动注册
AdminNodeMenuInstallManually langs.MessageCode = "admin_node_menu_install_manually" // 手动安装
AdminNodeMenuInstallRemote langs.MessageCode = "admin_node_menu_install_remote" // 远程安装(%d)
AdminNodeMenuInstallRemoteUpgrade langs.MessageCode = "admin_node_menu_install_remote_upgrade" // 远程升级(%d)
AdminNodeMenuSettingBasic langs.MessageCode = "admin_node_menu_setting_basic" // 基础设置
AdminNodeMenuSettingCache langs.MessageCode = "admin_node_menu_setting_cache" // 缓存设置
AdminNodeMenuSettingDDoSProtection langs.MessageCode = "admin_node_menu_setting_ddos_protection" // DDoS防护
AdminNodeMenuSettingDNS langs.MessageCode = "admin_node_menu_setting_dns" // DNS设置
AdminNodeMenuSettingSchedule langs.MessageCode = "admin_node_menu_setting_schedule" // 智能调度
AdminNodeMenuSettingSSH langs.MessageCode = "admin_node_menu_setting_ssh" // SSH设置
AdminNodeMenuSettingSystem langs.MessageCode = "admin_node_menu_setting_system" // 系统设置
AdminNodeMenuSettingThresholds langs.MessageCode = "admin_node_menu_setting_thresholds" // 阈值设置
AdminNodeUngroupedLabel langs.MessageCode = "admin_node_ungrouped_label" // 未分组
AdminNSClusterTabDelete langs.MessageCode = "admin_ns_cluster_tab_delete" // 删除集群
AdminNSClusterTabNodes langs.MessageCode = "admin_ns_cluster_tab_nodes" // 节点列表
AdminNSClusterTabSetting langs.MessageCode = "admin_ns_cluster_tab_setting" // 集群设置
AdminServerMenuAccesslogHistory langs.MessageCode = "admin_server_menu_accesslog_history" // 历史
AdminServerMenuAccesslogRealtime langs.MessageCode = "admin_server_menu_accesslog_realtime" // 实时
AdminServerMenuAccesslogToday langs.MessageCode = "admin_server_menu_accesslog_today" // 今天
AdminServerMenuDashboard langs.MessageCode = "admin_server_menu_dashboard" // 看板
AdminServerMenuSettingAccessLog langs.MessageCode = "admin_server_menu_setting_access_log" // 访问日志
AdminServerMenuSettingAuth langs.MessageCode = "admin_server_menu_setting_auth" // 访问鉴权
AdminServerMenuSettingBasic langs.MessageCode = "admin_server_menu_setting_basic" // 基本信息
AdminServerMenuSettingCache langs.MessageCode = "admin_server_menu_setting_cache" // 缓存
AdminServerMenuSettingCC langs.MessageCode = "admin_server_menu_setting_cc" // CC防护
AdminServerMenuSettingCharset langs.MessageCode = "admin_server_menu_setting_charset" // 字符编码
AdminServerMenuSettingClientIP langs.MessageCode = "admin_server_menu_setting_client_ip" // 访客IP地址
AdminServerMenuSettingCompress langs.MessageCode = "admin_server_menu_setting_compress" // 内容压缩
AdminServerMenuSettingDelete langs.MessageCode = "admin_server_menu_setting_delete" // 删除
AdminServerMenuSettingDNS langs.MessageCode = "admin_server_menu_setting_dns" // DNS
AdminServerMenuSettingDomains langs.MessageCode = "admin_server_menu_setting_domains" // 域名
AdminServerMenuSettingFastcgi langs.MessageCode = "admin_server_menu_setting_fastcgi" // Fastcgi
AdminServerMenuSettingHTTP langs.MessageCode = "admin_server_menu_setting_http" // HTTP
AdminServerMenuSettingHTTPHeaders langs.MessageCode = "admin_server_menu_setting_http_headers" // HTTP Header
AdminServerMenuSettingHTTPS langs.MessageCode = "admin_server_menu_setting_https" // HTTPS
AdminServerMenuSettingLocations langs.MessageCode = "admin_server_menu_setting_locations" // 路由规则
AdminServerMenuSettingOrigins langs.MessageCode = "admin_server_menu_setting_origins" // 源站
AdminServerMenuSettingOthers langs.MessageCode = "admin_server_menu_setting_others" // 其他设置
AdminServerMenuSettingPages langs.MessageCode = "admin_server_menu_setting_pages" // 自定义页面
AdminServerMenuSettingRedirects langs.MessageCode = "admin_server_menu_setting_redirects" // URL跳转
AdminServerMenuSettingReferers langs.MessageCode = "admin_server_menu_setting_referers" // 防盗链
AdminServerMenuSettingRequestLimit langs.MessageCode = "admin_server_menu_setting_request_limit" // 请求限制
AdminServerMenuSettingRewriteRules langs.MessageCode = "admin_server_menu_setting_rewrite_rules" // 重写规则
AdminServerMenuSettingRoot langs.MessageCode = "admin_server_menu_setting_root" // 静态分发
AdminServerMenuSettingScripts langs.MessageCode = "admin_server_menu_setting_scripts" // 边缘脚本
AdminServerMenuSettingStat langs.MessageCode = "admin_server_menu_setting_stat" // 统计
AdminServerMenuSettingTCP langs.MessageCode = "admin_server_menu_setting_tcp" // TCP
AdminServerMenuSettingTLS langs.MessageCode = "admin_server_menu_setting_tls" // TLS
AdminServerMenuSettingTrafficLimit langs.MessageCode = "admin_server_menu_setting_traffic_limit" // 流量限制
AdminServerMenuSettingUAM langs.MessageCode = "admin_server_menu_setting_uam" // 5秒盾
AdminServerMenuSettingUDP langs.MessageCode = "admin_server_menu_setting_udp" // UDP
AdminServerMenuSettingUnix langs.MessageCode = "admin_server_menu_setting_unix" // Unix
AdminServerMenuSettingUserAgents langs.MessageCode = "admin_server_menu_setting_user_agents" // UA名单
AdminServerMenuSettingWAF langs.MessageCode = "admin_server_menu_setting_waf" // WAF
AdminServerMenuSettingWebP langs.MessageCode = "admin_server_menu_setting_webp" // WebP
AdminServerMenuSettingWebsocket langs.MessageCode = "admin_server_menu_setting_websocket" // Websocket
AdminServerMenuStatClients langs.MessageCode = "admin_server_menu_stat_clients" // 终端
AdminServerMenuStatProviders langs.MessageCode = "admin_server_menu_stat_providers" // 运营商
AdminServerMenuStatRegions langs.MessageCode = "admin_server_menu_stat_regions" // 地域分布
AdminServerMenuStatTraffic langs.MessageCode = "admin_server_menu_stat_traffic" // 流量统计
AdminServerMenuStatWAF langs.MessageCode = "admin_server_menu_stat_waf" // WAF
AdminServerTabAccessLogs langs.MessageCode = "admin_server_tab_access_logs" // 日志
AdminServerTabDashboard langs.MessageCode = "admin_server_tab_dashboard" // 看板
AdminServerTabDelete langs.MessageCode = "admin_server_tab_delete" // 删除
AdminServerTabSettings langs.MessageCode = "admin_server_tab_settings" // 设置
AdminServerTabStat langs.MessageCode = "admin_server_tab_stat" // 统计
AdminSettingsTabAccessLogDatabases langs.MessageCode = "admin_settings_tab_access_log_databases" // 日志数据库
AdminSettingsTabAdminSecuritySettings langs.MessageCode = "admin_settings_tab_admin_security_settings" // 安全设置
AdminSettingsTabAdminServer langs.MessageCode = "admin_settings_tab_admin_server" // Web服务
AdminSettingsTabAdminUI langs.MessageCode = "admin_settings_tab_admin_ui" // 管理界面设置
AdminSettingsTabAPINodes langs.MessageCode = "admin_settings_tab_api_nodes" // API节点
AdminSettingsTabAuthority langs.MessageCode = "admin_settings_tab_authority" // 商业版认证
AdminSettingsTabBackup langs.MessageCode = "admin_settings_tab_backup" // 备份
AdminSettingsTabClientBrowsers langs.MessageCode = "admin_settings_tab_client_browsers" // 浏览器库
AdminSettingsTabClientOperationSystems langs.MessageCode = "admin_settings_tab_client_operation_systems" // 操作系统库
AdminSettingsTabDatabase langs.MessageCode = "admin_settings_tab_database" // 数据库
AdminSettingsTabIPLibrary langs.MessageCode = "admin_settings_tab_ip_library" // IP库
AdminSettingsTabLogin langs.MessageCode = "admin_settings_tab_login" // 登录设置
AdminSettingsTabMonitorNodes langs.MessageCode = "admin_settings_tab_monitor_nodes" // 监控节点
AdminSettingsTabProfile langs.MessageCode = "admin_settings_tab_profile" // 个人资料
AdminSettingsTabTransfer langs.MessageCode = "admin_settings_tab_transfer" // 迁移
AdminSettingsTabUpdates langs.MessageCode = "admin_settings_tab_updates" // 检查更新
AdminSettingsTabUserNodes langs.MessageCode = "admin_settings_tab_user_nodes" // 用户节点
AdminSettingsTabUserUI langs.MessageCode = "admin_settings_tab_user_ui" // 用户界面设置
) )

View File

@@ -2,6 +2,16 @@
package langs package langs
import (
"errors"
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
"strings"
)
const varPrefix = "lang."
type LangCode = string
type Lang struct { type Lang struct {
code string code string
@@ -30,3 +40,39 @@ func (this *Lang) Get(messageCode string) string {
func (this *Lang) GetAll() map[string]string { func (this *Lang) GetAll() map[string]string {
return this.messageMap return this.messageMap
} }
// Compile variable to literal strings
func (this *Lang) Compile() error {
for code, oldMessage := range this.messageMap {
message, err := this.get(code, 0)
if err != nil {
return errors.New("compile '" + code + "': '" + oldMessage + "' failed: " + err.Error())
}
this.messageMap[code] = message
}
return nil
}
func (this *Lang) get(messageCode string, loopIndex int) (string, error) {
if loopIndex >= 8 /** max recurse **/ {
return "", errors.New("too many recurse")
}
loopIndex++
message, ok := this.messageMap[messageCode]
if len(message) == 0 {
if !ok && loopIndex > 1 {
// recover as variable
return "${" + varPrefix + messageCode + "}", errors.New("can not find message for code '" + messageCode + "'")
}
return "", nil
}
return configutils.ParseVariablesError(message, func(varName string) (value string, err error) {
if !strings.HasPrefix(varName, varPrefix) {
return "${" + varName + "}", nil
}
return this.get(varName[len(varPrefix):], loopIndex)
})
}

View File

@@ -8,68 +8,188 @@ import (
func init() { func init() {
langs.Load("zh-cn", map[string]string{ langs.Load("zh-cn", map[string]string{
"admin_menu_finance_fee": "计费设置", "admin_server_menu_setting_webp": "WebP",
"admin_menu_server_traffic_stats": "用量统计", "admin_cluster_menu_setting_uam": "5秒盾",
"admin_menu_ns_node_logs": "运行日志", "admin_common_menu_setting_webp": "WebP",
"admin_menu_servers": "网站列表", "admin_dashboard_events": "事件",
"admin_menu_finance_logs": "收支明细", "admin_server_menu_setting_unix": "Unix",
"admin_menu_plan_user_plans": "已购套餐", "admin_server_menu_setting_root": "静态分发",
"admin_menu_server_ip_lists": "IP名单", "admin_server_menu_accesslog_realtime": "实时",
"admin_menu_users": "用户设置", "admin_server_menu_accesslog_history": "历史",
"admin_menu_ns_access_logs": "访问日志", "admin_settings_tab_access_log_databases": "日志数据库",
"admin_menu_server_purge_fetch_caches": "刷新预热", "admin_menu_server_traffic_stats": "用量统计",
"admin_menu_node_distributed_monitors": "区域监控", "admin_menu_ticket_category": "分类",
"admin_menu_finance_packages": "流量包", "admin_menu_server_ip_lists": "IP名单",
"admin_menu_settings": "系统设置", "admin_menu_plans": "套餐管理",
"admin_menu_ns_plans": "套餐设置", "admin_node_menu_install_remote_upgrade": "远程升级(%d)",
"admin_dashboard_user": "用户", "admin_server_menu_setting_auth": "访问鉴权",
"admin_dashboard_waf": "WAF", "admin_server_menu_setting_websocket": "Websocket",
"admin_menu_setting_advanced_settings": "高级设置", "admin_common_menu_setting_metrics": "统计指标",
"admin_menu_server_global_settings": "通用设置", "admin_common_menu_setting_waf_policy": "WAF策略",
"admin_menu_node_logs": "节点日志", "admin_menu_server_global_settings": "通用设置",
"admin_menu_ns_clusters": "集群管理", "admin_menu_node_clusters": "集群列表",
"admin_menu_server_cache_policies": "缓存策略", "admin_node_menu_install_manually": "手动安装",
"admin_menu_ns_resolve_test": "解析测试", "admin_server_tab_settings": "设置",
"admin_menu_finance_income": "统计报表", "admin_server_menu_setting_http_headers": "HTTP Header",
"admin_menu_finance_accounts": "用户账户", "admin_cluster_menu_setting_service_global": "网站设置",
"admin_menu_server_certs": "证书管理", "admin_cluster_menu_setting_thresholds": "阈值设置",
"admin_menu_dashboard": "数据看板", "admin_node_menu_create_multiple_nodes": "批量创建",
"admin_dashboard_events": "事件", "admin_server_menu_setting_https": "HTTPS",
"admin_menu_node_ip_list": "节点IP", "admin_server_menu_setting_others": "其他设置",
"admin_dashboard_overview": "概况", "admin_server_tab_delete": "删除",
"admin_menu_server_access_logs": "访问日志", "admin_server_menu_setting_pages": "自定义页面",
"admin_menu_dns_providers": "DNS服务商", "admin_settings_tab_client_operation_systems": "操作系统库",
"admin_menu_admins": "系统用户", "admin_cluster_menu_tab_cluster_settings": "集群设置",
"admin_menu_setting_authority": "商业版本", "admin_cluster_menu_tab_cluster_nodes": "节点列表",
"admin_menu_dns_issues": "问题修复", "admin_node_menu_setting_thresholds": "阈值设置",
"admin_menu_server_metrics": "统计指标", "admin_server_menu_stat_traffic": "流量统计",
"admin_menu_node_ssh_grants": "节点SSH", "admin_server_menu_setting_user_agents": "UA名单",
"admin_menu_server_waf_policies": "WAF策略", "admin_server_menu_setting_basic": "基本信息",
"admin_menu_ns_domains": "域名管理", "admin_settings_tab_updates": "检查更新",
"admin_menu_nodes": "边缘节点", "admin_menu_node_anti_ddos_products": "高防IP",
"admin_dashboard_dns": "DNS", "admin_menu_setting_advanced_settings": "高级设置",
"admin_menu_logs": "日志审计", "admin_menu_node_distributed_monitors": "区域监控",
"admin_menu_ns_user_plans": "用户套餐", "admin_menu_ns_node_logs": "运行日志",
"admin_menu_ns_domain_groups": "域名分组", "admin_menu_setting_authority": "商业版本",
"admin_menu_tickets": "工单系统", "admin_server_menu_setting_cc": "CC防护",
"admin_menu_node_regions": "区域设置", "admin_server_menu_stat_clients": "终端",
"admin_menu_ns_domain_batch_operations": "批量操作", "admin_server_menu_accesslog_today": "今天",
"admin_menu_plans": "套餐管理", "admin_cluster_menu_setting_waf_policy": "WAF策略",
"admin_menu_finance_bills": "费用账单", "admin_menu_dashboard": "数据看板",
"admin_menu_ticket_category": "分类", "admin_menu_node_ssh_grants": "节点SSH",
"admin_menu_finance": "财务管理", "admin_menu_servers": "网站列表",
"admin_menu_node_anti_ddos_products": "高防IP", "admin_menu_ns_user_plans": "用户套餐",
"admin_menu_ns": "智能DNS", "admin_node_menu_setting_ssh": "SSH设置",
"admin_menu_dns": "域名解析", "admin_server_menu_dashboard": "看板",
"admin_menu_server_groups": "网站分组", "admin_server_menu_setting_dns": "DNS",
"admin_menu_server_scripts": "脚本库", "admin_settings_tab_authority": "商业版认证",
"admin_menu_ns_settings": "全局配置", "admin_settings_tab_user_nodes": "用户节点",
"admin_menu_ns_routes": "线路管理", "admin_cluster_menu_setting_health_check": "健康检查",
"admin_menu_server_access_log_policies": "日志策略", "admin_menu_ns_resolve_test": "解析测试",
"admin_menu_finance_orders": "订单管理", "admin_menu_finance_orders": "订单管理",
"admin_menu_dns_clusters": "集群列表", "admin_ns_cluster_tab_setting": "集群设置",
"admin_menu_admin_recipients": "通知媒介", "admin_server_menu_setting_referers": "防盗链",
"admin_menu_setting_basic_settings": "基础设置", "admin_server_menu_setting_tls": "TLS",
"admin_menu_node_clusters": "集群列表", "admin_settings_tab_admin_server": "Web服务",
"admin_settings_tab_ip_library": "IP库",
"admin_cluster_menu_setting_schedule": "智能调度",
"admin_menu_ns_routes": "线路管理",
"admin_menu_finance_income": "统计报表",
"admin_menu_finance": "财务管理",
"admin_ns_cluster_tab_nodes": "节点列表",
"admin_server_menu_setting_charset": "字符编码",
"admin_server_menu_setting_access_log": "访问日志",
"admin_cluster_menu_setting_dns": "DNS设置",
"admin_dashboard_waf": "WAF",
"admin_menu_dns_issues": "问题修复",
"admin_menu_node_logs": "节点日志",
"admin_server_menu_stat_waf": "WAF",
"admin_server_menu_setting_domains": "域名",
"admin_settings_tab_api_nodes": "API节点",
"admin_cluster_menu_setting_webp": "WebP",
"admin_common_menu_setting_cache": "缓存设置",
"admin_common_system": "系统",
"admin_dashboard_dns": "DNS",
"admin_node_menu_install_remote": "远程安装(%d)",
"admin_menu_ns_plans": "套餐设置",
"admin_menu_server_access_logs": "访问日志",
"admin_server_menu_setting_uam": "5秒盾",
"admin_cluster_menu_setting_basic": "基础设置",
"admin_node_menu_setting_schedule": "智能调度",
"admin_settings_tab_client_browsers": "浏览器库",
"admin_menu_ns_domains": "域名管理",
"admin_menu_server_metrics": "统计指标",
"admin_server_menu_setting_rewrite_rules": "重写规则",
"admin_server_menu_setting_waf": "WAF",
"admin_settings_tab_login": "登录设置",
"admin_cluster_menu_setting_notification": "消息通知",
"admin_db_node_tab_nodes": "数据库节点",
"admin_menu_finance_bills": "费用账单",
"admin_menu_ns_domain_batch_operations": "批量操作",
"admin_menu_finance_accounts": "用户账户",
"admin_server_menu_setting_tcp": "TCP",
"admin_settings_tab_profile": "个人资料",
"admin_settings_tab_backup": "备份",
"admin_cluster_menu_setting_pages": "自定义页面",
"admin_menu_admins": "系统用户",
"admin_menu_ns_settings": "全局配置",
"admin_menu_node_ip_list": "节点IP",
"admin_menu_ns_access_logs": "访问日志",
"admin_node_menu_create_single_node": "单个创建",
"admin_server_menu_setting_cache": "缓存",
"admin_menu_dns_clusters": "集群列表",
"admin_server_menu_setting_redirects": "URL跳转",
"admin_menu_tickets": "工单系统",
"admin_menu_server_certs": "证书管理",
"admin_node_menu_setting_system": "系统设置",
"admin_server_menu_setting_stat": "统计",
"admin_server_menu_setting_scripts": "边缘脚本",
"admin_common_menu_setting_cache_policy": "缓存策略",
"admin_menu_users": "用户设置",
"admin_server_tab_stat": "统计",
"admin_server_menu_setting_http": "HTTP",
"admin_server_menu_setting_client_ip": "访客IP地址",
"admin_settings_tab_database": "数据库",
"admin_settings_tab_user_ui": "用户界面设置",
"admin_menu_server_scripts": "脚本库",
"admin_menu_ns": "智能DNS",
"admin_server_menu_stat_providers": "运营商",
"admin_menu_ns_domain_groups": "域名分组",
"admin_menu_finance_packages": "流量包",
"admin_node_menu_setting_basic": "基础设置",
"admin_ns_cluster_tab_delete": "删除集群",
"admin_server_menu_setting_delete": "删除",
"admin_server_menu_setting_compress": "内容压缩",
"admin_cluster_menu_setting_ddos_protection": "DDoS防护",
"admin_server_menu_setting_request_limit": "请求限制",
"admin_server_tab_access_logs": "日志",
"admin_settings_tab_transfer": "迁移",
"admin_cluster_menu_setting_metrics": "统计指标",
"admin_menu_setting_basic_settings": "基础设置",
"admin_server_menu_setting_udp": "UDP",
"admin_settings_tab_admin_ui": "管理界面设置",
"admin_cluster_menu_setting_toa": "TOA设置",
"admin_common_menu_setting_ddos_protection": "DDoS防护",
"admin_menu_dns_providers": "DNS服务商",
"admin_menu_server_access_log_policies": "日志策略",
"admin_node_ungrouped_label": "未分组",
"admin_server_menu_stat_regions": "地域分布",
"admin_settings_tab_monitor_nodes": "监控节点",
"admin_cluster_menu_tab_cluster_dashboard": "集群看板",
"admin_menu_server_cache_policies": "缓存策略",
"admin_menu_settings": "系统设置",
"admin_menu_logs": "日志审计",
"admin_menu_nodes": "边缘节点",
"admin_common_menu_setting_dns": "DNS设置",
"admin_menu_plan_user_plans": "已购套餐",
"admin_node_menu_setting_dns": "DNS设置",
"admin_cluster_menu_tab_cluster_delete": "删除集群",
"admin_cluster_menu_setting_cache_policy": "缓存策略",
"admin_menu_finance_fee": "计费设置",
"admin_node_menu_setting_cache": "缓存设置",
"admin_server_menu_setting_locations": "路由规则",
"admin_cluster_menu_setting_http3": "HTTP/3",
"admin_menu_node_regions": "区域设置",
"admin_menu_ns_clusters": "集群管理",
"admin_menu_dns": "域名解析",
"admin_node_menu_install_auto_register": "自动注册",
"admin_server_menu_setting_origins": "源站",
"admin_cluster_menu_setting_system_service": "系统服务",
"admin_dashboard_overview": "概况",
"admin_server_tab_dashboard": "看板",
"admin_common_menu_setting_health_check": "健康检查",
"admin_common_menu_setting_basic": "基础设置",
"admin_dashboard_user": "用户",
"admin_menu_server_purge_fetch_caches": "刷新预热",
"admin_menu_server_groups": "网站分组",
"admin_server_menu_setting_traffic_limit": "流量限制",
"admin_settings_tab_admin_security_settings": "安全设置",
"admin_cluster_menu_setting_waf_actions": "WAF动作",
"admin_cluster_menu_setting_cc": "CC防护",
"admin_menu_finance_logs": "收支明细",
"admin_menu_server_waf_policies": "WAF策略",
"admin_menu_admin_recipients": "通知媒介",
"admin_node_menu_setting_ddos_protection": "DDoS防护",
"admin_server_menu_setting_fastcgi": "Fastcgi",
}) })
} }

View File

@@ -0,0 +1 @@
After change the messages, remember to run 'langs generate' to generate Go codes.

View File

@@ -1,3 +0,0 @@
{
}

View File

@@ -0,0 +1,26 @@
{
"setting_basic": "${lang.admin_common_menu_setting_basic}",
"setting_dns": "${lang.admin_common_menu_setting_dns}",
"setting_health_check": "${lang.admin_common_menu_setting_health_check}",
"setting_service_global": "网站设置",
"setting_cache_policy": "${lang.admin_common_menu_setting_cache_policy}",
"setting_waf_policy": "${lang.admin_common_menu_setting_waf_policy}",
"setting_waf_actions": "WAF动作",
"setting_webp": "${lang.admin_common_menu_setting_webp}",
"setting_metrics": "${lang.admin_common_menu_setting_metrics}",
"setting_ddos_protection": "${lang.admin_common_menu_setting_ddos_protection}",
"setting_uam": "5秒盾",
"setting_cc": "CC防护",
"setting_pages": "自定义页面",
"setting_http3": "HTTP/3",
"setting_schedule": "智能调度",
"setting_thresholds": "阈值设置",
"setting_notification": "消息通知",
"setting_system_service": "系统服务",
"setting_toa": "TOA设置",
"tab_cluster_dashboard": "集群看板",
"tab_cluster_nodes": "节点列表",
"tab_cluster_settings": "集群设置",
"tab_cluster_delete": "删除集群"
}

View File

@@ -1,3 +1,12 @@
{ {
"menu_setting_basic": "基础设置",
"menu_setting_dns": "DNS设置",
"menu_setting_health_check": "健康检查",
"menu_setting_cache_policy": "缓存策略",
"menu_setting_waf_policy": "WAF策略",
"menu_setting_webp": "WebP",
"menu_setting_metrics": "统计指标",
"menu_setting_ddos_protection": "DDoS防护",
"menu_setting_cache": "缓存设置",
"system": "系统"
} }

View File

@@ -0,0 +1,3 @@
{
"tab_nodes": "数据库节点"
}

View File

@@ -1,3 +1,3 @@
{ {
"ungrouped_label": "未分组"
} }

View File

@@ -0,0 +1,18 @@
{
"create_single_node": "单个创建",
"create_multiple_nodes": "批量创建",
"install_manually": "手动安装",
"install_auto_register": "自动注册",
"install_remote": "远程安装(%d)", // 参数:节点数量
"install_remote_upgrade": "远程升级(%d)", // 参数:节点数量,
"setting_basic": "${lang.admin_common_menu_setting_basic}",
"setting_dns": "${lang.admin_common_menu_setting_dns}",
"setting_cache": "${lang.admin_common_menu_setting_cache}",
"setting_ddos_protection": "${lang.admin_common_menu_setting_ddos_protection}",
"setting_ssh": "SSH设置",
"setting_system": "系统设置",
"setting_schedule": "智能调度",
"setting_thresholds": "阈值设置"
}

View File

@@ -0,0 +1,5 @@
{
"tab_nodes": "节点列表",
"tab_setting": "集群设置",
"tab_delete": "删除集群"
}

View File

@@ -1,3 +1,57 @@
{ {
"tab_dashboard": "看板",
"tab_stat": "统计",
"tab_access_logs": "日志",
"tab_settings": "设置",
"tab_delete": "删除",
"menu_dashboard": "看板",
"menu_accesslog_realtime": "实时",
"menu_accesslog_today": "今天",
"menu_accesslog_history": "历史",
"menu_stat_traffic": "流量统计",
"menu_stat_regions": "地域分布",
"menu_stat_providers": "运营商",
"menu_stat_clients": "终端",
"menu_stat_waf": "WAF",
"menu_setting_basic": "基本信息",
"menu_setting_dns": "DNS",
"menu_setting_domains": "域名",
"menu_setting_http": "HTTP",
"menu_setting_https": "HTTPS",
"menu_setting_origins": "源站",
"menu_setting_redirects": "URL跳转",
"menu_setting_locations": "路由规则",
"menu_setting_rewrite_rules": "重写规则",
"menu_setting_waf": "WAF",
"menu_setting_cache": "缓存",
"menu_setting_auth": "访问鉴权",
"menu_setting_referers": "防盗链",
"menu_setting_user_agents": "UA名单",
"menu_setting_charset": "字符编码",
"menu_setting_access_log": "访问日志",
"menu_setting_stat": "统计",
"menu_setting_compress": "内容压缩",
"menu_setting_pages": "自定义页面",
"menu_setting_http_headers": "HTTP Header", // TODO 中文应该改成"HTTP报头"
"menu_setting_websocket": "Websocket",
"menu_setting_webp": "WebP",
"menu_setting_root": "静态分发",
"menu_setting_fastcgi": "Fastcgi",
"menu_setting_client_ip": "访客IP地址",
"menu_setting_request_limit": "请求限制",
"menu_setting_others": "其他设置",
"menu_setting_tcp": "TCP",
"menu_setting_tls": "TLS",
"menu_setting_unix": "Unix",
"menu_setting_udp": "UDP",
"menu_setting_delete": "删除",
"menu_setting_uam": "5秒盾",
"menu_setting_cc": "CC防护",
"menu_setting_traffic_limit": "流量限制",
"menu_setting_scripts": "边缘脚本"
} }

View File

@@ -1,3 +0,0 @@
{
}

View File

@@ -0,0 +1,20 @@
{
"tab_admin_server": "Web服务",
"tab_admin_ui": "管理界面设置",
"tab_user_ui": "用户界面设置",
"tab_admin_security_settings": "安全设置",
"tab_updates": "检查更新",
"tab_profile": "个人资料",
"tab_login": "登录设置",
"tab_database": "数据库",
"tab_api_nodes": "API节点",
"tab_user_nodes": "用户节点",
"tab_monitor_nodes": "监控节点",
"tab_ip_library": "IP库",
"tab_client_operation_systems": "操作系统库",
"tab_client_browsers": "浏览器库",
"tab_authority": "商业版认证",
"tab_access_log_databases": "日志数据库",
"tab_transfer": "迁移",
"tab_backup": "备份"
}

View File

@@ -11,7 +11,7 @@ import (
// Message 读取消息 // Message 读取消息
// Read message // Read message
func Message(langCode string, messageCode MessageCode, args ...any) string { func Message(langCode LangCode, messageCode MessageCode, args ...any) string {
return defaultManager.GetMessage(langCode, messageCode, args...) return defaultManager.GetMessage(langCode, messageCode, args...)
} }
@@ -51,19 +51,18 @@ func ParseLangFromAction(action actions.ActionWrapper) (langCode string) {
// Format string that contains message variables, such as ${lang.MESSAGE_CODE} // Format string that contains message variables, such as ${lang.MESSAGE_CODE}
// //
// 暂时不支持变量中加参数 // 暂时不支持变量中加参数
func Format(langCode string, varString string) string { func Format(langCode LangCode, varString string) string {
return configutils.ParseVariables(varString, func(varName string) (value string) { return configutils.ParseVariables(varString, func(varName string) (value string) {
const prefix = "lang." if !strings.HasPrefix(varName, varPrefix) {
if !strings.HasPrefix(varName, prefix) {
return "${" + varName + "}" // keep origin variable return "${" + varName + "}" // keep origin variable
} }
return Message(langCode, varName[len(prefix):]) return Message(langCode, varName[len(varPrefix):])
}) })
} }
// Load 加载消息定义 // Load 加载消息定义
// Load message definitions from map // Load message definitions from map
func Load(langCode string, messageMap map[string]string) { func Load(langCode LangCode, messageMap map[string]string) {
lang, ok := defaultManager.GetLang(langCode) lang, ok := defaultManager.GetLang(langCode)
if !ok { if !ok {
lang = defaultManager.AddLang(langCode) lang = defaultManager.AddLang(langCode)

View File

@@ -13,6 +13,26 @@ func TestMessage(t *testing.T) {
t.Log(langs.Message("en-us", "user_description", "Lily")) t.Log(langs.Message("en-us", "user_description", "Lily"))
} }
func TestMessageVariable(t *testing.T) {
var lang = langs.DefaultManager().AddLang("en-us")
lang.Set("user", "Lily")
lang.Set("user2", "${lang.user}")
lang.Set("user_name", "Name: ${lang.user}")
lang.Set("user_name3", "Name: ${lang.user3}, ${user4}")
//lang.Set("user3", "")
err := lang.Compile()
if err != nil {
t.Log("ERROR(ignore):", err)
}
t.Log("user:", lang.Get("user"))
t.Log("user2:", lang.Get("user2"))
t.Log("user_name:", lang.Get("user_name"))
t.Log("user_name3:", lang.Get("user_name3"))
t.Log("user_name3_2:", lang.Get("name3"))
}
func TestMessageDefault(t *testing.T) { func TestMessageDefault(t *testing.T) {
var lang = langs.DefaultManager().AddLang("zh-cn") var lang = langs.DefaultManager().AddLang("zh-cn")
lang.Set("user_description", "user: %s") lang.Set("user_description", "user: %s")
@@ -31,6 +51,6 @@ func TestFormat(t *testing.T) {
lang.Set("book_name", "Go语言") lang.Set("book_name", "Go语言")
} }
t.Log(langs.Format("en-US", "this is ${lang.book_name} book")) t.Log(langs.Format("en-US", "this is ${lang:book_name} book"))
t.Log(langs.Format("zh-CN", "this is ${lang.book_name} book")) t.Log(langs.Format("zh-CN", "this is ${lang:book_name} book"))
} }