Files
ddns-go/util/messages.go
jeessy2 ed5278a0f8 fix: update password validation and improve login error messages (#1523)
* fix: update password validation and improve login error messages

* refactor: change variable declarations to constants for better clarity
2025-08-07 21:04:12 +08:00

139 lines
11 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package util
import (
"log"
"strings"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
var logLang = language.English
var logPrinter = message.NewPrinter(logLang)
func init() {
message.SetString(language.English, "可使用 .\\ddns-go.exe -s install 安装服务运行", "You can use '.\\ddns-go.exe -s install' to install service")
message.SetString(language.English, "可使用 sudo ./ddns-go -s install 安装服务运行", "You can use 'sudo ./ddns-go -s install' to install service")
message.SetString(language.English, "监听 %s", "Listening on %s")
message.SetString(language.English, "配置文件已保存在: %s", "Config file has been saved to: %s")
message.SetString(language.English, "你的IP %s 没有变化, 域名 %s", "Your's IP %s has not changed! Domain: %s")
message.SetString(language.English, "新增域名解析 %s 成功! IP: %s", "Added domain %s successfully! IP: %s")
message.SetString(language.English, "新增域名解析 %s 失败! 异常信息: %s", "Failed to add domain %s! Result: %s")
message.SetString(language.English, "更新域名解析 %s 成功! IP: %s", "Updated domain %s successfully! IP: %s")
message.SetString(language.English, "更新域名解析 %s 失败! 异常信息: %s", "Failed to updated domain %s! Result: %s")
message.SetString(language.English, "你的IPv4未变化, 未触发 %s 请求", "Your's IPv4 has not changed, %s request has not been triggered")
message.SetString(language.English, "你的IPv6未变化, 未触发 %s 请求", "Your's IPv6 has not changed, %s request has not been triggered")
message.SetString(language.English, "Namecheap 不支持更新 IPv6", "Namecheap does not support IPv6")
message.SetString(language.English, "dynadot仅支持单域名配置多个域名请添加更多配置", "dynadot only supports single domain configuration, please add more configurations")
// http_util
message.SetString(language.English, "异常信息: %s", "Exception: %s")
message.SetString(language.English, "查询域名信息发生异常! %s", "Failed to query domain info! %s")
message.SetString(language.English, "返回内容: %s ,返回状态码: %d", "Response body: %s ,Response status code: %d")
message.SetString(language.English, "通过接口获取IPv4失败! 接口地址: %s", "Failed to get IPv4 from %s")
message.SetString(language.English, "通过接口获取IPv6失败! 接口地址: %s", "Failed to get IPv6 from %s")
message.SetString(language.English, "将不会触发Webhook, 仅在第 3 次失败时触发一次Webhook, 当前失败次数:%d", "Webhook will not be triggered, only trigger once when the third failure, current failure times: %d")
message.SetString(language.English, "在DNS服务商中未找到根域名: %s", "Root domain not found in DNS provider: %s")
// webhook
message.SetString(language.English, "Webhook配置中的URL不正确", "Webhook url is incorrect")
message.SetString(language.English, "Webhook中的 RequestBody JSON 无效", "Webhook RequestBody JSON is invalid")
message.SetString(language.English, "Webhook调用成功! 返回数据:%s", "Successfully called Webhook! Response body: %s")
message.SetString(language.English, "Webhook调用失败! 异常信息:%s", "Failed to call Webhook! Exception: %s")
message.SetString(language.English, "Webhook Header不正确: %s", "Webhook header is invalid: %s")
message.SetString(language.English, "请输入Webhook的URL", "Please enter the Webhook url")
// callback
message.SetString(language.English, "Callback的URL不正确", "Callback url is incorrect")
message.SetString(language.English, "Callback调用成功, 域名: %s, IP: %s, 返回数据: %s", "Successfully called Callback! Domain: %s, IP: %s, Response body: %s")
message.SetString(language.English, "Callback调用失败, 异常信息: %s", "Failed to call Callback! Exception: %s")
// save
message.SetString(language.English, "必须输入用户名/密码", "Username/Password is required")
message.SetString(language.English, "密码不安全!尝试使用更复杂的密码", "Password is not secure! Try using a more complex password")
message.SetString(language.English, "数据解析失败, 请刷新页面重试", "Data parsing failed, please refresh the page and try again")
message.SetString(language.English, "第 %s 个配置未填写域名", "The %s config does not fill in the domain")
// config
message.SetString(language.English, "从网卡获得IPv4失败", "Failed to get IPv4 from network card")
message.SetString(language.English, "从网卡中获得IPv4失败! 网卡名: %s", "Failed to get IPv4 from network card! Network card name: %s")
message.SetString(language.English, "获取IPv4结果失败! 接口: %s ,返回值: %s", "Failed to get IPv4 result! Interface: %s ,Result: %s")
message.SetString(language.English, "获取%s结果失败! 未能成功执行命令:%s, 错误:%q, 退出状态码:%s", "Failed to get %s result! Command: %s, Error: %q, Exit status code: %s")
message.SetString(language.English, "获取%s结果失败! 命令: %s, 标准输出: %q", "Failed to get %s result! Command: %s, Stdout: %q")
message.SetString(language.English, "从网卡获得IPv6失败", "Failed to get IPv6 from network card")
message.SetString(language.English, "从网卡中获得IPv6失败! 网卡名: %s", "Failed to get IPv6 from network card! Network card name: %s")
message.SetString(language.English, "获取IPv6结果失败! 接口: %s ,返回值: %s", "Failed to get IPv6 result! Interface: %s ,Result: %s")
message.SetString(language.English, "未找到第 %d 个IPv6地址! 将使用第一个IPv6地址", "%dth IPv6 address not found! Will use the first IPv6 address")
message.SetString(language.English, "IPv6匹配表达式 %s 不正确! 最小从1开始", "IPv6 match expression %s is incorrect! Minimum start from 1")
message.SetString(language.English, "IPv6将使用正则表达式 %s 进行匹配", "IPv6 will use regular expression %s for matching")
message.SetString(language.English, "匹配成功! 匹配到地址: %s", "Match successfully! Matched address: %s")
message.SetString(language.English, "没有匹配到任何一个IPv6地址, 将使用第一个地址", "No IPv6 address matched, will use the first address")
message.SetString(language.English, "未能获取IPv4地址, 将不会更新", "Failed to get IPv4 address, will not update")
message.SetString(language.English, "未能获取IPv6地址, 将不会更新", "Failed to get IPv6 address, will not update")
// domains
message.SetString(language.English, "域名: %s 不正确", "The domain %s is incorrect")
message.SetString(language.English, "域名: %s 解析失败", "The domain %s resolution failed")
message.SetString(language.English, "域名 %s 解析未找到,且因添加了参数 %s=%s 导致无法创建。本次更新已被忽略", "DNS resolution for domain %s was not found, and the creation failed due to the added parameter %s=%s. This update has been ignored.")
message.SetString(language.English, "IPv6未改变, 将等待 %d 次后与DNS服务商进行比对", "IPv6 has not changed, will wait %d times to compare with DNS provider")
message.SetString(language.English, "IPv4未改变, 将等待 %d 次后与DNS服务商进行比对", "IPv4 has not changed, will wait %d times to compare with DNS provider")
message.SetString(language.English, "本机DNS异常! 将默认使用 %s, 可参考文档通过 -dns 自定义 DNS 服务器", "Local DNS exception! Will use %s by default, you can use -dns to customize DNS server")
message.SetString(language.English, "等待网络连接: %s", "Waiting for network connection: %s")
message.SetString(language.English, "%s 后重试...", "Retry after %s")
message.SetString(language.English, "网络已连接", "The network is connected")
// main
message.SetString(language.English, "监听端口发生异常, 请检查端口是否被占用! %s", "Port listening failed, please check if the port is occupied! %s")
message.SetString(language.English, "ddns-go 服务卸载成功", "ddns-go service uninstalled successfully")
message.SetString(language.English, "ddns-go 服务卸载失败, 异常信息: %s", "ddns-go service uninstallation failed, Exception: %s")
message.SetString(language.English, "安装 ddns-go 服务成功! 请打开浏览器并进行配置", "Installed ddns-go service successfully! Please open the browser and configure it")
message.SetString(language.English, "安装 ddns-go 服务失败, 异常信息: %s", "Failed to install ddns-go service, Exception: %s")
message.SetString(language.English, "ddns-go 服务已安装, 无需再次安装", "ddns-go service has been installed, no need to install again")
message.SetString(language.English, "重启 ddns-go 服务成功", "restarted ddns-go service successfully")
message.SetString(language.English, "启动 ddns-go 服务成功", "started ddns-go service successfully")
message.SetString(language.English, "ddns-go 服务未安装, 请先安装服务", "ddns-go service is not installed, please install the service first")
// webhook通知
message.SetString(language.English, "未改变", "no changed")
message.SetString(language.English, "失败", "failed")
message.SetString(language.English, "成功", "success")
// Login
message.SetString(language.English, "%q 配置文件为空, 超过3小时禁止从公网访问", "%q configuration file is empty, public network access is prohibited for more than 3 hours")
message.SetString(language.English, "%q 被禁止从公网访问", "%q is prohibited from accessing the public network")
message.SetString(language.English, "%q 帐号密码不正确", "%q username or password is incorrect")
message.SetString(language.English, "%q 登录成功", "%q login successfully")
message.SetString(language.English, "用户名或密码错误", "Username or password is incorrect")
message.SetString(language.English, "登录失败次数过多,请稍后再试", "Too many login failures, please try again later")
message.SetString(language.English, "用户名 %s 的密码已重置成功! 请重启ddns-go", "The password of username %s has been reset successfully! Please restart ddns-go")
message.SetString(language.English, "需在 %s 之前完成用户名密码设置,请重启ddns-go", "Need to complete the username and password setting before %s, please restart ddns-go")
message.SetString(language.English, "配置文件 %s 不存在, 可通过-c指定配置文件", "Config file %s does not exist, you can specify the configuration file through -c")
}
func Log(key string, args ...interface{}) {
log.Println(LogStr(key, args...))
}
func LogStr(key string, args ...interface{}) string {
return logPrinter.Sprintf(key, args...)
}
func InitLogLang(lang string) string {
newLang := language.English
if strings.HasPrefix(lang, "zh") {
newLang = language.Chinese
}
if newLang != logLang {
logLang = newLang
logPrinter = message.NewPrinter(logLang)
}
return logLang.String()
}