diff --git a/luci-app-homeproxy-pro-pro/po/templates/homeproxy-pro-pro.pot b/luci-app-homeproxy-pro-pro/po/templates/homeproxy-pro-pro.pot
deleted file mode 100644
index 0690dbc81..000000000
--- a/luci-app-homeproxy-pro-pro/po/templates/homeproxy-pro-pro.pot
+++ /dev/null
@@ -1,3392 +0,0 @@
-msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:222
-msgid "%s log"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:913
-msgid "%s nodes removed"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:858
-msgid "(empty)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:110
-msgid "(last updated %s)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:111
-msgid "(never updated on this device)"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:1098
-msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:221
-msgid ""
-"1 matches the latest untagged evaluate result; other values match an "
-"evaluate tag (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:81
-msgid "4 or 6. Not limited if empty."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:288
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:436
-msgid ""
-"%s will be temporarily overwritten to %s after 50 "
-"triggers in 30s if not enabled."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:434
-#: htdocs/luci-static/resources/view/homeproxy/node.js:458
-#: htdocs/luci-static/resources/view/homeproxy/server.js:523
-#: htdocs/luci-static/resources/view/homeproxy/server.js:542
-msgid "Save your configuration before uploading files!"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:375
-msgid "ACME account key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:359
-msgid "ACME key type"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:369
-msgid "ACME profile"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:370
-msgid "ACME profile for certificate issuance (1.14). Example: shortlived."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:419
-msgid "API token"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:227
-msgid "Accept any if empty."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:25
-msgid "Access Control"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:402
-msgid "Access key ID"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:408
-msgid "Access key secret"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:164
-msgid "Action"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:35
-msgid "Add a DNS rule"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:221
-msgid "Add a DNS server"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:25
-msgid "Add a node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:32
-msgid "Add a routing node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:35
-msgid "Add a routing rule"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:31
-msgid "Add a rule set"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:176
-msgid "Add a server"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:267
-msgid "Additional headers to be sent to the DNS server."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:249
-#: htdocs/luci-static/resources/view/homeproxy/node.js:58
-msgid "Address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:29
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:40
-msgid "Address and port dependent"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:28
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:39
-msgid "Address dependent"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:280
-msgid "Address resolver"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:312
-msgid "Address strategy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:166
-msgid "Aggressive"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:395
-msgid "Alibaba Cloud DNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:131
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:165
-msgid "Aliyun Public DNS (223.5.5.5)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:104
-msgid "All ports"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:196
-msgid "Allow access from the Internet."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:683
-#: htdocs/luci-static/resources/view/homeproxy/node.js:753
-msgid "Allow insecure"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:684
-msgid "Allow insecure connection at TLS client."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:754
-msgid "Allow insecure connection by default when add nodes from subscriptions."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:615
-msgid "Allowed payload size is in the request."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:129
-msgid "Already at the latest version."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:126
-msgid "Already in updating."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:257
-#: htdocs/luci-static/resources/view/homeproxy/server.js:304
-msgid "Alter ID"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:433
-msgid "Alternative HTTP port"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:439
-msgid "Alternative TLS port"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:305
-msgid "Answer"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:131
-msgid "AnyTLS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:232
-msgid "AnyTLS padding scheme in array."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:213
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:460
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:89
-msgid ""
-"Append a edns0-subnet OPT extra record with the specified IP "
-"prefix to every query by default.
If value is an IP address instead of "
-"prefix, /32 or /128 will be appended automatically."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:420
-msgid "Append self-signed certificate"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:36
-msgid "Applied"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:29
-#: htdocs/luci-static/resources/view/homeproxy/node.js:39
-msgid "Apply"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:16
-msgid "Are you sure to allow insecure?"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:346
-msgid "Auth timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:281
-msgid "Authenticated length"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:263
-msgid "Authentication payload"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:256
-msgid "Authentication type"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:706
-msgid "Auto update"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:707
-msgid "Auto update subscriptions and geodata."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:325
-msgid "BBR"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:163
-msgid "BBR congestion control algorithm profile. Hysteria2 only."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:162
-msgid "BBR profile (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:252
-msgid "BaiDu"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:258
-msgid "Base64"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:170
-msgid "Based on google/gvisor."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:56
-msgid "Binary file"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:38
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:84
-#: htdocs/luci-static/resources/view/homeproxy/server.js:629
-msgid "Bind interface"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:39
-msgid ""
-"Bind outbound traffic to specific interface. Leave empty to auto detect."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:90
-msgid "BitTorrent"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:740
-msgid "Blacklist mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:211
-msgid "Block"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:84
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:108
-#: htdocs/luci-static/resources/view/homeproxy/server.js:624
-msgid "Both"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:190
-msgid "Bypass CN traffic"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:84
-msgid "Bypass mainland China"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:191
-msgid "Bypass mainland China traffic via firewall rules by default."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:382
-msgid "CA provider"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:196
-msgid "CN-IP DNS fallback (sing-box 1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:166
-msgid "CNNIC Public DNS (210.2.4.8)"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:323
-msgid "CUBIC"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:596
-msgid "Cancel"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:425
-#: htdocs/luci-static/resources/view/homeproxy/server.js:511
-msgid "Certificate path"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:95
-msgid "Check"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:139
-msgid "Check update"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:162
-msgid "China DNS server"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:261
-msgid "China IPv4 list version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:265
-msgid "China IPv6 list version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:269
-msgid "China list version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:125
-msgid "Chromium / Cronet"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:708
-msgid "Cipher suites"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:128
-msgid "Cisco Public DNS (208.67.222.222)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:231
-msgid "Clean log"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:123
-msgid "Client"
-msgstr ""
-
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:14
-msgid "Client Settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:221
-msgid "Client version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:127
-msgid "CloudFlare Public DNS (1.1.1.1)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:396
-msgid "Cloudflare"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:130
-#: htdocs/luci-static/resources/view/homeproxy/server.js:146
-#: htdocs/luci-static/resources/view/homeproxy/status.js:212
-msgid "Collecting data..."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:105
-msgid "Common ports only (bypass P2P traffic)"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:321
-msgid "Congestion control algorithm"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:249
-msgid "Connection check"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:394
-msgid "Connection reuse"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:165
-msgid "Conservative"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:809
-msgid "Could not start subscription update: %s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:86
-msgid "Custom routing"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:92
-msgid "DNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:25
-msgid "DNS Rules"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:212
-msgid "DNS Servers"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:56
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:122
-msgid "DNS Settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:394
-msgid "DNS provider"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:39
-msgid "DNS query timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:34
-msgid "DNS rule"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:410
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:124
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:221
-msgid "DNS server"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:390
-msgid "DNS01 challenge"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:93
-msgid "DTLS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:179
-msgid "Debug"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:62
-#: htdocs/luci-static/resources/homeproxy.js:334
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:73
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:416
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:64
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:99
-msgid "Default"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:185
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:417
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:71
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:65
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:287
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:228
-msgid "Default DNS (issued by WAN)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:66
-msgid "Default DNS server"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:223
-msgid "Default DNS server for resolving domain name in the server address."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:61
-msgid "Default DNS strategy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:203
-msgid "Default outbound"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:222
-msgid "Default outbound DNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:204
-msgid "Default outbound for connections not matched by any routing rules."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:760
-msgid "Default packet encoding"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:338
-msgid "Default server name"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:40
-msgid "Default timeout per DNS query in seconds (sing-box default: 10)."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:130
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:326
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:97
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:325
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:210
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:100
-msgid "Direct"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:165
-msgid "Direct Domain List"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:54
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:99
-msgid "Direct IPv4 IP-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:57
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:102
-msgid "Direct IPv6 IP-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:60
-msgid "Direct MAC-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:257
-#: htdocs/luci-static/resources/homeproxy.js:270
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:48
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:26
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:54
-#: htdocs/luci-static/resources/view/homeproxy/node.js:93
-#: htdocs/luci-static/resources/view/homeproxy/node.js:468
-#: htdocs/luci-static/resources/view/homeproxy/node.js:739
-msgid "Disable"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:209
-msgid "Disable (the service)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:170
-msgid "Disable Chrome QUIC fingerprint (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:171
-msgid ""
-"Disable Chrome QUIC handshake parroting, which is enabled by default since "
-"sing-box 1.14. Turn this on only when the server uses an Ed25519 certificate "
-"or the handshake otherwise fails."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:448
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:83
-msgid "Disable DNS cache"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:449
-msgid "Disable DNS cache in this query."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:425
-msgid "Disable HTTP challenge"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:429
-msgid "Disable TLS ALPN challenge"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:352
-msgid "Disable UDP domain unmapping"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:200
-msgid "Disable cache and save cache in this query."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:85
-msgid "Disable cache expire"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:199
-msgid "Disable dns cache"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:242
-msgid "Disable optimistic DNS caching for this query."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:467
-msgid "Disable optimistic DNS caching in this lookup (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:241
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:466
-msgid "Disable optimistic cache"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:31
-msgid "Disabled"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:487
-msgid "Domain keyword"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:478
-msgid "Domain name"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:491
-msgid "Domain regex"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:58
-msgid "Domain resolver"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:77
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:198
-msgid "Domain strategy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:442
-msgid "Domain strategy for resolving the domain names."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:483
-msgid "Domain suffix"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:332
-msgid "Domains"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:435
-msgid "Don't drop packets"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:287
-msgid "Don't drop requests"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:178
-msgid "Download bandwidth"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:179
-msgid "Download bandwidth in Mbps."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:431
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:437
-msgid "Drop packets"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:282
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:289
-msgid "Drop requests"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:746
-msgid ""
-"Drop/keep nodes that contain the specific keywords. Regex is supported."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:738
-msgid "Drop/keep specific nodes from subscriptions."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:446
-msgid ""
-"EAB (External Account Binding) contains information necessary to bind or map "
-"an ACME account to some other account known by the CA.
External account "
-"bindings are \"used to associate an ACME account with an existing account in "
-"a non-ACME system, such as a CA customer database."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:442
-msgid ""
-"ECH (Encrypted Client Hello) is a TLS extension that allows a client to "
-"encrypt the first part of its ClientHello message."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:462
-#: htdocs/luci-static/resources/view/homeproxy/server.js:590
-msgid "ECH config"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:446
-msgid "ECH config path"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:549
-msgid "ECH key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:212
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:459
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:88
-msgid "EDNS Client subnet"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:614
-msgid "Early data"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:621
-msgid "Early data header name"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:622
-msgid "Early data is sent in path instead of header by default."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:568
-msgid "Edit nodes"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:344
-msgid "Email"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:53
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:45
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:234
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:44
-#: htdocs/luci-static/resources/view/homeproxy/server.js:168
-#: htdocs/luci-static/resources/view/homeproxy/server.js:190
-msgid "Enable"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:355
-msgid ""
-"Enable 0-RTT QUIC connection handshake on the client side. This is not "
-"impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:354
-msgid "Enable 0-RTT handshake"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:327
-msgid "Enable ACME"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:441
-msgid "Enable ECH"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:173
-msgid "Enable TCP Brutal"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:174
-msgid "Enable TCP Brutal congestion control algorithm"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:521
-#: htdocs/luci-static/resources/view/homeproxy/server.js:610
-msgid "Enable UDP fragmentation."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:395
-msgid "Enable connection reuse (the Snell v2 CONNECT command)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:175
-msgid "Enable endpoint-independent NAT"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:195
-msgid ""
-"Enable neighbor resolution so rules can match LAN devices by hostname (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:166
-msgid "Enable padding"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:601
-msgid "Enable tcp fast open for listener."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:525
-msgid ""
-"Enable the SUoT protocol, requires server support. Conflict with multiplex."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:177
-#: htdocs/luci-static/resources/view/homeproxy/node.js:263
-#: htdocs/luci-static/resources/view/homeproxy/server.js:284
-msgid "Encrypt method"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:27
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:38
-msgid "Endpoint independent"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:182
-msgid "Error"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:170
-msgid "Evaluate (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:225
-msgid "Evaluate tag"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:220
-#: htdocs/luci-static/resources/homeproxy.js:1035
-#: htdocs/luci-static/resources/homeproxy.js:1085
-#: htdocs/luci-static/resources/homeproxy.js:1098
-#: htdocs/luci-static/resources/homeproxy.js:1117
-#: htdocs/luci-static/resources/homeproxy.js:1126
-#: htdocs/luci-static/resources/homeproxy.js:1137
-#: htdocs/luci-static/resources/homeproxy.js:1146
-#: htdocs/luci-static/resources/homeproxy.js:1148
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:203
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:140
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:152
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:156
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:175
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:190
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:141
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:155
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:112
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:72
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:75
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:80
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:83
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:123
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:126
-#: htdocs/luci-static/resources/view/homeproxy/node.js:484
-#: htdocs/luci-static/resources/view/homeproxy/node.js:727
-#: htdocs/luci-static/resources/view/homeproxy/node.js:730
-#: htdocs/luci-static/resources/view/homeproxy/server.js:350
-#: htdocs/luci-static/resources/view/homeproxy/server.js:352
-msgid "Expecting: %s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:445
-msgid "External Account Binding"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:457
-msgid "External account MAC key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:451
-msgid "External account key ID"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:315
-msgid "Extra records"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:117
-msgid ""
-"Extra rule-set tags sharing these options. Requires {tag} in path/url (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:116
-msgid "Extra tags"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:657
-msgid "Failed to close the import dialog: %s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:93
-msgid "Failed to generate %s, error: %s."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:124
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:177
-msgid "Failed to read domain list: %s."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:1075
-msgid "Failed to upload %s, error: %s."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:183
-msgid "Fatal"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:745
-msgid "Filter keywords"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:737
-msgid "Filter nodes"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:194
-msgid "Find neighbor hosts"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:126
-msgid "Firefox / uquic firefox"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:195
-msgid "Firewall"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:251
-#: htdocs/luci-static/resources/view/homeproxy/server.js:298
-msgid "Flow"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:59
-msgid "For resolving domain name in the server address."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:55
-msgid "Format"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:372
-msgid "Fragment TLS handshake into multiple TLS records."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:378
-msgid ""
-"Fragment TLS handshakes. Due to poor performance, try %s first."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:384
-msgid "Fragment fallback delay"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:583
-msgid "GET"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:273
-msgid "GFW list version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:83
-msgid "GFWList"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:72
-msgid "Gaming mode IPv4 IP-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:74
-msgid "Gaming mode IPv6 IP-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:77
-msgid "Gaming mode MAC-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:272
-msgid "Gecko (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:37
-#: htdocs/luci-static/resources/view/homeproxy/server.js:39
-#: htdocs/luci-static/resources/view/homeproxy/server.js:582
-msgid "Generate"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:277
-msgid "GitHub token"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:87
-msgid "Global"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:274
-msgid "Global padding"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:79
-msgid "Global proxy IPv4 IP-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:82
-msgid "Global proxy IPv6 IP-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:85
-msgid "Global proxy MAC-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:166
-msgid "Global settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:255
-msgid "Google"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:129
-msgid "Google Public DNS (8.8.8.8)"
-msgstr ""
-
-#: root/usr/share/rpcd/acl.d/luci-app-homeproxy.json:3
-msgid "Grant access to homeproxy configuration"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:132
-#: htdocs/luci-static/resources/homeproxy.js:520
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:94
-msgid "HTTP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:407
-msgid ""
-"HTTP Host header sent when obfuscation mode is http. bing.com is used by "
-"default."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:400
-msgid "HTTP obfuscation. v4 only."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:276
-msgid "HTTP obfuscation. v5 only."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:244
-msgid "HTTP/3"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:257
-msgid ""
-"HTTP3 server behavior when authentication fails.
A 404 page will be "
-"returned if empty."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:243
-msgid "HTTPS"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:521
-msgid "HTTPUpgrade"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:499
-msgid "Handshake server address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:505
-msgid "Handshake server port"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:717
-msgid "Handshake timeout (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:266
-msgid "Headers"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:360
-msgid "Heartbeat interval"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:33
-msgid "Hijack"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:70
-#: htdocs/luci-static/resources/view/homeproxy/client.js:119
-#: htdocs/luci-static/resources/view/homeproxy/status.js:299
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3
-msgid "HomeProxy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:75
-#: htdocs/luci-static/resources/view/homeproxy/server.js:136
-msgid "HomeProxy Server"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:129
-msgid "Hop interval"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:123
-msgid "Hopping port"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:566
-#: htdocs/luci-static/resources/homeproxy.js:571
-#: htdocs/luci-static/resources/homeproxy.js:606
-msgid "Host"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:226
-msgid "Host key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:231
-msgid "Host key algorithms"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:44
-msgid "Host/IP fields"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:347
-msgid ""
-"How long the server should wait for the client to send the authentication "
-"command (in seconds)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:399
-msgid "How the forged segment is rejected by the real server."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:133
-msgid "Hysteria"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:134
-msgid "Hysteria2"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:503
-msgid "IP CIDR"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:80
-msgid "IP version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:82
-msgid "IPv4"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:65
-msgid "IPv4 only"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:83
-msgid "IPv6"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:66
-msgid "IPv6 only"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:135
-msgid "IPv6 support"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:100
-msgid "Idle session check interval"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:107
-msgid "Idle session check timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:589
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:190
-msgid "Idle timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:359
-msgid ""
-"If enabled, attempts to connect UDP connection to the destination instead of "
-"listen."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:353
-msgid ""
-"If enabled, for UDP proxy requests addressed to a domain, the original "
-"packet address will be sent in the response instead of the mapped domain."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:561
-msgid ""
-"If enabled, the client transport sends keepalive pings even with no active "
-"connections."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:199
-msgid ""
-"If set, the requested domain name will be resolved to IP before routing."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:24
-msgid ""
-"If the transport doesn't see any activity after a duration of this time (in "
-"seconds), it pings the client to check if the connection is still active."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:421
-msgid ""
-"If you have the root certificate, use this option instead of allowing "
-"insecure."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:251
-msgid "Ignore client bandwidth"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:662
-msgid "Import"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:589
-#: htdocs/luci-static/resources/view/homeproxy/node.js:682
-#: htdocs/luci-static/resources/view/homeproxy/node.js:684
-msgid "Import share links"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:658
-msgid ""
-"Imported the nodes, but the dialog did not close automatically. Close it "
-"manually."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:183
-#: htdocs/luci-static/resources/view/homeproxy/server.js:615
-msgid "In seconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:333
-msgid "In seconds. Disabled by default."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:115
-msgid ""
-"In the check, at least the first n idle sessions are kept open."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:108
-msgid ""
-"In the check, close sessions that have been idle for longer than this, in "
-"seconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:180
-msgid "Info"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:110
-msgid "Initial path"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:392
-msgid ""
-"Inject a forged TLS ClientHello carrying this SNI before the real one to "
-"fool SNI-filtering middleboxes. Requires elevated privileges."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:31
-msgid "Interface Control"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:197
-msgid "Interrupt existing connections"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:198
-msgid "Interrupt existing connections when the selected outbound has changed."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:101
-msgid "Interval checking for idle sessions, in seconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:361
-msgid ""
-"Interval for sending heartbeat packets for keeping the connection alive (in "
-"seconds)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:160
-msgid "Invert"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:161
-msgid "Invert match result."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:231
-msgid ""
-"Judge this response-dependent rule in parallel; first match wins (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:530
-msgid "Key path"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:45
-msgid "LAN IP Policy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:48
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:40
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:229
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:39
-#: htdocs/luci-static/resources/view/homeproxy/node.js:51
-#: htdocs/luci-static/resources/view/homeproxy/server.js:184
-msgid "Label"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:258
-#: htdocs/luci-static/resources/view/homeproxy/server.js:305
-msgid ""
-"Legacy protocol support (VMess MD5 Authentication) is provided for "
-"compatibility purposes only, use of alterId > 1 is not recommended."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:172
-msgid "Less compatibility and sometimes better performance."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:384
-msgid "Let's Encrypt"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:293
-msgid ""
-"List of IP (v4 or v6) addresses prefixes to be assigned to the interface."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:128
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:35
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:64
-msgid "List of nodes to test."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:678
-msgid "List of supported application level protocols, in order of preference."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:306
-msgid "List of text DNS record to respond as answers."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:316
-msgid "List of text DNS record to respond as extra records."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:311
-msgid "List of text DNS record to respond as name servers."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:201
-msgid "Listen address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:33
-msgid "Listen interfaces"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:206
-msgid "Listen port"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:210
-msgid "Loading"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:50
-msgid "Local"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:292
-msgid "Local address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:111
-msgid ""
-"Local file with initial rule-set content; avoids blocking startup on first "
-"download (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:59
-msgid "Log file does not exist."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:55
-msgid "Log is empty."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:326
-msgid "MTU"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:53
-msgid "Main UDP node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:25
-msgid "Main node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:157
-msgid "Make IP CIDR in rule set used to match the source IP."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:157
-msgid "Make IP CIDR in rule sets match the source IP."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:256
-msgid "Masquerade"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:528
-msgid "Match DNSSEC OK"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:504
-msgid ""
-"Match IP CIDR with the evaluated response (needs match_response; old rules "
-"are auto-wrapped in 1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:505
-msgid "Match IP CIDR."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:514
-msgid "Match LAN device by MAC address."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:519
-msgid ""
-"Match LAN device hostname via neighbor resolution; enable find_neighbor."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:484
-msgid "Match domain suffix."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:488
-msgid "Match domain using keyword."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:492
-msgid "Match domain using regular expression."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:479
-msgid "Match full domain."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:549
-msgid "Match port range. Format as START:/:END/START:END."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:544
-msgid "Match port."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:509
-msgid "Match private IP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:510
-msgid "Match private IP with the evaluated response (needs match_response)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:500
-msgid "Match private source IP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:554
-msgid "Match process name."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:562
-msgid "Match process path using regular expression."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:558
-msgid "Match process path."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:529
-msgid "Match queries with the DNSSEC OK bit set (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:115
-msgid "Match query type."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:220
-msgid "Match response"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:141
-msgid ""
-"Match rule set. DNS: rules referencing rule-sets that contain query_type are "
-"incompatible with legacy address filters (ip_cidr / ip_is_private) — use "
-"match_response instead (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:142
-msgid ""
-"Match rule set. Since 1.14: a rule-set holding a single default rule is "
-"merged into this rule; any other rule-set matches as an OR collection."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:496
-msgid "Match source IP CIDR."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:539
-msgid "Match source port range. Format as START:/:END/START:END."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:534
-msgid "Match source port."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:524
-msgid "Match the EDNS Client Subnet in the query (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:261
-msgid "Match the evaluated response code (requires match_response)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:137
-msgid "Match user name."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:234
-msgid "Max download speed"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:235
-msgid "Max download speed in Mbps."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:137
-msgid "Max hop interval (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:289
-msgid "Max obfs packet size (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:37
-msgid "Max time an expired entry may be served. Examples: 3d, 1h."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:494
-msgid "Max time difference"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:241
-msgid "Max upload speed"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:242
-msgid "Max upload speed in Mbps."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:700
-msgid "Maximum TLS version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:354
-#: htdocs/luci-static/resources/view/homeproxy/node.js:368
-msgid "Maximum connections"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:366
-msgid ""
-"Maximum multiplexed streams in a connection before opening a new connection."
-"
Conflict with %s and %s."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:290
-msgid "Maximum on-wire packet size in bytes. Gecko only."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:138
-msgid ""
-"Maximum port hopping interval in seconds; the actual interval is randomized "
-"between the two values. Hysteria2 only."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:365
-msgid "Maximum streams"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:581
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:280
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:289
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:429
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:437
-msgid "Method"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:282
-msgid "Min obfs packet size (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:692
-msgid "Minimum TLS version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:114
-msgid "Minimum idle sessions"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:360
-msgid ""
-"Minimum multiplexed streams in a connection before opening a new connection."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:283
-msgid "Minimum on-wire packet size in bytes. Gecko only."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:359
-#: htdocs/luci-static/resources/view/homeproxy/node.js:368
-msgid "Minimum streams"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:136
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:157
-msgid "Mixed"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:168
-msgid "Mixed system TCP stack and gVisor UDP stack."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:58
-msgid "Mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:517
-#: htdocs/luci-static/resources/view/homeproxy/server.js:605
-msgid "MultiPath TCP"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:159
-msgid "Multiplex"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:345
-msgid "Multiplex protocol."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:419
-msgid "NOT RUNNING"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:766
-msgid "NOTE: Save current settings before updating subscriptions."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:310
-msgid "NS"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:335
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:32
-msgid "Native"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:135
-msgid "NaïveProxy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:105
-#: htdocs/luci-static/resources/view/homeproxy/server.js:621
-msgid "Network"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:324
-msgid "New Reno"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:17
-msgid "No TCP transport, plain HTTP is merged into the HTTP transport."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:19
-msgid "No additional encryption support: It's basically duplicate encryption."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:783
-msgid "No subscription available"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:894
-msgid "No subscription node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:637
-msgid "No valid share link found."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:50
-#: htdocs/luci-static/resources/view/homeproxy/node.js:25
-msgid "Node"
-msgstr ""
-
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:22
-msgid "Node Settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:574
-msgid "Nodes"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:518
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:286
-#: htdocs/luci-static/resources/view/homeproxy/node.js:252
-#: htdocs/luci-static/resources/view/homeproxy/server.js:299
-msgid "None"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:276
-msgid "Obfuscate password"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:269
-msgid "Obfuscate type"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:406
-msgid "Obfuscation host"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:399
-#: htdocs/luci-static/resources/view/homeproxy/server.js:275
-msgid "Obfuscation mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:114
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:171
-msgid ""
-"One domain per line. No spaces, no comments, no wildcards; the backend "
-"rejects invalid characters and tells you which line."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:34
-msgid "Only process traffic from specific interfaces. Leave empty for all."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:85
-msgid "Only proxy mainland China"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:30
-msgid "Optimistic DNS cache"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:36
-msgid "Optimistic cache timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:226
-msgid "Optional tag for this evaluate result."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:390
-msgid "Optional; only required when connecting to a multi-user Snell server."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:43
-msgid "Other fields"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:320
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:91
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:319
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:93
-msgid "Outbound"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:51
-msgid "Outbound node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:94
-msgid ""
-"Outbound used to download this rule-set (via sing-box 1.14 http_clients)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:338
-msgid "Override address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:472
-msgid "Override dns.timeout for this lookup, in seconds (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:248
-msgid "Override dns.timeout for this query, in seconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:345
-msgid "Override port"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:339
-msgid "Override the connection destination address."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:346
-msgid "Override the connection destination port."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:376
-msgid "PEM-encoded private key of an existing ACME account (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:584
-msgid "PUT"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:630
-msgid "Packet encoding"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:231
-msgid "Padding scheme"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:184
-msgid "Panic"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:74
-#: htdocs/luci-static/resources/view/homeproxy/server.js:218
-msgid "Password"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:576
-#: htdocs/luci-static/resources/homeproxy.js:610
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:259
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:61
-msgid "Path"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:307
-msgid "Peer pubkic key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:176
-msgid ""
-"Performance may degrade slightly, so it is not recommended to enable on when "
-"it is not needed."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:44
-msgid "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:332
-msgid "Persistent keepalive interval"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:597
-msgid "Ping timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:187
-msgid "Plugin"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:194
-msgid "Plugin opts"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:543
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:254
-#: htdocs/luci-static/resources/view/homeproxy/node.js:63
-msgid "Port"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:114
-msgid "Port %s alrealy exists!"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:45
-msgid "Port fields"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:130
-msgid "Port hopping interval in seconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:548
-msgid "Port range"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:314
-msgid "Pre-shared key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:169
-msgid "Predefined"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:63
-msgid "Prefer IPv4"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:64
-msgid "Prefer IPv6"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:235
-#: htdocs/luci-static/resources/view/homeproxy/node.js:299
-msgid "Private key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:240
-msgid "Private key passphrase"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:360
-msgid "Private key type for new certificates (1.14). Empty uses the default."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:46
-msgid "Process fields"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:553
-msgid "Process name"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:557
-msgid "Process path"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:561
-msgid "Process path (regex)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:88
-#: htdocs/luci-static/resources/view/homeproxy/node.js:144
-#: htdocs/luci-static/resources/view/homeproxy/node.js:344
-#: htdocs/luci-static/resources/view/homeproxy/server.js:237
-msgid "Protocol"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:282
-msgid "Protocol parameter. Enable length block encryption."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:275
-msgid ""
-"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
-"default in v2ray and cannot be disabled)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:108
-msgid "Proxy Domain List"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:63
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:92
-msgid "Proxy IPv4 IP-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:66
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:95
-msgid "Proxy IPv6 IP-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:69
-msgid "Proxy MAC-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:50
-msgid "Proxy all except listed"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:47
-msgid "Proxy filter mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:49
-msgid "Proxy listed only"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:122
-msgid "Proxy mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:91
-msgid "Proxy protocol"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:336
-#: htdocs/luci-static/resources/homeproxy.js:522
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:95
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:245
-msgid "QUIC"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:322
-msgid "QUIC congestion control algorithm."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:523
-msgid "Query EDNS client subnet"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:247
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:471
-msgid "Query timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:114
-msgid "Query type"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:293
-msgid "RCode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:96
-msgid "RDP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:495
-#: htdocs/luci-static/resources/view/homeproxy/server.js:464
-msgid "REALITY"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:469
-msgid "REALITY private key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:500
-#: htdocs/luci-static/resources/view/homeproxy/server.js:485
-msgid "REALITY public key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:506
-#: htdocs/luci-static/resources/view/homeproxy/server.js:489
-msgid "REALITY short ID"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:417
-msgid "RUNNING"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:230
-msgid "Race"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:222
-msgid "Random version will be used if empty."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:119
-msgid "Recursive outbound detected!"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:305
-msgid "Recursive resolver detected!"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:123
-msgid "Redirect TCP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:125
-msgid "Redirect TCP + TProxy UDP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:127
-msgid "Redirect TCP + Tun UDP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:236
-msgid "Refresh every %s seconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:414
-msgid "Region ID"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:167
-msgid "Reject"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:51
-msgid "Remote"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:891
-msgid "Remove %s nodes"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:254
-msgid "Remove EDNS client subnet"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:881
-msgid "Remove all nodes from subscriptions"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:255
-msgid "Remove the edns0-subnet record from the query (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:281
-msgid "Reply with REFUSED"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:430
-msgid "Reply with TCP RST / ICMP port unreachable"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:321
-msgid "Reserved field bytes"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:172
-msgid "Resolve"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:441
-msgid "Resolve strategy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:258
-msgid "Resources management"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:272
-msgid "Response NS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:260
-msgid "Response RCode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:267
-msgid "Response answer"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:276
-msgid "Response extra"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:31
-msgid ""
-"Return expired cache immediately and refresh in background (sing-box 1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:635
-msgid "Reuse address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:636
-msgid "Reuse listener address."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:205
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:453
-msgid "Rewrite TTL"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:206
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:454
-msgid "Rewrite TTL in DNS responses."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:165
-msgid "Route"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:166
-msgid "Route options"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:23
-msgid "Routing Nodes"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:25
-msgid "Routing Rules"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:23
-msgid "Routing Settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:82
-msgid "Routing mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:32
-msgid "Routing node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:102
-msgid "Routing ports"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:34
-msgid "Routing rule"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:22
-msgid "Rule Set"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:140
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:31
-msgid "Rule set"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:156
-msgid "Rule set IP CIDR as source IP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:68
-msgid "Rule set URL"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:141
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:97
-msgid "SSH"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:421
-msgid "STATUS UNKNOWN"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:98
-msgid "STUN"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:530
-msgid "SUoT version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:128
-msgid "Safari / Apple Network API"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:271
-msgid "Salamander"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:55
-msgid "Same as main node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:284
-#: htdocs/luci-static/resources/view/homeproxy/status.js:290
-msgid "Save"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:768
-msgid "Save current settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:765
-msgid "Save subscriptions settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:236
-msgid "Send the query before pending race rules are judged (1.14)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:179
-#: htdocs/luci-static/resources/view/homeproxy/server.js:176
-msgid "Server"
-msgstr ""
-
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:30
-msgid "Server Settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:339
-msgid ""
-"Server name to use when choosing a certificate if the ClientHello's "
-"ServerName field is empty."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:171
-msgid "Server settings"
-msgstr ""
-
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:38
-msgid "Service Status"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:138
-msgid "ShadowTLS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:201
-msgid "ShadowTLS version"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:137
-msgid "Shadowsocks"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:29
-msgid ""
-"Since sing-box 1.14 the default (Unset) behaves as hijack: sing-box sets the "
-"platform interface DNS and hijacks port 53. On OpenWrt this overlaps with "
-"the own dnsmasq/nftables DNS hijack of this plugin, so keep Disabled on a "
-"gateway unless you need sing-box to own TUN DNS."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:139
-msgid "Snell (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:376
-#: htdocs/luci-static/resources/view/homeproxy/server.js:263
-msgid "Snell version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:124
-msgid "Sniffed client type (QUIC client type or SSH client name)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:89
-msgid ""
-"Sniffed protocol, see Sniff for details."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:143
-msgid "Sniffer: advanced mode (100ms, universal list)"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:140
-msgid "Socks"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:211
-msgid "Socks version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:212
-msgid "Socks4"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:213
-msgid "Socks4A"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:214
-msgid "Socks5"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:495
-msgid "Source IP CIDR"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:513
-msgid "Source MAC address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:57
-msgid "Source file"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:518
-msgid "Source hostname"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:533
-msgid "Source port"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:538
-msgid "Source port range"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:411
-msgid ""
-"Specifies DNS server tag to use instead of selecting through DNS routing."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:21
-msgid ""
-"Specifies the period of time (in seconds) after which a health check will be "
-"performed using a ping frame if no frames have been received on the "
-"connection.
Please note that a ping response is considered a received "
-"frame, so if there is no other traffic on the connection, the health check "
-"will be executed every interval."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:23
-msgid ""
-"Specifies the time (in seconds) until idle clients should be closed with a "
-"GOAWAY frame. PING frames are not considered as activity."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:26
-msgid ""
-"Specifies the timeout duration (in seconds) after sending a PING frame, "
-"within which a response must be received.
If a response to the PING "
-"frame is not received within the specified timeout duration, the connection "
-"will be closed."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:103
-msgid ""
-"Specify target ports to be proxied. Multiple ports must be separated by "
-"commas."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:235
-msgid "Speculative"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:164
-msgid "Standard (default)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:43
-msgid "Store DNS cache"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:259
-msgid "String"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:693
-msgid "Sub (%s)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:720
-msgid "Subscription URL-s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:857
-msgid "Subscription update did not complete cleanly. Last log:"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:805
-msgid ""
-"Subscription update is already running. This page will reload when the "
-"previous run finishes."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:867
-msgid ""
-"Subscription update is taking longer than 90 seconds. Check the log and "
-"reload manually."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:704
-msgid "Subscriptions"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:639
-msgid "Successfully imported %s nodes of total %s."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:120
-msgid "Successfully updated."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:590
-#: htdocs/luci-static/resources/view/homeproxy/node.js:721
-msgid ""
-"Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) "
-"online configuration delivery standard."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:125
-msgid ""
-"Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:160
-msgid "System"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:418
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:72
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:66
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:288
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:229
-msgid "System DNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:106
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:241
-#: htdocs/luci-static/resources/view/homeproxy/server.js:622
-msgid "TCP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:514
-#: htdocs/luci-static/resources/view/homeproxy/server.js:600
-msgid "TCP fast open"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:154
-msgid "TCP/IP stack"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:155
-msgid "TCP/IP stack."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:650
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:99
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:242
-msgid "TLS"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:677
-msgid "TLS ALPN"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:672
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:272
-msgid "TLS SNI"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:377
-msgid "TLS fragment"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:718
-msgid "TLS handshake timeout in seconds. 15s is used by default."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:18
-msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:371
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:379
-msgid "TLS record fragment"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:391
-msgid "TLS spoof SNI (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:398
-msgid "TLS spoof method (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:26
-msgid "TUN DNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:39
-msgid "TUN DNS addresses (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:28
-msgid "TUN DNS mode (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:281
-msgid ""
-"Tag of a another server to resolve the domain name in the address. Required "
-"if address contains domain."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:320
-msgid "Tag of an outbound for connecting to the dns server."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:180
-msgid "Tag of the target dns server."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:321
-msgid "Tag of the target outbound."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:252
-msgid ""
-"Tell the client to use the BBR flow control algorithm instead of Hysteria CC."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:132
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:167
-msgid "Tencent Public DNS (119.29.29.29)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:147
-msgid "Test URL"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:167
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:41
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:70
-msgid "Test interval"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:175
-msgid "Test interval must be less or equal than idle timeout."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:183
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:47
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:76
-msgid "Test tolerance"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:268
-msgid "Text DNS records to match in the evaluated answer."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:383
-msgid "The ACME CA provider to use."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:62
-msgid "The DNS strategy for resolving the domain name in the address."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:148
-msgid "The URL to test."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:250
-msgid "The address of the dns server."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:434
-msgid ""
-"The alternate port to use for the ACME HTTP challenge; if non-empty, this "
-"port will be used instead of 80 to spin up a listener for the HTTP challenge."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:440
-msgid ""
-"The alternate port to use for the ACME TLS-ALPN challenge; the system must "
-"forward 443 to this port for challenge to succeed."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:66
-msgid ""
-"The default rule uses the following matching logic:
(domain || "
-"domain_suffix || domain_keyword || domain_regex || ip_cidr || "
-"ip_is_private) &&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields"
-"code>.
Additionally, included rule sets can be considered merged rather "
-"than as a single rule sub-item."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:59
-msgid ""
-"The default rule uses the following matching logic:
(domain || "
-"domain_suffix || domain_keyword || domain_regex) &&
(port "
-"|| port_range) &&
(source_ip_cidr || source_ip_is_private)"
-"code> &&
(source_port || source_port_range) &&
other fields.
Additionally, included rule sets can be "
-"considered merged rather than as a single rule sub-item."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:163
-msgid ""
-"The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:78
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:313
-msgid "The domain strategy for resolving the domain name in the address."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:709
-msgid ""
-"The elliptic curves that will be used in an ECDHE handshake, in preference "
-"order. If empty, the default will be used."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:345
-msgid ""
-"The email address to use when creating or selecting an existing ACME server "
-"account."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:385
-msgid ""
-"The fallback value in milliseconds used when TLS segmentation cannot "
-"automatically determine the wait time."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:191
-msgid "The idle timeout in seconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:701
-msgid "The maximum TLS version that is acceptable."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:495
-msgid "The maximum time difference between the server and the client."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:693
-msgid "The minimum TLS version that is acceptable."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:120
-#: htdocs/luci-static/resources/view/homeproxy/server.js:137
-msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:85
-#: htdocs/luci-static/resources/view/homeproxy/server.js:630
-msgid "The network interface to bind to."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:260
-msgid "The path of the DNS server."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:447
-msgid ""
-"The path to the ECH config, in PEM format. If empty, load from DNS will be "
-"attempted."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:426
-msgid "The path to the server certificate, in PEM format."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:207
-msgid "The port must be unique."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:255
-msgid "The port of the DNS server."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:264
-msgid "The pre-shared key (password) above must be 12-255 bytes for v6."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:850
-msgid "The request %s failed: %s."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:294
-msgid "The response code."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:531
-msgid "The server private key, in PEM format."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:512
-msgid "The server public key, in PEM format."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:92
-msgid ""
-"The tag of the upstream outbound.
Other dial fields will be ignored when "
-"enabled."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:168
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:42
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:71
-msgid "The test interval in seconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:184
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:48
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:77
-msgid "The test tolerance in milliseconds."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:28
-msgid ""
-"The timeout (in seconds) that after performing a keepalive check, the client "
-"will wait for activity. If no activity is detected, the connection will be "
-"closed."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:686
-#: htdocs/luci-static/resources/view/homeproxy/node.js:756
-msgid ""
-"This is DANGEROUS, your traffic is almost like "
-"PLAIN TEXT! Use at your own risk!"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:341
-msgid ""
-"This is the TUIC port of the UDP over TCP protocol, designed to provide a "
-"QUIC stream based UDP relay mode that TUIC does not provide."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:133
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:168
-msgid "ThreatBook Public DNS (117.50.10.10)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:365
-msgid ""
-"Timeout for UDP connections.
Setting a larger value than the UDP timeout "
-"in inbounds will have no effect."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:624
-msgid ""
-"To be compatible with Xray-core, set this to Sec-WebSocket-Protocol"
-"code>."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:130
-msgid ""
-"To enable Tun support, you need to install ip-full and "
-"kmod-tun"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:178
-msgid "Trace"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:517
-msgid "Transport"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:142
-msgid "Trojan"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:143
-msgid "Tuic"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:128
-msgid "Tun TCP/UDP"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:461
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:239
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:49
-msgid "Type"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:107
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:240
-#: htdocs/luci-static/resources/view/homeproxy/server.js:623
-msgid "UDP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:520
-#: htdocs/luci-static/resources/view/homeproxy/server.js:609
-msgid "UDP Fragment"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:24
-msgid "UDP NAT Settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:182
-#: htdocs/luci-static/resources/view/homeproxy/server.js:614
-msgid "UDP NAT expiration time"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:37
-msgid "UDP NAT filtering (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:26
-msgid "UDP NAT mapping (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:48
-msgid "UDP NAT sessions max (1.14)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:524
-msgid "UDP over TCP"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:340
-msgid "UDP over stream"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:333
-msgid "UDP packet relay mode."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:332
-msgid "UDP relay mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:364
-msgid "UDP timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:52
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:27
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:56
-msgid "URLTest"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:127
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:34
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:63
-msgid "URLTest nodes"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:309
-msgid "UUID"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:132
-msgid "Unknown error."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:61
-msgid "Unknown error: %s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:30
-msgid "Unset (default)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:488
-msgid "Unsupported fingerprint!"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:780
-msgid "Update %s subscriptions"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:123
-msgid "Update failed."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:132
-msgid "Update interval"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:133
-msgid "Update interval of rule set."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:775
-msgid "Update nodes from subscriptions"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:717
-msgid "Update subscriptions via proxy."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:710
-msgid "Update time"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:716
-msgid "Update via proxy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:813
-#: htdocs/luci-static/resources/view/homeproxy/node.js:825
-msgid "Updating subscriptions…"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:457
-msgid "Upload ECH config"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:184
-msgid "Upload bandwidth"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:185
-msgid "Upload bandwidth in Mbps."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:433
-#: htdocs/luci-static/resources/view/homeproxy/server.js:522
-msgid "Upload certificate"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:541
-msgid "Upload key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:436
-#: htdocs/luci-static/resources/view/homeproxy/node.js:460
-#: htdocs/luci-static/resources/view/homeproxy/server.js:525
-#: htdocs/luci-static/resources/view/homeproxy/server.js:544
-msgid "Upload..."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:328
-msgid "Use ACME TLS certificate issuer."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:144
-msgid ""
-"Use the tutorial-recommended sniffer profile (100ms timeout, http/tls/stun/"
-"quic/dns). Default keeps the 300ms / unconstrained-list behaviour."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:673
-msgid ""
-"Used to verify the hostname on the returned certificates unless insecure is "
-"given."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:273
-msgid "Used to verify the hostname on the returned certificates."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:136
-msgid "User"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:389
-msgid "User key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:750
-msgid "User-Agent"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:68
-#: htdocs/luci-static/resources/view/homeproxy/server.js:211
-msgid "Username"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:145
-msgid "VLESS"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:146
-msgid "VMess"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:126
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:164
-msgid "WAN DNS (read from interface)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:90
-msgid "WAN IP Policy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:181
-msgid "Warn"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:523
-msgid "WebSocket"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:197
-msgid ""
-"When the main DNS returns a mainland China IP, re-resolve via China DNS "
-"using evaluate/match_response."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:741
-msgid "Whitelist mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:144
-msgid "WireGuard"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:308
-msgid "WireGuard peer public key."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:315
-msgid "WireGuard pre-shared key."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:300
-msgid "WireGuard requires base64-encoded private keys."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:92
-msgid "Write proxy protocol in the connection header."
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:633
-#: htdocs/luci-static/resources/view/homeproxy/node.js:763
-msgid "Xudp (Xray-core)"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:1073
-msgid "Your %s was successfully uploaded. Size: %sB."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:385
-msgid "ZeroSSL"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:438
-#: htdocs/luci-static/resources/view/homeproxy/server.js:527
-msgid "certificate"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:358
-msgid "connect UDP connections"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:694
-#: htdocs/luci-static/resources/homeproxy.js:702
-msgid "default"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:91
-msgid "failed"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:519
-msgid "gRPC"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:560
-msgid "gRPC permit without stream"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:555
-msgid "gRPC service name"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:158
-msgid "gVisor"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:402
-#: htdocs/luci-static/resources/view/homeproxy/server.js:278
-msgid "http"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:220
-#: htdocs/luci-static/resources/homeproxy.js:1126
-#: htdocs/luci-static/resources/homeproxy.js:1146
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:140
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:175
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:141
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:72
-#: htdocs/luci-static/resources/view/homeproxy/node.js:484
-msgid "non-empty value"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:631
-#: htdocs/luci-static/resources/view/homeproxy/node.js:188
-#: htdocs/luci-static/resources/view/homeproxy/node.js:401
-#: htdocs/luci-static/resources/view/homeproxy/node.js:761
-#: htdocs/luci-static/resources/view/homeproxy/server.js:277
-msgid "none"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:632
-#: htdocs/luci-static/resources/view/homeproxy/node.js:762
-msgid "packet addr (v2ray-core v5+)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:88
-msgid "passed"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:546
-msgid "private key"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:127
-msgid "quic-go / uquic chrome"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:302
-msgid "sing-box client"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:41
-msgid ""
-"sing-box default; recommended for home use (accepts replies from any remote "
-"after mapping). Choose stricter only for specific UDP issues."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:30
-msgid ""
-"sing-box default; recommended for home use (small NAT table, QUIC/game "
-"friendly). Choose stricter only for specific UDP issues."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:377
-msgid ""
-"sing-box implements Snell v4/v5 wire as v4 and v6. The pre-shared key "
-"(Password above) must be 12-255 bytes for v6."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:305
-msgid "sing-box server"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:466
-msgid "uTLS fingerprint"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:467
-msgid ""
-"uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting "
-"resistance."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:97
-msgid "unchecked"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:1035
-msgid "unique UCI identifier"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:1137
-msgid "unique value"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:809
-msgid "unknown error"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:94
-#: htdocs/luci-static/resources/view/homeproxy/node.js:202
-#: htdocs/luci-static/resources/view/homeproxy/node.js:531
-msgid "v1"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:95
-#: htdocs/luci-static/resources/view/homeproxy/node.js:203
-#: htdocs/luci-static/resources/view/homeproxy/node.js:532
-msgid "v2"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:204
-msgid "v3"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:383
-msgid "v4"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:269
-msgid "v5"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:384
-#: htdocs/luci-static/resources/view/homeproxy/server.js:270
-msgid "v6"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:152
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:156
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:190
-msgid "valid DNS server address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:155
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:80
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:83
-#: htdocs/luci-static/resources/view/homeproxy/node.js:727
-#: htdocs/luci-static/resources/view/homeproxy/node.js:730
-msgid "valid URL"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:1085
-msgid "valid base64 key with %d characters"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:203
-msgid "valid hostname"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:1117
-msgid "valid port range (port1:port2)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:112
-msgid "valid port value"
-msgstr ""
-
-#: htdocs/luci-static/resources/homeproxy.js:1148
-msgid "valid uuid"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:402
-msgid "wrong-ack"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:401
-msgid "wrong-checksum"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:403
-msgid "wrong-md5"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:400
-msgid "wrong-sequence (default)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:404
-msgid "wrong-timestamp"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:75
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:123
-msgid "{tag} in URL when extra tags are used"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:126
-msgid "{tag} in initial path when extra tags are used"
-msgstr ""
diff --git a/luci-app-homeproxy-pro-pro/root/etc/uci-defaults/luci-homeproxy-pro-migration b/luci-app-homeproxy-pro-pro/root/etc/uci-defaults/luci-homeproxy-pro-migration
deleted file mode 100644
index a2082d0c2..000000000
--- a/luci-app-homeproxy-pro-pro/root/etc/uci-defaults/luci-homeproxy-pro-migration
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-ucode "/etc/homeproxy/scripts/migrate_config.uc"
-
-exit 0
diff --git a/luci-app-homeproxy-pro-pro/root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json b/luci-app-homeproxy-pro-pro/root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json
deleted file mode 100644
index 9892a9b97..000000000
--- a/luci-app-homeproxy-pro-pro/root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "admin/services/homeproxy": {
- "title": "HomeProxy",
- "order": 10,
- "action": {
- "type": "firstchild"
- },
- "depends": {
- "acl": [ "luci-app-homeproxy" ],
- "uci": { "homeproxy": true }
- }
- },
- "admin/services/homeproxy/client": {
- "title": "Client Settings",
- "order": 10,
- "action": {
- "type": "view",
- "path": "homeproxy/client"
- }
- },
- "admin/services/homeproxy/node": {
- "title": "Node Settings",
- "order": 15,
- "action": {
- "type": "view",
- "path": "homeproxy/node"
- }
- },
- "admin/services/homeproxy/server": {
- "title": "Server Settings",
- "order": 20,
- "action": {
- "type": "view",
- "path": "homeproxy/server"
- }
- },
- "admin/services/homeproxy/status": {
- "title": "Service Status",
- "order": 30,
- "action": {
- "type": "view",
- "path": "homeproxy/status"
- }
- }
-}
diff --git a/luci-app-homeproxy-pro-pro/tests/ucode/test_migrate_config.uc b/luci-app-homeproxy-pro-pro/tests/ucode/test_migrate_config.uc
deleted file mode 100644
index 1ef7dc628..000000000
--- a/luci-app-homeproxy-pro-pro/tests/ucode/test_migrate_config.uc
+++ /dev/null
@@ -1,144 +0,0 @@
-#!/usr/bin/ucode
-/*
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * Driver for tests/ucode/test_migrate_config.sh.
- *
- * migrate_config.uc has no exports: the migration executes at import
- * time and writes through a UCI cursor. The staged copy of
- * migrate_config.uc has been rewritten by the runner so its cursor
- * reads ARGV[0] (the sandbox dir) instead of /etc/config - so this
- * driver just imports it and lets the side effect run.
- *
- * The assertions below then re-read the sandbox and check the
- * post-state step by step, so a failure names the migration step
- * that regressed rather than "migrate broke something".
- */
-
-'use strict';
-
-import { cursor } from 'uci';
-
-import 'migrate_config';
-
-const uci = cursor(ARGV[0]);
-uci.load('homeproxy');
-
-let failures = 0,
- checks = 0;
-
-function expect(name, actual, want) {
- checks++;
- if (sprintf('%J', actual) !== sprintf('%J', want)) {
- printf('FAIL %s: expected %J, got %J\n', name, want, actual);
- failures++;
- }
-}
-
-/* --- infra section ---------------------------------------------------- */
-
-/* chinadns-ng removed: china_dns_port deleted. */
-expect('infra.china_dns_port deleted', uci.get('homeproxy', 'infra', 'china_dns_port'), null);
-
-/* github_token moved from infra to config. */
-expect('config.github_token set', uci.get('homeproxy', 'config', 'github_token'), 'secret');
-expect('infra.github_token deleted', uci.get('homeproxy', 'infra', 'github_token'), null);
-
-/* ntp_server introduced, defaults to the 'nil' sentinel. */
-expect('infra.ntp_server default', uci.get('homeproxy', 'infra', 'ntp_server'), 'nil');
-
-/* tun_gso deprecated in sing-box 1.11: absent here, so nothing to do -
- * assert it stays absent rather than flapping to a default. */
-expect('infra.tun_gso stays absent', uci.get('homeproxy', 'infra', 'tun_gso'), null);
-
-/* --- config section --------------------------------------------------- */
-
-/* single-value chinadns server: legacy 'wan_114' maps to 114.114.114.114. */
-expect('config.china_dns_server→114', uci.get('homeproxy', 'config', 'china_dns_server'), '114.114.114.114');
-
-/* log_level introduced, defaults to 'warn'. */
-expect('config.log_level default', uci.get('homeproxy', 'config', 'log_level'), 'warn');
-
-/* routing_port='all' means "every port" = no option at all. */
-expect('config.routing_port deleted', uci.get('homeproxy', 'config', 'routing_port'), null);
-
-/* --- dns section ------------------------------------------------------ */
-
-/* default_server='block-dns' becomes 'default-dns' plus an appended
- * reject rule that reproduces the old "block everything" behaviour. */
-expect('dns.default_server→default-dns', uci.get('homeproxy', 'dns', 'default_server'), 'default-dns');
-expect('dns final-block action', uci.get('homeproxy', '_migration_dns_final_block', 'action'), 'reject');
-expect('dns final-block enabled', uci.get('homeproxy', '_migration_dns_final_block', 'enabled'), '1');
-
-/* sing-box 1.14 deprecated DNS semantics. */
-expect('dns.independent_cache deleted', uci.get('homeproxy', 'dns', 'independent_cache'), null);
-expect('dns.store_rdrc→store_dns', uci.get('homeproxy', 'dns', 'cache_file_store_dns'), '1');
-expect('dns.store_rdrc deleted', uci.get('homeproxy', 'dns', 'cache_file_store_rdrc'), null);
-expect('dns.rdrc_timeout deleted', uci.get('homeproxy', 'dns', 'cache_file_rdrc_timeout'), null);
-
-/* --- dns_server: legacy address form ---------------------------------- */
-
-/* 'tls://1.1.1.1:853' splits into type/server/server_port, and the
- * legacy address key is dropped so the generator stops reading it. */
-expect('ds_default.type', uci.get('homeproxy', 'ds_default', 'type'), 'tls');
-expect('ds_default.server', uci.get('homeproxy', 'ds_default', 'server'), '1.1.1.1');
-expect('ds_default.server_port', uci.get('homeproxy', 'ds_default', 'server_port'), '853');
-expect('ds_default.address deleted', uci.get('homeproxy', 'ds_default', 'address'), null);
-
-/* strategy / client_subnet moved out of the dns_server and into the
- * dns_rule that referenced it. */
-expect('ds_default.strategy deleted', uci.get('homeproxy', 'ds_default', 'strategy'), null);
-expect('ds_default.client_subnet deleted', uci.get('homeproxy', 'ds_default', 'client_subnet'), null);
-expect('dr_uses_default.strategy', uci.get('homeproxy', 'dr_uses_default', 'strategy'), 'prefer_ipv4');
-expect('dr_uses_default.client_subnet', uci.get('homeproxy', 'dr_uses_default', 'client_subnet'), '1.2.3.0/24');
-
-/* RCode-as-address migrated into the predefined-rcode rule form; the
- * dns_server section itself is removed. */
-expect('ds_rcode section deleted', uci.get_all('homeproxy', 'ds_rcode'), null);
-
-/* --- dns_rule --------------------------------------------------------- */
-
-/* server='block-dns' moved into action='reject'. */
-expect('dr_block.action=reject', uci.get('homeproxy', 'dr_block', 'action'), 'reject');
-expect('dr_block.server deleted', uci.get('homeproxy', 'dr_block', 'server'), null);
-
-/* rule_set_ipcidr_match_source renamed to rule_set_ip_cidr_match_source. */
-expect('dr_stale.old key deleted', uci.get('homeproxy', 'dr_stale', 'rule_set_ipcidr_match_source'), null);
-expect('dr_stale.new key set', uci.get('homeproxy', 'dr_stale', 'rule_set_ip_cidr_match_source'), '1');
-
-/* a rule with no action gets the 'route' default. */
-expect('dr_uses_default.action=route', uci.get('homeproxy', 'dr_uses_default', 'action'), 'route');
-
-/* --- routing_rule ----------------------------------------------------- */
-
-/* outbound='block-out' moved into action='reject'. */
-expect('rr_block.action=reject', uci.get('homeproxy', 'rr_block', 'action'), 'reject');
-expect('rr_block.outbound deleted', uci.get('homeproxy', 'rr_block', 'outbound'), null);
-
-/* --- server ----------------------------------------------------------- */
-
-/* auto_firewall was a single global flag; it is redistributed onto
- * each server section as firewall='1'. */
-expect('srv_one.firewall set', uci.get('homeproxy', 'srv_one', 'firewall'), '1');
-expect('server.auto_firewall deleted', uci.get('homeproxy', 'server', 'auto_firewall'), null);
-
-/* sniff_override deprecated in sing-box 1.11. */
-expect('srv_one.sniff_override deleted', uci.get('homeproxy', 'srv_one', 'sniff_override'), null);
-
-/* server log_level introduced, defaults to 'warn'. */
-expect('server.log_level default', uci.get('homeproxy', 'server', 'log_level'), 'warn');
-
-/* --- migration bookkeeping -------------------------------------------- */
-
-/* the migration marker section must survive so the crontab cleanup
- * does not run twice. */
-expect('migration.crontab marker', uci.get('homeproxy', 'migration', 'crontab'), '1');
-
-/* --- summary ---------------------------------------------------------- */
-
-if (failures > 0)
- printf('FAIL: %d/%d checks failed\n', failures, checks);
-else
- printf('PASS: %d checks\n', checks);
-
-exit(failures > 0 ? 1 : 0);
diff --git a/luci-app-homeproxy-pro-pro/.gitignore b/luci-app-homeproxy-pro/.gitignore
similarity index 53%
rename from luci-app-homeproxy-pro-pro/.gitignore
rename to luci-app-homeproxy-pro/.gitignore
index 8c9d5901a..1634f28a2 100644
--- a/luci-app-homeproxy-pro-pro/.gitignore
+++ b/luci-app-homeproxy-pro/.gitignore
@@ -1,3 +1,3 @@
.DS_Store
-/homeproxy
+/homeproxy-pro
/docs/
diff --git a/luci-app-homeproxy-pro-pro/LICENSE b/luci-app-homeproxy-pro/LICENSE
similarity index 100%
rename from luci-app-homeproxy-pro-pro/LICENSE
rename to luci-app-homeproxy-pro/LICENSE
diff --git a/luci-app-homeproxy-pro-pro/Makefile b/luci-app-homeproxy-pro/Makefile
similarity index 74%
rename from luci-app-homeproxy-pro-pro/Makefile
rename to luci-app-homeproxy-pro/Makefile
index 880c463b1..54de3d01f 100644
--- a/luci-app-homeproxy-pro-pro/Makefile
+++ b/luci-app-homeproxy-pro/Makefile
@@ -21,9 +21,9 @@ LUCI_DEPENDS:= \
+kmod-tun \
+ucode-mod-digest
-PKG_NAME:=luci-app-homeproxy
+PKG_NAME:=luci-app-homeproxy-pro
PKG_VERSION:=28.9.1.14
-PKG_RELEASE:=2
+PKG_RELEASE:=4
# Only files the package actually ships belong here. The previous list named
# four paths that exist nowhere in the tree - certs/ and ruleset/ are created at
@@ -31,16 +31,16 @@ PKG_RELEASE:=2
# those declarations did nothing. What is listed instead is the resource data
# the router updates by itself: on a running device those files are newer than
# the ones in the package, and without this an upgrade would overwrite them.
-define Package/luci-app-homeproxy/conffiles
-/etc/config/homeproxy
-/etc/homeproxy/resources/china_ip4.txt
-/etc/homeproxy/resources/china_ip6.txt
-/etc/homeproxy/resources/china_list.txt
-/etc/homeproxy/resources/gfw_list.txt
-/etc/homeproxy/resources/china_ip4.ver
-/etc/homeproxy/resources/china_ip6.ver
-/etc/homeproxy/resources/china_list.ver
-/etc/homeproxy/resources/gfw_list.ver
+define Package/luci-app-homeproxy-pro/conffiles
+/etc/config/homeproxy-pro
+/etc/homeproxy-pro/resources/china_ip4.txt
+/etc/homeproxy-pro/resources/china_ip6.txt
+/etc/homeproxy-pro/resources/china_list.txt
+/etc/homeproxy-pro/resources/gfw_list.txt
+/etc/homeproxy-pro/resources/china_ip4.ver
+/etc/homeproxy-pro/resources/china_ip6.ver
+/etc/homeproxy-pro/resources/china_list.ver
+/etc/homeproxy-pro/resources/gfw_list.ver
endef
include $(TOPDIR)/feeds/luci/luci.mk
diff --git a/luci-app-homeproxy-pro-pro/README.md b/luci-app-homeproxy-pro/README.md
similarity index 82%
rename from luci-app-homeproxy-pro-pro/README.md
rename to luci-app-homeproxy-pro/README.md
index 79afe11de..7c64b2ee3 100644
--- a/luci-app-homeproxy-pro-pro/README.md
+++ b/luci-app-homeproxy-pro/README.md
@@ -10,7 +10,7 @@
## 项目定位
-本项目是试验性产品,对 [homeproxy](https://github.com/szwjp/luci-app-homeproxy) 架构重构版:以 sing-box **1.14** 内核为唯一目标,
+本项目是试验性产品,对 [homeproxy-pro](https://github.com/szwjp/luci-app-homeproxy-pro) 架构重构版:以 sing-box **1.14** 内核为唯一目标,
充分利用 1.14 引入的新特性,不再兼容 1.13 及更早内核。
## 运行要求
@@ -23,16 +23,16 @@
| 维度 | upstream 形态 | pro 形态 | 证据 |
|---|---|---|---|
-| 后端架构 | 单文件巨型(`generate_client.uc` 1217 行 / 40 KB;`parse_uri.uc` ~400 行 / 15 KB) | orchestrator + 5 子层(`parser` / `config` / `generator` / `subscription` / `runtime`)+ 公共库(`homeproxy.uc` / `firewall_utils.uc`)+ table-driven adapters | `root/etc/homeproxy/scripts/{config,parser,generator,subscription,runtime}/` |
-| 前端架构 | 单一 66 KB `client.js` | `client.js` thin 入口 + 8 个 Tab 模块(`access` / `common` / `dns` / `nodes` / `routing` / `subscription` / `tun_dns` / `udp_nat`)+ 共享 helpers + 集中 `RPC.declare` | `htdocs/luci-static/resources/view/homeproxy/client/` |
-| 协议建模 | 单 `parse_uri.uc` 内 13 个 scheme 分支 | `parser/{uri,flatten,normalize,mapping,protocols,validator}.uc` 6 个文件 + canonical Node 模型 + adapter table | `root/etc/homeproxy/scripts/parser/` + `config/{model,adapter}.uc` |
-| Tab 模块化 | 1 个 `client.js` 含 12 个 Tab 渲染 | `homeproxy.js` (1153 行 helpers) + 4 顶层 view + 8 个 `client/*.js`;helpers 集中 RPC / MD5 / validators / statusPoller / renderSectionAdd / uploadCertificate | `view/homeproxy/client/{routing,nodes,dns,access,subscription,udp_nat,tun_dns,common}.js` |
+| 后端架构 | 单文件巨型(`generate_client.uc` 1217 行 / 40 KB;`parse_uri.uc` ~400 行 / 15 KB) | orchestrator + 5 子层(`parser` / `config` / `generator` / `subscription` / `runtime`)+ 公共库(`homeproxy-pro.uc` / `firewall_utils.uc`)+ table-driven adapters | `root/etc/homeproxy-pro/scripts/{config,parser,generator,subscription,runtime}/` |
+| 前端架构 | 单一 66 KB `client.js` | `client.js` thin 入口 + 8 个 Tab 模块(`access` / `common` / `dns` / `nodes` / `routing` / `subscription` / `tun_dns` / `udp_nat`)+ 共享 helpers + 集中 `RPC.declare` | `htdocs/luci-static/resources/view/homeproxy-pro/client/` |
+| 协议建模 | 单 `parse_uri.uc` 内 13 个 scheme 分支 | `parser/{uri,flatten,normalize,mapping,protocols,validator}.uc` 6 个文件 + canonical Node 模型 + adapter table | `root/etc/homeproxy-pro/scripts/parser/` + `config/{model,adapter}.uc` |
+| Tab 模块化 | 1 个 `client.js` 含 12 个 Tab 渲染 | `homeproxy-pro.js` (1153 行 helpers) + 4 顶层 view + 8 个 `client/*.js`;helpers 集中 RPC / MD5 / validators / statusPoller / renderSectionAdd / uploadCertificate | `view/homeproxy-pro/client/{routing,nodes,dns,access,subscription,udp_nat,tun_dns,common}.js` |
### 稳定性
| 维度 | upstream 形态 | pro 形态 | 证据 |
|---|---|---|---|
-| reload 事务 | 写完直接 restart | 生成 → `sing-box check` → 新实例 probe → 健康门(连续采样)→ 提为 known-good;不健康自动回滚 | `root/etc/init.d/homeproxy` + `runtime/{config,health}.sh` |
+| reload 事务 | 写完直接 restart | 生成 → `sing-box check` → 新实例 probe → 健康门(连续采样)→ 提为 known-good;不健康自动回滚 | `root/etc/init.d/homeproxy-pro` + `runtime/{config,health}.sh` |
| 健康门 | `ubus` + `pgrep` 简单轮询 | `hp_wait_service` 连续 N 次采样(默认 3/30s)+ `netstat -p` 端口归属校验;不健康自动 rollback | `runtime/health.sh:hp_wait_service` |
| UCI 1.14 迁移 | r10/r11 自述较弱 | `migrate_config.uc` 36 checks 覆盖 1.14 DNS renames / `dns_server.address` 拆分 / `rcode://` → predefined rule / `rule_set_ipcidr_match_source` rename / `block-out`/`block-dns` → `action='reject'` / `auto_firewall` 重分发 / `block-dns` default-server | `scripts/migrate_config.uc` + `tests/ucode/test_migrate_config.sh` |
| sing-box 版本门 | 无 | `hp_require_singbox()` 在 start 时显式拒绝 `<1.14`,启动失败记录明确日志 | `runtime/service.sh:hp_require_singbox` |
@@ -41,12 +41,12 @@
| 维度 | upstream 形态 | pro 形态 | 证据 |
|---|---|---|---|
-| capabilities | `CAP_SYS_PTRACE` + `CAP_NET_RAW` + `CAP_NET_ADMIN` + `CAP_NET_BIND_SERVICE`(4 个) | 仅 `CAP_NET_ADMIN` + `CAP_NET_BIND_SERVICE`(2 个) | `root/etc/capabilities/homeproxy.json` + arch-guard guard 12 |
-| 路径白名单(cert / rule) | 仅前端 UI 校验 | `validateHomeProxyPath()` 拒 traversal + relative,限 `/etc/homeproxy/` 与 `/tmp/homeproxy_*`;`validateCertificatePath()` 限 `/etc/homeproxy/certs/` `/etc/acme/` `/etc/ssl/`;前后端列表 arch-guard 29 锁同步 | `homeproxy.uc:56 / :104` + `homeproxy.js:HP_CERT_PATH_ROOTS` |
-| 订阅 token 脱敏 | 调用点各自脱敏 | `wGETVerbose()` 内部脱敏(scheme/host/port 保留,userinfo / path / query 全脱;mock 与生产 `redactUrl` 由 arch-guard 35 锁一致) | `homeproxy.uc:226 (redactUrl)` + arch-guard 14 / 35 |
+| capabilities | `CAP_SYS_PTRACE` + `CAP_NET_RAW` + `CAP_NET_ADMIN` + `CAP_NET_BIND_SERVICE`(4 个) | 仅 `CAP_NET_ADMIN` + `CAP_NET_BIND_SERVICE`(2 个) | `root/etc/capabilities/homeproxy-pro.json` + arch-guard guard 12 |
+| 路径白名单(cert / rule) | 仅前端 UI 校验 | `validateHomeProxyPath()` 拒 traversal + relative,限 `/etc/homeproxy-pro/` 与 `/tmp/homeproxy_*`;`validateCertificatePath()` 限 `/etc/homeproxy-pro/certs/` `/etc/acme/` `/etc/ssl/`;前后端列表 arch-guard 29 锁同步 | `homeproxy-pro.uc:56 / :104` + `homeproxy-pro.js:HP_CERT_PATH_ROOTS` |
+| 订阅 token 脱敏 | 调用点各自脱敏 | `wGETVerbose()` 内部脱敏(scheme/host/port 保留,userinfo / path / query 全脱;mock 与生产 `redactUrl` 由 arch-guard 35 锁一致) | `homeproxy-pro.uc:226 (redactUrl)` + arch-guard 14 / 35 |
| crontab 权限 | `sed -i`(GNU-only)+ mv 后留给 0644 | `sed + mv` 跨 busybox / GNU / BSD + `chmod 600` 修 root crontab 0644 → 0600 | `runtime/service.sh:hp_crontab_drop` |
| procd jail mount | 默认未对所有模式 mount | tun/wireguard 自动 unjail(要 host netns),其他模式 mount HP_DIR + /etc/acme + /etc/ssl + /tmp/dhcp.leases + /etc/localtime + /etc/TZ | `runtime/service.sh:hp_procd_client_instance` |
-| cert upload 并发 | 4 个按钮共用 `/tmp/homeproxy_certificate.tmp` | 4 个按钮各自 `/tmp/homeproxy_cert_.tmp`,ACL 显式列 4 个写路径 | `homeproxy.js:uploadCertificate` + `acl.d/luci-app-homeproxy.json` |
+| cert upload 并发 | 4 个按钮共用 `/tmp/homeproxy_certificate.tmp` | 4 个按钮各自 `/tmp/homeproxy_cert_.tmp`,ACL 显式列 4 个写路径 | `homeproxy-pro.js:uploadCertificate` + `acl.d/luci-app-homeproxy-pro.json` |
| firewall 字段白名单 | 部分值校验 | `firewall_pre.uc` `tun_name` 严格 `^[A-Za-z0-9_.-]{1,15}$` 防 nft 注入;`firewall_post.ut` 每个 UCI 派生值走 `*_to_nftarr()` 校验器(guard 11 锁模板全覆盖) | `firewall_pre.uc:32` + `firewall_utils.uc` |
### 测试 / CI
@@ -57,20 +57,20 @@
| 测试规模 | 7 个脚本 / 约 27 个 check | `tests/` 下 80 个文件:ucode 套件 + 8 个 frontend 验证器 + golden snapshot + mocks + 离线 runtime 测试;arch-guard 单跑 135 个 check | `tests/print-stats.sh` 实测 |
| CI | `build` + `i18n` 两条平行 workflow | `build` 用 `workflow_call` 依赖 `arch-test`;`arch-test` 8 步(翻译 fast gate → toolchain cache → toolchain 校验 → `tests/run.sh` 唯一套件入口 → 模板检查);`on-target` 手动 ssh + 不安装 | `.github/workflows/{arch-test,build,on-target}.yml` |
| uCode dialect pin | 跟随 upstream HEAD(已放宽) | pin `UCODE_REV=85922056ef7abeace3cca3ab28bc1ac2d88e31b1`(完整 40 位 commit)+ `test_ucode_grammar.sh` canary 锁 strict 语法(拒 `export function … }` 无 `;`、对象/数组解构) | `tests/toolchain/build-ucode-linux.sh:UCODE_REV` + `tests/ucode/test_ucode_grammar.sh` |
-| MD5 实现 | 388 行 minified snippet;vmess 分支漏 `vmess_global_padding` | RFC 1321 完整实现 + `tests/frontend-md5.js` 锁 RFC 向量 + 与 Node `crypto.createHash('md5')` 双向 cross-check(44 / 44 PASS) | `homeproxy.js:calcStringMD5` + `tests/frontend-md5.js` |
+| MD5 实现 | 388 行 minified snippet;vmess 分支漏 `vmess_global_padding` | RFC 1321 完整实现 + `tests/frontend-md5.js` 锁 RFC 向量 + 与 Node `crypto.createHash('md5')` 双向 cross-check(44 / 44 PASS) | `homeproxy-pro.js:calcStringMD5` + `tests/frontend-md5.js` |
### UX / Ops
| 维度 | upstream 形态 | pro 形态 | 证据 |
|---|---|---|---|
-| Status 语义 | 2 态(RUNNING / NOT RUNNING) | 3 态(+ **STATUS UNKNOWN** 黄),区分 "rpc 没回" vs "service 死了" | `homeproxy.js:statusLabel` + `client.js:renderStatus` |
-| 前端特异性 bug 修复 | `stubValidator` 缺 `factory` 致 ip6addr TypeError;`L.bind(hp.renderSectionAdd, …)` 把 factory 塞 `extra_class` 槽致 `InvalidCharacterError` | 已修:`stubValidator` 持 `factory: validation`;`renderSectionAdd` 改薄 wrap(arch-guard 22 / 23 锁 binding 形态) | `view/homeproxy/client.js:73` + `homeproxy.js:1018-1026` |
+| Status 语义 | 2 态(RUNNING / NOT RUNNING) | 3 态(+ **STATUS UNKNOWN** 黄),区分 "rpc 没回" vs "service 死了" | `homeproxy-pro.js:statusLabel` + `client.js:renderStatus` |
+| 前端特异性 bug 修复 | `stubValidator` 缺 `factory` 致 ip6addr TypeError;`L.bind(hp.renderSectionAdd, …)` 把 factory 塞 `extra_class` 槽致 `InvalidCharacterError` | 已修:`stubValidator` 持 `factory: validation`;`renderSectionAdd` 改薄 wrap(arch-guard 22 / 23 锁 binding 形态) | `view/homeproxy-pro/client.js:73` + `homeproxy-pro.js:1018-1026` |
| 协议增改成本 | 改 110 行 ternary(README 旧行) | 改 5 个表行:`model.uc CREDENTIALS` + `loader.uc PROTOCOL_OPTIONS` + `adapter.uc OPTION_FIELDS` + `fixtures/` + golden snapshot;arch-guard 5 强制 fixtures 同步 | `config/{model,loader,adapter}.uc` + `tests/fixtures/generators/` |
| 资源更新 | jsdelivr 单一镜像 | 4 镜像 fallback(`fastly.jsdelivr.net` / `gcore.jsdelivr.net` / `cdn.jsdelivr.net` / `raw.githubusercontent.com`)+ UI「上次成功时间」(arch-guard 17 / 18 锁) | `runtime/dns.sh` + arch-guard 17 / 18 |
-| ECH 上传 | 后端 case 缺失 | 补齐 `client_ech_conf` 标签 + `isValidECHConfig()` PEM 校验;ACL 显式列 4 个 tmp 路径 | `homeproxy.uc:isValidECHConfig` + `luci.homeproxy:certificate_write` |
+| ECH 上传 | 后端 case 缺失 | 补齐 `client_ech_conf` 标签 + `isValidECHConfig()` PEM 校验;ACL 显式列 4 个 tmp 路径 | `homeproxy-pro.uc:isValidECHConfig` + `luci.homeproxy-pro:certificate_write` |
| 默认测试主机 | 硬编码作者内网 IP | `HP_TEST_HOST` 注入,未设时 fail-fast;`on-target.yml` ;ssh 前 `ssh -o ConnectTimeout=10` 先确认可达(不要从记忆里写地址) | `tests/run.sh` + `.github/workflows/on-target.yml` |
| 文档 | 标准(README + CONTRIBUTING + SECURITY) | 精简(README only),`docs/` 自 2026-09-16 起只留本地(untrack + `.gitignore`),远端公开仓库不再发布 | `README.md` + `docs/`(本地) |
-| 路由 ops | — | 替换文件只动 JS / menu / acl / rpcd ucode(reload 不影响网络);更深层改动前 `cp /etc/config/homeproxy /tmp/hp-r-preflight-/`,保留上一发版 .apk 24h;`killall -HUP rpcd` 由 apk scripts 自动做 | `runtime/{config,service}.sh` |
+| 路由 ops | — | 替换文件只动 JS / menu / acl / rpcd ucode(reload 不影响网络);更深层改动前 `cp /etc/config/homeproxy-pro /tmp/hp-r-preflight-/`,保留上一发版 .apk 24h;`killall -HUP rpcd` 由 apk scripts 自动做 | `runtime/{config,service}.sh` |
**一句话总结**:pro 的核心价值是**把"单文件能跑"变成"orchestrator + table-driven adapter + 可独立测试的模块"**,并把约束、质量、回滚三件事从靠人盯变成靠代码执行(arch-guard 135 checks 静态锁住跨文件不变量)。
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/homeproxy-pro.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/homeproxy-pro.js
similarity index 97%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/homeproxy-pro.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/homeproxy-pro.js
index 9f30fb0d1..8949aedb8 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/homeproxy-pro.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/homeproxy-pro.js
@@ -28,11 +28,11 @@ const HTTP_PING_HEALTH_CHECK_HINT = _('Specifies the timeout duration (in second
const HTTP_PING_KEEPALIVE_HINT = _('The timeout (in seconds) that after performing a keepalive check, the client will wait for activity. If no activity is detected, the connection will be closed.');
/* Certificates the backend lets sing-box read. This list mirrors
- CERT_PATH_ROOTS in /etc/homeproxy/scripts/homeproxy.uc, and
+ CERT_PATH_ROOTS in /etc/homeproxy-pro/scripts/homeproxy-pro.uc, and
tests/arch-guard.sh guard 29 fails when the two drift apart: a path the UI
accepted but the backend dropped made certificate_path null silently, so the
TLS listener failed with nothing pointing at the path. */
-const HP_CERT_PATH_ROOTS = [ '/etc/homeproxy/certs/', '/etc/acme/', '/etc/ssl/' ];
+const HP_CERT_PATH_ROOTS = [ '/etc/homeproxy-pro/certs/', '/etc/acme/', '/etc/ssl/' ];
/* Methods whose failure has already been reported, so that a polled call
cannot repeat the same notification every few seconds. */
@@ -525,7 +525,7 @@ return baseclass.extend({
o.depends('type', 'vless');
o.depends('type', 'vmess');
o.onchange = function(ev, section_id, value) {
- let desc = this.map.findElement('id', 'cbid.homeproxy.%s.transport'.format(section_id)).nextElementSibling;
+ let desc = this.map.findElement('id', 'cbid.homeproxy-pro.%s.transport'.format(section_id)).nextElementSibling;
if (value === 'http')
desc.innerHTML = TRANSPORT_HTTP_HINT;
else if (value === 'quic')
@@ -533,20 +533,20 @@ return baseclass.extend({
else
desc.innerHTML = TRANSPORT_NONE_HINT;
- let tls = this.map.findElement('id', 'cbid.homeproxy.%s.tls'.format(section_id)).firstElementChild;
+ let tls = this.map.findElement('id', 'cbid.homeproxy-pro.%s.tls'.format(section_id)).firstElementChild;
if ((value === 'http' && tls.checked) || (value === 'grpc' && !features.with_grpc)) {
- this.map.findElement('id', 'cbid.homeproxy.%s.http_idle_timeout'.format(section_id)).nextElementSibling.innerHTML =
+ this.map.findElement('id', 'cbid.homeproxy-pro.%s.http_idle_timeout'.format(section_id)).nextElementSibling.innerHTML =
(side === 'server') ? HTTP_IDLE_GOAWAY_HINT : HTTP_IDLE_HEALTH_CHECK_HINT;
if (side !== 'server')
- this.map.findElement('id', 'cbid.homeproxy.%s.http_ping_timeout'.format(section_id)).nextElementSibling.innerHTML =
+ this.map.findElement('id', 'cbid.homeproxy-pro.%s.http_ping_timeout'.format(section_id)).nextElementSibling.innerHTML =
HTTP_PING_HEALTH_CHECK_HINT;
} else if (value === 'grpc' && features.with_grpc) {
- this.map.findElement('id', 'cbid.homeproxy.%s.http_idle_timeout'.format(section_id)).nextElementSibling.innerHTML =
+ this.map.findElement('id', 'cbid.homeproxy-pro.%s.http_idle_timeout'.format(section_id)).nextElementSibling.innerHTML =
HTTP_IDLE_KEEPALIVE_HINT;
if (side !== 'server')
- this.map.findElement('id', 'cbid.homeproxy.%s.http_ping_timeout'.format(section_id)).nextElementSibling.innerHTML =
+ this.map.findElement('id', 'cbid.homeproxy-pro.%s.http_ping_timeout'.format(section_id)).nextElementSibling.innerHTML =
HTTP_PING_KEEPALIVE_HINT;
}
}
@@ -655,7 +655,7 @@ return baseclass.extend({
o.validate = function(section_id, _value) {
if (section_id) {
let type = this.map.lookupOption('type', section_id)[0].formvalue(section_id);
- let tls = this.map.findElement('id', 'cbid.homeproxy.%s.tls'.format(section_id)).firstElementChild;
+ let tls = this.map.findElement('id', 'cbid.homeproxy-pro.%s.tls'.format(section_id)).firstElementChild;
if ((options.tls_forced_types || []).includes(type)) {
tls.checked = true;
@@ -833,7 +833,7 @@ return baseclass.extend({
* this only covers "the call did not come back". */
rpcCall(method, args, options) {
options = options || {};
- const object = options.object || 'luci.homeproxy';
+ const object = options.object || 'luci.homeproxy-pro';
const call = rpc.declare({
object: object,
@@ -868,7 +868,7 @@ return baseclass.extend({
* that had already drifted (its vmess branch lost vmess_global_padding)
* and that validated nothing before writing the node into UCI. */
parseShareLink(uri) {
- /* Backend (luci.homeproxy node_parse) returns one of
+ /* Backend (luci.homeproxy-pro node_parse) returns one of
* { config: {...the-node-fields}, error: '' } on success
* { config: null, error: '...' } on failure
* (rpcParse's `expect` would unpack-and-type-check, which the
@@ -1061,7 +1061,7 @@ return baseclass.extend({
* land in the certs/ directory. The filename argument is the
* UCI option name (e.g. server_publickey), which we map onto
* a stable per-button path. The ACL write list in
- * acl.d/luci-app-homeproxy.json enumerates all four paths.
+ * acl.d/luci-app-homeproxy-pro.json enumerates all four paths.
*
* The signature is (type, filename, ev) on purpose: L.bind()
* binds arguments *in front of* the event the Button hands in
@@ -1103,7 +1103,7 @@ return baseclass.extend({
/etc/ssl/../shadow, and sing-box reads these paths as root. */
if (value.match(/(^|\/)\.\.(\/|$)/) ||
!HP_CERT_PATH_ROOTS.some((root) => value.indexOf(root) === 0 && value.length > root.length))
- return _('Expecting: %s').format(_('/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/...'));
+ return _('Expecting: %s').format(_('/etc/homeproxy-pro/certs/..., /etc/acme/..., /etc/ssl/...'));
return true;
},
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js
similarity index 87%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js
index 56019dfc1..be5e03ae9 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js
@@ -13,15 +13,15 @@
'require validation';
'require view';
-'require homeproxy as hp';
-'require view.homeproxy.client.common as common';
-'require view.homeproxy.client.routing as routing';
-'require view.homeproxy.client.nodes as nodes';
-'require view.homeproxy.client.dns as dns';
-'require view.homeproxy.client.access as access';
-'require view.homeproxy.client.subscription as subscription';
-'require view.homeproxy.client.udp_nat as udp_nat';
-'require view.homeproxy.client.tun_dns as tun_dns';
+'require homeproxy-pro as hp';
+'require view.homeproxy-pro.client.common as common';
+'require view.homeproxy-pro.client.routing as routing';
+'require view.homeproxy-pro.client.nodes as nodes';
+'require view.homeproxy-pro.client.dns as dns';
+'require view.homeproxy-pro.client.access as access';
+'require view.homeproxy-pro.client.subscription as subscription';
+'require view.homeproxy-pro.client.udp_nat as udp_nat';
+'require view.homeproxy-pro.client.tun_dns as tun_dns';
/* Module-scoped guard: register the view-level status poll exactly
* once, regardless of how many times the view's render() runs (LuCI
@@ -39,13 +39,13 @@ function getServiceStatus() {
* "the status query did not answer" from "the service is not running".
* With the default `{}` the try/catch below swallowed the difference and
* reported a failed query as NOT RUNNING. */
- return hp.rpcCall('list', ['homeproxy'],
+ return hp.rpcCall('list', ['homeproxy-pro'],
{ object: 'service', params: ['name'], expect: { '': {} }, fallback: null }).then((res) => {
if (res === null)
return null;
try {
- return res['homeproxy']['instances']['sing-box-c']['running'] === true;
+ return res['homeproxy-pro']['instances']['sing-box-c']['running'] === true;
} catch (e) {
/* It answered, and there is no such instance. */
return false;
@@ -93,7 +93,7 @@ let stubValidator = {
return view.extend({
load() {
return Promise.all([
- uci.load('homeproxy'),
+ uci.load('homeproxy-pro'),
hp.getBuiltinFeatures(),
network.getHostHints()
]);
@@ -107,7 +107,7 @@ return view.extend({
/* Cache all configured proxy nodes, they will be called multiple times */
let proxy_nodes = {};
- uci.sections('homeproxy', 'node', (res) => {
+ uci.sections('homeproxy-pro', 'node', (res) => {
let nodeaddr = ((res.type === 'direct') ? res.override_address : res.address) || '',
nodeport = ((res.type === 'direct') ? res.override_port : res.port) || '';
@@ -116,7 +116,7 @@ return view.extend({
String.format('[%s]', nodeaddr) : nodeaddr) + ':' + nodeport));
});
- m = new form.Map('homeproxy', _('HomeProxy'),
+ m = new form.Map('homeproxy-pro', _('HomeProxy'),
_('The modern ImmortalWrt proxy platform for ARM64/AMD64.'));
s = m.section(form.TypedSection);
@@ -148,7 +148,7 @@ return view.extend({
ensureStatusPoll();
- s = m.section(form.NamedSection, 'config', 'homeproxy');
+ s = m.section(form.NamedSection, 'config', 'homeproxy-pro');
/* ctx bundles the values each tab needs so the tab modules don't
* have to recompute them. The destructuring keys are intentionally
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js
similarity index 88%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js
index 633eb3ae4..ea2a2f09d 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js
@@ -10,7 +10,7 @@
'require form';
'require uci';
-'require homeproxy as hp';
+'require homeproxy-pro as hp';
'require tools.firewall as fwtool';
'require tools.widgets as widgets';
@@ -24,7 +24,7 @@ function render(ctx) {
s.tab('control', _('Access Control'));
- o = s.taboption('control', form.SectionValue, '_control', form.NamedSection, 'control', 'homeproxy');
+ o = s.taboption('control', form.SectionValue, '_control', form.NamedSection, 'control', 'homeproxy-pro');
ss = o.subsection;
/* Interface control start */
@@ -55,7 +55,7 @@ function render(ctx) {
so.depends('lan_proxy_mode', 'except_listed');
so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_direct_ipv6_ips', _('Direct IPv6 IP-s'), null, 'ipv6', hosts, true);
- so.depends({'lan_proxy_mode': 'except_listed', 'homeproxy.config.ipv6_support': '1'});
+ so.depends({'lan_proxy_mode': 'except_listed', 'homeproxy-pro.config.ipv6_support': '1'});
so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_direct_mac_addrs', _('Direct MAC-s'), null, hosts);
so.depends('lan_proxy_mode', 'except_listed');
@@ -64,7 +64,7 @@ function render(ctx) {
so.depends('lan_proxy_mode', 'listed_only');
so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_proxy_ipv6_ips', _('Proxy IPv6 IP-s'), null, 'ipv6', hosts, true);
- so.depends({'lan_proxy_mode': 'listed_only', 'homeproxy.config.ipv6_support': '1'});
+ so.depends({'lan_proxy_mode': 'listed_only', 'homeproxy-pro.config.ipv6_support': '1'});
so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_proxy_mac_addrs', _('Proxy MAC-s'), null, hosts);
so.depends('lan_proxy_mode', 'listed_only');
@@ -72,18 +72,18 @@ function render(ctx) {
so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_gaming_mode_ipv4_ips', _('Gaming mode IPv4 IP-s'), null, 'ipv4', hosts, true);
so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_gaming_mode_ipv6_ips', _('Gaming mode IPv6 IP-s'), null, 'ipv6', hosts, true);
- so.depends('homeproxy.config.ipv6_support', '1');
+ so.depends('homeproxy-pro.config.ipv6_support', '1');
so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_gaming_mode_mac_addrs', _('Gaming mode MAC-s'), null, hosts);
so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_global_proxy_ipv4_ips', _('Global proxy IPv4 IP-s'), null, 'ipv4', hosts, true);
- so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true});
+ so.depends({'homeproxy-pro.config.routing_mode': 'custom', '!reverse': true});
so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_global_proxy_ipv6_ips', _('Global proxy IPv6 IP-s'), null, 'ipv6', hosts, true);
- so.depends({'homeproxy.config.routing_mode': /^((?!custom).)+$/, 'homeproxy.config.ipv6_support': '1'});
+ so.depends({'homeproxy-pro.config.routing_mode': /^((?!custom).)+$/, 'homeproxy-pro.config.ipv6_support': '1'});
so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_global_proxy_mac_addrs', _('Global proxy MAC-s'), null, hosts);
- so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true});
+ so.depends({'homeproxy-pro.config.routing_mode': 'custom', '!reverse': true});
/* LAN IP policy end */
/* WAN IP policy start */
@@ -94,14 +94,14 @@ function render(ctx) {
so = ss.taboption('wan_ip_policy', form.DynamicList, 'wan_proxy_ipv6_ips', _('Proxy IPv6 IP-s'));
so.datatype = 'or(ip6addr, cidr6)';
- so.depends('homeproxy.config.ipv6_support', '1');
+ so.depends('homeproxy-pro.config.ipv6_support', '1');
so = ss.taboption('wan_ip_policy', form.DynamicList, 'wan_direct_ipv4_ips', _('Direct IPv4 IP-s'));
so.datatype = 'or(ip4addr, cidr4)';
so = ss.taboption('wan_ip_policy', form.DynamicList, 'wan_direct_ipv6_ips', _('Direct IPv6 IP-s'));
so.datatype = 'or(ip6addr, cidr6)';
- so.depends('homeproxy.config.ipv6_support', '1');
+ so.depends('homeproxy-pro.config.ipv6_support', '1');
/* WAN IP policy end */
/* Proxy domain list start */
@@ -112,7 +112,7 @@ function render(ctx) {
so.monospace = true;
so.datatype = 'hostname';
so.description = _('One domain per line. No spaces, no comments, no wildcards; the backend rejects invalid characters and tells you which line.');
- so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true});
+ so.depends({'homeproxy-pro.config.routing_mode': 'custom', '!reverse': true});
so.load = function(/* ... */) {
return hp.rpcCall('acllist_read', ['proxy_list'],
{ params: ['type'], expect: { '': {} } }).then((res) => {
@@ -142,7 +142,7 @@ function render(ctx) {
* so the test below was always true and a reset wiped the file even
* in custom mode, where the list is in use. Read the saved UCI value
* the backend will act on. */
- let routing_mode = uci.get('homeproxy', 'config', 'routing_mode');
+ let routing_mode = uci.get('homeproxy-pro', 'config', 'routing_mode');
if (routing_mode !== 'custom')
return hp.rpcCall('acllist_write', ['proxy_list', ''], { params: ['type', 'content'], expect: { '': {} } }).then((ret) => {
if (ret && ret.result === false)
@@ -169,7 +169,7 @@ function render(ctx) {
so.monospace = true;
so.datatype = 'hostname';
so.description = _('One domain per line. No spaces, no comments, no wildcards; the backend rejects invalid characters and tells you which line.');
- so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true});
+ so.depends({'homeproxy-pro.config.routing_mode': 'custom', '!reverse': true});
so.load = function(/* ... */) {
return hp.rpcCall('acllist_read', ['direct_list'],
{ params: ['type'], expect: { '': {} } }).then((res) => {
@@ -187,7 +187,7 @@ function render(ctx) {
}
so.remove = function(/* ... */) {
/* Same `this.section` mistake as the proxy list above. */
- let routing_mode = uci.get('homeproxy', 'config', 'routing_mode');
+ let routing_mode = uci.get('homeproxy-pro', 'config', 'routing_mode');
if (routing_mode !== 'custom')
return hp.rpcCall('acllist_write', ['direct_list', ''], { params: ['type', 'content'], expect: { '': {} } }).then((ret) => {
if (ret && ret.result === false)
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js
similarity index 97%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js
index 3621001fd..e57ff0666 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js
@@ -10,7 +10,7 @@
'require form';
'require uci';
-'require homeproxy as hp';
+'require homeproxy-pro as hp';
/* Build the shared body of a routing/dns rule section. The two sections
* differ in their tab/option names, the sniffed-protocol value list, the
@@ -32,8 +32,8 @@ function renderRuleSection(s, kind, self) {
ss.sortable = true;
ss.nodescriptions = true;
ss.modaltitle = L.bind(hp.loadModalTitle, hp, is_dns ? _('DNS rule') : _('Routing rule'),
- is_dns ? _('Add a DNS rule') : _('Add a routing rule'), 'homeproxy');
- ss.sectiontitle = L.bind(hp.loadDefaultLabel, self, 'homeproxy');
+ is_dns ? _('Add a DNS rule') : _('Add a routing rule'), 'homeproxy-pro');
+ ss.sectiontitle = L.bind(hp.loadDefaultLabel, self, 'homeproxy-pro');
/* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the bound
* form hands a call site's button factory to the wrong argument. */
ss.renderSectionAdd = function(extra_class) {
@@ -46,8 +46,8 @@ function renderRuleSection(s, kind, self) {
ss.tab('fields_process', _('Process fields'));
so = ss.taboption('field_other', form.Value, 'label', _('Label'));
- so.load = L.bind(hp.loadDefaultLabel, self, 'homeproxy');
- so.validate = L.bind(hp.validateUniqueValue, self, 'homeproxy', uci_type, 'label');
+ so.load = L.bind(hp.loadDefaultLabel, self, 'homeproxy-pro');
+ so.validate = L.bind(hp.validateUniqueValue, self, 'homeproxy-pro', uci_type, 'label');
so.modalonly = true;
so = ss.taboption('field_other', form.Flag, 'enabled', _('Enable'));
@@ -144,7 +144,7 @@ function renderRuleSection(s, kind, self) {
delete this.keylist;
delete this.vallist;
- uci.sections('homeproxy', 'ruleset', (res) => {
+ uci.sections('homeproxy-pro', 'ruleset', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
@@ -196,7 +196,7 @@ function renderRuleSection(s, kind, self) {
this.value('default-dns', _('Default DNS (issued by WAN)'));
this.value('system-dns', _('System DNS'));
- uci.sections('homeproxy', 'dns_server', (res) => {
+ uci.sections('homeproxy-pro', 'dns_server', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
@@ -333,7 +333,7 @@ function renderRuleSection(s, kind, self) {
delete this.vallist;
this.value('direct-out', _('Direct'));
- uci.sections('homeproxy', 'routing_node', (res) => {
+ uci.sections('homeproxy-pro', 'routing_node', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
@@ -416,7 +416,7 @@ function renderRuleSection(s, kind, self) {
this.value('', _('Default'));
this.value('default-dns', _('Default DNS (issued by WAN)'));
this.value('system-dns', _('System DNS'));
- uci.sections('homeproxy', 'dns_server', (res) => {
+ uci.sections('homeproxy-pro', 'dns_server', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js
similarity index 97%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js
index d0c9062c6..baa3392a7 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js
@@ -10,8 +10,8 @@
'require form';
'require uci';
-'require homeproxy as hp';
-'require view.homeproxy.client.common as common';
+'require homeproxy-pro as hp';
+'require view.homeproxy-pro.client.common as common';
/* The four cache options exist on the 'dns' NamedSection in both the custom
* mode tab (renderDnsSettings) and the preset mode tab (renderDnsCache).
@@ -54,7 +54,7 @@ function renderDnsSettings(ctx) {
let o, ss, so;
s.tab('dns', _('DNS Settings'));
- o = s.taboption('dns', form.SectionValue, '_dns', form.NamedSection, 'dns', 'homeproxy');
+ o = s.taboption('dns', form.SectionValue, '_dns', form.NamedSection, 'dns', 'homeproxy-pro');
o.depends('routing_mode', 'custom');
ss = o.subsection;
@@ -70,7 +70,7 @@ function renderDnsSettings(ctx) {
this.value('default-dns', _('Default DNS (issued by WAN)'));
this.value('system-dns', _('System DNS'));
- uci.sections('homeproxy', 'dns_server', (res) => {
+ uci.sections('homeproxy-pro', 'dns_server', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
@@ -198,7 +198,7 @@ function renderDnsCache(ctx) {
o.depends('routing_mode', 'bypass_mainland_china');
o.rmempty = false;
- o = s.taboption('dns_cache', form.SectionValue, '_dns_cache', form.NamedSection, 'dns', 'homeproxy');
+ o = s.taboption('dns_cache', form.SectionValue, '_dns_cache', form.NamedSection, 'dns', 'homeproxy-pro');
o.depends({'routing_mode': 'custom', '!reverse': true});
ss = o.subsection;
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js
similarity index 90%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js
index 57b118ad3..3039a1668 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js
@@ -10,7 +10,7 @@
'require form';
'require uci';
-'require homeproxy as hp';
+'require homeproxy-pro as hp';
'require tools.widgets as widgets';
/* Routing nodes sub-grid (the per-outbound entries that routing_rule
@@ -29,8 +29,8 @@ function renderRoutingNodes(ctx) {
ss.rowcolors = true;
ss.sortable = true;
ss.nodescriptions = true;
- ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('Routing node'), _('Add a routing node'), 'homeproxy');
- ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
+ ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('Routing node'), _('Add a routing node'), 'homeproxy-pro');
+ ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
/* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the bound
* form hands a call site's button factory to the wrong argument. */
ss.renderSectionAdd = function(extra_class) {
@@ -38,8 +38,8 @@ function renderRoutingNodes(ctx) {
};
so = ss.option(form.Value, 'label', _('Label'));
- so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
- so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'routing_node', 'label');
+ so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
+ so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'routing_node', 'label');
so.modalonly = true;
so = ss.option(form.Flag, 'enabled', _('Enable'));
@@ -52,7 +52,7 @@ function renderRoutingNodes(ctx) {
so.value('urltest', _('URLTest'));
for (let i in proxy_nodes)
so.value(i, proxy_nodes[i]);
- so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'routing_node', 'node');
+ so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'routing_node', 'node');
so.editable = true;
so = ss.option(form.ListValue, 'domain_resolver', _('Domain resolver'),
@@ -64,7 +64,7 @@ function renderRoutingNodes(ctx) {
this.value('', _('Default'));
this.value('default-dns', _('Default DNS (issued by WAN)'));
this.value('system-dns', _('System DNS'));
- uci.sections('homeproxy', 'dns_server', (res) => {
+ uci.sections('homeproxy-pro', 'dns_server', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
@@ -95,7 +95,7 @@ function renderRoutingNodes(ctx) {
delete this.vallist;
this.value('', _('Direct'));
- uci.sections('homeproxy', 'routing_node', (res) => {
+ uci.sections('homeproxy-pro', 'routing_node', (res) => {
if (res['.name'] !== section_id && res.enabled === '1')
this.value(res['.name'], res.label);
});
@@ -107,7 +107,7 @@ function renderRoutingNodes(ctx) {
let node = this.section.formvalue(section_id, 'node');
let conflict = false;
- uci.sections('homeproxy', 'routing_node', (res) => {
+ uci.sections('homeproxy-pro', 'routing_node', (res) => {
if (res['.name'] !== section_id) {
if (res.outbound === section_id && res['.name'] == value)
conflict = true;
@@ -218,8 +218,8 @@ function renderDnsServers(ctx) {
ss.rowcolors = true;
ss.sortable = true;
ss.nodescriptions = true;
- ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('DNS server'), _('Add a DNS server'), 'homeproxy');
- ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
+ ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('DNS server'), _('Add a DNS server'), 'homeproxy-pro');
+ ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
/* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the bound
* form hands a call site's button factory to the wrong argument. */
ss.renderSectionAdd = function(extra_class) {
@@ -227,8 +227,8 @@ function renderDnsServers(ctx) {
};
so = ss.option(form.Value, 'label', _('Label'));
- so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
- so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'dns_server', 'label');
+ so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
+ so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'dns_server', 'label');
so.modalonly = true;
so = ss.option(form.Flag, 'enabled', _('Enable'));
@@ -286,7 +286,7 @@ function renderDnsServers(ctx) {
this.value('', _('None'));
this.value('default-dns', _('Default DNS (issued by WAN)'));
this.value('system-dns', _('System DNS'));
- uci.sections('homeproxy', 'dns_server', (res) => {
+ uci.sections('homeproxy-pro', 'dns_server', (res) => {
if (res['.name'] !== section_id && res.enabled === '1')
this.value(res['.name'], res.label);
});
@@ -296,7 +296,7 @@ function renderDnsServers(ctx) {
so.validate = function(section_id, value) {
if (section_id && value) {
let conflict = false;
- uci.sections('homeproxy', 'dns_server', (res) => {
+ uci.sections('homeproxy-pro', 'dns_server', (res) => {
if (res['.name'] !== section_id)
if (res.address_resolver === section_id && res['.name'] == value)
conflict = true;
@@ -323,7 +323,7 @@ function renderDnsServers(ctx) {
delete this.vallist;
this.value('direct-out', _('Direct'));
- uci.sections('homeproxy', 'routing_node', (res) => {
+ uci.sections('homeproxy-pro', 'routing_node', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js
similarity index 94%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js
index 18b105475..842f8cf64 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js
@@ -10,8 +10,8 @@
'require form';
'require uci';
-'require homeproxy as hp';
-'require view.homeproxy.client.common as common';
+'require homeproxy-pro as hp';
+'require view.homeproxy-pro.client.common as common';
/* Routing tab and the wrapping custom-routing NamedSection. The
* routing_node tab lives in nodes.js; the routing_rule sub-section is
@@ -147,7 +147,7 @@ function render(ctx) {
/* Custom routing settings start */
/* Routing settings start */
- o = s.taboption('routing', form.SectionValue, '_routing', form.NamedSection, 'routing', 'homeproxy');
+ o = s.taboption('routing', form.SectionValue, '_routing', form.NamedSection, 'routing', 'homeproxy-pro');
o.depends('routing_mode', 'custom');
ss = o.subsection;
@@ -159,8 +159,8 @@ function render(ctx) {
}
so.value('system', _('System'));
so.default = 'system';
- so.depends('homeproxy.config.proxy_mode', 'redirect_tun');
- so.depends('homeproxy.config.proxy_mode', 'tun');
+ so.depends('homeproxy-pro.config.proxy_mode', 'redirect_tun');
+ so.depends('homeproxy-pro.config.proxy_mode', 'tun');
so.rmempty = false;
so.onchange = function(ev, section_id, value) {
let desc = ev.target.nextElementSibling;
@@ -183,9 +183,9 @@ function render(ctx) {
_('In seconds.'));
so.datatype = 'uinteger';
so.placeholder = '300';
- so.depends('homeproxy.config.proxy_mode', 'redirect_tproxy');
- so.depends('homeproxy.config.proxy_mode', 'redirect_tun');
- so.depends('homeproxy.config.proxy_mode', 'tun');
+ so.depends('homeproxy-pro.config.proxy_mode', 'redirect_tproxy');
+ so.depends('homeproxy-pro.config.proxy_mode', 'redirect_tun');
+ so.depends('homeproxy-pro.config.proxy_mode', 'tun');
so = ss.option(form.Flag, 'bypass_cn_traffic', _('Bypass CN traffic'),
_('Bypass mainland China traffic via firewall rules by default.'));
@@ -209,7 +209,7 @@ function render(ctx) {
this.value('nil', _('Disable (the service)'));
this.value('direct-out', _('Direct'));
this.value('block-out', _('Block'));
- uci.sections('homeproxy', 'routing_node', (res) => {
+ uci.sections('homeproxy-pro', 'routing_node', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
@@ -227,7 +227,7 @@ function render(ctx) {
this.value('default-dns', _('Default DNS (issued by WAN)'));
this.value('system-dns', _('System DNS'));
- uci.sections('homeproxy', 'dns_server', (res) => {
+ uci.sections('homeproxy-pro', 'dns_server', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js
similarity index 90%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js
index ff1e45b76..aed378dcf 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js
@@ -10,7 +10,7 @@
'require form';
'require uci';
-'require homeproxy as hp';
+'require homeproxy-pro as hp';
/* Rule set sub-grid (per-rule-set entries: local file or remote URL with
* download metadata). Called after dns.renderDnsRules() so the
@@ -28,8 +28,8 @@ function render(ctx) {
ss.rowcolors = true;
ss.sortable = true;
ss.nodescriptions = true;
- ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('Rule set'), _('Add a rule set'), 'homeproxy');
- ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
+ ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('Rule set'), _('Add a rule set'), 'homeproxy-pro');
+ ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
/* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the bound
* form hands a call site's button factory to the wrong argument. */
ss.renderSectionAdd = function(extra_class) {
@@ -37,8 +37,8 @@ function render(ctx) {
};
so = ss.option(form.Value, 'label', _('Label'));
- so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
- so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'ruleset', 'label');
+ so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
+ so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'ruleset', 'label');
so.modalonly = true;
so = ss.option(form.Flag, 'enabled', _('Enable'));
@@ -60,7 +60,7 @@ function render(ctx) {
so = ss.option(form.Value, 'path', _('Path'));
so.datatype = 'file';
- so.placeholder = '/etc/homeproxy/ruleset/example.json';
+ so.placeholder = '/etc/homeproxy-pro/ruleset/example.json';
so.rmempty = false;
so.depends('type', 'local');
so.modalonly = true;
@@ -98,7 +98,7 @@ function render(ctx) {
this.value('', _('Default'));
this.value('direct-out', _('Direct'));
- uci.sections('homeproxy', 'routing_node', (res) => {
+ uci.sections('homeproxy-pro', 'routing_node', (res) => {
if (res.enabled === '1')
this.value(res['.name'], res.label);
});
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js
similarity index 100%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js
similarity index 100%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js
similarity index 93%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js
index e49623e3e..fce346d54 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js
@@ -10,7 +10,7 @@
'require ui';
'require view';
-'require homeproxy as hp';
+'require homeproxy-pro as hp';
function allowInsecureConfirm(ev, _section_id, value) {
if (value === '1' && !confirm(_('Are you sure to allow insecure?')))
@@ -22,8 +22,8 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
s.rowcolors = true;
s.sortable = true;
s.nodescriptions = true;
- s.modaltitle = L.bind(hp.loadModalTitle, hp, _('Node'), _('Add a node'), 'homeproxy');
- s.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
+ s.modaltitle = L.bind(hp.loadModalTitle, hp, _('Node'), _('Add a node'), 'homeproxy-pro');
+ s.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
if (routing_mode !== 'custom') {
o = s.option(form.Button, '_apply', _('Apply'));
@@ -40,7 +40,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
}
}
o.onclick = function(ev, section_id) {
- uci.set('homeproxy', 'config', 'main_node', section_id);
+ uci.set('homeproxy-pro', 'config', 'main_node', section_id);
return this.map.save(null, true).then(() => {
ui.changes.apply(true);
@@ -49,8 +49,8 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
}
o = s.option(form.Value, 'label', _('Label'));
- o.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
- o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'node', 'label');
+ o.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
+ o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'node', 'label');
o.modalonly = true;
o = hp.renderProtocolOptions(s, { features: features, side: 'client' });
@@ -424,7 +424,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
o = s.option(form.Value, 'tls_cert_path', _('Certificate path'),
_('The path to the server certificate, in PEM format.'));
- o.value('/etc/homeproxy/certs/client_ca.pem');
+ o.value('/etc/homeproxy-pro/certs/client_ca.pem');
o.depends('tls_self_sign', '1');
o.validate = hp.validateCertificatePath;
o.rmempty = false;
@@ -434,7 +434,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
_('Save your configuration before uploading files!'));
o.inputstyle = 'action';
o.inputtitle = _('Upload...');
- o.depends({'tls_self_sign': '1', 'tls_cert_path': '/etc/homeproxy/certs/client_ca.pem'});
+ o.depends({'tls_self_sign': '1', 'tls_cert_path': '/etc/homeproxy-pro/certs/client_ca.pem'});
o.onclick = L.bind(hp.uploadCertificate, hp, _('certificate'), 'client_ca');
o.modalonly = true;
@@ -445,10 +445,10 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
o = s.option(form.Value, 'tls_ech_config_path', _('ECH config path'),
_('The path to the ECH config, in PEM format. If empty, load from DNS will be attempted.'));
- o.value('/etc/homeproxy/certs/client_ech_conf.pem');
+ o.value('/etc/homeproxy-pro/certs/client_ech_conf.pem');
/* Same policy as cert_path / key_path: sing-box reads this file as root and
the backend drops any path outside CERT_PATH_ROOTS (validateCertificatePath
- in homeproxy.uc). Without it the UI accepted a path the generator then
+ in homeproxy-pro.uc). Without it the UI accepted a path the generator then
silently discarded. */
o.validate = hp.validateCertificatePath;
o.depends('tls_ech', '1');
@@ -458,7 +458,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
_('Save your configuration before uploading files!'));
o.inputstyle = 'action';
o.inputtitle = _('Upload...');
- o.depends({'tls_ech': '1', 'tls_ech_config_path': '/etc/homeproxy/certs/client_ech_conf.pem'});
+ o.depends({'tls_ech': '1', 'tls_ech_config_path': '/etc/homeproxy-pro/certs/client_ech_conf.pem'});
o.onclick = L.bind(hp.uploadCertificate, hp, _('ECH config'), 'client_ech_conf');
o.modalonly = true;
@@ -479,7 +479,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
o.depends({'tls': '1', 'type': /^((?!hysteria2?|tuic$).)+$/});
o.validate = function(section_id, value) {
if (section_id) {
- let tls_reality = this.map.findElement('id', 'cbid.homeproxy.%s.tls_reality'.format(section_id)).firstElementChild;
+ let tls_reality = this.map.findElement('id', 'cbid.homeproxy-pro.%s.tls_reality'.format(section_id)).firstElementChild;
if (tls_reality.checked && !value)
return _('Expecting: %s').format(_('non-empty value'));
@@ -541,15 +541,15 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
return view.extend({
load() {
return Promise.all([
- uci.load('homeproxy'),
+ uci.load('homeproxy-pro'),
hp.getBuiltinFeatures()
]);
},
render(data) {
let m, s, o, ss, so;
- let main_node = uci.get('homeproxy', 'config', 'main_node');
- let routing_mode = uci.get('homeproxy', 'config', 'routing_mode');
+ let main_node = uci.get('homeproxy-pro', 'config', 'main_node');
+ let routing_mode = uci.get('homeproxy-pro', 'config', 'routing_mode');
let features = data[1];
/* Cache subscription information, it will be called multiple times.
@@ -569,7 +569,7 @@ return view.extend({
* first-seen entry is the one both sides agree on. */
let subinfo = [];
const seen_hashes = {};
- for (let suburl of (uci.get('homeproxy', 'subscription', 'subscription_url') || [])) {
+ for (let suburl of (uci.get('homeproxy-pro', 'subscription', 'subscription_url') || [])) {
const info = hp.subscriptionInfo(suburl);
if (!info)
continue;
@@ -579,9 +579,9 @@ return view.extend({
subinfo.push(info);
}
- m = new form.Map('homeproxy', _('Edit nodes'));
+ m = new form.Map('homeproxy-pro', _('Edit nodes'));
- s = m.section(form.NamedSection, 'subscription', 'homeproxy');
+ s = m.section(form.NamedSection, 'subscription', 'homeproxy-pro');
/* Node settings start */
/* User nodes start */
@@ -591,7 +591,7 @@ return view.extend({
ss.addremove = true;
ss.filter = function(section_id) {
for (let info of subinfo)
- if (info.hash === uci.get('homeproxy', section_id, 'grouphash'))
+ if (info.hash === uci.get('homeproxy-pro', section_id, 'grouphash'))
return false;
return true;
@@ -620,8 +620,8 @@ return view.extend({
input_links = input_links.reduce((pre, cur) =>
(!pre.includes(cur) && pre.push(cur), pre), []);
- let allow_insecure = uci.get('homeproxy', 'subscription', 'allow_insecure');
- let packet_encoding = uci.get('homeproxy', 'subscription', 'packet_encoding');
+ let allow_insecure = uci.get('homeproxy-pro', 'subscription', 'allow_insecure');
+ let packet_encoding = uci.get('homeproxy-pro', 'subscription', 'packet_encoding');
/* Every link is parsed - and rejected - by the
* backend parser (parser/uri.uc), so importing a
@@ -640,9 +640,9 @@ return view.extend({
config.packet_encoding = packet_encoding;
let nameHash = hp.calcStringMD5(config.label);
- let sid = uci.add('homeproxy', 'node', nameHash);
+ let sid = uci.add('homeproxy-pro', 'node', nameHash);
Object.keys(config).forEach((k) => {
- uci.set('homeproxy', sid, k, config[k]);
+ uci.set('homeproxy-pro', sid, k, config[k]);
});
imported_node++;
});
@@ -677,7 +677,7 @@ return view.extend({
])
])
}
- /* The shared renderer (homeproxy.js) appends the extra button this
+ /* The shared renderer (homeproxy-pro.js) appends the extra button this
* page needs; it used to carry a verbatim copy of the whole method.
* The factory gets the section back so the handler binds to it, the
* same receiver the copy's `this` had.
@@ -708,7 +708,7 @@ return view.extend({
o = s.taboption('sub_' + info.hash, form.SectionValue, '_sub_' + info.hash, form.GridSection, 'node');
ss = renderNodeSettings(o.subsection, data, features, main_node, routing_mode);
ss.filter = function(section_id) {
- return (uci.get('homeproxy', section_id, 'grouphash') === info.hash);
+ return (uci.get('homeproxy-pro', section_id, 'grouphash') === info.hash);
}
}
/* Subscription nodes end */
@@ -789,7 +789,7 @@ return view.extend({
o = s.taboption('subscription', form.Button, '_update_subscriptions', _('Update nodes from subscriptions'));
o.inputstyle = 'apply';
o.inputtitle = function(section_id) {
- let sublist = uci.get('homeproxy', section_id, 'subscription_url') || [];
+ let sublist = uci.get('homeproxy-pro', section_id, 'subscription_url') || [];
if (sublist.length > 0) {
return _('Update %s subscriptions').format(sublist.length);
} else {
@@ -799,7 +799,7 @@ return view.extend({
}
o.onclick = function() {
/* The updater pipeline (wget through a CN -> overseas link,
- UCI commit, /etc/init.d/homeproxy reload, the 30 s sing-box
+ UCI commit, /etc/init.d/homeproxy-pro reload, the 30 s sing-box
health gate) takes 5-15 s on a real device, which exceeds
the browser XHR timeout. The old synchronous RPC waited
for the whole thing inside one XHR; the browser saw
@@ -896,7 +896,7 @@ return view.extend({
o.inputstyle = 'reset';
o.inputtitle = function() {
let subnodes = [];
- uci.sections('homeproxy', 'node', (res) => {
+ uci.sections('homeproxy-pro', 'node', (res) => {
if (res.grouphash)
subnodes = subnodes.concat(res['.name'])
});
@@ -910,19 +910,19 @@ return view.extend({
}
o.onclick = function() {
let subnodes = [];
- uci.sections('homeproxy', 'node', (res) => {
+ uci.sections('homeproxy-pro', 'node', (res) => {
if (res.grouphash)
subnodes = subnodes.concat(res['.name'])
});
for (let i in subnodes)
- uci.remove('homeproxy', subnodes[i]);
+ uci.remove('homeproxy-pro', subnodes[i]);
- if (subnodes.includes(uci.get('homeproxy', 'config', 'main_node')))
- uci.set('homeproxy', 'config', 'main_node', 'nil');
+ if (subnodes.includes(uci.get('homeproxy-pro', 'config', 'main_node')))
+ uci.set('homeproxy-pro', 'config', 'main_node', 'nil');
- if (subnodes.includes(uci.get('homeproxy', 'config', 'main_udp_node')))
- uci.set('homeproxy', 'config', 'main_udp_node', 'nil');
+ if (subnodes.includes(uci.get('homeproxy-pro', 'config', 'main_udp_node')))
+ uci.set('homeproxy-pro', 'config', 'main_udp_node', 'nil');
this.inputtitle = _('%s nodes removed').format(subnodes.length);
this.readonly = true;
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js
similarity index 95%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js
index e42d3bca1..c7feccf7a 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js
@@ -11,7 +11,7 @@
'require ui';
'require view';
-'require homeproxy as hp';
+'require homeproxy-pro as hp';
'require tools.widgets as widgets';
/* Module-scoped guard for the view-level status poll: see the comment
@@ -47,13 +47,13 @@ function getServiceStatus() {
* "the status query did not answer" from "the service is not running".
* With the default `{}` the try/catch below swallowed the difference and
* reported a failed query as NOT RUNNING. */
- return hp.rpcCall('list', ['homeproxy'],
+ return hp.rpcCall('list', ['homeproxy-pro'],
{ object: 'service', params: ['name'], expect: { '': {} }, fallback: null }).then((res) => {
if (res === null)
return null;
try {
- return res['homeproxy']['instances']['sing-box-s']['running'] === true;
+ return res['homeproxy-pro']['instances']['sing-box-s']['running'] === true;
} catch (e) {
/* It answered, and there is no such instance. */
return false;
@@ -124,7 +124,7 @@ function handleGenKey(option) {
return view.extend({
load() {
return Promise.all([
- uci.load('homeproxy'),
+ uci.load('homeproxy-pro'),
hp.getBuiltinFeatures()
]);
},
@@ -133,7 +133,7 @@ return view.extend({
let m, s, o;
let features = data[1];
- m = new form.Map('homeproxy', _('HomeProxy Server'),
+ m = new form.Map('homeproxy-pro', _('HomeProxy Server'),
_('The modern ImmortalWrt proxy platform for ARM64/AMD64.'));
s = m.section(form.TypedSection);
@@ -163,7 +163,7 @@ return view.extend({
ensureStatusPoll();
- s = m.section(form.NamedSection, 'server', 'homeproxy', _('Global settings'));
+ s = m.section(form.NamedSection, 'server', 'homeproxy-pro', _('Global settings'));
o = s.option(form.Flag, 'enabled', _('Enable'));
o.rmempty = false;
@@ -173,8 +173,8 @@ return view.extend({
s.rowcolors = true;
s.sortable = true;
s.nodescriptions = true;
- s.modaltitle = L.bind(hp.loadModalTitle, hp, _('Server'), _('Add a server'), 'homeproxy');
- s.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
+ s.modaltitle = L.bind(hp.loadModalTitle, hp, _('Server'), _('Add a server'), 'homeproxy-pro');
+ s.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
/* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the
* bound form hands a call site's button factory to the wrong argument. */
s.renderSectionAdd = function(extra_class) {
@@ -182,8 +182,8 @@ return view.extend({
};
o = s.option(form.Value, 'label', _('Label'));
- o.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy');
- o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'server', 'label');
+ o.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro');
+ o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'server', 'label');
o.rmempty = false;
o.modalonly = true;
@@ -206,7 +206,7 @@ return view.extend({
o = s.option(form.Value, 'port', _('Listen port'),
_('The port must be unique.'));
o.datatype = 'port';
- o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'server', 'port');
+ o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'server', 'port');
o = s.option(form.Value, 'username', _('Username'));
o.depends('type', 'http');
@@ -284,7 +284,7 @@ return view.extend({
o = s.option(form.ListValue, 'shadowsocks_encrypt_method', _('Encrypt method'));
for (let i of hp.shadowsocks_encrypt_methods)
o.value(i);
- /* The legacy stream ciphers are client-only; see homeproxy.js's
+ /* The legacy stream ciphers are client-only; see homeproxy-pro.js's
shadowsocks_stream_methods for why, and the plan's 2.11. */
o.default = 'aes-128-gcm';
o.depends('type', 'shadowsocks');
@@ -510,7 +510,7 @@ return view.extend({
o = s.option(form.Value, 'tls_cert_path', _('Certificate path'),
_('The server public key, in PEM format.'));
- o.value('/etc/homeproxy/certs/server_publickey.pem');
+ o.value('/etc/homeproxy-pro/certs/server_publickey.pem');
o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': null});
o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': '0'});
o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': '0'});
@@ -523,13 +523,13 @@ return view.extend({
_('Save your configuration before uploading files!'));
o.inputstyle = 'action';
o.inputtitle = _('Upload...');
- o.depends({'tls': '1', 'tls_cert_path': '/etc/homeproxy/certs/server_publickey.pem'});
+ o.depends({'tls': '1', 'tls_cert_path': '/etc/homeproxy-pro/certs/server_publickey.pem'});
o.onclick = L.bind(hp.uploadCertificate, hp, _('certificate'), 'server_publickey');
o.modalonly = true;
o = s.option(form.Value, 'tls_key_path', _('Key path'),
_('The server private key, in PEM format.'));
- o.value('/etc/homeproxy/certs/server_privatekey.pem');
+ o.value('/etc/homeproxy-pro/certs/server_privatekey.pem');
o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': '0'});
o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': null});
o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': '0'});
@@ -542,7 +542,7 @@ return view.extend({
_('Save your configuration before uploading files!'));
o.inputstyle = 'action';
o.inputtitle = _('Upload...');
- o.depends({'tls': '1', 'tls_key_path': '/etc/homeproxy/certs/server_privatekey.pem'});
+ o.depends({'tls': '1', 'tls_key_path': '/etc/homeproxy-pro/certs/server_privatekey.pem'});
o.onclick = L.bind(hp.uploadCertificate, hp, _('private key'), 'server_privatekey');
o.modalonly = true;
diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js
similarity index 94%
rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js
rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js
index e99ecde1f..e30b3793d 100644
--- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js
+++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js
@@ -13,7 +13,7 @@
'require ui';
'require view';
-'require homeproxy as hp';
+'require homeproxy-pro as hp';
/* Thanks to luci-app-aria2 */
const css = ' \
@@ -27,7 +27,7 @@ const css = ' \
margin: 0; \
}';
-const hp_dir = '/var/run/homeproxy';
+const hp_dir = '/var/run/homeproxy-pro';
/* One view-level poll for all three log views.
*
@@ -161,7 +161,7 @@ function getResVersion(o, type) {
function getRuntimeLog(o, name, filename, _option_index, section_id, _in_table) {
let section, log_level_el;
switch (filename) {
- case 'homeproxy':
+ case 'homeproxy-pro':
section = null;
break;
case 'sing-box-c':
@@ -173,7 +173,7 @@ function getRuntimeLog(o, name, filename, _option_index, section_id, _in_table)
}
if (section) {
- const selected = uci.get('homeproxy', section, 'log_level') || 'warn';
+ const selected = uci.get('homeproxy-pro', section, 'log_level') || 'warn';
const choices = {
trace: _('Trace'),
debug: _('Debug'),
@@ -189,7 +189,7 @@ function getRuntimeLog(o, name, filename, _option_index, section_id, _in_table)
'class': 'cbi-input-select',
'style': 'margin-left: 4px; width: 6em;',
'change': ui.createHandlerFn(this, (ev) => {
- uci.set('homeproxy', section, 'log_level', ev.target.value);
+ uci.set('homeproxy-pro', section, 'log_level', ev.target.value);
return o.map.save(null, true).then(() => {
ui.changes.apply(true);
});
@@ -244,9 +244,9 @@ return view.extend({
render() {
let m, s, o;
- m = new form.Map('homeproxy');
+ m = new form.Map('homeproxy-pro');
- s = m.section(form.NamedSection, 'config', 'homeproxy', _('Connection check'));
+ s = m.section(form.NamedSection, 'config', 'homeproxy-pro', _('Connection check'));
s.anonymous = true;
o = s.option(form.DummyValue, '_check_baidu', _('BaiDu'));
@@ -255,7 +255,7 @@ return view.extend({
o = s.option(form.DummyValue, '_check_google', _('Google'));
o.cfgvalue = L.bind(getConnStat, this, o, 'google');
- s = m.section(form.NamedSection, 'config', 'homeproxy', _('Resources management'));
+ s = m.section(form.NamedSection, 'config', 'homeproxy-pro', _('Resources management'));
s.anonymous = true;
o = s.option(form.DummyValue, '_china_ip4_version', _('China IPv4 list version'));
@@ -292,11 +292,11 @@ return view.extend({
return node;
}
- s = m.section(form.NamedSection, 'config', 'homeproxy');
+ s = m.section(form.NamedSection, 'config', 'homeproxy-pro');
s.anonymous = true;
o = s.option(form.DummyValue, '_homeproxy_logview');
- o.render = L.bind(getRuntimeLog, this, o, _('HomeProxy'), 'homeproxy');
+ o.render = L.bind(getRuntimeLog, this, o, _('HomeProxy'), 'homeproxy-pro');
o = s.option(form.DummyValue, '_sing-box-c_logview');
o.render = L.bind(getRuntimeLog, this, o, _('sing-box client'), 'sing-box-c');
diff --git a/luci-app-homeproxy-pro/po/templates/homeproxy-pro.pot b/luci-app-homeproxy-pro/po/templates/homeproxy-pro.pot
new file mode 100644
index 000000000..aa5c4df31
--- /dev/null
+++ b/luci-app-homeproxy-pro/po/templates/homeproxy-pro.pot
@@ -0,0 +1,3392 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:222
+msgid "%s log"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:913
+msgid "%s nodes removed"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:858
+msgid "(empty)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:110
+msgid "(last updated %s)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:111
+msgid "(never updated on this device)"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:1098
+msgid "/etc/homeproxy-pro/certs/..., /etc/acme/..., /etc/ssl/..."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:221
+msgid ""
+"1 matches the latest untagged evaluate result; other values match an "
+"evaluate tag (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:81
+msgid "4 or 6. Not limited if empty."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:288
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:436
+msgid ""
+"%s will be temporarily overwritten to %s after 50 "
+"triggers in 30s if not enabled."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:434
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:458
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:523
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:542
+msgid "Save your configuration before uploading files!"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:375
+msgid "ACME account key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:359
+msgid "ACME key type"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:369
+msgid "ACME profile"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:370
+msgid "ACME profile for certificate issuance (1.14). Example: shortlived."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:419
+msgid "API token"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:227
+msgid "Accept any if empty."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:25
+msgid "Access Control"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:402
+msgid "Access key ID"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:408
+msgid "Access key secret"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:164
+msgid "Action"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:35
+msgid "Add a DNS rule"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:221
+msgid "Add a DNS server"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:25
+msgid "Add a node"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:32
+msgid "Add a routing node"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:35
+msgid "Add a routing rule"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:31
+msgid "Add a rule set"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:176
+msgid "Add a server"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:267
+msgid "Additional headers to be sent to the DNS server."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:249
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:58
+msgid "Address"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:29
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:40
+msgid "Address and port dependent"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:28
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:39
+msgid "Address dependent"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:280
+msgid "Address resolver"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:312
+msgid "Address strategy"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:166
+msgid "Aggressive"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:395
+msgid "Alibaba Cloud DNS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:131
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:165
+msgid "Aliyun Public DNS (223.5.5.5)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:104
+msgid "All ports"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:196
+msgid "Allow access from the Internet."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:683
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:753
+msgid "Allow insecure"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:684
+msgid "Allow insecure connection at TLS client."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:754
+msgid "Allow insecure connection by default when add nodes from subscriptions."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:615
+msgid "Allowed payload size is in the request."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:129
+msgid "Already at the latest version."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:126
+msgid "Already in updating."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:257
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:304
+msgid "Alter ID"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:433
+msgid "Alternative HTTP port"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:439
+msgid "Alternative TLS port"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:305
+msgid "Answer"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:131
+msgid "AnyTLS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:232
+msgid "AnyTLS padding scheme in array."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:213
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:460
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:89
+msgid ""
+"Append a edns0-subnet OPT extra record with the specified IP "
+"prefix to every query by default.
If value is an IP address instead of "
+"prefix, /32 or /128 will be appended automatically."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:420
+msgid "Append self-signed certificate"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:36
+msgid "Applied"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:29
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:39
+msgid "Apply"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:16
+msgid "Are you sure to allow insecure?"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:346
+msgid "Auth timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:281
+msgid "Authenticated length"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:263
+msgid "Authentication payload"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:256
+msgid "Authentication type"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:706
+msgid "Auto update"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:707
+msgid "Auto update subscriptions and geodata."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:325
+msgid "BBR"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:163
+msgid "BBR congestion control algorithm profile. Hysteria2 only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:162
+msgid "BBR profile (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:252
+msgid "BaiDu"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:258
+msgid "Base64"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:170
+msgid "Based on google/gvisor."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:56
+msgid "Binary file"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:38
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:84
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:629
+msgid "Bind interface"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:39
+msgid ""
+"Bind outbound traffic to specific interface. Leave empty to auto detect."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:90
+msgid "BitTorrent"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:740
+msgid "Blacklist mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:211
+msgid "Block"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:84
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:108
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:624
+msgid "Both"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:190
+msgid "Bypass CN traffic"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:84
+msgid "Bypass mainland China"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:191
+msgid "Bypass mainland China traffic via firewall rules by default."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:382
+msgid "CA provider"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:196
+msgid "CN-IP DNS fallback (sing-box 1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:166
+msgid "CNNIC Public DNS (210.2.4.8)"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:323
+msgid "CUBIC"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:596
+msgid "Cancel"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:425
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:511
+msgid "Certificate path"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:95
+msgid "Check"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:139
+msgid "Check update"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:162
+msgid "China DNS server"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:261
+msgid "China IPv4 list version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:265
+msgid "China IPv6 list version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:269
+msgid "China list version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:125
+msgid "Chromium / Cronet"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:708
+msgid "Cipher suites"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:128
+msgid "Cisco Public DNS (208.67.222.222)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:231
+msgid "Clean log"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:123
+msgid "Client"
+msgstr ""
+
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:14
+msgid "Client Settings"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:221
+msgid "Client version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:127
+msgid "CloudFlare Public DNS (1.1.1.1)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:396
+msgid "Cloudflare"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:130
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:146
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:212
+msgid "Collecting data..."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:105
+msgid "Common ports only (bypass P2P traffic)"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:321
+msgid "Congestion control algorithm"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:249
+msgid "Connection check"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:394
+msgid "Connection reuse"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:165
+msgid "Conservative"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:809
+msgid "Could not start subscription update: %s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:86
+msgid "Custom routing"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:92
+msgid "DNS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:25
+msgid "DNS Rules"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:212
+msgid "DNS Servers"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:56
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:122
+msgid "DNS Settings"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:394
+msgid "DNS provider"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:39
+msgid "DNS query timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:34
+msgid "DNS rule"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:410
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:124
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:221
+msgid "DNS server"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:390
+msgid "DNS01 challenge"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:93
+msgid "DTLS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:179
+msgid "Debug"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:62
+#: htdocs/luci-static/resources/homeproxy-pro.js:334
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:73
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:416
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:64
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:99
+msgid "Default"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:185
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:417
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:71
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:65
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:287
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:228
+msgid "Default DNS (issued by WAN)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:66
+msgid "Default DNS server"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:223
+msgid "Default DNS server for resolving domain name in the server address."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:61
+msgid "Default DNS strategy"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:203
+msgid "Default outbound"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:222
+msgid "Default outbound DNS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:204
+msgid "Default outbound for connections not matched by any routing rules."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:760
+msgid "Default packet encoding"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:338
+msgid "Default server name"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:40
+msgid "Default timeout per DNS query in seconds (sing-box default: 10)."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:130
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:326
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:97
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:325
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:210
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:100
+msgid "Direct"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:165
+msgid "Direct Domain List"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:54
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:99
+msgid "Direct IPv4 IP-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:57
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:102
+msgid "Direct IPv6 IP-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:60
+msgid "Direct MAC-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:257
+#: htdocs/luci-static/resources/homeproxy-pro.js:270
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:48
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:26
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:54
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:93
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:468
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:739
+msgid "Disable"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:209
+msgid "Disable (the service)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:170
+msgid "Disable Chrome QUIC fingerprint (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:171
+msgid ""
+"Disable Chrome QUIC handshake parroting, which is enabled by default since "
+"sing-box 1.14. Turn this on only when the server uses an Ed25519 certificate "
+"or the handshake otherwise fails."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:448
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:83
+msgid "Disable DNS cache"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:449
+msgid "Disable DNS cache in this query."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:425
+msgid "Disable HTTP challenge"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:429
+msgid "Disable TLS ALPN challenge"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:352
+msgid "Disable UDP domain unmapping"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:200
+msgid "Disable cache and save cache in this query."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:85
+msgid "Disable cache expire"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:199
+msgid "Disable dns cache"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:242
+msgid "Disable optimistic DNS caching for this query."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:467
+msgid "Disable optimistic DNS caching in this lookup (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:241
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:466
+msgid "Disable optimistic cache"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:31
+msgid "Disabled"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:487
+msgid "Domain keyword"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:478
+msgid "Domain name"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:491
+msgid "Domain regex"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:58
+msgid "Domain resolver"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:77
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:198
+msgid "Domain strategy"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:442
+msgid "Domain strategy for resolving the domain names."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:483
+msgid "Domain suffix"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:332
+msgid "Domains"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:435
+msgid "Don't drop packets"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:287
+msgid "Don't drop requests"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:178
+msgid "Download bandwidth"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:179
+msgid "Download bandwidth in Mbps."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:431
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:437
+msgid "Drop packets"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:282
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:289
+msgid "Drop requests"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:746
+msgid ""
+"Drop/keep nodes that contain the specific keywords. Regex is supported."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:738
+msgid "Drop/keep specific nodes from subscriptions."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:446
+msgid ""
+"EAB (External Account Binding) contains information necessary to bind or map "
+"an ACME account to some other account known by the CA.
External account "
+"bindings are \"used to associate an ACME account with an existing account in "
+"a non-ACME system, such as a CA customer database."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:442
+msgid ""
+"ECH (Encrypted Client Hello) is a TLS extension that allows a client to "
+"encrypt the first part of its ClientHello message."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:462
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:590
+msgid "ECH config"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:446
+msgid "ECH config path"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:549
+msgid "ECH key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:212
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:459
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:88
+msgid "EDNS Client subnet"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:614
+msgid "Early data"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:621
+msgid "Early data header name"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:622
+msgid "Early data is sent in path instead of header by default."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:568
+msgid "Edit nodes"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:344
+msgid "Email"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:53
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:45
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:234
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:44
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:168
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:190
+msgid "Enable"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:355
+msgid ""
+"Enable 0-RTT QUIC connection handshake on the client side. This is not "
+"impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:354
+msgid "Enable 0-RTT handshake"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:327
+msgid "Enable ACME"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:441
+msgid "Enable ECH"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:173
+msgid "Enable TCP Brutal"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:174
+msgid "Enable TCP Brutal congestion control algorithm"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:521
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:610
+msgid "Enable UDP fragmentation."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:395
+msgid "Enable connection reuse (the Snell v2 CONNECT command)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:175
+msgid "Enable endpoint-independent NAT"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:195
+msgid ""
+"Enable neighbor resolution so rules can match LAN devices by hostname (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:166
+msgid "Enable padding"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:601
+msgid "Enable tcp fast open for listener."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:525
+msgid ""
+"Enable the SUoT protocol, requires server support. Conflict with multiplex."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:177
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:263
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:284
+msgid "Encrypt method"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:27
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:38
+msgid "Endpoint independent"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:182
+msgid "Error"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:170
+msgid "Evaluate (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:225
+msgid "Evaluate tag"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:220
+#: htdocs/luci-static/resources/homeproxy-pro.js:1035
+#: htdocs/luci-static/resources/homeproxy-pro.js:1085
+#: htdocs/luci-static/resources/homeproxy-pro.js:1098
+#: htdocs/luci-static/resources/homeproxy-pro.js:1117
+#: htdocs/luci-static/resources/homeproxy-pro.js:1126
+#: htdocs/luci-static/resources/homeproxy-pro.js:1137
+#: htdocs/luci-static/resources/homeproxy-pro.js:1146
+#: htdocs/luci-static/resources/homeproxy-pro.js:1148
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:158
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:203
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:140
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:152
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:156
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:175
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:186
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:190
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:141
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:155
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:158
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:112
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:72
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:75
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:80
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:83
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:123
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:126
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:484
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:727
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:730
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:350
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:352
+msgid "Expecting: %s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:445
+msgid "External Account Binding"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:457
+msgid "External account MAC key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:451
+msgid "External account key ID"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:315
+msgid "Extra records"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:117
+msgid ""
+"Extra rule-set tags sharing these options. Requires {tag} in path/url (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:116
+msgid "Extra tags"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:657
+msgid "Failed to close the import dialog: %s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:93
+msgid "Failed to generate %s, error: %s."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:124
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:177
+msgid "Failed to read domain list: %s."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:1075
+msgid "Failed to upload %s, error: %s."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:183
+msgid "Fatal"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:745
+msgid "Filter keywords"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:737
+msgid "Filter nodes"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:194
+msgid "Find neighbor hosts"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:126
+msgid "Firefox / uquic firefox"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:195
+msgid "Firewall"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:251
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:298
+msgid "Flow"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:59
+msgid "For resolving domain name in the server address."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:55
+msgid "Format"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:372
+msgid "Fragment TLS handshake into multiple TLS records."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:378
+msgid ""
+"Fragment TLS handshakes. Due to poor performance, try %s first."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:384
+msgid "Fragment fallback delay"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:583
+msgid "GET"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:273
+msgid "GFW list version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:83
+msgid "GFWList"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:72
+msgid "Gaming mode IPv4 IP-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:74
+msgid "Gaming mode IPv6 IP-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:77
+msgid "Gaming mode MAC-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:272
+msgid "Gecko (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:37
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:39
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:582
+msgid "Generate"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:277
+msgid "GitHub token"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:87
+msgid "Global"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:274
+msgid "Global padding"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:79
+msgid "Global proxy IPv4 IP-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:82
+msgid "Global proxy IPv6 IP-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:85
+msgid "Global proxy MAC-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:166
+msgid "Global settings"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:255
+msgid "Google"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:129
+msgid "Google Public DNS (8.8.8.8)"
+msgstr ""
+
+#: root/usr/share/rpcd/acl.d/luci-app-homeproxy-pro.json:3
+msgid "Grant access to homeproxy-pro configuration"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:132
+#: htdocs/luci-static/resources/homeproxy-pro.js:520
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:94
+msgid "HTTP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:407
+msgid ""
+"HTTP Host header sent when obfuscation mode is http. bing.com is used by "
+"default."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:400
+msgid "HTTP obfuscation. v4 only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:276
+msgid "HTTP obfuscation. v5 only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:244
+msgid "HTTP/3"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:257
+msgid ""
+"HTTP3 server behavior when authentication fails.
A 404 page will be "
+"returned if empty."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:243
+msgid "HTTPS"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:521
+msgid "HTTPUpgrade"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:499
+msgid "Handshake server address"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:505
+msgid "Handshake server port"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:717
+msgid "Handshake timeout (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:266
+msgid "Headers"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:360
+msgid "Heartbeat interval"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:33
+msgid "Hijack"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:70
+#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:119
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:299
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:3
+msgid "HomeProxy"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:75
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:136
+msgid "HomeProxy Server"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:129
+msgid "Hop interval"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:123
+msgid "Hopping port"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:566
+#: htdocs/luci-static/resources/homeproxy-pro.js:571
+#: htdocs/luci-static/resources/homeproxy-pro.js:606
+msgid "Host"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:226
+msgid "Host key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:231
+msgid "Host key algorithms"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:44
+msgid "Host/IP fields"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:347
+msgid ""
+"How long the server should wait for the client to send the authentication "
+"command (in seconds)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:399
+msgid "How the forged segment is rejected by the real server."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:133
+msgid "Hysteria"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:134
+msgid "Hysteria2"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:503
+msgid "IP CIDR"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:80
+msgid "IP version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:82
+msgid "IPv4"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:65
+msgid "IPv4 only"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:83
+msgid "IPv6"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:66
+msgid "IPv6 only"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:135
+msgid "IPv6 support"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:100
+msgid "Idle session check interval"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:107
+msgid "Idle session check timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:589
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:190
+msgid "Idle timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:359
+msgid ""
+"If enabled, attempts to connect UDP connection to the destination instead of "
+"listen."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:353
+msgid ""
+"If enabled, for UDP proxy requests addressed to a domain, the original "
+"packet address will be sent in the response instead of the mapped domain."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:561
+msgid ""
+"If enabled, the client transport sends keepalive pings even with no active "
+"connections."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:199
+msgid ""
+"If set, the requested domain name will be resolved to IP before routing."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:24
+msgid ""
+"If the transport doesn't see any activity after a duration of this time (in "
+"seconds), it pings the client to check if the connection is still active."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:421
+msgid ""
+"If you have the root certificate, use this option instead of allowing "
+"insecure."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:251
+msgid "Ignore client bandwidth"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:662
+msgid "Import"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:589
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:682
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:684
+msgid "Import share links"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:658
+msgid ""
+"Imported the nodes, but the dialog did not close automatically. Close it "
+"manually."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:183
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:615
+msgid "In seconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:333
+msgid "In seconds. Disabled by default."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:115
+msgid ""
+"In the check, at least the first n idle sessions are kept open."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:108
+msgid ""
+"In the check, close sessions that have been idle for longer than this, in "
+"seconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:180
+msgid "Info"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:110
+msgid "Initial path"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:392
+msgid ""
+"Inject a forged TLS ClientHello carrying this SNI before the real one to "
+"fool SNI-filtering middleboxes. Requires elevated privileges."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:31
+msgid "Interface Control"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:197
+msgid "Interrupt existing connections"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:198
+msgid "Interrupt existing connections when the selected outbound has changed."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:101
+msgid "Interval checking for idle sessions, in seconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:361
+msgid ""
+"Interval for sending heartbeat packets for keeping the connection alive (in "
+"seconds)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:160
+msgid "Invert"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:161
+msgid "Invert match result."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:231
+msgid ""
+"Judge this response-dependent rule in parallel; first match wins (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:530
+msgid "Key path"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:45
+msgid "LAN IP Policy"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:48
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:40
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:229
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:39
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:51
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:184
+msgid "Label"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:258
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:305
+msgid ""
+"Legacy protocol support (VMess MD5 Authentication) is provided for "
+"compatibility purposes only, use of alterId > 1 is not recommended."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:172
+msgid "Less compatibility and sometimes better performance."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:384
+msgid "Let's Encrypt"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:293
+msgid ""
+"List of IP (v4 or v6) addresses prefixes to be assigned to the interface."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:128
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:35
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:64
+msgid "List of nodes to test."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:678
+msgid "List of supported application level protocols, in order of preference."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:306
+msgid "List of text DNS record to respond as answers."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:316
+msgid "List of text DNS record to respond as extra records."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:311
+msgid "List of text DNS record to respond as name servers."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:201
+msgid "Listen address"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:33
+msgid "Listen interfaces"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:206
+msgid "Listen port"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:210
+msgid "Loading"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:50
+msgid "Local"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:292
+msgid "Local address"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:111
+msgid ""
+"Local file with initial rule-set content; avoids blocking startup on first "
+"download (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:59
+msgid "Log file does not exist."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:55
+msgid "Log is empty."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:326
+msgid "MTU"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:53
+msgid "Main UDP node"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:25
+msgid "Main node"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:157
+msgid "Make IP CIDR in rule set used to match the source IP."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:157
+msgid "Make IP CIDR in rule sets match the source IP."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:256
+msgid "Masquerade"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:528
+msgid "Match DNSSEC OK"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:504
+msgid ""
+"Match IP CIDR with the evaluated response (needs match_response; old rules "
+"are auto-wrapped in 1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:505
+msgid "Match IP CIDR."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:514
+msgid "Match LAN device by MAC address."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:519
+msgid ""
+"Match LAN device hostname via neighbor resolution; enable find_neighbor."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:484
+msgid "Match domain suffix."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:488
+msgid "Match domain using keyword."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:492
+msgid "Match domain using regular expression."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:479
+msgid "Match full domain."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:549
+msgid "Match port range. Format as START:/:END/START:END."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:544
+msgid "Match port."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:509
+msgid "Match private IP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:510
+msgid "Match private IP with the evaluated response (needs match_response)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:500
+msgid "Match private source IP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:554
+msgid "Match process name."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:562
+msgid "Match process path using regular expression."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:558
+msgid "Match process path."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:529
+msgid "Match queries with the DNSSEC OK bit set (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:115
+msgid "Match query type."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:220
+msgid "Match response"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:141
+msgid ""
+"Match rule set. DNS: rules referencing rule-sets that contain query_type are "
+"incompatible with legacy address filters (ip_cidr / ip_is_private) — use "
+"match_response instead (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:142
+msgid ""
+"Match rule set. Since 1.14: a rule-set holding a single default rule is "
+"merged into this rule; any other rule-set matches as an OR collection."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:496
+msgid "Match source IP CIDR."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:539
+msgid "Match source port range. Format as START:/:END/START:END."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:534
+msgid "Match source port."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:524
+msgid "Match the EDNS Client Subnet in the query (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:261
+msgid "Match the evaluated response code (requires match_response)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:137
+msgid "Match user name."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:234
+msgid "Max download speed"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:235
+msgid "Max download speed in Mbps."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:137
+msgid "Max hop interval (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:289
+msgid "Max obfs packet size (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:37
+msgid "Max time an expired entry may be served. Examples: 3d, 1h."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:494
+msgid "Max time difference"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:241
+msgid "Max upload speed"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:242
+msgid "Max upload speed in Mbps."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:700
+msgid "Maximum TLS version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:354
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:368
+msgid "Maximum connections"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:366
+msgid ""
+"Maximum multiplexed streams in a connection before opening a new connection."
+"
Conflict with %s and %s."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:290
+msgid "Maximum on-wire packet size in bytes. Gecko only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:138
+msgid ""
+"Maximum port hopping interval in seconds; the actual interval is randomized "
+"between the two values. Hysteria2 only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:365
+msgid "Maximum streams"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:581
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:280
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:289
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:429
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:437
+msgid "Method"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:282
+msgid "Min obfs packet size (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:692
+msgid "Minimum TLS version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:114
+msgid "Minimum idle sessions"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:360
+msgid ""
+"Minimum multiplexed streams in a connection before opening a new connection."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:283
+msgid "Minimum on-wire packet size in bytes. Gecko only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:359
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:368
+msgid "Minimum streams"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:136
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:157
+msgid "Mixed"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:168
+msgid "Mixed system TCP stack and gVisor UDP stack."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:58
+msgid "Mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:517
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:605
+msgid "MultiPath TCP"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:159
+msgid "Multiplex"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:345
+msgid "Multiplex protocol."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:419
+msgid "NOT RUNNING"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:766
+msgid "NOTE: Save current settings before updating subscriptions."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:310
+msgid "NS"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:335
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:32
+msgid "Native"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:135
+msgid "NaïveProxy"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:105
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:621
+msgid "Network"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:324
+msgid "New Reno"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:17
+msgid "No TCP transport, plain HTTP is merged into the HTTP transport."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:19
+msgid "No additional encryption support: It's basically duplicate encryption."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:783
+msgid "No subscription available"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:894
+msgid "No subscription node"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:637
+msgid "No valid share link found."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:50
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:25
+msgid "Node"
+msgstr ""
+
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:22
+msgid "Node Settings"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:574
+msgid "Nodes"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:518
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:286
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:252
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:299
+msgid "None"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:276
+msgid "Obfuscate password"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:269
+msgid "Obfuscate type"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:406
+msgid "Obfuscation host"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:399
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:275
+msgid "Obfuscation mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:114
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:171
+msgid ""
+"One domain per line. No spaces, no comments, no wildcards; the backend "
+"rejects invalid characters and tells you which line."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:34
+msgid "Only process traffic from specific interfaces. Leave empty for all."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:85
+msgid "Only proxy mainland China"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:30
+msgid "Optimistic DNS cache"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:36
+msgid "Optimistic cache timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:226
+msgid "Optional tag for this evaluate result."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:390
+msgid "Optional; only required when connecting to a multi-user Snell server."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:43
+msgid "Other fields"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:320
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:91
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:319
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:93
+msgid "Outbound"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:51
+msgid "Outbound node"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:94
+msgid ""
+"Outbound used to download this rule-set (via sing-box 1.14 http_clients)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:338
+msgid "Override address"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:472
+msgid "Override dns.timeout for this lookup, in seconds (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:248
+msgid "Override dns.timeout for this query, in seconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:345
+msgid "Override port"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:339
+msgid "Override the connection destination address."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:346
+msgid "Override the connection destination port."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:376
+msgid "PEM-encoded private key of an existing ACME account (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:584
+msgid "PUT"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:630
+msgid "Packet encoding"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:231
+msgid "Padding scheme"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:184
+msgid "Panic"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:74
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:218
+msgid "Password"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:576
+#: htdocs/luci-static/resources/homeproxy-pro.js:610
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:259
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:61
+msgid "Path"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:307
+msgid "Peer pubkic key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:176
+msgid ""
+"Performance may degrade slightly, so it is not recommended to enable on when "
+"it is not needed."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:44
+msgid "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:332
+msgid "Persistent keepalive interval"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:597
+msgid "Ping timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:187
+msgid "Plugin"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:194
+msgid "Plugin opts"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:543
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:254
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:63
+msgid "Port"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:114
+msgid "Port %s alrealy exists!"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:45
+msgid "Port fields"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:130
+msgid "Port hopping interval in seconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:548
+msgid "Port range"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:314
+msgid "Pre-shared key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:169
+msgid "Predefined"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:63
+msgid "Prefer IPv4"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:64
+msgid "Prefer IPv6"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:235
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:299
+msgid "Private key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:240
+msgid "Private key passphrase"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:360
+msgid "Private key type for new certificates (1.14). Empty uses the default."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:46
+msgid "Process fields"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:553
+msgid "Process name"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:557
+msgid "Process path"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:561
+msgid "Process path (regex)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:88
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:144
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:344
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:237
+msgid "Protocol"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:282
+msgid "Protocol parameter. Enable length block encryption."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:275
+msgid ""
+"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
+"default in v2ray and cannot be disabled)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:108
+msgid "Proxy Domain List"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:63
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:92
+msgid "Proxy IPv4 IP-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:66
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:95
+msgid "Proxy IPv6 IP-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:69
+msgid "Proxy MAC-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:50
+msgid "Proxy all except listed"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:47
+msgid "Proxy filter mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:49
+msgid "Proxy listed only"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:122
+msgid "Proxy mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:91
+msgid "Proxy protocol"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:336
+#: htdocs/luci-static/resources/homeproxy-pro.js:522
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:95
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:245
+msgid "QUIC"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:322
+msgid "QUIC congestion control algorithm."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:523
+msgid "Query EDNS client subnet"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:247
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:471
+msgid "Query timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:114
+msgid "Query type"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:293
+msgid "RCode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:96
+msgid "RDP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:495
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:464
+msgid "REALITY"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:469
+msgid "REALITY private key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:500
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:485
+msgid "REALITY public key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:506
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:489
+msgid "REALITY short ID"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:417
+msgid "RUNNING"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:230
+msgid "Race"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:222
+msgid "Random version will be used if empty."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:119
+msgid "Recursive outbound detected!"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:305
+msgid "Recursive resolver detected!"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:123
+msgid "Redirect TCP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:125
+msgid "Redirect TCP + TProxy UDP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:127
+msgid "Redirect TCP + Tun UDP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:236
+msgid "Refresh every %s seconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:414
+msgid "Region ID"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:167
+msgid "Reject"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:51
+msgid "Remote"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:891
+msgid "Remove %s nodes"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:254
+msgid "Remove EDNS client subnet"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:881
+msgid "Remove all nodes from subscriptions"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:255
+msgid "Remove the edns0-subnet record from the query (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:281
+msgid "Reply with REFUSED"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:430
+msgid "Reply with TCP RST / ICMP port unreachable"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:321
+msgid "Reserved field bytes"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:172
+msgid "Resolve"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:441
+msgid "Resolve strategy"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:258
+msgid "Resources management"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:272
+msgid "Response NS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:260
+msgid "Response RCode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:267
+msgid "Response answer"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:276
+msgid "Response extra"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:31
+msgid ""
+"Return expired cache immediately and refresh in background (sing-box 1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:635
+msgid "Reuse address"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:636
+msgid "Reuse listener address."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:205
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:453
+msgid "Rewrite TTL"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:206
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:454
+msgid "Rewrite TTL in DNS responses."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:165
+msgid "Route"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:166
+msgid "Route options"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:23
+msgid "Routing Nodes"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:25
+msgid "Routing Rules"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:23
+msgid "Routing Settings"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:82
+msgid "Routing mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:32
+msgid "Routing node"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:102
+msgid "Routing ports"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:34
+msgid "Routing rule"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:22
+msgid "Rule Set"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:140
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:31
+msgid "Rule set"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:156
+msgid "Rule set IP CIDR as source IP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:68
+msgid "Rule set URL"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:141
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:97
+msgid "SSH"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:421
+msgid "STATUS UNKNOWN"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:98
+msgid "STUN"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:530
+msgid "SUoT version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:128
+msgid "Safari / Apple Network API"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:271
+msgid "Salamander"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:55
+msgid "Same as main node"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:284
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:290
+msgid "Save"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:768
+msgid "Save current settings"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:765
+msgid "Save subscriptions settings"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:236
+msgid "Send the query before pending race rules are judged (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:179
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:176
+msgid "Server"
+msgstr ""
+
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:30
+msgid "Server Settings"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:339
+msgid ""
+"Server name to use when choosing a certificate if the ClientHello's "
+"ServerName field is empty."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:171
+msgid "Server settings"
+msgstr ""
+
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:38
+msgid "Service Status"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:138
+msgid "ShadowTLS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:201
+msgid "ShadowTLS version"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:137
+msgid "Shadowsocks"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:29
+msgid ""
+"Since sing-box 1.14 the default (Unset) behaves as hijack: sing-box sets the "
+"platform interface DNS and hijacks port 53. On OpenWrt this overlaps with "
+"the own dnsmasq/nftables DNS hijack of this plugin, so keep Disabled on a "
+"gateway unless you need sing-box to own TUN DNS."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:139
+msgid "Snell (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:376
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:263
+msgid "Snell version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:124
+msgid "Sniffed client type (QUIC client type or SSH client name)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:89
+msgid ""
+"Sniffed protocol, see Sniff for details."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:143
+msgid "Sniffer: advanced mode (100ms, universal list)"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:140
+msgid "Socks"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:211
+msgid "Socks version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:212
+msgid "Socks4"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:213
+msgid "Socks4A"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:214
+msgid "Socks5"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:495
+msgid "Source IP CIDR"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:513
+msgid "Source MAC address"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:57
+msgid "Source file"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:518
+msgid "Source hostname"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:533
+msgid "Source port"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:538
+msgid "Source port range"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:411
+msgid ""
+"Specifies DNS server tag to use instead of selecting through DNS routing."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:21
+msgid ""
+"Specifies the period of time (in seconds) after which a health check will be "
+"performed using a ping frame if no frames have been received on the "
+"connection.
Please note that a ping response is considered a received "
+"frame, so if there is no other traffic on the connection, the health check "
+"will be executed every interval."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:23
+msgid ""
+"Specifies the time (in seconds) until idle clients should be closed with a "
+"GOAWAY frame. PING frames are not considered as activity."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:26
+msgid ""
+"Specifies the timeout duration (in seconds) after sending a PING frame, "
+"within which a response must be received.
If a response to the PING "
+"frame is not received within the specified timeout duration, the connection "
+"will be closed."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:103
+msgid ""
+"Specify target ports to be proxied. Multiple ports must be separated by "
+"commas."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:235
+msgid "Speculative"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:164
+msgid "Standard (default)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:43
+msgid "Store DNS cache"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:259
+msgid "String"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:693
+msgid "Sub (%s)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:720
+msgid "Subscription URL-s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:857
+msgid "Subscription update did not complete cleanly. Last log:"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:805
+msgid ""
+"Subscription update is already running. This page will reload when the "
+"previous run finishes."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:867
+msgid ""
+"Subscription update is taking longer than 90 seconds. Check the log and "
+"reload manually."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:704
+msgid "Subscriptions"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:639
+msgid "Successfully imported %s nodes of total %s."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:120
+msgid "Successfully updated."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:590
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:721
+msgid ""
+"Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) "
+"online configuration delivery standard."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:125
+msgid ""
+"Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:160
+msgid "System"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:186
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:418
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:72
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:66
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:288
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:229
+msgid "System DNS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:106
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:241
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:622
+msgid "TCP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:514
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:600
+msgid "TCP fast open"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:154
+msgid "TCP/IP stack"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:155
+msgid "TCP/IP stack."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:650
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:99
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:242
+msgid "TLS"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:677
+msgid "TLS ALPN"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:672
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:272
+msgid "TLS SNI"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:377
+msgid "TLS fragment"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:718
+msgid "TLS handshake timeout in seconds. 15s is used by default."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:18
+msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:371
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:379
+msgid "TLS record fragment"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:391
+msgid "TLS spoof SNI (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:398
+msgid "TLS spoof method (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:26
+msgid "TUN DNS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:39
+msgid "TUN DNS addresses (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:28
+msgid "TUN DNS mode (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:281
+msgid ""
+"Tag of a another server to resolve the domain name in the address. Required "
+"if address contains domain."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:320
+msgid "Tag of an outbound for connecting to the dns server."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:180
+msgid "Tag of the target dns server."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:321
+msgid "Tag of the target outbound."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:252
+msgid ""
+"Tell the client to use the BBR flow control algorithm instead of Hysteria CC."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:132
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:167
+msgid "Tencent Public DNS (119.29.29.29)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:147
+msgid "Test URL"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:167
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:41
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:70
+msgid "Test interval"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:175
+msgid "Test interval must be less or equal than idle timeout."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:183
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:47
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:76
+msgid "Test tolerance"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:268
+msgid "Text DNS records to match in the evaluated answer."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:383
+msgid "The ACME CA provider to use."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:62
+msgid "The DNS strategy for resolving the domain name in the address."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:148
+msgid "The URL to test."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:250
+msgid "The address of the dns server."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:434
+msgid ""
+"The alternate port to use for the ACME HTTP challenge; if non-empty, this "
+"port will be used instead of 80 to spin up a listener for the HTTP challenge."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:440
+msgid ""
+"The alternate port to use for the ACME TLS-ALPN challenge; the system must "
+"forward 443 to this port for challenge to succeed."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:66
+msgid ""
+"The default rule uses the following matching logic:
(domain || "
+"domain_suffix || domain_keyword || domain_regex || ip_cidr || "
+"ip_is_private) &&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields"
+"code>.
Additionally, included rule sets can be considered merged rather "
+"than as a single rule sub-item."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:59
+msgid ""
+"The default rule uses the following matching logic:
(domain || "
+"domain_suffix || domain_keyword || domain_regex) &&
(port "
+"|| port_range) &&
(source_ip_cidr || source_ip_is_private)"
+"code> &&
(source_port || source_port_range) &&
other fields.
Additionally, included rule sets can be "
+"considered merged rather than as a single rule sub-item."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:163
+msgid ""
+"The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:78
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:313
+msgid "The domain strategy for resolving the domain name in the address."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:709
+msgid ""
+"The elliptic curves that will be used in an ECDHE handshake, in preference "
+"order. If empty, the default will be used."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:345
+msgid ""
+"The email address to use when creating or selecting an existing ACME server "
+"account."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:385
+msgid ""
+"The fallback value in milliseconds used when TLS segmentation cannot "
+"automatically determine the wait time."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:191
+msgid "The idle timeout in seconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:701
+msgid "The maximum TLS version that is acceptable."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:495
+msgid "The maximum time difference between the server and the client."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:693
+msgid "The minimum TLS version that is acceptable."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:120
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:137
+msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:85
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:630
+msgid "The network interface to bind to."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:260
+msgid "The path of the DNS server."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:447
+msgid ""
+"The path to the ECH config, in PEM format. If empty, load from DNS will be "
+"attempted."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:426
+msgid "The path to the server certificate, in PEM format."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:207
+msgid "The port must be unique."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:255
+msgid "The port of the DNS server."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:264
+msgid "The pre-shared key (password) above must be 12-255 bytes for v6."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:850
+msgid "The request %s failed: %s."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:294
+msgid "The response code."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:531
+msgid "The server private key, in PEM format."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:512
+msgid "The server public key, in PEM format."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:92
+msgid ""
+"The tag of the upstream outbound.
Other dial fields will be ignored when "
+"enabled."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:168
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:42
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:71
+msgid "The test interval in seconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:184
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:48
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:77
+msgid "The test tolerance in milliseconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:28
+msgid ""
+"The timeout (in seconds) that after performing a keepalive check, the client "
+"will wait for activity. If no activity is detected, the connection will be "
+"closed."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:686
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:756
+msgid ""
+"This is DANGEROUS, your traffic is almost like "
+"PLAIN TEXT! Use at your own risk!"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:341
+msgid ""
+"This is the TUIC port of the UDP over TCP protocol, designed to provide a "
+"QUIC stream based UDP relay mode that TUIC does not provide."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:133
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:168
+msgid "ThreatBook Public DNS (117.50.10.10)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:365
+msgid ""
+"Timeout for UDP connections.
Setting a larger value than the UDP timeout "
+"in inbounds will have no effect."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:624
+msgid ""
+"To be compatible with Xray-core, set this to Sec-WebSocket-Protocol"
+"code>."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:130
+msgid ""
+"To enable Tun support, you need to install ip-full and "
+"kmod-tun"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:178
+msgid "Trace"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:517
+msgid "Transport"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:142
+msgid "Trojan"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:143
+msgid "Tuic"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:128
+msgid "Tun TCP/UDP"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:461
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:239
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:49
+msgid "Type"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:107
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:240
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:623
+msgid "UDP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:520
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:609
+msgid "UDP Fragment"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:24
+msgid "UDP NAT Settings"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:182
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:614
+msgid "UDP NAT expiration time"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:37
+msgid "UDP NAT filtering (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:26
+msgid "UDP NAT mapping (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:48
+msgid "UDP NAT sessions max (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:524
+msgid "UDP over TCP"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:340
+msgid "UDP over stream"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:333
+msgid "UDP packet relay mode."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:332
+msgid "UDP relay mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:364
+msgid "UDP timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:52
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:27
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:56
+msgid "URLTest"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:127
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:34
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:63
+msgid "URLTest nodes"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:309
+msgid "UUID"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:132
+msgid "Unknown error."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:61
+msgid "Unknown error: %s"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:30
+msgid "Unset (default)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:488
+msgid "Unsupported fingerprint!"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:780
+msgid "Update %s subscriptions"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:123
+msgid "Update failed."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:132
+msgid "Update interval"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:133
+msgid "Update interval of rule set."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:775
+msgid "Update nodes from subscriptions"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:717
+msgid "Update subscriptions via proxy."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:710
+msgid "Update time"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:716
+msgid "Update via proxy"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:813
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:825
+msgid "Updating subscriptions…"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:457
+msgid "Upload ECH config"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:184
+msgid "Upload bandwidth"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:185
+msgid "Upload bandwidth in Mbps."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:433
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:522
+msgid "Upload certificate"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:541
+msgid "Upload key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:436
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:460
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:525
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:544
+msgid "Upload..."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:328
+msgid "Use ACME TLS certificate issuer."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:144
+msgid ""
+"Use the tutorial-recommended sniffer profile (100ms timeout, http/tls/stun/"
+"quic/dns). Default keeps the 300ms / unconstrained-list behaviour."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:673
+msgid ""
+"Used to verify the hostname on the returned certificates unless insecure is "
+"given."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:273
+msgid "Used to verify the hostname on the returned certificates."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:136
+msgid "User"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:389
+msgid "User key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:750
+msgid "User-Agent"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:68
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:211
+msgid "Username"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:145
+msgid "VLESS"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:146
+msgid "VMess"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:126
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:164
+msgid "WAN DNS (read from interface)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:90
+msgid "WAN IP Policy"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:181
+msgid "Warn"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:523
+msgid "WebSocket"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:197
+msgid ""
+"When the main DNS returns a mainland China IP, re-resolve via China DNS "
+"using evaluate/match_response."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:741
+msgid "Whitelist mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:144
+msgid "WireGuard"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:308
+msgid "WireGuard peer public key."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:315
+msgid "WireGuard pre-shared key."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:300
+msgid "WireGuard requires base64-encoded private keys."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:92
+msgid "Write proxy protocol in the connection header."
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:633
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:763
+msgid "Xudp (Xray-core)"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:1073
+msgid "Your %s was successfully uploaded. Size: %sB."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:385
+msgid "ZeroSSL"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:438
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:527
+msgid "certificate"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:358
+msgid "connect UDP connections"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:694
+#: htdocs/luci-static/resources/homeproxy-pro.js:702
+msgid "default"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:91
+msgid "failed"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:519
+msgid "gRPC"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:560
+msgid "gRPC permit without stream"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:555
+msgid "gRPC service name"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:158
+msgid "gVisor"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:402
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:278
+msgid "http"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:220
+#: htdocs/luci-static/resources/homeproxy-pro.js:1126
+#: htdocs/luci-static/resources/homeproxy-pro.js:1146
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:140
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:175
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:141
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:72
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:484
+msgid "non-empty value"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:631
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:188
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:401
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:761
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:277
+msgid "none"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:632
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:762
+msgid "packet addr (v2ray-core v5+)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:88
+msgid "passed"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:546
+msgid "private key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:127
+msgid "quic-go / uquic chrome"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:302
+msgid "sing-box client"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:41
+msgid ""
+"sing-box default; recommended for home use (accepts replies from any remote "
+"after mapping). Choose stricter only for specific UDP issues."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:30
+msgid ""
+"sing-box default; recommended for home use (small NAT table, QUIC/game "
+"friendly). Choose stricter only for specific UDP issues."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:377
+msgid ""
+"sing-box implements Snell v4/v5 wire as v4 and v6. The pre-shared key "
+"(Password above) must be 12-255 bytes for v6."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:305
+msgid "sing-box server"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:466
+msgid "uTLS fingerprint"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:467
+msgid ""
+"uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting "
+"resistance."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:97
+msgid "unchecked"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:1035
+msgid "unique UCI identifier"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:1137
+msgid "unique value"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:809
+msgid "unknown error"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:94
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:202
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:531
+msgid "v1"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:95
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:203
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:532
+msgid "v2"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:204
+msgid "v3"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:383
+msgid "v4"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:269
+msgid "v5"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:384
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:270
+msgid "v6"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:152
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:156
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:186
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:190
+msgid "valid DNS server address"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:155
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:158
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:80
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:83
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:727
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:730
+msgid "valid URL"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:1085
+msgid "valid base64 key with %d characters"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:158
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:203
+msgid "valid hostname"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:1117
+msgid "valid port range (port1:port2)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:112
+msgid "valid port value"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy-pro.js:1148
+msgid "valid uuid"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:402
+msgid "wrong-ack"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:401
+msgid "wrong-checksum"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:403
+msgid "wrong-md5"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:400
+msgid "wrong-sequence (default)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:404
+msgid "wrong-timestamp"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:75
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:123
+msgid "{tag} in URL when extra tags are used"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:126
+msgid "{tag} in initial path when extra tags are used"
+msgstr ""
diff --git a/luci-app-homeproxy-pro-pro/po/zh-cn b/luci-app-homeproxy-pro/po/zh-cn
similarity index 100%
rename from luci-app-homeproxy-pro-pro/po/zh-cn
rename to luci-app-homeproxy-pro/po/zh-cn
diff --git a/luci-app-homeproxy-pro-pro/po/zh_Hans/homeproxy-pro-pro.po b/luci-app-homeproxy-pro/po/zh_Hans/homeproxy-pro.po
similarity index 50%
rename from luci-app-homeproxy-pro-pro/po/zh_Hans/homeproxy-pro-pro.po
rename to luci-app-homeproxy-pro/po/zh_Hans/homeproxy-pro.po
index 25e6989d2..d6b0b1d0e 100644
--- a/luci-app-homeproxy-pro-pro/po/zh_Hans/homeproxy-pro-pro.po
+++ b/luci-app-homeproxy-pro/po/zh_Hans/homeproxy-pro.po
@@ -8,31 +8,31 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:222
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:222
msgid "%s log"
msgstr "%s 日志"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:913
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:913
msgid "%s nodes removed"
msgstr "移除了 %s 个节点"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:858
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:858
msgid "(empty)"
msgstr "(空)"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:110
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:110
msgid "(last updated %s)"
msgstr "(最后更新 %s)"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:111
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:111
msgid "(never updated on this device)"
msgstr "(本设备从未更新)"
-#: htdocs/luci-static/resources/homeproxy.js:1098
-msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..."
-msgstr "/etc/homeproxy/certs/...,/etc/acme/...,/etc/ssl/..."
+#: htdocs/luci-static/resources/homeproxy-pro.js:1098
+msgid "/etc/homeproxy-pro/certs/..., /etc/acme/..., /etc/ssl/..."
+msgstr "/etc/homeproxy-pro/certs/...,/etc/acme/...,/etc/ssl/..."
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:221
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:221
msgid ""
"1 matches the latest untagged evaluate result; other values match an "
"evaluate tag (1.14)."
@@ -40,194 +40,194 @@ msgstr ""
"1 匹配最近一次无 tag 的 evaluate 结果;其它值匹配对应的 evaluate tag"
"(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:81
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:81
msgid "4 or 6. Not limited if empty."
msgstr "4 或 6。留空不限制。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:288
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:436
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:288
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:436
msgid ""
"%s will be temporarily overwritten to %s after 50 "
"triggers in 30s if not enabled."
msgstr ""
"若未启用,30 秒内触发 50 次后,%s 将临时改为 %s。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:434
-#: htdocs/luci-static/resources/view/homeproxy/node.js:458
-#: htdocs/luci-static/resources/view/homeproxy/server.js:523
-#: htdocs/luci-static/resources/view/homeproxy/server.js:542
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:434
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:458
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:523
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:542
msgid "Save your configuration before uploading files!"
msgstr "上传文件前请先保存配置!"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:375
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:375
msgid "ACME account key"
msgstr "ACME 账户密钥"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:359
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:359
msgid "ACME key type"
msgstr "ACME 密钥类型"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:369
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:369
msgid "ACME profile"
msgstr "ACME 配置档"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:370
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:370
msgid "ACME profile for certificate issuance (1.14). Example: shortlived."
msgstr "证书签发使用的 ACME profile(1.14)。示例:shortlived。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:419
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:419
msgid "API token"
msgstr "API 令牌"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:227
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:227
msgid "Accept any if empty."
msgstr "留空则不校验。"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:25
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:25
msgid "Access Control"
msgstr "访问控制"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:402
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:402
msgid "Access key ID"
msgstr "访问密钥 ID"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:408
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:408
msgid "Access key secret"
msgstr "访问密钥 Secret"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:164
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:164
msgid "Action"
msgstr "操作"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:35
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:35
msgid "Add a DNS rule"
msgstr "新增 DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:221
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:221
msgid "Add a DNS server"
msgstr "新增 DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:25
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:25
msgid "Add a node"
msgstr "新增节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:32
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:32
msgid "Add a routing node"
msgstr "新增路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:35
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:35
msgid "Add a routing rule"
msgstr "新增路由规则"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:31
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:31
msgid "Add a rule set"
msgstr "新增规则集"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:176
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:176
msgid "Add a server"
msgstr "新增服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:267
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:267
msgid "Additional headers to be sent to the DNS server."
msgstr "发送到 DNS 服务器的附加标头。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:249
-#: htdocs/luci-static/resources/view/homeproxy/node.js:58
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:249
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:58
msgid "Address"
msgstr "地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:29
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:40
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:29
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:40
msgid "Address and port dependent"
msgstr "地址与端口相关"
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:28
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:39
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:28
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:39
msgid "Address dependent"
msgstr "地址相关"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:280
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:280
msgid "Address resolver"
msgstr "地址解析器"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:312
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:312
msgid "Address strategy"
msgstr "地址解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:166
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:166
msgid "Aggressive"
msgstr "激进"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:395
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:395
msgid "Alibaba Cloud DNS"
msgstr "阿里云 DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:131
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:165
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:131
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:165
msgid "Aliyun Public DNS (223.5.5.5)"
msgstr "阿里云公共 DNS(223.5.5.5)"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:104
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:104
msgid "All ports"
msgstr "所有端口"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:196
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:196
msgid "Allow access from the Internet."
msgstr "允许来自互联网的访问。"
-#: htdocs/luci-static/resources/homeproxy.js:683
-#: htdocs/luci-static/resources/view/homeproxy/node.js:753
+#: htdocs/luci-static/resources/homeproxy-pro.js:683
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:753
msgid "Allow insecure"
msgstr "允许不安全连接"
-#: htdocs/luci-static/resources/homeproxy.js:684
+#: htdocs/luci-static/resources/homeproxy-pro.js:684
msgid "Allow insecure connection at TLS client."
msgstr "允许 TLS 客户端侧的不安全连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:754
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:754
msgid "Allow insecure connection by default when add nodes from subscriptions."
msgstr "从订阅获取节点时,默认允许不安全连接。"
-#: htdocs/luci-static/resources/homeproxy.js:615
+#: htdocs/luci-static/resources/homeproxy-pro.js:615
msgid "Allowed payload size is in the request."
msgstr "请求中允许的载荷大小。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:129
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:129
msgid "Already at the latest version."
msgstr "已是最新版本。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:126
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:126
msgid "Already in updating."
msgstr "已在更新中。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:257
-#: htdocs/luci-static/resources/view/homeproxy/server.js:304
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:257
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:304
msgid "Alter ID"
msgstr "额外 ID"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:433
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:433
msgid "Alternative HTTP port"
msgstr "替代 HTTP 端口"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:439
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:439
msgid "Alternative TLS port"
msgstr "替代 HTTPS 端口"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:305
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:305
msgid "Answer"
msgstr "回答"
-#: htdocs/luci-static/resources/homeproxy.js:131
+#: htdocs/luci-static/resources/homeproxy-pro.js:131
msgid "AnyTLS"
msgstr "AnyTLS"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:232
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:232
msgid "AnyTLS padding scheme in array."
msgstr "AnyTLS 填充方案。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:213
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:460
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:89
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:213
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:460
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:89
msgid ""
"Append a edns0-subnet OPT extra record with the specified IP "
"prefix to every query by default.
If value is an IP address instead of "
@@ -237,383 +237,383 @@ msgstr ""
"OPT 附加记录。
如果值是 IP 地址而非前缀,将自动附加 /32 或 "
"/128。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:420
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:420
msgid "Append self-signed certificate"
msgstr "追加自签名证书"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:36
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:36
msgid "Applied"
msgstr "已应用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:29
-#: htdocs/luci-static/resources/view/homeproxy/node.js:39
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:29
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:39
msgid "Apply"
msgstr "应用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:16
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:16
msgid "Are you sure to allow insecure?"
msgstr "确定要允许不安全连接吗?"
-#: htdocs/luci-static/resources/homeproxy.js:346
+#: htdocs/luci-static/resources/homeproxy-pro.js:346
msgid "Auth timeout"
msgstr "认证超时"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:281
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:281
msgid "Authenticated length"
msgstr "认证长度"
-#: htdocs/luci-static/resources/homeproxy.js:263
+#: htdocs/luci-static/resources/homeproxy-pro.js:263
msgid "Authentication payload"
msgstr "认证载荷"
-#: htdocs/luci-static/resources/homeproxy.js:256
+#: htdocs/luci-static/resources/homeproxy-pro.js:256
msgid "Authentication type"
msgstr "认证类型"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:706
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:706
msgid "Auto update"
msgstr "自动更新"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:707
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:707
msgid "Auto update subscriptions and geodata."
msgstr "自动更新订阅和地理数据。"
-#: htdocs/luci-static/resources/homeproxy.js:325
+#: htdocs/luci-static/resources/homeproxy-pro.js:325
msgid "BBR"
msgstr "BBR"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:163
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:163
msgid "BBR congestion control algorithm profile. Hysteria2 only."
msgstr "BBR 拥塞控制算法档位。仅 Hysteria2。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:162
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:162
msgid "BBR profile (1.14)"
msgstr "BBR 档位(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:252
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:252
msgid "BaiDu"
msgstr "百度"
-#: htdocs/luci-static/resources/homeproxy.js:258
+#: htdocs/luci-static/resources/homeproxy-pro.js:258
msgid "Base64"
msgstr "Base64"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:170
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:170
msgid "Based on google/gvisor."
msgstr "基于 google/gvisor。"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:56
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:56
msgid "Binary file"
msgstr "二进制文件"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:38
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:84
-#: htdocs/luci-static/resources/view/homeproxy/server.js:629
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:38
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:84
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:629
msgid "Bind interface"
msgstr "绑定接口"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:39
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:39
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr "绑定出站流量至指定端口。留空自动检测。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:90
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:90
msgid "BitTorrent"
msgstr "BitTorrent"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:740
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:740
msgid "Blacklist mode"
msgstr "黑名单模式"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:211
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:211
msgid "Block"
msgstr "封锁"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:84
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:108
-#: htdocs/luci-static/resources/view/homeproxy/server.js:624
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:84
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:108
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:624
msgid "Both"
msgstr "全部"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:190
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:190
msgid "Bypass CN traffic"
msgstr "绕过中国流量"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:84
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:84
msgid "Bypass mainland China"
msgstr "大陆白名单"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:191
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:191
msgid "Bypass mainland China traffic via firewall rules by default."
msgstr "默认使用防火墙规则绕过中国大陆流量。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:382
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:382
msgid "CA provider"
msgstr "CA 颁发机构"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:196
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:196
msgid "CN-IP DNS fallback (sing-box 1.14)"
msgstr "大陆 IP DNS 兜底(sing-box 1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:166
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:166
msgid "CNNIC Public DNS (210.2.4.8)"
msgstr "CNNIC 公共 DNS(210.2.4.8)"
-#: htdocs/luci-static/resources/homeproxy.js:323
+#: htdocs/luci-static/resources/homeproxy-pro.js:323
msgid "CUBIC"
msgstr "CUBIC"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:596
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:596
msgid "Cancel"
msgstr "取消"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:425
-#: htdocs/luci-static/resources/view/homeproxy/server.js:511
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:425
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:511
msgid "Certificate path"
msgstr "证书路径"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:95
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:95
msgid "Check"
msgstr "检查"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:139
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:139
msgid "Check update"
msgstr "检查更新"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:162
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:162
msgid "China DNS server"
msgstr "国内 DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:261
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:261
msgid "China IPv4 list version"
msgstr "国内 IPv4 库版本"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:265
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:265
msgid "China IPv6 list version"
msgstr "国内 IPv6 库版本"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:269
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:269
msgid "China list version"
msgstr "国内域名列表版本"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:125
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:125
msgid "Chromium / Cronet"
msgstr "Chromium / Cronet"
-#: htdocs/luci-static/resources/homeproxy.js:708
+#: htdocs/luci-static/resources/homeproxy-pro.js:708
msgid "Cipher suites"
msgstr "密码套件"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:128
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:128
msgid "Cisco Public DNS (208.67.222.222)"
msgstr "思科公共 DNS(208.67.222.222)"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:231
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:231
msgid "Clean log"
msgstr "清空日志"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:123
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:123
msgid "Client"
msgstr "客户端"
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:14
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:14
msgid "Client Settings"
msgstr "客户端设置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:221
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:221
msgid "Client version"
msgstr "客户端版本"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:127
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:127
msgid "CloudFlare Public DNS (1.1.1.1)"
msgstr "CloudFlare 公共 DNS(1.1.1.1)"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:396
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:396
msgid "Cloudflare"
msgstr "Cloudflare"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:130
-#: htdocs/luci-static/resources/view/homeproxy/server.js:146
-#: htdocs/luci-static/resources/view/homeproxy/status.js:212
+#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:130
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:146
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:212
msgid "Collecting data..."
msgstr "正在收集数据中..."
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:105
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:105
msgid "Common ports only (bypass P2P traffic)"
msgstr "仅常用端口(绕过 P2P 流量)"
-#: htdocs/luci-static/resources/homeproxy.js:321
+#: htdocs/luci-static/resources/homeproxy-pro.js:321
msgid "Congestion control algorithm"
msgstr "拥塞控制算法"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:249
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:249
msgid "Connection check"
msgstr "连接检查"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:394
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:394
msgid "Connection reuse"
msgstr "连接复用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:165
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:165
msgid "Conservative"
msgstr "保守"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:809
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:809
msgid "Could not start subscription update: %s"
msgstr "无法启动订阅更新:%s"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:86
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:86
msgid "Custom routing"
msgstr "自定义路由"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:92
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:92
msgid "DNS"
msgstr "DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:25
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:25
msgid "DNS Rules"
msgstr "DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:212
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:212
msgid "DNS Servers"
msgstr "DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:56
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:122
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:56
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:122
msgid "DNS Settings"
msgstr "DNS 设置"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:394
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:394
msgid "DNS provider"
msgstr "DNS 提供商"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:39
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:39
msgid "DNS query timeout"
msgstr "DNS 查询超时"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:34
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:34
msgid "DNS rule"
msgstr "DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:410
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:124
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:221
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:410
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:124
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:221
msgid "DNS server"
msgstr "DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:390
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:390
msgid "DNS01 challenge"
msgstr "DNS01 验证"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:93
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:93
msgid "DTLS"
msgstr "DTLS"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:179
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:179
msgid "Debug"
msgstr "调试"
-#: htdocs/luci-static/resources/homeproxy.js:62
-#: htdocs/luci-static/resources/homeproxy.js:334
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:73
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:416
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:64
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:99
+#: htdocs/luci-static/resources/homeproxy-pro.js:62
+#: htdocs/luci-static/resources/homeproxy-pro.js:334
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:73
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:416
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:64
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:99
msgid "Default"
msgstr "默认"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:185
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:417
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:71
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:65
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:287
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:228
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:185
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:417
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:71
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:65
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:287
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:228
msgid "Default DNS (issued by WAN)"
msgstr "默认 DNS(由 WAN 下发)"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:66
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:66
msgid "Default DNS server"
msgstr "默认 DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:223
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:223
msgid "Default DNS server for resolving domain name in the server address."
msgstr "用于解析服务器地址中的域名的默认 DNS 服务器。"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:61
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:61
msgid "Default DNS strategy"
msgstr "默认 DNS 解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:203
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:203
msgid "Default outbound"
msgstr "默认出站"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:222
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:222
msgid "Default outbound DNS"
msgstr "默认出站 DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:204
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:204
msgid "Default outbound for connections not matched by any routing rules."
msgstr "用于未被任何路由规则匹配的连接的默认出站。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:760
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:760
msgid "Default packet encoding"
msgstr "默认包封装格式"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:338
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:338
msgid "Default server name"
msgstr "默认服务器名称"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:40
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:40
msgid "Default timeout per DNS query in seconds (sing-box default: 10)."
msgstr "每次 DNS 查询的默认超时时间(秒,sing-box 默认为 10)。"
-#: htdocs/luci-static/resources/homeproxy.js:130
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:326
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:97
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:325
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:210
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:100
+#: htdocs/luci-static/resources/homeproxy-pro.js:130
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:326
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:97
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:325
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:210
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:100
msgid "Direct"
msgstr "直连"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:165
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:165
msgid "Direct Domain List"
msgstr "直连域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:54
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:99
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:54
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:99
msgid "Direct IPv4 IP-s"
msgstr "直连 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:57
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:102
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:57
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:102
msgid "Direct IPv6 IP-s"
msgstr "直连 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:60
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:60
msgid "Direct MAC-s"
msgstr "直连 MAC 地址"
-#: htdocs/luci-static/resources/homeproxy.js:257
-#: htdocs/luci-static/resources/homeproxy.js:270
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:48
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:26
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:54
-#: htdocs/luci-static/resources/view/homeproxy/node.js:93
-#: htdocs/luci-static/resources/view/homeproxy/node.js:468
-#: htdocs/luci-static/resources/view/homeproxy/node.js:739
+#: htdocs/luci-static/resources/homeproxy-pro.js:257
+#: htdocs/luci-static/resources/homeproxy-pro.js:270
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:48
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:26
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:54
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:93
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:468
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:739
msgid "Disable"
msgstr "禁用"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:209
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:209
msgid "Disable (the service)"
msgstr "禁用(服务)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:170
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:170
msgid "Disable Chrome QUIC fingerprint (1.14)"
msgstr "禁用 Chrome QUIC 指纹(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:171
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:171
msgid ""
"Disable Chrome QUIC handshake parroting, which is enabled by default since "
"sing-box 1.14. Turn this on only when the server uses an Ed25519 certificate "
@@ -622,116 +622,116 @@ msgstr ""
"禁用自 sing-box 1.14 起默认开启的 Chrome QUIC 握手伪装。仅在服务器证书为 "
"Ed25519 或握手失败时才需要开启。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:448
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:83
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:448
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:83
msgid "Disable DNS cache"
msgstr "禁用 DNS 缓存"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:449
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:449
msgid "Disable DNS cache in this query."
msgstr "在本次查询中禁用 DNS 缓存。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:425
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:425
msgid "Disable HTTP challenge"
msgstr "禁用 HTTP 验证"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:429
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:429
msgid "Disable TLS ALPN challenge"
msgstr "禁用 TLS ALPN 认证"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:352
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:352
msgid "Disable UDP domain unmapping"
msgstr "禁用 UDP 域名映射"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:200
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:200
msgid "Disable cache and save cache in this query."
msgstr "在本次查询中禁用缓存。"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:85
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:85
msgid "Disable cache expire"
msgstr "缓存永不过期"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:199
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:199
msgid "Disable dns cache"
msgstr "禁用 DNS 缓存"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:242
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:242
msgid "Disable optimistic DNS caching for this query."
msgstr "对此查询禁用乐观 DNS 缓存。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:467
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:467
msgid "Disable optimistic DNS caching in this lookup (1.14)."
msgstr "关闭本次查询解析的乐观 DNS 缓存(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:241
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:466
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:241
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:466
msgid "Disable optimistic cache"
msgstr "禁用乐观缓存"
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:31
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:31
msgid "Disabled"
msgstr "禁用"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:487
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:487
msgid "Domain keyword"
msgstr "域名关键词"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:478
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:478
msgid "Domain name"
msgstr "域名"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:491
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:491
msgid "Domain regex"
msgstr "域名正则表达式"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:58
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:58
msgid "Domain resolver"
msgstr "域名解析器"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:77
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:198
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:77
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:198
msgid "Domain strategy"
msgstr "域名解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:442
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:442
msgid "Domain strategy for resolving the domain names."
msgstr "目标域名的解析策略。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:483
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:483
msgid "Domain suffix"
msgstr "域名后缀"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:332
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:332
msgid "Domains"
msgstr "域名"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:435
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:435
msgid "Don't drop packets"
msgstr "不丢弃数据包"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:287
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:287
msgid "Don't drop requests"
msgstr "不丢弃请求"
-#: htdocs/luci-static/resources/homeproxy.js:178
+#: htdocs/luci-static/resources/homeproxy-pro.js:178
msgid "Download bandwidth"
msgstr "下载带宽"
-#: htdocs/luci-static/resources/homeproxy.js:179
+#: htdocs/luci-static/resources/homeproxy-pro.js:179
msgid "Download bandwidth in Mbps."
msgstr "下载带宽(单位:Mbps)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:431
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:437
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:431
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:437
msgid "Drop packets"
msgstr "丢弃数据包"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:282
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:289
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:282
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:289
msgid "Drop requests"
msgstr "丢弃请求"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:746
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:746
msgid ""
"Drop/keep nodes that contain the specific keywords. 支"
"持正则表达式。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:738
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:738
msgid "Drop/keep specific nodes from subscriptions."
msgstr "从订阅中 丢弃/保留 指定节点"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:446
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:446
msgid ""
"EAB (External Account Binding) contains information necessary to bind or map "
"an ACME account to some other account known by the CA.
External account "
@@ -758,7 +758,7 @@ msgstr ""
"其他帐户所需的信息。
外部帐户绑定“用于将 ACME 帐户与非 ACME 系统中的现有"
"帐户相关联,例如 CA 客户数据库。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:442
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:442
msgid ""
"ECH (Encrypted Client Hello) is a TLS extension that allows a client to "
"encrypt the first part of its ClientHello message."
@@ -767,55 +767,55 @@ msgstr ""
"分。ECH(Encrypted Client Hello)是一个 TLS 扩展,它允许客户端加密其 "
"ClientHello 信息的第一部分。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:462
-#: htdocs/luci-static/resources/view/homeproxy/server.js:590
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:462
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:590
msgid "ECH config"
msgstr "ECH 配置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:446
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:446
msgid "ECH config path"
msgstr "ECH 配置路径"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:549
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:549
msgid "ECH key"
msgstr "ECH 密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:212
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:459
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:88
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:212
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:459
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:88
msgid "EDNS Client subnet"
msgstr "EDNS 客户端子网"
-#: htdocs/luci-static/resources/homeproxy.js:614
+#: htdocs/luci-static/resources/homeproxy-pro.js:614
msgid "Early data"
msgstr "前置数据"
-#: htdocs/luci-static/resources/homeproxy.js:621
+#: htdocs/luci-static/resources/homeproxy-pro.js:621
msgid "Early data header name"
msgstr "前置数据标头"
-#: htdocs/luci-static/resources/homeproxy.js:622
+#: htdocs/luci-static/resources/homeproxy-pro.js:622
msgid "Early data is sent in path instead of header by default."
msgstr "前置数据默认发送在路径而不是标头中。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:568
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:568
msgid "Edit nodes"
msgstr "修改节点"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:344
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:344
msgid "Email"
msgstr "Email"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:53
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:45
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:234
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:44
-#: htdocs/luci-static/resources/view/homeproxy/server.js:168
-#: htdocs/luci-static/resources/view/homeproxy/server.js:190
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:53
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:45
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:234
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:44
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:168
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:190
msgid "Enable"
msgstr "启用"
-#: htdocs/luci-static/resources/homeproxy.js:355
+#: htdocs/luci-static/resources/homeproxy-pro.js:355
msgid ""
"Enable 0-RTT QUIC connection handshake on the client side. This is not "
"impacting much on the performance, as the protocol is fully multiplexed.
强烈建议禁用,因为它容易受到重放攻击。"
-#: htdocs/luci-static/resources/homeproxy.js:354
+#: htdocs/luci-static/resources/homeproxy-pro.js:354
msgid "Enable 0-RTT handshake"
msgstr "启用 0-RTT 握手"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:327
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:327
msgid "Enable ACME"
msgstr "启用 ACME"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:441
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:441
msgid "Enable ECH"
msgstr "启用 ECH"
-#: htdocs/luci-static/resources/homeproxy.js:173
+#: htdocs/luci-static/resources/homeproxy-pro.js:173
msgid "Enable TCP Brutal"
msgstr "启用 TCP Brutal"
-#: htdocs/luci-static/resources/homeproxy.js:174
+#: htdocs/luci-static/resources/homeproxy-pro.js:174
msgid "Enable TCP Brutal congestion control algorithm"
msgstr "启用 TCP Brutal 拥塞控制算法。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:521
-#: htdocs/luci-static/resources/view/homeproxy/server.js:610
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:521
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:610
msgid "Enable UDP fragmentation."
msgstr "启用 UDP 分片。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:395
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:395
msgid "Enable connection reuse (the Snell v2 CONNECT command)."
msgstr "启用连接复用(Snell v2 CONNECT 指令)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:175
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:175
msgid "Enable endpoint-independent NAT"
msgstr "启用端点独立 NAT"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:195
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:195
msgid ""
"Enable neighbor resolution so rules can match LAN devices by hostname (1.14)."
msgstr "启用邻居解析,使规则可按主机名匹配局域网设备(1.14)。"
-#: htdocs/luci-static/resources/homeproxy.js:166
+#: htdocs/luci-static/resources/homeproxy-pro.js:166
msgid "Enable padding"
msgstr "启用填充"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:601
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:601
msgid "Enable tcp fast open for listener."
msgstr "为监听器启用 TCP 快速打开。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:525
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:525
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with multiplex."
msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:177
-#: htdocs/luci-static/resources/view/homeproxy/node.js:263
-#: htdocs/luci-static/resources/view/homeproxy/server.js:284
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:177
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:263
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:284
msgid "Encrypt method"
msgstr "加密方式"
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:27
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:38
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:27
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:38
msgid "Endpoint independent"
msgstr "端点无关"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:182
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:182
msgid "Error"
msgstr "错误"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:170
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:170
msgid "Evaluate (1.14)"
msgstr "Evaluate(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:225
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:225
msgid "Evaluate tag"
msgstr "Evaluate 标签"
-#: htdocs/luci-static/resources/homeproxy.js:220
-#: htdocs/luci-static/resources/homeproxy.js:1035
-#: htdocs/luci-static/resources/homeproxy.js:1085
-#: htdocs/luci-static/resources/homeproxy.js:1098
-#: htdocs/luci-static/resources/homeproxy.js:1117
-#: htdocs/luci-static/resources/homeproxy.js:1126
-#: htdocs/luci-static/resources/homeproxy.js:1137
-#: htdocs/luci-static/resources/homeproxy.js:1146
-#: htdocs/luci-static/resources/homeproxy.js:1148
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:203
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:140
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:152
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:156
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:175
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:190
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:141
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:155
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:112
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:72
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:75
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:80
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:83
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:123
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:126
-#: htdocs/luci-static/resources/view/homeproxy/node.js:484
-#: htdocs/luci-static/resources/view/homeproxy/node.js:727
-#: htdocs/luci-static/resources/view/homeproxy/node.js:730
-#: htdocs/luci-static/resources/view/homeproxy/server.js:350
-#: htdocs/luci-static/resources/view/homeproxy/server.js:352
+#: htdocs/luci-static/resources/homeproxy-pro.js:220
+#: htdocs/luci-static/resources/homeproxy-pro.js:1035
+#: htdocs/luci-static/resources/homeproxy-pro.js:1085
+#: htdocs/luci-static/resources/homeproxy-pro.js:1098
+#: htdocs/luci-static/resources/homeproxy-pro.js:1117
+#: htdocs/luci-static/resources/homeproxy-pro.js:1126
+#: htdocs/luci-static/resources/homeproxy-pro.js:1137
+#: htdocs/luci-static/resources/homeproxy-pro.js:1146
+#: htdocs/luci-static/resources/homeproxy-pro.js:1148
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:158
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:203
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:140
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:152
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:156
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:175
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:186
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:190
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:141
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:155
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:158
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:112
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:72
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:75
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:80
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:83
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:123
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:126
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:484
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:727
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:730
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:350
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:352
msgid "Expecting: %s"
msgstr "请输入:%s"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:445
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:445
msgid "External Account Binding"
msgstr "外部账户绑定"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:457
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:457
msgid "External account MAC key"
msgstr "外部账户 MAC 密钥"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:451
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:451
msgid "External account key ID"
msgstr "外部账户密钥标识符"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:315
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:315
msgid "Extra records"
msgstr "附加记录"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:117
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:117
msgid ""
"Extra rule-set tags sharing these options. Requires {tag} in path/url (1.14)."
msgstr ""
"共享这些选项的额外规则集标签。使用多标签时 path/url 需包含 {tag}(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:116
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:116
msgid "Extra tags"
msgstr "额外标签"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:657
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:657
msgid "Failed to close the import dialog: %s"
msgstr "关闭导入对话框失败:%s"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:93
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:93
msgid "Failed to generate %s, error: %s."
msgstr "生成 %s 失败,错误:%s。"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:124
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:177
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:124
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:177
msgid "Failed to read domain list: %s."
msgstr "读取域名列表失败:%s。"
-#: htdocs/luci-static/resources/homeproxy.js:1075
+#: htdocs/luci-static/resources/homeproxy-pro.js:1075
msgid "Failed to upload %s, error: %s."
msgstr "上传 %s 失败,错误:%s。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:183
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:183
msgid "Fatal"
msgstr "致命"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:745
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:745
msgid "Filter keywords"
msgstr "过滤关键词"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:737
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:737
msgid "Filter nodes"
msgstr "过滤节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:194
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:194
msgid "Find neighbor hosts"
msgstr "发现邻居主机"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:126
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:126
msgid "Firefox / uquic firefox"
msgstr "Firefox / uquic firefox"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:195
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:195
msgid "Firewall"
msgstr "防火墙"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:251
-#: htdocs/luci-static/resources/view/homeproxy/server.js:298
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:251
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:298
msgid "Flow"
msgstr "流控"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:59
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:59
msgid "For resolving domain name in the server address."
msgstr "用于解析服务器地址中的域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:55
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:55
msgid "Format"
msgstr "格式"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:372
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:372
msgid "Fragment TLS handshake into multiple TLS records."
msgstr "将 TLS 握手分片为多个 TLS 记录"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:378
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:378
msgid ""
"Fragment TLS handshakes. Due to poor performance, try %s first."
msgstr "分片 TLS 握手。由于性能较差,请先尝试 %s。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:384
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:384
msgid "Fragment fallback delay"
msgstr "分片回退延迟"
-#: htdocs/luci-static/resources/homeproxy.js:583
+#: htdocs/luci-static/resources/homeproxy-pro.js:583
msgid "GET"
msgstr "GET"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:273
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:273
msgid "GFW list version"
msgstr "GFW 域名列表版本"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:83
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:83
msgid "GFWList"
msgstr "GFWList"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:72
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:72
msgid "Gaming mode IPv4 IP-s"
msgstr "游戏模式 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:74
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:74
msgid "Gaming mode IPv6 IP-s"
msgstr "游戏模式 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:77
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:77
msgid "Gaming mode MAC-s"
msgstr "游戏模式 MAC 地址"
-#: htdocs/luci-static/resources/homeproxy.js:272
+#: htdocs/luci-static/resources/homeproxy-pro.js:272
msgid "Gecko (1.14)"
msgstr "Gecko(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:37
-#: htdocs/luci-static/resources/view/homeproxy/server.js:39
-#: htdocs/luci-static/resources/view/homeproxy/server.js:582
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:37
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:39
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:582
msgid "Generate"
msgstr "生成"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:277
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:277
msgid "GitHub token"
msgstr "GitHub 令牌"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:87
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:87
msgid "Global"
msgstr "全局"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:274
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:274
msgid "Global padding"
msgstr "全局填充"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:79
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:79
msgid "Global proxy IPv4 IP-s"
msgstr "全局代理 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:82
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:82
msgid "Global proxy IPv6 IP-s"
msgstr "全局代理 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:85
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:85
msgid "Global proxy MAC-s"
msgstr "全局代理 MAC 地址"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:166
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:166
msgid "Global settings"
msgstr "全局设置"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:255
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:255
msgid "Google"
msgstr "谷歌"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:129
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:129
msgid "Google Public DNS (8.8.8.8)"
msgstr "谷歌公共 DNS(8.8.8.8)"
-#: root/usr/share/rpcd/acl.d/luci-app-homeproxy.json:3
-msgid "Grant access to homeproxy configuration"
-msgstr "授予 homeproxy 访问 UCI 配置的权限"
+#: root/usr/share/rpcd/acl.d/luci-app-homeproxy-pro.json:3
+msgid "Grant access to homeproxy-pro configuration"
+msgstr "授予 homeproxy-pro 访问 UCI 配置的权限"
-#: htdocs/luci-static/resources/homeproxy.js:132
-#: htdocs/luci-static/resources/homeproxy.js:520
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:94
+#: htdocs/luci-static/resources/homeproxy-pro.js:132
+#: htdocs/luci-static/resources/homeproxy-pro.js:520
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:94
msgid "HTTP"
msgstr "HTTP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:407
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:407
msgid ""
"HTTP Host header sent when obfuscation mode is http. bing.com is used by "
"default."
msgstr "混淆模式为 http 时发送的 HTTP Host 头;默认 bing.com。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:400
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:400
msgid "HTTP obfuscation. v4 only."
msgstr "HTTP 混淆。仅 v4。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:276
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:276
msgid "HTTP obfuscation. v5 only."
msgstr "HTTP 混淆。仅 v5。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:244
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:244
msgid "HTTP/3"
msgstr "HTTP/3"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:257
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:257
msgid ""
"HTTP3 server behavior when authentication fails.
A 404 page will be "
"returned if empty."
msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:243
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:243
msgid "HTTPS"
msgstr "HTTPS"
-#: htdocs/luci-static/resources/homeproxy.js:521
+#: htdocs/luci-static/resources/homeproxy-pro.js:521
msgid "HTTPUpgrade"
msgstr "HTTPUpgrade"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:499
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:499
msgid "Handshake server address"
msgstr "握手服务器地址"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:505
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:505
msgid "Handshake server port"
msgstr "握手服务器端口"
-#: htdocs/luci-static/resources/homeproxy.js:717
+#: htdocs/luci-static/resources/homeproxy-pro.js:717
msgid "Handshake timeout (1.14)"
msgstr "握手超时(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:266
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:266
msgid "Headers"
msgstr "标头"
-#: htdocs/luci-static/resources/homeproxy.js:360
+#: htdocs/luci-static/resources/homeproxy-pro.js:360
msgid "Heartbeat interval"
msgstr "心跳间隔"
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:33
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:33
msgid "Hijack"
msgstr "劫持"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:70
-#: htdocs/luci-static/resources/view/homeproxy/client.js:119
-#: htdocs/luci-static/resources/view/homeproxy/status.js:299
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3
+#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:70
+#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:119
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:299
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:3
msgid "HomeProxy"
msgstr "HomeProxy"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:75
-#: htdocs/luci-static/resources/view/homeproxy/server.js:136
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:75
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:136
msgid "HomeProxy Server"
msgstr "HomeProxy 服务端"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:129
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:129
msgid "Hop interval"
msgstr "跳跃间隔"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:123
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:123
msgid "Hopping port"
msgstr "跳跃端口"
-#: htdocs/luci-static/resources/homeproxy.js:566
-#: htdocs/luci-static/resources/homeproxy.js:571
-#: htdocs/luci-static/resources/homeproxy.js:606
+#: htdocs/luci-static/resources/homeproxy-pro.js:566
+#: htdocs/luci-static/resources/homeproxy-pro.js:571
+#: htdocs/luci-static/resources/homeproxy-pro.js:606
msgid "Host"
msgstr "主机名"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:226
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:226
msgid "Host key"
msgstr "主机密钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:231
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:231
msgid "Host key algorithms"
msgstr "主机密钥算法"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:44
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:44
msgid "Host/IP fields"
msgstr "主机/IP 字段"
-#: htdocs/luci-static/resources/homeproxy.js:347
+#: htdocs/luci-static/resources/homeproxy-pro.js:347
msgid ""
"How long the server should wait for the client to send the authentication "
"command (in seconds)."
msgstr "服务器等待客户端发送认证命令的时间(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:399
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:399
msgid "How the forged segment is rejected by the real server."
msgstr "伪造段被真实服务器拒绝的方式。"
-#: htdocs/luci-static/resources/homeproxy.js:133
+#: htdocs/luci-static/resources/homeproxy-pro.js:133
msgid "Hysteria"
msgstr "Hysteria"
-#: htdocs/luci-static/resources/homeproxy.js:134
+#: htdocs/luci-static/resources/homeproxy-pro.js:134
msgid "Hysteria2"
msgstr "Hysteria2"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:503
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:503
msgid "IP CIDR"
msgstr "IP CIDR"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:80
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:80
msgid "IP version"
msgstr "IP 版本"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:82
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:82
msgid "IPv4"
msgstr "IPv4"
-#: htdocs/luci-static/resources/homeproxy.js:65
+#: htdocs/luci-static/resources/homeproxy-pro.js:65
msgid "IPv4 only"
msgstr "仅 IPv4"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:83
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:83
msgid "IPv6"
msgstr "IPv6"
-#: htdocs/luci-static/resources/homeproxy.js:66
+#: htdocs/luci-static/resources/homeproxy-pro.js:66
msgid "IPv6 only"
msgstr "仅 IPv6"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:135
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:135
msgid "IPv6 support"
msgstr "IPv6 支持"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:100
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:100
msgid "Idle session check interval"
msgstr "空闲会话检查间隔"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:107
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:107
msgid "Idle session check timeout"
msgstr "空闲会话检查超时"
-#: htdocs/luci-static/resources/homeproxy.js:589
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:190
+#: htdocs/luci-static/resources/homeproxy-pro.js:589
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:190
msgid "Idle timeout"
msgstr "空闲超时"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:359
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:359
msgid ""
"If enabled, attempts to connect UDP connection to the destination instead of "
"listen."
msgstr "如果启用,尝试主动连接到目标的 UDP 而不是监听。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:353
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:353
msgid ""
"If enabled, for UDP proxy requests addressed to a domain, the original "
"packet address will be sent in the response instead of the mapped domain."
@@ -1273,18 +1273,18 @@ msgstr ""
"如启用,对于发往域名的 UDP 代理请求,响应中将发送原始数据包地址,而不是映射后"
"的域名。"
-#: htdocs/luci-static/resources/homeproxy.js:561
+#: htdocs/luci-static/resources/homeproxy-pro.js:561
msgid ""
"If enabled, the client transport sends keepalive pings even with no active "
"connections."
msgstr "如果启用,客户端传输即使没有活动连接也会发送 keepalive ping。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:199
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:199
msgid ""
"If set, the requested domain name will be resolved to IP before routing."
msgstr "如果设置,请求的域名将在路由前被解析为 IP 地址。"
-#: htdocs/luci-static/resources/homeproxy.js:24
+#: htdocs/luci-static/resources/homeproxy-pro.js:24
msgid ""
"If the transport doesn't see any activity after a duration of this time (in "
"seconds), it pings the client to check if the connection is still active."
@@ -1293,61 +1293,61 @@ msgstr ""
"是否仍处于活动状态。如果传输在此时间段(单位:秒)后没有看到任何活动,它会向"
"客户端发送 ping 请求以检查连接是否仍然活动。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:421
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:421
msgid ""
"If you have the root certificate, use this option instead of allowing "
"insecure."
msgstr "如果你拥有根证书,使用此选项而不是允许不安全连接。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:251
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:251
msgid "Ignore client bandwidth"
msgstr "忽略客户端带宽"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:662
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:662
msgid "Import"
msgstr "导入"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:589
-#: htdocs/luci-static/resources/view/homeproxy/node.js:682
-#: htdocs/luci-static/resources/view/homeproxy/node.js:684
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:589
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:682
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:684
msgid "Import share links"
msgstr "导入分享链接"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:658
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:658
msgid ""
"Imported the nodes, but the dialog did not close automatically. Close it "
"manually."
msgstr "节点已导入,但对话框未能自动关闭。请手动关闭。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:183
-#: htdocs/luci-static/resources/view/homeproxy/server.js:615
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:183
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:615
msgid "In seconds."
msgstr "单位:秒。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:333
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:333
msgid "In seconds. Disabled by default."
msgstr "单位:秒。默认禁用。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:115
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:115
msgid ""
"In the check, at least the first n idle sessions are kept open."
msgstr "在检查中,至少保持前 n 个空闲会话处于打开状态。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:108
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:108
msgid ""
"In the check, close sessions that have been idle for longer than this, in "
"seconds."
msgstr "在检查中,关闭空闲时间超过此值的会话(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:180
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:180
msgid "Info"
msgstr "信息"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:110
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:110
msgid "Initial path"
msgstr "初始路径"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:392
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:392
msgid ""
"Inject a forged TLS ClientHello carrying this SNI before the real one to "
"fool SNI-filtering middleboxes. Requires elevated privileges."
@@ -1355,60 +1355,60 @@ msgstr ""
"在真实握手前注入携带该 SNI 的伪造 TLS ClientHello,以欺骗按 SNI 过滤的中间"
"盒;需要特权。"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:31
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:31
msgid "Interface Control"
msgstr "接口控制"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:197
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:197
msgid "Interrupt existing connections"
msgstr "中断现有连接"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:198
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:198
msgid "Interrupt existing connections when the selected outbound has changed."
msgstr "当选择的出站发生变化时中断现有连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:101
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:101
msgid "Interval checking for idle sessions, in seconds."
msgstr "空闲会话检查间隔(单位:秒)。"
-#: htdocs/luci-static/resources/homeproxy.js:361
+#: htdocs/luci-static/resources/homeproxy-pro.js:361
msgid ""
"Interval for sending heartbeat packets for keeping the connection alive (in "
"seconds)."
msgstr "发送心跳包以保持连接存活的时间间隔(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:160
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:160
msgid "Invert"
msgstr "反转"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:161
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:161
msgid "Invert match result."
msgstr "反转匹配结果"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:231
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:231
msgid ""
"Judge this response-dependent rule in parallel; first match wins (1.14)."
msgstr "并行判定此响应依赖规则,首个命中即生效(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:530
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:530
msgid "Key path"
msgstr "证书路径"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:45
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:45
msgid "LAN IP Policy"
msgstr "LAN IP 策略"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:48
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:40
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:229
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:39
-#: htdocs/luci-static/resources/view/homeproxy/node.js:51
-#: htdocs/luci-static/resources/view/homeproxy/server.js:184
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:48
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:40
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:229
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:39
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:51
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:184
msgid "Label"
msgstr "标签"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:258
-#: htdocs/luci-static/resources/view/homeproxy/server.js:305
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:258
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:305
msgid ""
"Legacy protocol support (VMess MD5 Authentication) is provided for "
"compatibility purposes only, use of alterId > 1 is not recommended."
@@ -1416,188 +1416,188 @@ msgstr ""
"仅为兼容目的提供旧协议(VMess MD5 认证)支持,不建议使用大于 1 的 alterId。提"
"供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > 1。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:172
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:172
msgid "Less compatibility and sometimes better performance."
msgstr "有时性能更好。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:384
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:384
msgid "Let's Encrypt"
msgstr "Let's Encrypt"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:293
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:293
msgid ""
"List of IP (v4 or v6) addresses prefixes to be assigned to the interface."
msgstr "分配给接口的 IP(v4 或 v6)地址前缀列表。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:128
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:35
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:64
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:128
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:35
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:64
msgid "List of nodes to test."
msgstr "要测试的节点列表。"
-#: htdocs/luci-static/resources/homeproxy.js:678
+#: htdocs/luci-static/resources/homeproxy-pro.js:678
msgid "List of supported application level protocols, in order of preference."
msgstr "支持的应用层协议协商列表,按顺序排列。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:306
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:306
msgid "List of text DNS record to respond as answers."
msgstr "要响应的 DNS 记录列表。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:316
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:316
msgid "List of text DNS record to respond as extra records."
msgstr "要响应的附加 DNS 记录列表。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:311
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:311
msgid "List of text DNS record to respond as name servers."
msgstr "要响应的域名服务器(NS) DNS 记录列表。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:201
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:201
msgid "Listen address"
msgstr "监听地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:33
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:33
msgid "Listen interfaces"
msgstr "监听接口"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:206
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:206
msgid "Listen port"
msgstr "监听端口"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:210
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:210
msgid "Loading"
msgstr "加载中"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:50
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:50
msgid "Local"
msgstr "本地"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:292
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:292
msgid "Local address"
msgstr "本地地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:111
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:111
msgid ""
"Local file with initial rule-set content; avoids blocking startup on first "
"download (1.14)."
msgstr "远程规则集的本地初始内容文件,避免首次下载阻塞启动(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:59
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:59
msgid "Log file does not exist."
msgstr "日志文件不存在。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:55
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:55
msgid "Log is empty."
msgstr "日志为空。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:326
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:326
msgid "MTU"
msgstr "MTU"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:53
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:53
msgid "Main UDP node"
msgstr "主 UDP 节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:25
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:25
msgid "Main node"
msgstr "主节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:157
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:157
msgid "Make IP CIDR in rule set used to match the source IP."
msgstr "使规则集中的 IP CIDR 用于匹配源 IP。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:157
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:157
msgid "Make IP CIDR in rule sets match the source IP."
msgstr "使规则集中的 IP CIDR 匹配源 IP。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:256
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:256
msgid "Masquerade"
msgstr "伪装"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:528
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:528
msgid "Match DNSSEC OK"
msgstr "匹配 DNSSEC OK"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:504
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:504
msgid ""
"Match IP CIDR with the evaluated response (needs match_response; old rules "
"are auto-wrapped in 1.14)."
msgstr ""
"以已评估的响应匹配 IP CIDR(需要 match_response;旧规则在 1.14 自动包装)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:505
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:505
msgid "Match IP CIDR."
msgstr "匹配 IP CIDR。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:514
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:514
msgid "Match LAN device by MAC address."
msgstr "按 MAC 地址匹配局域网设备。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:519
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:519
msgid ""
"Match LAN device hostname via neighbor resolution; enable find_neighbor."
msgstr "通过邻居解析按主机名匹配局域网设备;需启用 find_neighbor。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:484
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:484
msgid "Match domain suffix."
msgstr "匹配域名后缀。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:488
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:488
msgid "Match domain using keyword."
msgstr "使用关键词匹配域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:492
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:492
msgid "Match domain using regular expression."
msgstr "使用正则表达式匹配域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:479
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:479
msgid "Match full domain."
msgstr "匹配完整域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:549
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:549
msgid "Match port range. Format as START:/:END/START:END."
msgstr "匹配端口范围。格式为 START:/:END/START:END。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:544
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:544
msgid "Match port."
msgstr "匹配端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:509
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:509
msgid "Match private IP"
msgstr "匹配私有 IP"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:510
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:510
msgid "Match private IP with the evaluated response (needs match_response)."
msgstr "以已评估的响应匹配私网 IP(需要 match_response)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:500
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:500
msgid "Match private source IP"
msgstr "匹配私有源 IP"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:554
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:554
msgid "Match process name."
msgstr "匹配进程名。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:562
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:562
msgid "Match process path using regular expression."
msgstr "使用正则表达式匹配进程路径。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:558
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:558
msgid "Match process path."
msgstr "匹配进程路径。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:529
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:529
msgid "Match queries with the DNSSEC OK bit set (1.14)."
msgstr "匹配设置了 DNSSEC OK 位的查询(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:115
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:115
msgid "Match query type."
msgstr "匹配请求类型。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:220
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:220
msgid "Match response"
msgstr "匹配响应"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:141
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:141
msgid ""
"Match rule set. DNS: rules referencing rule-sets that contain query_type are "
"incompatible with legacy address filters (ip_cidr / ip_is_private) — use "
@@ -1606,7 +1606,7 @@ msgstr ""
"匹配规则集。DNS:引用含 query_type 规则集的规则与 legacy 地址过滤(ip_cidr / "
"ip_is_private)不兼容——请改用 match_response(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:142
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:142
msgid ""
"Match rule set. Since 1.14: a rule-set holding a single default rule is "
"merged into this rule; any other rule-set matches as an OR collection."
@@ -1614,72 +1614,72 @@ msgstr ""
"匹配规则集。自 1.14:仅含单条 default 规则的规则集字段会合并进本条规则;其余"
"规则集整体按 OR 集合匹配。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:496
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:496
msgid "Match source IP CIDR."
msgstr "匹配源 IP CIDR。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:539
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:539
msgid "Match source port range. Format as START:/:END/START:END."
msgstr "匹配源端口范围。格式为 START:/:END/START:END。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:534
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:534
msgid "Match source port."
msgstr "匹配源端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:524
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:524
msgid "Match the EDNS Client Subnet in the query (1.14)."
msgstr "匹配查询中的 EDNS Client Subnet(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:261
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:261
msgid "Match the evaluated response code (requires match_response)."
msgstr "匹配已评估响应的响应码(需 match_response)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:137
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:137
msgid "Match user name."
msgstr "匹配用户名。"
-#: htdocs/luci-static/resources/homeproxy.js:234
+#: htdocs/luci-static/resources/homeproxy-pro.js:234
msgid "Max download speed"
msgstr "最大下载速度"
-#: htdocs/luci-static/resources/homeproxy.js:235
+#: htdocs/luci-static/resources/homeproxy-pro.js:235
msgid "Max download speed in Mbps."
msgstr "最大下载速度(Mbps)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:137
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:137
msgid "Max hop interval (1.14)"
msgstr "最大跳变间隔(1.14)"
-#: htdocs/luci-static/resources/homeproxy.js:289
+#: htdocs/luci-static/resources/homeproxy-pro.js:289
msgid "Max obfs packet size (1.14)"
msgstr "最大混淆包长(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:37
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:37
msgid "Max time an expired entry may be served. Examples: 3d, 1h."
msgstr "过期缓存项可被乐观返回的最长时间。示例:3d、1h。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:494
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:494
msgid "Max time difference"
msgstr "最大时间差"
-#: htdocs/luci-static/resources/homeproxy.js:241
+#: htdocs/luci-static/resources/homeproxy-pro.js:241
msgid "Max upload speed"
msgstr "最大上传速度"
-#: htdocs/luci-static/resources/homeproxy.js:242
+#: htdocs/luci-static/resources/homeproxy-pro.js:242
msgid "Max upload speed in Mbps."
msgstr "最大上传速度(Mbps)。"
-#: htdocs/luci-static/resources/homeproxy.js:700
+#: htdocs/luci-static/resources/homeproxy-pro.js:700
msgid "Maximum TLS version"
msgstr "最大 TLS 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:354
-#: htdocs/luci-static/resources/view/homeproxy/node.js:368
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:354
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:368
msgid "Maximum connections"
msgstr "最大连接数"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:366
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:366
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1687,739 +1687,739 @@ msgstr ""
"在打开新连接之前,一个连接内允许的最大多路复用流数量。
与 %s"
"code> 和 %s 冲突。"
-#: htdocs/luci-static/resources/homeproxy.js:290
+#: htdocs/luci-static/resources/homeproxy-pro.js:290
msgid "Maximum on-wire packet size in bytes. Gecko only."
msgstr "线上的最大包长(字节)。仅 Gecko 生效。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:138
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:138
msgid ""
"Maximum port hopping interval in seconds; the actual interval is randomized "
"between the two values. Hysteria2 only."
msgstr "最大端口跳变间隔(秒);实际间隔在两者之间随机。仅 Hysteria2。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:365
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:365
msgid "Maximum streams"
msgstr "最大流数量"
-#: htdocs/luci-static/resources/homeproxy.js:581
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:280
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:289
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:429
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:437
+#: htdocs/luci-static/resources/homeproxy-pro.js:581
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:280
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:289
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:429
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:437
msgid "Method"
msgstr "方式"
-#: htdocs/luci-static/resources/homeproxy.js:282
+#: htdocs/luci-static/resources/homeproxy-pro.js:282
msgid "Min obfs packet size (1.14)"
msgstr "最小混淆包长(1.14)"
-#: htdocs/luci-static/resources/homeproxy.js:692
+#: htdocs/luci-static/resources/homeproxy-pro.js:692
msgid "Minimum TLS version"
msgstr "最低 TLS 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:114
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:114
msgid "Minimum idle sessions"
msgstr "最小空闲会话数"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:360
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:360
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr "在打开新连接之前,连接中的最小多路复用流数量。"
-#: htdocs/luci-static/resources/homeproxy.js:283
+#: htdocs/luci-static/resources/homeproxy-pro.js:283
msgid "Minimum on-wire packet size in bytes. Gecko only."
msgstr "线上的最小包长(字节)。仅 Gecko 生效。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:359
-#: htdocs/luci-static/resources/view/homeproxy/node.js:368
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:359
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:368
msgid "Minimum streams"
msgstr "最小流数量"
-#: htdocs/luci-static/resources/homeproxy.js:136
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:157
+#: htdocs/luci-static/resources/homeproxy-pro.js:136
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:157
msgid "Mixed"
msgstr "混合"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:168
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:168
msgid "Mixed system TCP stack and gVisor UDP stack."
msgstr "混合系统 TCP 栈和 gVisor UDP 栈。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:58
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:58
msgid "Mode"
msgstr "模式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:517
-#: htdocs/luci-static/resources/view/homeproxy/server.js:605
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:517
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:605
msgid "MultiPath TCP"
msgstr "多路径 TCP(MPTCP)"
-#: htdocs/luci-static/resources/homeproxy.js:159
+#: htdocs/luci-static/resources/homeproxy-pro.js:159
msgid "Multiplex"
msgstr "多路复用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:345
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:345
msgid "Multiplex protocol."
msgstr "多路复用协议。"
-#: htdocs/luci-static/resources/homeproxy.js:419
+#: htdocs/luci-static/resources/homeproxy-pro.js:419
msgid "NOT RUNNING"
msgstr "未运行"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:766
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:766
msgid "NOTE: Save current settings before updating subscriptions."
msgstr "注意:更新订阅前先保存当前配置。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:310
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:310
msgid "NS"
msgstr "NS"
-#: htdocs/luci-static/resources/homeproxy.js:335
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:32
+#: htdocs/luci-static/resources/homeproxy-pro.js:335
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:32
msgid "Native"
msgstr "原生"
-#: htdocs/luci-static/resources/homeproxy.js:135
+#: htdocs/luci-static/resources/homeproxy-pro.js:135
msgid "NaïveProxy"
msgstr "NaïveProxy"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:105
-#: htdocs/luci-static/resources/view/homeproxy/server.js:621
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:105
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:621
msgid "Network"
msgstr "网络"
-#: htdocs/luci-static/resources/homeproxy.js:324
+#: htdocs/luci-static/resources/homeproxy-pro.js:324
msgid "New Reno"
msgstr "New Reno"
-#: htdocs/luci-static/resources/homeproxy.js:17
+#: htdocs/luci-static/resources/homeproxy-pro.js:17
msgid "No TCP transport, plain HTTP is merged into the HTTP transport."
msgstr "无 TCP 传输层, 纯 HTTP 已合并到 HTTP 传输层。"
-#: htdocs/luci-static/resources/homeproxy.js:19
+#: htdocs/luci-static/resources/homeproxy-pro.js:19
msgid "No additional encryption support: It's basically duplicate encryption."
msgstr "无额外加密支持:它基本上是重复加密。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:783
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:783
msgid "No subscription available"
msgstr "无可用订阅"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:894
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:894
msgid "No subscription node"
msgstr "无订阅节点"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:637
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:637
msgid "No valid share link found."
msgstr "找不到有效分享链接。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:50
-#: htdocs/luci-static/resources/view/homeproxy/node.js:25
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:50
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:25
msgid "Node"
msgstr "节点"
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:22
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:22
msgid "Node Settings"
msgstr "节点设置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:574
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:574
msgid "Nodes"
msgstr "节点"
-#: htdocs/luci-static/resources/homeproxy.js:518
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:286
-#: htdocs/luci-static/resources/view/homeproxy/node.js:252
-#: htdocs/luci-static/resources/view/homeproxy/server.js:299
+#: htdocs/luci-static/resources/homeproxy-pro.js:518
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:286
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:252
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:299
msgid "None"
msgstr "无"
-#: htdocs/luci-static/resources/homeproxy.js:276
+#: htdocs/luci-static/resources/homeproxy-pro.js:276
msgid "Obfuscate password"
msgstr "混淆密码"
-#: htdocs/luci-static/resources/homeproxy.js:269
+#: htdocs/luci-static/resources/homeproxy-pro.js:269
msgid "Obfuscate type"
msgstr "混淆类型"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:406
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:406
msgid "Obfuscation host"
msgstr "混淆主机"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:399
-#: htdocs/luci-static/resources/view/homeproxy/server.js:275
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:399
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:275
msgid "Obfuscation mode"
msgstr "混淆模式"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:114
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:171
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:114
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:171
msgid ""
"One domain per line. No spaces, no comments, no wildcards; the backend "
"rejects invalid characters and tells you which line."
msgstr "每行一个域名。不含空格、注释和通配符;后端会拒绝非法字符并指出所在行。"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:34
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:34
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr "只处理来自指定接口的流量。留空表示全部。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:85
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:85
msgid "Only proxy mainland China"
msgstr "仅代理中国大陆"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:30
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:30
msgid "Optimistic DNS cache"
msgstr "乐观 DNS 缓存"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:36
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:36
msgid "Optimistic cache timeout"
msgstr "乐观缓存超时"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:226
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:226
msgid "Optional tag for this evaluate result."
msgstr "此 evaluate 结果的可选标签。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:390
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:390
msgid "Optional; only required when connecting to a multi-user Snell server."
msgstr "可选;仅在连接多用户 Snell 服务器时需要。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:43
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:43
msgid "Other fields"
msgstr "其他字段"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:320
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:91
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:319
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:93
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:320
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:91
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:319
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:93
msgid "Outbound"
msgstr "出站"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:51
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:51
msgid "Outbound node"
msgstr "出站节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:94
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:94
msgid ""
"Outbound used to download this rule-set (via sing-box 1.14 http_clients)."
msgstr "下载此规则集所使用的出站(经 sing-box 1.14 http_clients 生效)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:338
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:338
msgid "Override address"
msgstr "覆盖地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:472
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:472
msgid "Override dns.timeout for this lookup, in seconds (1.14)."
msgstr "覆盖本次查询解析的 dns.timeout(秒)(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:248
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:248
msgid "Override dns.timeout for this query, in seconds."
msgstr "覆盖本次查询的 dns.timeout,单位秒。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:345
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:345
msgid "Override port"
msgstr "覆盖端口"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:339
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:339
msgid "Override the connection destination address."
msgstr "覆盖目标连接地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:346
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:346
msgid "Override the connection destination port."
msgstr "覆盖目标连接端口。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:376
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:376
msgid "PEM-encoded private key of an existing ACME account (1.14)."
msgstr "已有 ACME 账户的 PEM 编码私钥(1.14)。"
-#: htdocs/luci-static/resources/homeproxy.js:584
+#: htdocs/luci-static/resources/homeproxy-pro.js:584
msgid "PUT"
msgstr "PUT"
-#: htdocs/luci-static/resources/homeproxy.js:630
+#: htdocs/luci-static/resources/homeproxy-pro.js:630
msgid "Packet encoding"
msgstr "数据包编码"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:231
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:231
msgid "Padding scheme"
msgstr "填充方案"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:184
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:184
msgid "Panic"
msgstr "崩溃"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:74
-#: htdocs/luci-static/resources/view/homeproxy/server.js:218
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:74
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:218
msgid "Password"
msgstr "密码"
-#: htdocs/luci-static/resources/homeproxy.js:576
-#: htdocs/luci-static/resources/homeproxy.js:610
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:259
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:61
+#: htdocs/luci-static/resources/homeproxy-pro.js:576
+#: htdocs/luci-static/resources/homeproxy-pro.js:610
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:259
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:61
msgid "Path"
msgstr "路径"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:307
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:307
msgid "Peer pubkic key"
msgstr "对端公钥"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:176
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:176
msgid ""
"Performance may degrade slightly, so it is not recommended to enable on when "
"it is not needed."
msgstr "性能可能会略有下降,建议仅在需要时开启。"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:44
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:44
msgid "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC)."
msgstr "重启后持久化 DNS 缓存(sing-box 1.14,替代 Store RDRC)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:332
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:332
msgid "Persistent keepalive interval"
msgstr "持久 keepalive 间隔"
-#: htdocs/luci-static/resources/homeproxy.js:597
+#: htdocs/luci-static/resources/homeproxy-pro.js:597
msgid "Ping timeout"
msgstr "Ping 超时"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:187
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:187
msgid "Plugin"
msgstr "插件"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:194
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:194
msgid "Plugin opts"
msgstr "插件参数"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:543
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:254
-#: htdocs/luci-static/resources/view/homeproxy/node.js:63
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:543
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:254
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:63
msgid "Port"
msgstr "端口"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:114
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:114
msgid "Port %s alrealy exists!"
msgstr "端口 %s 已存在!"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:45
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:45
msgid "Port fields"
msgstr "端口字段"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:130
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:130
msgid "Port hopping interval in seconds."
msgstr "端口跳跃间隔(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:548
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:548
msgid "Port range"
msgstr "端口范围"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:314
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:314
msgid "Pre-shared key"
msgstr "预共享密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:169
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:169
msgid "Predefined"
msgstr "预定义"
-#: htdocs/luci-static/resources/homeproxy.js:63
+#: htdocs/luci-static/resources/homeproxy-pro.js:63
msgid "Prefer IPv4"
msgstr "优先 IPv4"
-#: htdocs/luci-static/resources/homeproxy.js:64
+#: htdocs/luci-static/resources/homeproxy-pro.js:64
msgid "Prefer IPv6"
msgstr "优先 IPv6"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:235
-#: htdocs/luci-static/resources/view/homeproxy/node.js:299
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:235
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:299
msgid "Private key"
msgstr "私钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:240
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:240
msgid "Private key passphrase"
msgstr "私钥指纹"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:360
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:360
msgid "Private key type for new certificates (1.14). Empty uses the default."
msgstr "新证书的私钥类型(1.14)。留空使用默认值。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:46
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:46
msgid "Process fields"
msgstr "进程字段"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:553
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:553
msgid "Process name"
msgstr "进程名"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:557
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:557
msgid "Process path"
msgstr "进程路径"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:561
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:561
msgid "Process path (regex)"
msgstr "进程路径(正则表达式)"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:88
-#: htdocs/luci-static/resources/view/homeproxy/node.js:144
-#: htdocs/luci-static/resources/view/homeproxy/node.js:344
-#: htdocs/luci-static/resources/view/homeproxy/server.js:237
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:88
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:144
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:344
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:237
msgid "Protocol"
msgstr "协议"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:282
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:282
msgid "Protocol parameter. Enable length block encryption."
msgstr "协议参数。启用长度块加密。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:275
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:275
msgid ""
"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
"default in v2ray and cannot be disabled)."
msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:108
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:108
msgid "Proxy Domain List"
msgstr "代理域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:63
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:92
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:63
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:92
msgid "Proxy IPv4 IP-s"
msgstr "代理 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:66
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:95
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:66
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:95
msgid "Proxy IPv6 IP-s"
msgstr "代理 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:69
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:69
msgid "Proxy MAC-s"
msgstr "代理 MAC 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:50
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:50
msgid "Proxy all except listed"
msgstr "仅允许列表外"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:47
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:47
msgid "Proxy filter mode"
msgstr "代理过滤模式"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:49
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:49
msgid "Proxy listed only"
msgstr "仅允许列表内"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:122
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:122
msgid "Proxy mode"
msgstr "代理模式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:91
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:91
msgid "Proxy protocol"
msgstr "代理协议"
-#: htdocs/luci-static/resources/homeproxy.js:336
-#: htdocs/luci-static/resources/homeproxy.js:522
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:95
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:245
+#: htdocs/luci-static/resources/homeproxy-pro.js:336
+#: htdocs/luci-static/resources/homeproxy-pro.js:522
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:95
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:245
msgid "QUIC"
msgstr "QUIC"
-#: htdocs/luci-static/resources/homeproxy.js:322
+#: htdocs/luci-static/resources/homeproxy-pro.js:322
msgid "QUIC congestion control algorithm."
msgstr "QUIC 拥塞控制算法。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:523
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:523
msgid "Query EDNS client subnet"
msgstr "查询 EDNS Client Subnet"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:247
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:471
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:247
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:471
msgid "Query timeout"
msgstr "查询超时"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:114
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:114
msgid "Query type"
msgstr "请求类型"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:293
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:293
msgid "RCode"
msgstr "RCode"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:96
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:96
msgid "RDP"
msgstr "RDP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:495
-#: htdocs/luci-static/resources/view/homeproxy/server.js:464
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:495
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:464
msgid "REALITY"
msgstr "REALITY"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:469
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:469
msgid "REALITY private key"
msgstr "REALITY 私钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:500
-#: htdocs/luci-static/resources/view/homeproxy/server.js:485
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:500
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:485
msgid "REALITY public key"
msgstr "REALITY 公钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:506
-#: htdocs/luci-static/resources/view/homeproxy/server.js:489
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:506
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:489
msgid "REALITY short ID"
msgstr "REALITY 标识符"
-#: htdocs/luci-static/resources/homeproxy.js:417
+#: htdocs/luci-static/resources/homeproxy-pro.js:417
msgid "RUNNING"
msgstr "运行中"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:230
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:230
msgid "Race"
msgstr "并行竞争"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:222
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:222
msgid "Random version will be used if empty."
msgstr "如留空,则使用随机版本。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:119
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:119
msgid "Recursive outbound detected!"
msgstr "检测到递归出站!"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:305
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:305
msgid "Recursive resolver detected!"
msgstr "检测到递归解析器!"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:123
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:123
msgid "Redirect TCP"
msgstr "Redirect TCP"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:125
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:125
msgid "Redirect TCP + TProxy UDP"
msgstr "Redirect TCP + TProxy UDP"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:127
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:127
msgid "Redirect TCP + Tun UDP"
msgstr "Redirect TCP + Tun UDP"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:236
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:236
msgid "Refresh every %s seconds."
msgstr "每 %s 秒刷新。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:414
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:414
msgid "Region ID"
msgstr "区域 ID"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:167
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:167
msgid "Reject"
msgstr "拒绝"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:51
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:51
msgid "Remote"
msgstr "远程"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:891
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:891
msgid "Remove %s nodes"
msgstr "移除 %s 个节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:254
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:254
msgid "Remove EDNS client subnet"
msgstr "移除 EDNS Client Subnet"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:881
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:881
msgid "Remove all nodes from subscriptions"
msgstr "移除所有订阅节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:255
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:255
msgid "Remove the edns0-subnet record from the query (1.14)."
msgstr "从查询中移除 edns0-subnet 记录(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:281
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:281
msgid "Reply with REFUSED"
msgstr "回复 REFUSED"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:430
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:430
msgid "Reply with TCP RST / ICMP port unreachable"
msgstr "回复 TCP RST / ICMP 端口不可达"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:321
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:321
msgid "Reserved field bytes"
msgstr "保留字段字节"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:172
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:172
msgid "Resolve"
msgstr "解析"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:441
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:441
msgid "Resolve strategy"
msgstr "解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:258
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:258
msgid "Resources management"
msgstr "资源管理"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:272
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:272
msgid "Response NS"
msgstr "响应 NS 记录"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:260
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:260
msgid "Response RCode"
msgstr "响应 RCode"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:267
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:267
msgid "Response answer"
msgstr "响应 Answer 记录"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:276
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:276
msgid "Response extra"
msgstr "响应 Extra 记录"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:31
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:31
msgid ""
"Return expired cache immediately and refresh in background (sing-box 1.14)."
msgstr "立即返回已过期缓存并在后台刷新(sing-box 1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:635
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:635
msgid "Reuse address"
msgstr "复用地址"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:636
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:636
msgid "Reuse listener address."
msgstr "复用监听地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:205
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:453
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:205
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:453
msgid "Rewrite TTL"
msgstr "重写 TTL"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:206
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:454
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:206
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:454
msgid "Rewrite TTL in DNS responses."
msgstr "在 DNS 响应中重写 TTL。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:165
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:165
msgid "Route"
msgstr "路由"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:166
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:166
msgid "Route options"
msgstr "路由选项"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:23
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:23
msgid "Routing Nodes"
msgstr "路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:25
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:25
msgid "Routing Rules"
msgstr "路由规则"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:23
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:23
msgid "Routing Settings"
msgstr "路由设置"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:82
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:82
msgid "Routing mode"
msgstr "路由模式"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:32
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:32
msgid "Routing node"
msgstr "路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:102
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:102
msgid "Routing ports"
msgstr "路由端口"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:34
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:34
msgid "Routing rule"
msgstr "路由规则"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:22
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:22
msgid "Rule Set"
msgstr "规则集"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:140
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:31
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:140
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:31
msgid "Rule set"
msgstr "规则集"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:156
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:156
msgid "Rule set IP CIDR as source IP"
msgstr "规则集 IP CIDR 作为源 IP"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:68
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:68
msgid "Rule set URL"
msgstr "规则集 URL"
-#: htdocs/luci-static/resources/homeproxy.js:141
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:97
+#: htdocs/luci-static/resources/homeproxy-pro.js:141
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:97
msgid "SSH"
msgstr "SSH"
-#: htdocs/luci-static/resources/homeproxy.js:421
+#: htdocs/luci-static/resources/homeproxy-pro.js:421
msgid "STATUS UNKNOWN"
msgstr "状态未知"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:98
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:98
msgid "STUN"
msgstr "STUN"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:530
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:530
msgid "SUoT version"
msgstr "SUoT 版本"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:128
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:128
msgid "Safari / Apple Network API"
msgstr "Safari / Apple Network API"
-#: htdocs/luci-static/resources/homeproxy.js:271
+#: htdocs/luci-static/resources/homeproxy-pro.js:271
msgid "Salamander"
msgstr "Salamander"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:55
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:55
msgid "Same as main node"
msgstr "保持与主节点一致"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:284
-#: htdocs/luci-static/resources/view/homeproxy/status.js:290
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:284
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:290
msgid "Save"
msgstr "保存"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:768
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:768
msgid "Save current settings"
msgstr "保存当前设置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:765
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:765
msgid "Save subscriptions settings"
msgstr "保存订阅设置"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:236
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:236
msgid "Send the query before pending race rules are judged (1.14)."
msgstr "在待定 race 规则判定前即发送查询(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:179
-#: htdocs/luci-static/resources/view/homeproxy/server.js:176
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:179
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:176
msgid "Server"
msgstr "服务器"
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:30
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:30
msgid "Server Settings"
msgstr "服务器设置"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:339
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:339
msgid ""
"Server name to use when choosing a certificate if the ClientHello's "
"ServerName field is empty."
msgstr "当 ClientHello 的 ServerName 字段为空时,选择证书所使用的服务器名称。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:171
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:171
msgid "Server settings"
msgstr "服务器设置"
-#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:38
+#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:38
msgid "Service Status"
msgstr "服务状态"
-#: htdocs/luci-static/resources/homeproxy.js:138
+#: htdocs/luci-static/resources/homeproxy-pro.js:138
msgid "ShadowTLS"
msgstr "ShadowTLS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:201
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:201
msgid "ShadowTLS version"
msgstr "ShadowTLS 版本"
-#: htdocs/luci-static/resources/homeproxy.js:137
+#: htdocs/luci-static/resources/homeproxy-pro.js:137
msgid "Shadowsocks"
msgstr "Shadowsocks"
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:29
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:29
msgid ""
"Since sing-box 1.14 the default (Unset) behaves as hijack: sing-box sets the "
"platform interface DNS and hijacks port 53. On OpenWrt this overlaps with "
@@ -2430,20 +2430,20 @@ msgstr ""
"持 53 端口。OpenWrt 下这会与本插件自身的 dnsmasq/nftables DNS 劫持叠加,网关"
"建议保持 Disabled,除非需要 sing-box 全权接管 TUN 内 DNS。"
-#: htdocs/luci-static/resources/homeproxy.js:139
+#: htdocs/luci-static/resources/homeproxy-pro.js:139
msgid "Snell (1.14)"
msgstr "Snell(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:376
-#: htdocs/luci-static/resources/view/homeproxy/server.js:263
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:376
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:263
msgid "Snell version"
msgstr "Snell 版本"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:124
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:124
msgid "Sniffed client type (QUIC client type or SSH client name)."
msgstr "嗅探到的客户端类型(QUIC 客户端类型或 SSH 客户端名称)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:89
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:89
msgid ""
"Sniffed protocol, see Sniff for details."
@@ -2451,60 +2451,60 @@ msgstr ""
"嗅探到的协议,详情请参阅 嗅探。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:143
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:143
msgid "Sniffer: advanced mode (100ms, universal list)"
msgstr "嗅探:进阶模式(100ms,全协议列表)"
-#: htdocs/luci-static/resources/homeproxy.js:140
+#: htdocs/luci-static/resources/homeproxy-pro.js:140
msgid "Socks"
msgstr "Socks"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:211
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:211
msgid "Socks version"
msgstr "Socks 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:212
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:212
msgid "Socks4"
msgstr "Socks4"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:213
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:213
msgid "Socks4A"
msgstr "Socks4A"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:214
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:214
msgid "Socks5"
msgstr "Socks5"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:495
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:495
msgid "Source IP CIDR"
msgstr "源 IP CIDR"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:513
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:513
msgid "Source MAC address"
msgstr "来源 MAC 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:57
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:57
msgid "Source file"
msgstr "源文件"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:518
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:518
msgid "Source hostname"
msgstr "来源主机名"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:533
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:533
msgid "Source port"
msgstr "源端口"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:538
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:538
msgid "Source port range"
msgstr "源端口范围"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:411
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:411
msgid ""
"Specifies DNS server tag to use instead of selecting through DNS routing."
msgstr "指定使用的 DNS 服务器,而不是通过 DNS 规则选择。"
-#: htdocs/luci-static/resources/homeproxy.js:21
+#: htdocs/luci-static/resources/homeproxy-pro.js:21
msgid ""
"Specifies the period of time (in seconds) after which a health check will be "
"performed using a ping frame if no frames have been received on the "
@@ -2516,7 +2516,7 @@ msgstr ""
"意,ping 响应被视为已接收的帧,因此如果连接上没有其他流量,则每隔该时间间隔执"
"行一次健康检查。"
-#: htdocs/luci-static/resources/homeproxy.js:23
+#: htdocs/luci-static/resources/homeproxy-pro.js:23
msgid ""
"Specifies the time (in seconds) until idle clients should be closed with a "
"GOAWAY frame. PING frames are not considered as activity."
@@ -2524,7 +2524,7 @@ msgstr ""
"指定空闲客户端应在多久(单位:秒)内以 GOAWAY 帧关闭。PING 帧不计为活动。指定"
"闲置客户端应在多长时间(单位:秒)内使用 GOAWAY 帧关闭。PING 帧不被视为活动。"
-#: htdocs/luci-static/resources/homeproxy.js:26
+#: htdocs/luci-static/resources/homeproxy-pro.js:26
msgid ""
"Specifies the timeout duration (in seconds) after sending a PING frame, "
"within which a response must be received.
If a response to the PING "
@@ -2536,66 +2536,66 @@ msgstr ""
"秒)内必须接收到响应。
如果在指定的超时时间内没有收到 PING 帧的响应,则连"
"接将关闭。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:103
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:103
msgid ""
"Specify target ports to be proxied. Multiple ports must be separated by "
"commas."
msgstr "指定需要被代理的目标端口。多个端口必须用逗号隔开。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:235
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:235
msgid "Speculative"
msgstr "抢先查询"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:164
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:164
msgid "Standard (default)"
msgstr "标准(默认)"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:43
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:43
msgid "Store DNS cache"
msgstr "存储 DNS 缓存"
-#: htdocs/luci-static/resources/homeproxy.js:259
+#: htdocs/luci-static/resources/homeproxy-pro.js:259
msgid "String"
msgstr "字符串"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:693
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:693
msgid "Sub (%s)"
msgstr "订阅(%s)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:720
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:720
msgid "Subscription URL-s"
msgstr "订阅地址"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:857
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:857
msgid "Subscription update did not complete cleanly. Last log:"
msgstr "订阅更新未正常完成。最新日志:"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:805
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:805
msgid ""
"Subscription update is already running. This page will reload when the "
"previous run finishes."
msgstr "订阅更新已在运行中。本次页面会在上轮更新完成后自动刷新。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:867
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:867
msgid ""
"Subscription update is taking longer than 90 seconds. Check the log and "
"reload manually."
msgstr "订阅更新耗时已超过 90 秒。请查看日志并手动刷新页面。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:704
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:704
msgid "Subscriptions"
msgstr "订阅"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:639
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:639
msgid "Successfully imported %s nodes of total %s."
msgstr "成功导入 %s 个节点,共 %s 个。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:120
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:120
msgid "Successfully updated."
msgstr "更新成功。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:590
-#: htdocs/luci-static/resources/view/homeproxy/node.js:721
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:590
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:721
msgid ""
"Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) "
"online configuration delivery standard."
@@ -2603,96 +2603,96 @@ msgstr ""
"支持 Hysteria、Shadowsocks、Trojan、v2rayN(VMess)和 XTLS(VLESS)在线配置交"
"付标准。"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:125
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:125
msgid ""
"Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified."
msgstr "支持 UDP、TCP、DoH、DoQ、DoT。如未指定则使用 TCP 协议。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:160
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:160
msgid "System"
msgstr "系统"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:418
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:72
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:66
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:288
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:229
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:186
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:418
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:72
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:66
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:288
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:229
msgid "System DNS"
msgstr "系统 DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:106
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:241
-#: htdocs/luci-static/resources/view/homeproxy/server.js:622
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:106
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:241
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:622
msgid "TCP"
msgstr "TCP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:514
-#: htdocs/luci-static/resources/view/homeproxy/server.js:600
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:514
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:600
msgid "TCP fast open"
msgstr "TCP 快速打开"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:154
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:154
msgid "TCP/IP stack"
msgstr "TCP/IP 协议栈"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:155
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:155
msgid "TCP/IP stack."
msgstr "TCP/IP 协议栈。"
-#: htdocs/luci-static/resources/homeproxy.js:650
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:99
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:242
+#: htdocs/luci-static/resources/homeproxy-pro.js:650
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:99
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:242
msgid "TLS"
msgstr "TLS"
-#: htdocs/luci-static/resources/homeproxy.js:677
+#: htdocs/luci-static/resources/homeproxy-pro.js:677
msgid "TLS ALPN"
msgstr "TLS ALPN"
-#: htdocs/luci-static/resources/homeproxy.js:672
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:272
+#: htdocs/luci-static/resources/homeproxy-pro.js:672
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:272
msgid "TLS SNI"
msgstr "TLS SNI"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:377
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:377
msgid "TLS fragment"
msgstr "TLS 分片"
-#: htdocs/luci-static/resources/homeproxy.js:718
+#: htdocs/luci-static/resources/homeproxy-pro.js:718
msgid "TLS handshake timeout in seconds. 15s is used by default."
msgstr "TLS 握手超时(秒)。默认 15 秒。"
-#: htdocs/luci-static/resources/homeproxy.js:18
+#: htdocs/luci-static/resources/homeproxy-pro.js:18
msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used."
msgstr "不强制执行 TLS。如未配置 TLS,将使用纯 HTTP 1.1。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:371
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:379
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:371
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:379
msgid "TLS record fragment"
msgstr "TLS 记录分片"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:391
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:391
msgid "TLS spoof SNI (1.14)"
msgstr "TLS spoof SNI(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:398
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:398
msgid "TLS spoof method (1.14)"
msgstr "TLS spoof 方式(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:26
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:26
msgid "TUN DNS"
msgstr "TUN DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:39
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:39
msgid "TUN DNS addresses (1.14)"
msgstr "TUN DNS 地址(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:28
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:28
msgid "TUN DNS mode (1.14)"
msgstr "TUN DNS 模式(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:281
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:281
msgid ""
"Tag of a another server to resolve the domain name in the address. Required "
"if address contains domain."
@@ -2700,69 +2700,69 @@ msgstr ""
"用于解析地址中域名的另一个服务器的标签。如果地址包含域名,则必填。用于解析本 "
"DNS 服务器的域名的另一个 DNS 服务器的标签。如果服务器地址包括域名则必须。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:320
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:320
msgid "Tag of an outbound for connecting to the dns server."
msgstr "用于连接到 DNS 服务器的出站标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:180
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:180
msgid "Tag of the target dns server."
msgstr "目标 DNS 服务器标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:321
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:321
msgid "Tag of the target outbound."
msgstr "目标出站标签。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:252
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:252
msgid ""
"Tell the client to use the BBR flow control algorithm instead of Hysteria CC."
msgstr "让客户端使用 BBR 流控算法。"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:132
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:167
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:132
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:167
msgid "Tencent Public DNS (119.29.29.29)"
msgstr "腾讯公共 DNS(119.29.29.29)"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:147
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:147
msgid "Test URL"
msgstr "测试 URL"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:167
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:41
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:70
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:167
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:41
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:70
msgid "Test interval"
msgstr "测试间隔"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:175
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:175
msgid "Test interval must be less or equal than idle timeout."
msgstr "测试间隔时间必须小于或等于空闲超时时间。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:183
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:47
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:76
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:183
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:47
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:76
msgid "Test tolerance"
msgstr "测试容差"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:268
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:268
msgid "Text DNS records to match in the evaluated answer."
msgstr "用于匹配已评估 Answer 的文本 DNS 记录。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:383
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:383
msgid "The ACME CA provider to use."
msgstr "使用的 ACME CA 颁发机构。"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:62
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:62
msgid "The DNS strategy for resolving the domain name in the address."
msgstr "解析域名的默认策略。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:148
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:148
msgid "The URL to test."
msgstr "用于测试的 URL。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:250
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:250
msgid "The address of the dns server."
msgstr "DNS 服务器的地址。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:434
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:434
msgid ""
"The alternate port to use for the ACME HTTP challenge; if non-empty, this "
"port will be used instead of 80 to spin up a listener for the HTTP challenge."
@@ -2771,7 +2771,7 @@ msgstr ""
"战监听。用于 ACME HTTP 质询的备用端口;如果非空,将使用此端口而不是 80 来启"
"动 HTTP 质询的侦听器。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:440
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:440
msgid ""
"The alternate port to use for the ACME TLS-ALPN challenge; the system must "
"forward 443 to this port for challenge to succeed."
@@ -2779,7 +2779,7 @@ msgstr ""
"用于 ACME TLS-ALPN 挑战的备用端口;系统必须将 443 转发到此端口,挑战才能成"
"功。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:66
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:66
msgid ""
"The default rule uses the following matching logic:
(domain || "
"domain_suffix || domain_keyword || domain_regex || ip_cidr || "
@@ -2796,7 +2796,7 @@ msgstr ""
"source_port_range) &&
其他字段。
此外,包含的规则"
"集可视为合并项,而非单一规则的子项。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:59
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:59
msgid ""
"The default rule uses the following matching logic:
(domain || "
"domain_suffix || domain_keyword || domain_regex) &&
(port "
@@ -2811,121 +2811,121 @@ msgstr ""
">(source_port || source_port_range) &&
其他字段"
"code>。
此外,包含的规则集可视为合并项,而非单一规则的子项。"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:163
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:163
msgid ""
"The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT."
msgstr "用于解析国内域名的 DNS 服务器。支持 UDP、TCP、DoH、DoQ、DoT。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:78
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:313
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:78
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:313
msgid "The domain strategy for resolving the domain name in the address."
msgstr "用于解析本 DNS 服务器的域名的策略。"
-#: htdocs/luci-static/resources/homeproxy.js:709
+#: htdocs/luci-static/resources/homeproxy-pro.js:709
msgid ""
"The elliptic curves that will be used in an ECDHE handshake, in preference "
"order. If empty, the default will be used."
msgstr "将在 ECDHE 握手中使用的椭圆曲线,按优先顺序排列。留空使用默认值。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:345
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:345
msgid ""
"The email address to use when creating or selecting an existing ACME server "
"account."
msgstr "创建或选择现有 ACME 服务器帐户时使用的电子邮件地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:385
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:385
msgid ""
"The fallback value in milliseconds used when TLS segmentation cannot "
"automatically determine the wait time."
msgstr "当 TLS 分段无法自动确定等待时间时使用的回退值(单位:毫秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:191
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:191
msgid "The idle timeout in seconds."
msgstr "空闲超时时间(单位:秒)。"
-#: htdocs/luci-static/resources/homeproxy.js:701
+#: htdocs/luci-static/resources/homeproxy-pro.js:701
msgid "The maximum TLS version that is acceptable."
msgstr "可接受的最高 TLS 版本。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:495
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:495
msgid "The maximum time difference between the server and the client."
msgstr "服务器和客户端之间的最大时间差。"
-#: htdocs/luci-static/resources/homeproxy.js:693
+#: htdocs/luci-static/resources/homeproxy-pro.js:693
msgid "The minimum TLS version that is acceptable."
msgstr "可接受的最低 TLS 版本。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:120
-#: htdocs/luci-static/resources/view/homeproxy/server.js:137
+#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:120
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:137
msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64."
msgstr "为 ARM64/AMD64 设计的现代 ImmortalWrt 代理平台。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:85
-#: htdocs/luci-static/resources/view/homeproxy/server.js:630
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:85
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:630
msgid "The network interface to bind to."
msgstr "绑定到的网络接口。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:260
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:260
msgid "The path of the DNS server."
msgstr "DNS 服务器的路径。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:447
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:447
msgid ""
"The path to the ECH config, in PEM format. If empty, load from DNS will be "
"attempted."
msgstr "PEM 格式的 ECH 配置路径。如果为空,将尝试从 DNS 加载。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:426
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:426
msgid "The path to the server certificate, in PEM format."
msgstr "服务端证书路径,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:207
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:207
msgid "The port must be unique."
msgstr "必须是唯一端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:255
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:255
msgid "The port of the DNS server."
msgstr "DNS 服务器的端口。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:264
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:264
msgid "The pre-shared key (password) above must be 12-255 bytes for v6."
msgstr "v6 下,上方的预共享密钥(密码)长度须为 12-255 字节。"
-#: htdocs/luci-static/resources/homeproxy.js:850
+#: htdocs/luci-static/resources/homeproxy-pro.js:850
msgid "The request %s failed: %s."
msgstr "请求 %s 失败:%s。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:294
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:294
msgid "The response code."
msgstr "响应代码。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:531
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:531
msgid "The server private key, in PEM format."
msgstr "服务端私钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:512
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:512
msgid "The server public key, in PEM format."
msgstr "服务端公钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:92
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:92
msgid ""
"The tag of the upstream outbound.
Other dial fields will be ignored when "
"enabled."
msgstr "上游出站的标签。
启用时,其他拨号字段将被忽略。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:168
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:42
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:71
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:168
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:42
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:71
msgid "The test interval in seconds."
msgstr "测试间隔时间(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:184
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:48
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:77
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:184
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:48
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:77
msgid "The test tolerance in milliseconds."
msgstr "测试容差时间(单位:毫秒)。"
-#: htdocs/luci-static/resources/homeproxy.js:28
+#: htdocs/luci-static/resources/homeproxy-pro.js:28
msgid ""
"The timeout (in seconds) that after performing a keepalive check, the client "
"will wait for activity. If no activity is detected, the connection will be "
@@ -2935,8 +2935,8 @@ msgstr ""
"关闭。经过一段时间(单位:秒)之后,客户端将执行 keepalive 检查并等待活动。如"
"果没有检测到任何活动,则会关闭连接。"
-#: htdocs/luci-static/resources/homeproxy.js:686
-#: htdocs/luci-static/resources/view/homeproxy/node.js:756
+#: htdocs/luci-static/resources/homeproxy-pro.js:686
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:756
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
@@ -2944,7 +2944,7 @@ msgstr ""
"这非常危险,你的流量几乎等同于明文!风险自"
"负!"
-#: htdocs/luci-static/resources/homeproxy.js:341
+#: htdocs/luci-static/resources/homeproxy-pro.js:341
msgid ""
"This is the TUIC port of the UDP over TCP protocol, designed to provide a "
"QUIC stream based UDP relay mode that TUIC does not provide."
@@ -2952,211 +2952,211 @@ msgstr ""
"这是 UDP over TCP 协议的 TUIC 版本,旨在提供 TUIC 本身不具备的基于 QUIC 流的 "
"UDP 中继模式。"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:133
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:168
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:133
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:168
msgid "ThreatBook Public DNS (117.50.10.10)"
msgstr "微步在线公共 DNS(117.50.10.10)"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:365
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:365
msgid ""
"Timeout for UDP connections.
Setting a larger value than the UDP timeout "
"in inbounds will have no effect."
msgstr "UDP 连接的超时时间。
设置比入站的 UDP 超时更大的值将无效。"
-#: htdocs/luci-static/resources/homeproxy.js:624
+#: htdocs/luci-static/resources/homeproxy-pro.js:624
msgid ""
"To be compatible with Xray-core, set this to Sec-WebSocket-Protocol"
"code>."
msgstr ""
"要与 Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:130
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:130
msgid ""
"To enable Tun support, you need to install ip-full and "
"kmod-tun"
msgstr ""
"要启用 Tun 支持,你需要安装 ip-full 和 kmod-tun。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:178
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:178
msgid "Trace"
msgstr "跟踪"
-#: htdocs/luci-static/resources/homeproxy.js:517
+#: htdocs/luci-static/resources/homeproxy-pro.js:517
msgid "Transport"
msgstr "传输层"
-#: htdocs/luci-static/resources/homeproxy.js:142
+#: htdocs/luci-static/resources/homeproxy-pro.js:142
msgid "Trojan"
msgstr "Trojan"
-#: htdocs/luci-static/resources/homeproxy.js:143
+#: htdocs/luci-static/resources/homeproxy-pro.js:143
msgid "Tuic"
msgstr "Tuic"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:128
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:128
msgid "Tun TCP/UDP"
msgstr "Tun TCP/UDP"
-#: htdocs/luci-static/resources/homeproxy.js:461
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:239
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:49
+#: htdocs/luci-static/resources/homeproxy-pro.js:461
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:239
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:49
msgid "Type"
msgstr "类型"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:107
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:240
-#: htdocs/luci-static/resources/view/homeproxy/server.js:623
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:107
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:240
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:623
msgid "UDP"
msgstr "UDP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:520
-#: htdocs/luci-static/resources/view/homeproxy/server.js:609
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:520
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:609
msgid "UDP Fragment"
msgstr "UDP 分片"
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:24
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:24
msgid "UDP NAT Settings"
msgstr "UDP NAT 设置"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:182
-#: htdocs/luci-static/resources/view/homeproxy/server.js:614
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:182
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:614
msgid "UDP NAT expiration time"
msgstr "UDP NAT 过期时间"
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:37
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:37
msgid "UDP NAT filtering (1.14)"
msgstr "UDP NAT 过滤(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:26
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:26
msgid "UDP NAT mapping (1.14)"
msgstr "UDP NAT 映射(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:48
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:48
msgid "UDP NAT sessions max (1.14)"
msgstr "UDP NAT 会话数上限(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:524
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:524
msgid "UDP over TCP"
msgstr "UDP over TCP"
-#: htdocs/luci-static/resources/homeproxy.js:340
+#: htdocs/luci-static/resources/homeproxy-pro.js:340
msgid "UDP over stream"
msgstr "UDP over stream"
-#: htdocs/luci-static/resources/homeproxy.js:333
+#: htdocs/luci-static/resources/homeproxy-pro.js:333
msgid "UDP packet relay mode."
msgstr "UDP 包中继模式。"
-#: htdocs/luci-static/resources/homeproxy.js:332
+#: htdocs/luci-static/resources/homeproxy-pro.js:332
msgid "UDP relay mode"
msgstr "UDP 中继模式"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:364
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:364
msgid "UDP timeout"
msgstr "UDP 超时"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:52
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:27
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:56
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:52
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:27
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:56
msgid "URLTest"
msgstr "URLTest"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:127
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:34
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:63
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:127
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:34
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:63
msgid "URLTest nodes"
msgstr "URLTest 节点"
-#: htdocs/luci-static/resources/homeproxy.js:309
+#: htdocs/luci-static/resources/homeproxy-pro.js:309
msgid "UUID"
msgstr "UUID"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:132
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:132
msgid "Unknown error."
msgstr "未知错误。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:61
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:61
msgid "Unknown error: %s"
msgstr "未知错误:%s"
-#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:30
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:30
msgid "Unset (default)"
msgstr "不设置(默认)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:488
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:488
msgid "Unsupported fingerprint!"
msgstr "不支持的指纹!"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:780
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:780
msgid "Update %s subscriptions"
msgstr "更新 %s 个订阅"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:123
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:123
msgid "Update failed."
msgstr "更新失败。"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:132
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:132
msgid "Update interval"
msgstr "更新间隔"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:133
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:133
msgid "Update interval of rule set."
msgstr "规则集更新间隔。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:775
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:775
msgid "Update nodes from subscriptions"
msgstr "从订阅更新节点"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:717
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:717
msgid "Update subscriptions via proxy."
msgstr "使用代理更新订阅。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:710
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:710
msgid "Update time"
msgstr "更新时间"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:716
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:716
msgid "Update via proxy"
msgstr "使用代理更新"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:813
-#: htdocs/luci-static/resources/view/homeproxy/node.js:825
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:813
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:825
msgid "Updating subscriptions…"
msgstr "正在更新订阅…"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:457
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:457
msgid "Upload ECH config"
msgstr "上传 ECH 配置"
-#: htdocs/luci-static/resources/homeproxy.js:184
+#: htdocs/luci-static/resources/homeproxy-pro.js:184
msgid "Upload bandwidth"
msgstr "上传带宽"
-#: htdocs/luci-static/resources/homeproxy.js:185
+#: htdocs/luci-static/resources/homeproxy-pro.js:185
msgid "Upload bandwidth in Mbps."
msgstr "上传带宽(单位:Mbps)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:433
-#: htdocs/luci-static/resources/view/homeproxy/server.js:522
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:433
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:522
msgid "Upload certificate"
msgstr "上传证书"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:541
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:541
msgid "Upload key"
msgstr "上传密钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:436
-#: htdocs/luci-static/resources/view/homeproxy/node.js:460
-#: htdocs/luci-static/resources/view/homeproxy/server.js:525
-#: htdocs/luci-static/resources/view/homeproxy/server.js:544
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:436
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:460
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:525
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:544
msgid "Upload..."
msgstr "上传..."
-#: htdocs/luci-static/resources/view/homeproxy/server.js:328
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:328
msgid "Use ACME TLS certificate issuer."
msgstr "使用 ACME TLS 证书颁发机构。"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:144
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:144
msgid ""
"Use the tutorial-recommended sniffer profile (100ms timeout, http/tls/stun/"
"quic/dns). Default keeps the 300ms / unconstrained-list behaviour."
@@ -3164,182 +3164,182 @@ msgstr ""
"使用教程推荐的嗅探配置(100ms 超时,http/tls/stun/quic/dns)。默认保留 300ms "
"/ 不限定协议列表的行为。"
-#: htdocs/luci-static/resources/homeproxy.js:673
+#: htdocs/luci-static/resources/homeproxy-pro.js:673
msgid ""
"Used to verify the hostname on the returned certificates unless insecure is "
"given."
msgstr "用于验证返回证书上的主机名。如允许不安全连接,此配置无效。"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:273
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:273
msgid "Used to verify the hostname on the returned certificates."
msgstr "用于验证返回证书上的主机名。"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:136
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:136
msgid "User"
msgstr "用户"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:389
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:389
msgid "User key"
msgstr "用户密钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:750
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:750
msgid "User-Agent"
msgstr "用户代理"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:68
-#: htdocs/luci-static/resources/view/homeproxy/server.js:211
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:68
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:211
msgid "Username"
msgstr "用户名"
-#: htdocs/luci-static/resources/homeproxy.js:145
+#: htdocs/luci-static/resources/homeproxy-pro.js:145
msgid "VLESS"
msgstr "VLESS"
-#: htdocs/luci-static/resources/homeproxy.js:146
+#: htdocs/luci-static/resources/homeproxy-pro.js:146
msgid "VMess"
msgstr "VMess"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:126
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:164
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:126
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:164
msgid "WAN DNS (read from interface)"
msgstr "WAN DNS(从接口获取)"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:90
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:90
msgid "WAN IP Policy"
msgstr "WAN IP 策略"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:181
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:181
msgid "Warn"
msgstr "警告"
-#: htdocs/luci-static/resources/homeproxy.js:523
+#: htdocs/luci-static/resources/homeproxy-pro.js:523
msgid "WebSocket"
msgstr "WebSocket"
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:197
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:197
msgid ""
"When the main DNS returns a mainland China IP, re-resolve via China DNS "
"using evaluate/match_response."
msgstr ""
"当主 DNS 返回大陆 IP 时,通过 evaluate/match_response 改用国内 DNS 复解析。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:741
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:741
msgid "Whitelist mode"
msgstr "白名单模式"
-#: htdocs/luci-static/resources/homeproxy.js:144
+#: htdocs/luci-static/resources/homeproxy-pro.js:144
msgid "WireGuard"
msgstr "WireGuard"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:308
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:308
msgid "WireGuard peer public key."
msgstr "WireGuard 对端公钥。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:315
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:315
msgid "WireGuard pre-shared key."
msgstr "WireGuard 预共享密钥。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:300
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:300
msgid "WireGuard requires base64-encoded private keys."
msgstr "WireGuard 要求 base64 编码的私钥。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:92
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:92
msgid "Write proxy protocol in the connection header."
msgstr "在连接头中写入代理协议。"
-#: htdocs/luci-static/resources/homeproxy.js:633
-#: htdocs/luci-static/resources/view/homeproxy/node.js:763
+#: htdocs/luci-static/resources/homeproxy-pro.js:633
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:763
msgid "Xudp (Xray-core)"
msgstr "Xudp (Xray-core)"
-#: htdocs/luci-static/resources/homeproxy.js:1073
+#: htdocs/luci-static/resources/homeproxy-pro.js:1073
msgid "Your %s was successfully uploaded. Size: %sB."
msgstr "您的 %s 已成功上传。大小:%sB。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:385
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:385
msgid "ZeroSSL"
msgstr "ZeroSSL"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:438
-#: htdocs/luci-static/resources/view/homeproxy/server.js:527
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:438
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:527
msgid "certificate"
msgstr "证书"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:358
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:358
msgid "connect UDP connections"
msgstr "主动连接 UDP"
-#: htdocs/luci-static/resources/homeproxy.js:694
-#: htdocs/luci-static/resources/homeproxy.js:702
+#: htdocs/luci-static/resources/homeproxy-pro.js:694
+#: htdocs/luci-static/resources/homeproxy-pro.js:702
msgid "default"
msgstr "默认"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:91
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:91
msgid "failed"
msgstr "失败"
-#: htdocs/luci-static/resources/homeproxy.js:519
+#: htdocs/luci-static/resources/homeproxy-pro.js:519
msgid "gRPC"
msgstr "gRPC"
-#: htdocs/luci-static/resources/homeproxy.js:560
+#: htdocs/luci-static/resources/homeproxy-pro.js:560
msgid "gRPC permit without stream"
msgstr "gRPC 允许无活动连接"
-#: htdocs/luci-static/resources/homeproxy.js:555
+#: htdocs/luci-static/resources/homeproxy-pro.js:555
msgid "gRPC service name"
msgstr "gRPC 服务名称"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:158
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:158
msgid "gVisor"
msgstr "gVisor"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:402
-#: htdocs/luci-static/resources/view/homeproxy/server.js:278
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:402
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:278
msgid "http"
msgstr ""
-#: htdocs/luci-static/resources/homeproxy.js:220
-#: htdocs/luci-static/resources/homeproxy.js:1126
-#: htdocs/luci-static/resources/homeproxy.js:1146
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:140
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:175
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:141
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:72
-#: htdocs/luci-static/resources/view/homeproxy/node.js:484
+#: htdocs/luci-static/resources/homeproxy-pro.js:220
+#: htdocs/luci-static/resources/homeproxy-pro.js:1126
+#: htdocs/luci-static/resources/homeproxy-pro.js:1146
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:140
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:175
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:141
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:72
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:484
msgid "non-empty value"
msgstr "非空值"
-#: htdocs/luci-static/resources/homeproxy.js:631
-#: htdocs/luci-static/resources/view/homeproxy/node.js:188
-#: htdocs/luci-static/resources/view/homeproxy/node.js:401
-#: htdocs/luci-static/resources/view/homeproxy/node.js:761
-#: htdocs/luci-static/resources/view/homeproxy/server.js:277
+#: htdocs/luci-static/resources/homeproxy-pro.js:631
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:188
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:401
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:761
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:277
msgid "none"
msgstr "无"
-#: htdocs/luci-static/resources/homeproxy.js:632
-#: htdocs/luci-static/resources/view/homeproxy/node.js:762
+#: htdocs/luci-static/resources/homeproxy-pro.js:632
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:762
msgid "packet addr (v2ray-core v5+)"
msgstr "packet addr (v2ray-core v5+)"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:88
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:88
msgid "passed"
msgstr "通过"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:546
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:546
msgid "private key"
msgstr "私钥"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:127
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:127
msgid "quic-go / uquic chrome"
msgstr "quic-go / uquic chrome"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:302
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:302
msgid "sing-box client"
msgstr "sing-box 客户端"
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:41
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:41
msgid ""
"sing-box default; recommended for home use (accepts replies from any remote "
"after mapping). Choose stricter only for specific UDP issues."
@@ -3347,7 +3347,7 @@ msgstr ""
"sing-box 默认值,家用推荐(建映射后接受任意远端回包)。仅当遇到特定 UDP 问题"
"时才用更严格选项。"
-#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:30
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:30
msgid ""
"sing-box default; recommended for home use (small NAT table, QUIC/game "
"friendly). Choose stricter only for specific UDP issues."
@@ -3355,7 +3355,7 @@ msgstr ""
"sing-box 默认值,家用推荐(NAT 表占用小,对游戏/QUIC 友好)。仅当遇到特定 "
"UDP 问题时才用更严格选项。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:377
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:377
msgid ""
"sing-box implements Snell v4/v5 wire as v4 and v6. The pre-shared key "
"(Password above) must be 12-255 bytes for v6."
@@ -3363,15 +3363,15 @@ msgstr ""
"sing-box 将 Snell v4/v5 线协议统一为 v4,另提供 v6;v6 的预共享密钥(上方密"
"码)长度须为 12-255 字节。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:305
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:305
msgid "sing-box server"
msgstr "sing-box 服务端"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:466
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:466
msgid "uTLS fingerprint"
msgstr "uTLS 指纹"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:467
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:467
msgid ""
"uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting "
"resistance."
@@ -3379,114 +3379,114 @@ msgstr ""
"uTLS 是 “crypto/tls” 的一个分支,可提供 ClientHello 指纹识别抵抗能力。uTLS "
"是 \"crypto/tls\" 的一个分支,拥有抵抗 ClientHello 指纹识别的能力。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:97
+#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:97
msgid "unchecked"
msgstr "未检查"
-#: htdocs/luci-static/resources/homeproxy.js:1035
+#: htdocs/luci-static/resources/homeproxy-pro.js:1035
msgid "unique UCI identifier"
msgstr "独立 UCI 标识"
-#: htdocs/luci-static/resources/homeproxy.js:1137
+#: htdocs/luci-static/resources/homeproxy-pro.js:1137
msgid "unique value"
msgstr "独立值"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:809
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:809
msgid "unknown error"
msgstr "未知错误"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:94
-#: htdocs/luci-static/resources/view/homeproxy/node.js:202
-#: htdocs/luci-static/resources/view/homeproxy/node.js:531
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:94
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:202
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:531
msgid "v1"
msgstr "v1"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:95
-#: htdocs/luci-static/resources/view/homeproxy/node.js:203
-#: htdocs/luci-static/resources/view/homeproxy/node.js:532
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:95
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:203
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:532
msgid "v2"
msgstr "v2"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:204
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:204
msgid "v3"
msgstr "v3"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:383
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:383
msgid "v4"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:269
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:269
msgid "v5"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:384
-#: htdocs/luci-static/resources/view/homeproxy/server.js:270
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:384
+#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:270
msgid "v6"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:152
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:156
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:190
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:152
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:156
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:186
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:190
msgid "valid DNS server address"
msgstr "有效 DNS 服务器地址"
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:155
-#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:80
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:83
-#: htdocs/luci-static/resources/view/homeproxy/node.js:727
-#: htdocs/luci-static/resources/view/homeproxy/node.js:730
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:155
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:158
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:80
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:83
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:727
+#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:730
msgid "valid URL"
msgstr "有效网址"
-#: htdocs/luci-static/resources/homeproxy.js:1085
+#: htdocs/luci-static/resources/homeproxy-pro.js:1085
msgid "valid base64 key with %d characters"
msgstr "包含 %d 个字符的有效 base64 密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client/access.js:203
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:158
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:203
msgid "valid hostname"
msgstr "有效主机名"
-#: htdocs/luci-static/resources/homeproxy.js:1117
+#: htdocs/luci-static/resources/homeproxy-pro.js:1117
msgid "valid port range (port1:port2)"
msgstr "有效端口范围(port1:port2)"
-#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:112
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:112
msgid "valid port value"
msgstr "有效端口值"
-#: htdocs/luci-static/resources/homeproxy.js:1148
+#: htdocs/luci-static/resources/homeproxy-pro.js:1148
msgid "valid uuid"
msgstr "有效 uuid"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:402
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:402
msgid "wrong-ack"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:401
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:401
msgid "wrong-checksum"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:403
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:403
msgid "wrong-md5"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:400
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:400
msgid "wrong-sequence (default)"
msgstr "wrong-sequence(默认)"
-#: htdocs/luci-static/resources/view/homeproxy/client/common.js:404
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:404
msgid "wrong-timestamp"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:75
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:123
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:75
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:123
msgid "{tag} in URL when extra tags are used"
msgstr "使用额外标签时 URL 需包含 {tag}"
-#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:126
+#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:126
msgid "{tag} in initial path when extra tags are used"
msgstr "使用额外标签时初始路径需包含 {tag}"
diff --git a/luci-app-homeproxy-pro-pro/root/etc/capabilities/homeproxy-pro.json b/luci-app-homeproxy-pro/root/etc/capabilities/homeproxy-pro.json
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/capabilities/homeproxy-pro.json
rename to luci-app-homeproxy-pro/root/etc/capabilities/homeproxy-pro.json
diff --git a/luci-app-homeproxy-pro-pro/root/etc/config/homeproxy-pro b/luci-app-homeproxy-pro/root/etc/config/homeproxy-pro
similarity index 92%
rename from luci-app-homeproxy-pro-pro/root/etc/config/homeproxy-pro
rename to luci-app-homeproxy-pro/root/etc/config/homeproxy-pro
index 86cf16cad..04222645b 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/config/homeproxy-pro
+++ b/luci-app-homeproxy-pro/root/etc/config/homeproxy-pro
@@ -1,5 +1,5 @@
-config homeproxy 'infra'
+config homeproxy-pro 'infra'
option __warning 'DO NOT EDIT THIS SECTION, OR YOU ARE ON YOUR OWN!'
option common_port '22,53,80,143,443,465,587,853,873,993,995,5222,8080,8443,9418'
option mixed_port '5330'
@@ -18,10 +18,10 @@ config homeproxy 'infra'
option tproxy_mark '101'
option tun_mark '102'
-config homeproxy 'migration'
+config homeproxy-pro 'migration'
option crontab '1'
-config homeproxy 'config'
+config homeproxy-pro 'config'
option main_node 'nil'
option main_udp_node 'same'
option dns_server '8.8.8.8'
@@ -47,7 +47,7 @@ config homeproxy 'config'
option udp_filtering ''
option udp_nat_max ''
-config homeproxy 'control'
+config homeproxy-pro 'control'
option lan_proxy_mode 'disabled'
list wan_proxy_ipv4_ips '91.105.192.0/23'
list wan_proxy_ipv4_ips '91.108.4.0/22'
@@ -65,12 +65,12 @@ config homeproxy 'control'
list wan_proxy_ipv6_ips '2001:b28:f23f::/48'
list wan_proxy_ipv6_ips '2a0a:f280::/32'
-config homeproxy 'routing'
+config homeproxy-pro 'routing'
option default_outbound 'direct-out'
option default_outbound_dns 'default-dns'
option find_neighbor '0'
-config homeproxy 'dns'
+config homeproxy-pro 'dns'
option default_strategy 'prefer_ipv4'
option default_server 'default-dns'
option disable_cache '0'
@@ -80,7 +80,7 @@ config homeproxy 'dns'
option dns_timeout ''
option cache_file_store_dns '0'
-config homeproxy 'subscription'
+config homeproxy-pro 'subscription'
option auto_update '0'
option allow_insecure '0'
option packet_encoding 'xudp'
@@ -89,6 +89,6 @@ config homeproxy 'subscription'
list filter_keywords '重置|到期|过期|剩余|套餐'
list filter_keywords 'Expiration|Remaining'
-config homeproxy 'server'
+config homeproxy-pro 'server'
option enabled '0'
option log_level 'warn'
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip4.txt b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip4.txt
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip4.txt
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip4.txt
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip4.ver b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip4.ver
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip4.ver
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip4.ver
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip6.txt b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip6.txt
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip6.txt
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip6.txt
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip6.ver b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip6.ver
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip6.ver
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip6.ver
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_list.txt b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_list.txt
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_list.txt
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_list.txt
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_list.ver b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_list.ver
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_list.ver
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_list.ver
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/gfw_list.txt b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/gfw_list.txt
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/gfw_list.txt
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/gfw_list.txt
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/gfw_list.ver b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/gfw_list.ver
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/gfw_list.ver
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/gfw_list.ver
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/clean_log.sh b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/clean_log.sh
similarity index 95%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/clean_log.sh
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/clean_log.sh
index d2878ed0f..075ee4a35 100755
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/clean_log.sh
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/clean_log.sh
@@ -3,7 +3,7 @@
#
# Copyright (C) 2022-2023 ImmortalWrt.org
-NAME="homeproxy"
+NAME="homeproxy-pro"
log_max_size="50" #KB
main_log_file="/var/run/$NAME/$NAME.log"
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc
similarity index 99%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc
index b616bca6d..12199f122 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc
@@ -30,7 +30,7 @@
import {
isEmpty, strToBool, strToInt, strToTime, removeBlankAttrs,
buildTLSObject, buildTransportObject, parse_port
-} from '../homeproxy.uc';
+} from '../homeproxy-pro.uc';
import { Node, Inbound, INBOUND_TLS_SERVER } from './model.uc';
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/loader.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/loader.uc
similarity index 98%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/loader.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/loader.uc
index 4c26d766b..0e794fdec 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/loader.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/loader.uc
@@ -26,7 +26,7 @@ import {
import { PROTOCOL_TO_UCI as PROTOCOL_OPTIONS } from '../parser/mapping.uc';
-const UCICONFIG = 'homeproxy';
+const UCICONFIG = 'homeproxy-pro';
const SECTION = {
main: 'config',
@@ -63,7 +63,7 @@ function node_opt(uci, section_id, name) {
/* --- sub-object extraction --------------------------------------------- */
/* These three functions are the whole reason a Node is hierarchical: the
- * shared TLS/transport/multiplex builders (homeproxy.uc) take a flat,
+ * shared TLS/transport/multiplex builders (homeproxy-pro.uc) take a flat,
* prefixed dict today, so every caller has to hand them the right subset. A
* sub-object makes the boundary explicit and testable.
*
@@ -369,7 +369,7 @@ export const Loader = {
uci.load(UCICONFIG);
- const config = Config.create('homeproxy');
+ const config = Config.create('homeproxy-pro');
config.general = {
routing_mode: opt(uci, 'main', 'routing_mode') || 'bypass_mainland_china',
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/model.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/model.uc
similarity index 99%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/model.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/model.uc
index dbfc51d8c..2fcb06742 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/model.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/model.uc
@@ -20,7 +20,7 @@
'use strict';
-import { isEmpty } from '../homeproxy.uc';
+import { isEmpty } from '../homeproxy-pro.uc';
/* Canonical credential multiplexing for a Node. The current generator picks
* these apart with ternaries per field (`username` vs `user` vs `password` vs
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut
similarity index 98%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut
index 449c77546..7bd2c53ba 100755
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut
@@ -7,7 +7,7 @@
* Copyright (C) 2025 ImmortalWrt.org
*
* Declares every homeproxy_* fw4 chain/set. The inventory of those objects is
- * tracked in scripts/fw4_names.sh, which init.d/homeproxy uses to clean them up
+ * tracked in scripts/fw4_names.sh, which init.d/homeproxy-pro uses to clean them up
* on stop; add/remove entries there together with any change below.
* tests/ucode/test_fw4_names.sh compares both lists, and
* tests/ucode/test_firewall_template.sh renders this template and checks the
@@ -26,7 +26,7 @@
*/
import { readfile } from 'fs';
import { cursor } from 'uci';
-import { isEmpty, isValidCIDR } from '/etc/homeproxy/scripts/homeproxy.uc';
+import { isEmpty, isValidCIDR } from '/etc/homeproxy-pro/scripts/homeproxy-pro.uc';
import {
ipv4_to_nftarr,
mac_to_nftarr,
@@ -34,7 +34,7 @@ import {
ports_to_nftarr,
isValidPort,
isValidIface
-} from '/etc/homeproxy/scripts/firewall_utils.uc';
+} from '/etc/homeproxy-pro/scripts/firewall_utils.uc';
const fw4 = require('fw4');
@@ -139,10 +139,10 @@ function dnsmasq_nftset() {
}
/* Misc config */
-const resources_dir = '/etc/homeproxy/resources';
+const resources_dir = '/etc/homeproxy-pro/resources';
/* UCI config start */
-const cfgname = 'homeproxy';
+const cfgname = 'homeproxy-pro';
const uci = cursor();
uci.load(cfgname);
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc
similarity index 97%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc
index aed86e739..0d2c95c07 100755
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc
@@ -8,9 +8,9 @@
import { writefile } from 'fs';
import { cursor } from 'uci';
-import { isEmpty, RUN_DIR, validation } from './homeproxy.uc';
+import { isEmpty, RUN_DIR, validation } from './homeproxy-pro.uc';
-const cfgname = 'homeproxy';
+const cfgname = 'homeproxy-pro';
const uci = cursor();
uci.load(cfgname);
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc
similarity index 95%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc
index 6f1180f95..da4749055 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc
@@ -8,8 +8,8 @@
* expression with `}`, and the next thing nft sees is whatever the attacker
* put after it - up to and including `accept` for a chain that should be a
* drop, or a `reject` outside any chain that the fw4 reload fails to
- * compile, taking the whole router firewall with it. The homeproxy section
- * in /etc/config/homeproxy is UCI-writable from the subscription updater,
+ * compile, taking the whole router firewall with it. The homeproxy-pro section
+ * in /etc/config/homeproxy-pro is UCI-writable from the subscription updater,
* from any shell on the LAN and from any cron job the user has not locked
* down; `tests/ucode/test_firewall_validators.uc` covers that the helpers
* drop these inputs rather than letting them through, and `tests/arch-guard.sh`
@@ -30,11 +30,11 @@
'use strict';
-/* isEmpty() lives in homeproxy.uc, not in the ucode globals. Without this
+/* isEmpty() lives in homeproxy-pro.uc, not in the ucode globals. Without this
* import every helper below threw "access to undeclared variable isEmpty" the
* moment it was called, which no host-side test caught because the test
* harness stages its own stand-in module. */
-import { isEmpty } from './homeproxy.uc';
+import { isEmpty } from './homeproxy-pro.uc';
/* IPv4 (with optional /CIDR) - the regex is the standard four-octet body
* followed by an optional /0..32. Anything outside that - "1.2.3.4.5",
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh
similarity index 89%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh
index cdff5ee94..66fe94f73 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh
@@ -2,11 +2,11 @@
#
# Copyright (C) 2025 ImmortalWrt.org
#
-# Single source of truth for every fw4 chain and set owned by homeproxy.
+# Single source of truth for every fw4 chain and set owned by homeproxy-pro.
#
-# * root/etc/homeproxy/scripts/firewall_post.ut declares these objects and
+# * root/etc/homeproxy-pro/scripts/firewall_post.ut declares these objects and
# decides which of them actually exist for the current proxy mode.
-# * root/etc/init.d/homeproxy flushes and deletes them on stop.
+# * root/etc/init.d/homeproxy-pro flushes and deletes them on stop.
#
# When you add or remove a chain/set in firewall_post.ut, update this list in
# the same commit -- tests/ucode/test_fw4_names.sh compares both sides and
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_client.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_client.uc
similarity index 97%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_client.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_client.uc
index c20805fb7..d1bae8a85 100755
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_client.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_client.uc
@@ -5,7 +5,7 @@
* scripts/generate_client.uc: process-level entry point.
*
* The actual client generator is generator/client.uc; this script is the
- * thin entry point that init.d/homeproxy execve's. Responsibilities:
+ * thin entry point that init.d/homeproxy-pro execve's. Responsibilities:
*
* 1. Load UCI into the HomeProxyConfig domain model.
* 2. Resolve the GenerationContext env: the WAN resolver (ubus) and the two
@@ -29,7 +29,7 @@ import { mkdtemp, readfile, writefile } from 'fs';
import { Loader } from './config/loader.uc';
import { generate } from './generator/client.uc';
-import { removeBlankAttrs, HP_DIR, RUN_DIR, shellQuote, UCICONFIG_DIR } from './homeproxy.uc';
+import { removeBlankAttrs, HP_DIR, RUN_DIR, shellQuote, UCICONFIG_DIR } from './homeproxy-pro.uc';
/* Resolve the GenerationContext inputs. This is the only impure step on the
* client generation path, and it is deliberately here rather than under
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_server.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_server.uc
similarity index 98%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_server.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_server.uc
index 12ef66be0..e6865d8a6 100755
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_server.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_server.uc
@@ -15,7 +15,7 @@
import { mkdtemp, writefile } from 'fs';
import { Loader } from './config/loader.uc';
import { generate_server } from './generator/server.uc';
-import { removeBlankAttrs, RUN_DIR, shellQuote, UCICONFIG_DIR } from './homeproxy.uc';
+import { removeBlankAttrs, RUN_DIR, shellQuote, UCICONFIG_DIR } from './homeproxy-pro.uc';
const dm = Loader.load(UCICONFIG_DIR);
const config = generate_server(dm);
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/client.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/client.uc
similarity index 98%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/client.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/client.uc
index 2af07761f..ec790ad5c 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/client.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/client.uc
@@ -39,7 +39,7 @@
'use strict';
-import { isEmpty, strToInt, RUN_DIR } from '../homeproxy.uc';
+import { isEmpty, strToInt, RUN_DIR } from '../homeproxy-pro.uc';
import { build_context } from './context.uc';
import { build_dns } from './dns.uc';
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/common.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/common.uc
similarity index 96%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/common.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/common.uc
index 3484e508f..82395bc07 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/common.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/common.uc
@@ -18,14 +18,14 @@
'use strict';
-import { isEmpty } from '../homeproxy.uc';
+import { isEmpty } from '../homeproxy-pro.uc';
import { ConfigQuery } from '../config/model.uc';
-/* parse_port() lives in homeproxy.uc. The Adapter layer needs it
+/* parse_port() lives in homeproxy-pro.uc. The Adapter layer needs it
* too (EndpointFactory builds the WireGuard endpoint) and an adapter must
* not import from generator/, so the util moved to the module both layers
- * already share. Callers import it from '../homeproxy.uc' now. */
+ * already share. Callers import it from '../homeproxy-pro.uc' now. */
/* Resolve a UCI outbound-style reference (string or array of strings)
* into the sing-box tag the generator should emit. The arrays carry
@@ -181,7 +181,7 @@ export function attachSchema(config) {
* other modes still resolve the proxy node hostname and resolve any
* domain the user clicks through. cache_file is a no-op on a fresh
* install (no cache to read) and the file is the only piece of state the
- * generator writes outside /etc/config/homeproxy. Routing-mode gating
+ * generator writes outside /etc/config/homeproxy-pro. Routing-mode gating
* used to limit it to bypass_mainland_china + custom, which left
* gfwlist / proxy_mainland_china / global with cold-start DNS on every
* reload and made the difference between modes hard to explain.
@@ -199,7 +199,7 @@ export function attachExperimental(config, routing_mode, dns_store_dns) {
config.experimental = {
cache_file: {
enabled: true,
- path: '/etc/homeproxy/cache.db',
+ path: '/etc/homeproxy-pro/cache.db',
store_dns: (dns_store_dns === '1') ? true : null
}
};
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/context.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/context.uc
similarity index 97%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/context.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/context.uc
index 2a9318644..94389321d 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/context.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/context.uc
@@ -9,8 +9,8 @@
*
* env = {
* wan_dns, the WAN resolver the CLI resolved via ubus
- * direct_domain_list, /etc/homeproxy/resources/direct_list.txt
- * proxy_domain_list, /etc/homeproxy/resources/proxy_list.txt
+ * direct_domain_list, /etc/homeproxy-pro/resources/direct_list.txt
+ * proxy_domain_list, /etc/homeproxy-pro/resources/proxy_list.txt
* }
*
* Why the split exists: this module used to sit inside generator/client.uc
@@ -37,7 +37,7 @@
'use strict';
-import { isEmpty, strToInt } from '../homeproxy.uc';
+import { isEmpty, strToInt } from '../homeproxy-pro.uc';
/* Build the routing-mode-independent ctx the section builders consume.
* Mode-dependent defaults are filled in here so each builder can stay a
@@ -221,7 +221,7 @@ export function build_context(dm, env) {
/* Inline static rule-sets (direct-domain, proxy-domain) only fire
* when the routing mode has a non-empty domain list. Both lists are
* inputs now: the CLI reads the two files under
- * /etc/homeproxy/resources/ and passes them in. Custom mode ignores
+ * /etc/homeproxy-pro/resources/ and passes them in. Custom mode ignores
* them entirely, exactly as the pre-split read did. */
ctx.direct_domain_list = [];
ctx.proxy_domain_list = [];
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc
similarity index 99%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc
index 2fa3adb35..8a3b03cad 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc
@@ -25,7 +25,7 @@
'use strict';
-import { isEmpty, strToBool, strToInt, strToTime, parseURL, validation, parse_port } from '../homeproxy.uc';
+import { isEmpty, strToBool, strToInt, strToTime, parseURL, validation, parse_port } from '../homeproxy-pro.uc';
import { get_outbound, get_resolver, get_ruleset } from './common.uc';
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc
similarity index 99%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc
index f91840939..f1b708f7d 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc
@@ -12,7 +12,7 @@
'use strict';
-import { isEmpty, strToInt, strToTime, strToBool } from '../homeproxy.uc';
+import { isEmpty, strToInt, strToTime, strToBool } from '../homeproxy-pro.uc';
/* Append the always-on inbounds. dns-in is the local listener the DNS chain
* hands queries to - runtime/dns.sh points dnsmasq at 127.0.0.1#,
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc
similarity index 98%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc
index 576d7a8d5..ddd725794 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc
@@ -31,7 +31,7 @@
'use strict';
-import { isEmpty, strToInt, strToBool, strToTime } from '../homeproxy.uc';
+import { isEmpty, strToInt, strToBool, strToTime } from '../homeproxy-pro.uc';
import { ConfigQuery } from '../config/model.uc';
import { OutboundFactory, EndpointFactory } from '../config/adapter.uc';
@@ -103,13 +103,13 @@ function keep_candidate(dm, id) {
const node = ConfigQuery.node_by_id(dm, id);
if (!node) {
- warn(sprintf("homeproxy: urltest candidate '%s' no longer exists, skipping.", id));
+ warn(sprintf("homeproxy-pro: urltest candidate '%s' no longer exists, skipping.", id));
return false;
}
const problems = OutboundFactory.problems(node);
if (length(problems)) {
- warn(sprintf("homeproxy: skipping urltest candidate '%s': %s.", id, join(', ', problems)));
+ warn(sprintf("homeproxy-pro: skipping urltest candidate '%s': %s.", id, join(', ', problems)));
return false;
}
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/route.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/route.uc
similarity index 99%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/route.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/route.uc
index 1f271d453..bb6ff415a 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/route.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/route.uc
@@ -26,7 +26,7 @@
'use strict';
-import { isEmpty, strToInt, strToTime, strToBool, parse_port } from '../homeproxy.uc';
+import { isEmpty, strToInt, strToTime, strToBool, parse_port } from '../homeproxy-pro.uc';
import { get_outbound, get_resolver, get_ruleset, get_direct_override } from './common.uc';
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc
similarity index 91%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc
index cff487c62..374ef3446 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc
@@ -26,7 +26,7 @@
'use strict';
-import { isEmpty, validateHomeProxyPath } from '../homeproxy.uc';
+import { isEmpty, validateHomeProxyPath } from '../homeproxy-pro.uc';
import { get_outbound, isDirectOutboundTag } from './common.uc';
@@ -56,9 +56,9 @@ export function build_user_rulesets(rule_set_array, dm, ctx) {
fail loud on a missing/disabled reference. */
const fetch_ref = (cfg.type === 'remote') ? (cfg.url || '') : (cfg.path || '');
if (!match(fetch_ref, /\{tag\}/))
- die(sprintf("homeproxy: rule-set '%s' uses extra tags but its %s source lacks a {tag} placeholder; add {tag} to the source or drop the extra tags.", cfg.name, cfg.type));
+ die(sprintf("homeproxy-pro: rule-set '%s' uses extra tags but its %s source lacks a {tag} placeholder; add {tag} to the source or drop the extra tags.", cfg.name, cfg.type));
if (cfg.type === 'remote' && !isEmpty(cfg.initial_path) && !match(cfg.initial_path, /\{tag\}/))
- die(sprintf("homeproxy: rule-set '%s' uses extra tags but its initial_path lacks a {tag} placeholder.", cfg.name));
+ die(sprintf("homeproxy-pro: rule-set '%s' uses extra tags but its initial_path lacks a {tag} placeholder.", cfg.name));
}
/* Local rule-set path is read by sing-box as root. The whitelist
@@ -70,7 +70,7 @@ export function build_user_rulesets(rule_set_array, dm, ctx) {
* sing-box checking whatever the field evaluated to, and the
* user only saw the reload keep the previous config. */
if (cfg.type === 'local' && cfg.path && !validateHomeProxyPath(cfg.path))
- die(sprintf("homeproxy: rule-set '%s' path '%s' is outside the homeproxy whitelist; choose a path under /etc/homeproxy/.", cfg.name, cfg.path));
+ die(sprintf("homeproxy-pro: rule-set '%s' path '%s' is outside the homeproxy-pro whitelist; choose a path under /etc/homeproxy-pro/.", cfg.name, cfg.path));
const ruleset = {
type: cfg.type,
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/server.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/server.uc
similarity index 97%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/server.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/server.uc
index e48dd851e..96fd1f5dd 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/server.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/server.uc
@@ -40,7 +40,7 @@ export function generate_server(dm) {
log: {
disabled: false,
level: log_level,
- output: '/var/run/homeproxy/sing-box-s.log',
+ output: '/var/run/homeproxy-pro/sing-box-s.log',
timestamp: true
},
inbounds: []
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc
similarity index 96%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc
index f2107aab4..c615079d3 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc
@@ -8,16 +8,16 @@ import { access, lstat, mkdtemp, open, rmdir, unlink } from 'fs';
import { urldecode_params } from 'luci.http';
/* Global variables start */
-export const HP_DIR = '/etc/homeproxy';
-export const RUN_DIR = '/var/run/homeproxy';
+export const HP_DIR = '/etc/homeproxy-pro';
+export const RUN_DIR = '/var/run/homeproxy-pro';
/* Where the UCI configuration lives. This is /etc/config - NOT HP_DIR/config.
- * The package ships its config as the conffile /etc/config/homeproxy, and
+ * The package ships its config as the conffile /etc/config/homeproxy-pro, and
* ucode's `cursor(dir)` treats `dir` as the *confdir*, so
- * cursor(HP_DIR + '/config') would read /etc/homeproxy/config/homeproxy, a
+ * cursor(HP_DIR + '/config') would read /etc/homeproxy-pro/config/homeproxy-pro, a
* path that exists nowhere. uci.load() then returns null, every uci.get()
* returns null, and the Loader silently yields pure defaults: no main-out,
* no route/direct final, none of the user's ports or nodes.
- * Verified on a device: cursor('/etc/homeproxy/config').get(...) is empty
+ * Verified on a device: cursor('/etc/homeproxy-pro/config').get(...) is empty
* while cursor().get(...) returns the configured value.
* The test suite stages a rewritten copy of this constant instead of the
* old `__LOADER_DIR__` source sed. */
@@ -44,11 +44,11 @@ export function isBinary(str) {
* sing-box config. sing-box runs as root and reads the file itself; an
* arbitrary UCI value of e.g. /etc/passwd would leak the file to anyone
* who could write to the UCI tree. The LuCI UI already gates the input
- * via validateCertificatePath() in homeproxy.js, but UCI can be set from
+ * via validateCertificatePath() in homeproxy-pro.js, but UCI can be set from
* any node on the LAN (subscription updates, scripted edits) and the
* UI check is only UX - we have to enforce on the backend.
*
- * /etc/homeproxy/... - project-managed certs / ruleset paths / etc.
+ * /etc/homeproxy-pro/... - project-managed certs / ruleset paths / etc.
* /tmp/homeproxy_* - upload staging files (cert_upload_* writes)
*
* Anything else (relative paths, /etc/passwd, /var/run/...) returns false
@@ -58,7 +58,7 @@ export function validateHomeProxyPath(p) {
return false;
/* Reject traversal *before* the prefix checks below: a plain prefix
- * comparison accepts '/etc/homeproxy/../../etc/shadow', and sing-box reads
+ * comparison accepts '/etc/homeproxy-pro/../../etc/shadow', and sing-box reads
* these paths as root. */
if (match(p, /(^|\/)\.\.(\/|$)/))
return false;
@@ -69,7 +69,7 @@ export function validateHomeProxyPath(p) {
if (substr(p, 0, 1) !== '/')
return false;
- if (substr(p, 0, length('/etc/homeproxy/')) === '/etc/homeproxy/')
+ if (substr(p, 0, length('/etc/homeproxy-pro/')) === '/etc/homeproxy-pro/')
return true;
if (substr(p, 0, length('/tmp/homeproxy_')) === '/tmp/homeproxy_')
@@ -84,16 +84,16 @@ export function validateHomeProxyPath(p) {
* certificate normally lives under /etc/ssl/ or under the ACME state in
* /etc/acme/, and the two sing-box jails mount exactly those directories
* (see runtime/service.sh's procd_add_jail_mount calls). validateHomeProxyPath()
- * only knows /etc/homeproxy/ and /tmp/homeproxy_, so a certificate the user
+ * only knows /etc/homeproxy-pro/ and /tmp/homeproxy_, so a certificate the user
* legitimately picked from /etc/ssl/ was accepted by the LuCI validator and
* then silently dropped here - certificate_path became null and the TLS
* listener failed with no error pointing at the path.
*
* The list is mirrored by HP_CERT_PATH_ROOTS in
- * htdocs/luci-static/resources/homeproxy.js; guard 29 in tests/arch-guard.sh
+ * htdocs/luci-static/resources/homeproxy-pro.js; guard 29 in tests/arch-guard.sh
* keeps the two in step.
*/
-export const CERT_PATH_ROOTS = ['/etc/homeproxy/certs/', '/etc/acme/', '/etc/ssl/'];
+export const CERT_PATH_ROOTS = ['/etc/homeproxy-pro/certs/', '/etc/acme/', '/etc/ssl/'];
/* validateCertificatePath(p) - the TLS certificate/key path gate.
*
@@ -222,8 +222,8 @@ export function getTime(epoch) {
};
/* Redact the credential-bearing parts of a URL before logging it. Any
- * subscription URL we ship into /var/run/homeproxy/homeproxy.log is
- * readable by anyone who can read /var/run/homeproxy - including UCI
+ * subscription URL we ship into /var/run/homeproxy-pro/homeproxy-pro.log is
+ * readable by anyone who can read /var/run/homeproxy-pro - including UCI
* defaults that ship on the device and anyone with shell on the LAN.
* (Confirmed on the device: the log is 0644.)
*
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc
similarity index 98%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc
index 505726f4e..5b3fc6418 100755
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc
@@ -8,11 +8,11 @@
'use strict';
import { cursor } from 'uci';
-import { isEmpty, parseURL, shellQuote, validation } from './homeproxy.uc';
+import { isEmpty, parseURL, shellQuote, validation } from './homeproxy-pro.uc';
const uci = cursor();
-const uciconfig = 'homeproxy';
+const uciconfig = 'homeproxy-pro';
uci.load(uciconfig);
const uciinfra = 'infra',
@@ -93,7 +93,7 @@ if (isEmpty(uci.get(uciconfig, ucimain, 'log_level')))
/* v28.9.1.16: cn_ip_fallback default flipped to '1' (tutorial §2.1 / docs/linux.json 与 pro 的差距分析.md).
* Existing users get the behaviour change only when they ask for it, so write
* '0' explicitly into their config on upgrade; new installs read '1' straight
- * from /etc/config/homeproxy (the package ships with that as the default).
+ * from /etc/config/homeproxy-pro (the package ships with that as the default).
* isEmpty() is the same gate log_level uses, so an upgrade that already has
* the option set (the fresh-install path of a prior release) keeps its value. */
if (isEmpty(uci.get(uciconfig, ucimain, 'cn_ip_fallback')))
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/flatten.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/flatten.uc
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/flatten.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/flatten.uc
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/mapping.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/mapping.uc
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/mapping.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/mapping.uc
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/normalize.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/normalize.uc
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/normalize.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/normalize.uc
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc
similarity index 99%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc
index dc607f5b9..200578df3 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc
@@ -24,7 +24,7 @@
import { urldecode, urlencode } from 'luci.http';
-import { decodeBase64Str, isEmpty, parseURL } from '../homeproxy.uc';
+import { decodeBase64Str, isEmpty, parseURL } from '../homeproxy-pro.uc';
/* https://shadowsocks.org/guide/sip008.html */
export function parse_sip008_uri(uri) {
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc
similarity index 98%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc
index ccd41b1d3..6ba9cb848 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc
@@ -16,7 +16,7 @@
'use strict';
-import { isEmpty, validation } from '../homeproxy.uc';
+import { isEmpty, validation } from '../homeproxy-pro.uc';
import {
parse_sip008_uri, parse_anytls_uri, parse_http_uri,
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc
similarity index 98%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc
index f98836664..058b62de5 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc
@@ -22,7 +22,7 @@
'use strict';
-import { validation } from '../homeproxy.uc';
+import { validation } from '../homeproxy-pro.uc';
/* Each entry carries a stable `kind` (so callers / tests can branch on
* it) and a `message` for the log line. Adding a new rule is:
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/resource_blob_sha.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/resource_blob_sha.uc
similarity index 100%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/resource_blob_sha.uc
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/resource_blob_sha.uc
diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh
similarity index 93%
rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh
rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh
index a22078c80..2f5ec7ce9 100644
--- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh
+++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh
@@ -2,7 +2,7 @@
#
# Copyright (C) 2025 ImmortalWrt.org
#
-# Configuration transaction helpers for homeproxy.
+# Configuration transaction helpers for homeproxy-pro.
#
# The generated sing-box configuration is the only thing standing between the
# router and a working service, so it is handled as a transaction:
@@ -15,9 +15,9 @@
# -> ensure-live if generation produced nothing, restore the
# known-good copy instead of failing the start
# -> rollback a reload that comes up unhealthy puts the known-good
-# copy back (see reload_service in init.d/homeproxy)
+# copy back (see reload_service in init.d/homeproxy-pro)
#
-# Sourced by /etc/init.d/homeproxy. The functions only take explicit paths
+# Sourced by /etc/init.d/homeproxy-pro. The functions only take explicit paths
# and never call procd or ubus, so tests/runtime/test_config_transaction.sh
# can exercise them without a router.
@@ -88,8 +88,8 @@ hp_same_file() {
#
# Two passes over the file, because the snapshot carries two shapes:
#
-# homeproxy..