路由性能优化: - 修复 macOS route 命令语法错误(去掉 -net 参数) - 路由应用拆分为 Essential(ready前,4-6条命令<1s)+ Deferred(ready后,批量脚本) - 新增 CIDR 聚合算法(cidrmerge.go),合并相邻 CIDR 块减少路由数量(10826->7500) - 批量脚本执行:3平台各实现8个批量函数,临时脚本单次执行替代逐条进程创建 - 并行批量:拆为4个子shell并行执行,总时间降为1/4 连接步骤显示: - stats 新增 connectStep + cidrError 原子变量 - 连接生命周期中设置步骤(fetch_cidrs/connecting/load_routes),UI 实时显示 - after-proxy CIDR 获取期间显示加载状态,获取失败显示错误提示 CIDR 刷新按钮: - ipc 新增 CmdRefreshCIDR 命令 - daemon 处理刷新请求,session.RefreshCIDRs() 重新获取+添加路由 - UI 状态卡新增刷新按钮,proxy/bypass 模式已连接时显示 README: - 补充 URL 获取时机注意事项(bypass模式after-proxy可能失败) - 补充 CIDR 聚合与批量执行说明
144 lines
4.7 KiB
TOML
144 lines
4.7 KiB
TOML
WindowTitle = "LMVPN"
|
|
|
|
StatusLabel = "Status"
|
|
ProfileLabel = "Profile"
|
|
|
|
StateDisconnected = "Disconnected"
|
|
StateConnecting = "Connecting..."
|
|
StateConnected = "Connected"
|
|
StateReconnecting = "Reconnecting..."
|
|
StateError = "Error"
|
|
|
|
BtnConnect = "Connect"
|
|
BtnDisconnect = "Disconnect"
|
|
BtnAddProfile = "Add Profile"
|
|
BtnEdit = "Edit"
|
|
BtnDelete = "Delete"
|
|
BtnSave = "Save"
|
|
BtnCancel = "Cancel"
|
|
BtnOK = "OK"
|
|
|
|
IpLabel = "IP: {{.ip}}"
|
|
Ip6Label = "IPv6: {{.ip}}"
|
|
Ip6None = "IPv6: —"
|
|
IpNone = "IP: —"
|
|
UptimeLabel = "Uptime: {{.uptime}}"
|
|
UptimeNone = "Uptime: —"
|
|
RxV4Label = "IPv4 ↓ {{.bytes}} {{.speed}}"
|
|
TxV4Label = "↑ {{.bytes}} {{.speed}}"
|
|
RxV6Label = "IPv6 ↓ {{.bytes}} {{.speed}}"
|
|
TxV6Label = "↑ {{.bytes}} {{.speed}}"
|
|
RxTotalLabel = "Total ↓ {{.bytes}} {{.speed}}"
|
|
TxTotalLabel = "↑ {{.bytes}} {{.speed}}"
|
|
RxV4Zero = "IPv4 ↓ 0 B 0 bps"
|
|
TxV4Zero = "↑ 0 B 0 bps"
|
|
RxV6Zero = "IPv6 ↓ 0 B 0 bps"
|
|
TxV6Zero = "↑ 0 B 0 bps"
|
|
RxTotalZero = "Total ↓ 0 B 0 bps"
|
|
TxTotalZero = "↑ 0 B 0 bps"
|
|
|
|
StatusRoutingMode = "Routing Mode: {{.mode}}"
|
|
CIDRHit = "hit"
|
|
CIDRConfigured = "configured"
|
|
CIDRUnmatched = "unmatched"
|
|
CIDRDestinations = "destinations"
|
|
RouteLoading = "loading routes"
|
|
CIDRLoading = "loading"
|
|
StepFetchCIDRs = "fetching CIDR lists"
|
|
StepConnecting = "connecting"
|
|
StepLoadRoutes = "loading routes"
|
|
|
|
BtnRefreshCIDR = "Refresh CIDR"
|
|
CIDRFetchError = "fetch failed"
|
|
|
|
DlgNoProfileTitle = "No Profile"
|
|
DlgNoProfileEditMsg = "Select a profile to edit."
|
|
DlgNoProfileConnectMsg = "Please select or create a profile first."
|
|
DlgDeleteProfileTitle = "Delete Profile"
|
|
DlgDeleteProfileMsg = 'Delete profile "{{.name}}" and its stored credentials?'
|
|
DlgProfileTitle = "Profile"
|
|
DlgValidationTitle = "Validation"
|
|
DlgValidationMsg = "Name, Host, and Username are required."
|
|
DlgInvalidIPMsg = "Invalid IP address(es): {{.ips}}"
|
|
DlgDaemonError = "Daemon Error"
|
|
DlgCredentialError = "Credential Error"
|
|
DlgCredentialErrorMsg = "No password stored for this profile. Edit the profile to set it."
|
|
DlgIPCError = "IPC Error"
|
|
DlgVPNError = "VPN Error"
|
|
DlgSaveError = "Save Error"
|
|
DlgKeychainError = "Keychain Error"
|
|
DlgError = "Error"
|
|
DlgAuthError = "Authentication Failed"
|
|
AuthErrWrongCredentials = "Wrong username or password. Please check your credentials."
|
|
AuthErrUserDisabled = "This user account does not exist or has been disabled."
|
|
AuthErrTokenInvalid = "The authentication token is invalid or expired."
|
|
AuthErrRateLimited = "Too many authentication attempts. Please try again later."
|
|
AuthErrMalformed = "Authentication message format error."
|
|
|
|
BtnResetDB = "Reset Database"
|
|
DlgResetDBTitle = "Reset Database"
|
|
DlgResetDBMsg = "Delete all profiles and connection logs? This cannot be undone."
|
|
|
|
BtnProfileList = "Profile List"
|
|
ProfileListTitle = "Profile List"
|
|
DlgNoListSelectTitle = "No Selection"
|
|
DlgNoListSelectEditMsg = "Select a profile in the list to edit."
|
|
DlgNoListSelectDeleteMsg = "Select a profile in the list to delete."
|
|
|
|
TrayShowWindow = "Show Window"
|
|
TrayConnect = "Connect"
|
|
TrayDisconnect = "Disconnect"
|
|
TrayLanguage = "Language"
|
|
TrayLanguageAuto = "Auto"
|
|
TrayQuit = "Quit"
|
|
|
|
FieldName = "Name"
|
|
FieldProtocol = "Protocol"
|
|
FieldHost = "Host"
|
|
FieldServerIPs = "Server IPs (CDN)"
|
|
FieldPort = "Port"
|
|
FieldPath = "Path"
|
|
FieldUsername = "Username"
|
|
FieldPassword = "Password"
|
|
FieldAuthMode = "Auth Mode"
|
|
FieldRoutingMode = "Routing Mode"
|
|
FieldCIDRV4 = "IPv4 CIDRs (comma-separated)"
|
|
FieldCIDRV6 = "IPv6 CIDRs (comma-separated)"
|
|
FieldCIDRV4URLs = "IPv4 CIDR URL Sources"
|
|
FieldCIDRV6URLs = "IPv6 CIDR URL Sources"
|
|
FieldMTUOverride = "MTU Override"
|
|
|
|
PlaceholderCIDRV4 = "10.0.0.0/8, 172.16.0.0/12"
|
|
PlaceholderCIDRV6 = "fd00::/8, 2001:db8::/32"
|
|
PlaceholderCIDRURL = "https://example.com/cidrs.txt"
|
|
PlaceholderMTU = "0 = use server MTU"
|
|
PlaceholderPasswordUnchanged = "(unchanged)"
|
|
PlaceholderServerIPs = "IPv4/IPv6 supported, e.g. 1.2.3.4, 5.6.7.8"
|
|
|
|
AuthModeBoth = "Both (JWT + Password)"
|
|
AuthModeJWT = "JWT"
|
|
AuthModePassword = "Password"
|
|
|
|
RoutingModeFull = "Full Tunnel"
|
|
RoutingModeProxy = "Proxy CIDR"
|
|
RoutingModeBypass = "Bypass CIDR"
|
|
|
|
FetchTimingBefore = "Before Proxy"
|
|
FetchTimingAfter = "After Proxy"
|
|
|
|
BtnAddURL = "Add URL"
|
|
BtnRemoveURL = "Remove"
|
|
|
|
FieldTLS = "TLS Certificate"
|
|
FieldTLSCACert = "CA Certificate (PEM)"
|
|
FieldTLSCAPath = "CA Certificate Path"
|
|
HintTLSCAReplacesSystem = "Setting a custom CA replaces system root certificates. Public CA servers (e.g. Let's Encrypt) will fail verification."
|
|
FieldTLSInsecure = "Skip Verification (Insecure)"
|
|
FieldTLSPinnedHash = "Certificate Pin (SHA-256)"
|
|
PlaceholderTLSCACert = "-----BEGIN CERTIFICATE-----..."
|
|
PlaceholderTLSCAPath = "/path/to/ca.crt"
|
|
PlaceholderTLSPinnedHash = "sha256:a1b2c3..."
|
|
BtnBrowse = "Browse..."
|
|
DlgTLSError = "TLS Certificate Error"
|
|
TLSErrorVerification = "Server certificate verification failed."
|