diff --git a/cloudreve/Makefile b/cloudreve/Makefile index eaf10644..48723cd4 100644 --- a/cloudreve/Makefile +++ b/cloudreve/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=cloudreve -PKG_VERSION:=4.17.0 -PKG_RELEASE:=13 +PKG_VERSION:=4.18.0 +PKG_RELEASE:=14 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/cloudreve/Cloudreve.git -PKG_SOURCE_VERSION:=d4a145c3ac68f08b9071dec0f2ac025c6dc7362d +PKG_SOURCE_VERSION:=0bb0ab833571d380153edd3529e01a7957b8b4ce PKG_MIRROR_HASH:=skip PKG_LICENSE:=GPL-3.0-only diff --git a/luci-app-fchomo/htdocs/luci-static/resources/fchomo/listeners.js b/luci-app-fchomo/htdocs/luci-static/resources/fchomo/listeners.js index 4c2585db..95482189 100644 --- a/luci-app-fchomo/htdocs/luci-static/resources/fchomo/listeners.js +++ b/luci-app-fchomo/htdocs/luci-static/resources/fchomo/listeners.js @@ -461,25 +461,26 @@ function renderListeners(s, uciconfig, isClient) { o.depends('type', 'tuic'); o.modalonly = true; - /* Hysteria2 fields */ - o = s.taboption('field_general', form.Value, 'hysteria_up_mbps', _('Max upload speed'), + /* Brutal fields */ + o = s.taboption('field_general', form.Value, 'brutal_up_mbps', _('Max upload speed'), _('In Mbps.')); o.datatype = 'uinteger'; - o.depends('type', 'hysteria2'); + o.depends({type: /^(hysteria2|shadowquic)$/}); o.modalonly = true; - o = s.taboption('field_general', form.Value, 'hysteria_down_mbps', _('Max download speed'), + o = s.taboption('field_general', form.Value, 'brutal_down_mbps', _('Max download speed'), _('In Mbps.')); o.datatype = 'uinteger'; - o.depends('type', 'hysteria2'); + o.depends({type: /^(hysteria2|shadowquic)$/}); o.modalonly = true; - o = s.taboption('field_general', form.Flag, 'hysteria_ignore_client_bandwidth', _('Ignore client bandwidth'), + o = s.taboption('field_general', form.Flag, 'brutal_ignore_client_bandwidth', _('Ignore client bandwidth'), _('Tell the client to use the BBR flow control algorithm instead of Hysteria CC.')); o.default = o.disabled; - o.depends({type: 'hysteria2', hysteria_up_mbps: '', hysteria_down_mbps: ''}); + o.depends({type: /^(hysteria2|shadowquic)$/, brutal_up_mbps: '', brutal_down_mbps: ''}); o.modalonly = true; + /* Hysteria2 fields */ o = s.taboption('field_general', form.ListValue, 'hysteria_obfs_type', _('Obfuscate type')); o.value('', _('Disable')); o.value('salamander', _('Salamander')); @@ -638,6 +639,7 @@ function renderListeners(s, uciconfig, isClient) { o = s.taboption('field_general', form.Flag, 'plugin', _('Plugin')); o.default = o.disabled; o.depends({type: /^(shadowsocks|snell)$/}); + o.depends({type: /^(vmess|vless|trojan|anytls)$/}); o.modalonly = true; o = s.taboption('field_plugin', form.ListValue, 'plugin_type', _('Plugin type')); @@ -651,9 +653,12 @@ function renderListeners(s, uciconfig, isClient) { if (value) { if (type === 'snell' && !['obfs', 'shadow-tls'].includes(value)) { - return _('Expecting: only support %s.').format(_('obfs-simple') + + return _('Expecting: Only support %s.').format(_('obfs-simple') + ' / ' + _('ShadowTLS')); } + if (['vmess', 'vless', 'trojan', 'anytls'].includes(type) && !['jls'].includes(value)) { + return _('Expecting: Only support %s.').format(_('JLS')); + } } return true; @@ -1045,6 +1050,10 @@ function renderListeners(s, uciconfig, isClient) { switch (type) { case 'shadowsocks': + case 'vmess': + case 'vless': + case 'trojan': + case 'anytls': def_alpn = ['h2', 'http/1.1']; // when plugin_type in ['jls'] break; case 'tuic': @@ -1079,8 +1088,21 @@ function renderListeners(s, uciconfig, isClient) { o = s.taboption('field_tls', form.Value, 'tls_cert_path', _('Certificate path'), _('The %s public key, in PEM format.').format(_('Server'))); o.value('/etc/fchomo/certs/server_publickey.pem'); - o.depends({tls: '1', tls_reality: '0', type: /^(http|socks|mixed|vmess|vless|trojan|anytls|tuic|hysteria2|hysteria2-realm|trusttunnel)$/}); - o.rmempty = false; + o.validate = function(section_id, value) { + const plugin_type = this.section.getOption('plugin_type').formvalue(section_id); + const tls_reality = this.section.getOption('tls_reality').formvalue(section_id); + + if (plugin_type === 'jls' || tls_reality == 1) { + if (value) + return _('Expecting: Keep empty when %s is enabled.').format(_('JLS') + + ' / ' + _('REALITY')); + } else if (!value) { + return _('Expecting: Cannot be empty.'); + } + + return true; + } + o.depends({tls: '1', type: /^(http|socks|mixed|vmess|vless|trojan|anytls|tuic|hysteria2|hysteria2-realm|trusttunnel)$/}); o.modalonly = true; o = s.taboption('field_tls', form.Button, '_upload_cert', _('Upload certificate'), @@ -1181,6 +1203,15 @@ function renderListeners(s, uciconfig, isClient) { // uTLS fields o = s.taboption('field_tls', form.Flag, 'tls_reality', _('REALITY')); o.default = o.disabled; + o.validate = function(section_id, value) { + const plugin_type = this.section.getOption('plugin_type').formvalue(section_id); + value = this.formvalue(section_id); + + if (value == 1 && plugin_type === 'jls') + return _('Expecting: Cannot be enabled when %s is enabled.').format(_('JLS')); + + return true; + } o.depends('tls', '1'); o.modalonly = true; @@ -1243,14 +1274,14 @@ function renderListeners(s, uciconfig, isClient) { switch (type) { case 'vless': if (!['grpc', 'ws', 'xhttp'].includes(value)) - return _('Expecting: only support %s.').format(_('gRPC') + + return _('Expecting: Only support %s.').format(_('gRPC') + ' / ' + _('WebSocket') + ' / ' + _('XHTTP')); break; case 'vmess': case 'trojan': if (!['grpc', 'ws'].includes(value)) - return _('Expecting: only support %s.').format(_('gRPC') + + return _('Expecting: Only support %s.').format(_('gRPC') + ' / ' + _('WebSocket')); break; default: diff --git a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js index 60f510e6..31c65b9a 100644 --- a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js +++ b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js @@ -667,6 +667,19 @@ return view.extend({ so.depends('type', 'tuic'); so.modalonly = true; + /* Brutal fields */ + so = ss.taboption('field_general', form.Value, 'brutal_up_mbps', _('Max upload speed'), + _('In Mbps.')); + so.datatype = 'uinteger'; + so.depends({type: /^(hysteria|hysteria2|shadowquic)$/}); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'brutal_down_mbps', _('Max download speed'), + _('In Mbps.')); + so.datatype = 'uinteger'; + so.depends({type: /^(hysteria|hysteria2|shadowquic)$/}); + so.modalonly = true; + /* Hysteria / Hysteria2 fields */ so = ss.taboption('field_general', form.DynamicList, 'hysteria_ports', _('Ports pool')); so.datatype = 'or(port, portrange)'; @@ -679,18 +692,6 @@ return view.extend({ so.depends('type', 'hysteria2'); so.modalonly = true; - so = ss.taboption('field_general', form.Value, 'hysteria_up_mbps', _('Max upload speed'), - _('In Mbps.')); - so.datatype = 'uinteger'; - so.depends({type: /^(hysteria|hysteria2)$/}); - so.modalonly = true; - - so = ss.taboption('field_general', form.Value, 'hysteria_down_mbps', _('Max download speed'), - _('In Mbps.')); - so.datatype = 'uinteger'; - so.depends({type: /^(hysteria|hysteria2)$/}); - so.modalonly = true; - so = ss.taboption('field_general', form.ListValue, 'hysteria_obfs_type', _('Obfuscate type')); so.value('', _('Disable')); so.value('salamander', _('Salamander')); @@ -716,17 +717,6 @@ return view.extend({ so.depends('hysteria_obfs_type', 'gecko'); so.modalonly = true; - /* TrustTunnel fields */ - so = ss.taboption('field_general', form.Flag, 'trusttunnel_health_check', _('Health check')); - so.default = so.enabled; - so.depends('type', 'trusttunnel'); - so.modalonly = true; - - so = ss.taboption('field_general', form.Flag, 'trusttunnel_quic', _('QUIC')); - so.default = so.disabled; - so.depends('type', 'trusttunnel'); - so.modalonly = true; - /* ShadowQUIC fields */ so = ss.taboption('field_general', form.DynamicList, 'shadowquic_quic_versions', _('QUIC versions'), _('Support %s, default %s.').format('v1/v2', 'v1')); @@ -752,6 +742,17 @@ return view.extend({ so.depends('type', 'shadowquic'); so.modalonly = true; + /* TrustTunnel fields */ + so = ss.taboption('field_general', form.Flag, 'trusttunnel_health_check', _('Health check')); + so.default = so.enabled; + so.depends('type', 'trusttunnel'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Flag, 'trusttunnel_quic', _('QUIC')); + so.default = so.disabled; + so.depends('type', 'trusttunnel'); + so.modalonly = true; + /* WireGuard fields */ so = ss.taboption('field_general', form.Value, 'wireguard_ip', _('Local address'), _('The %s address used by local machine in the Wireguard network.').format('IPv4')); @@ -982,7 +983,7 @@ return view.extend({ if (value) { if (type === 'snell' && !['obfs', 'shadow-tls'].includes(value)) { - return _('Expecting: only support %s.').format(_('obfs-simple') + + return _('Expecting: Only support %s.').format(_('obfs-simple') + ' / ' + _('ShadowTLS')); } } @@ -1166,6 +1167,14 @@ return view.extend({ so = ss.taboption('field_tls', form.Value, 'tls_sni', _('TLS SNI'), _('Hostname that the client attempts to connect to at the start of the TLS handshake process.')); + so.validate = function(section_id, value) { + const tls_jls = this.section.getOption('tls_jls').formvalue(section_id); + + if (tls_jls == 1 && !value) + return _('Expecting: %s cannot be empty when %s is enabled.').format(_('TLS SNI'), _('JLS')); + + return true; + }; so.depends({tls: '1', type: /^(http|vmess|vless|trojan|anytls|hysteria|hysteria2|shadowquic|trusttunnel|masque)$/}); so.depends({tls: '1', type: /^(tuic)$/, tls_disable_sni: '0'}); so.modalonly = true; @@ -1300,9 +1309,24 @@ return view.extend({ so.depends({type: 'ss', plugin_type: 'jls'}); so.modalonly = true; + so = ss.taboption('field_tls', form.Flag, 'tls_jls', _('JLS')); + so.default = so.disabled; + so.depends({tls: '1', type: /^(vmess|vless|trojan|anytls)$/}); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Value, 'tls_jls_username', _('JLS username')); + so.rmempty = false; + so.depends('tls_jls', '1'); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Value, 'tls_jls_password', _('JLS password')); + so.rmempty = false; + so.depends('tls_jls', '1'); + so.modalonly = true; + so = ss.taboption('field_tls', form.Flag, 'tls_reality', _('REALITY')); so.default = so.disabled; - so.depends({tls: '1', type: /^(vmess|vless|trojan)$/}); + so.depends({tls: '1', tls_jls: '0', type: /^(vmess|vless|trojan)$/}); so.modalonly = true; so = ss.taboption('field_tls', form.Value, 'tls_reality_public_key', _('REALITY public key')); @@ -1344,14 +1368,14 @@ return view.extend({ switch (type) { case 'vmess': if (!['http', 'h2', 'grpc', 'ws'].includes(value)) - return _('Expecting: only support %s.').format(_('HTTP') + + return _('Expecting: Only support %s.').format(_('HTTP') + ' / ' + _('HTTPUpgrade') + ' / ' + _('gRPC') + ' / ' + _('WebSocket')); break; case 'vless': if (!['http', 'h2', 'grpc', 'ws', 'xhttp'].includes(value)) - return _('Expecting: only support %s.').format(_('HTTP') + + return _('Expecting: Only support %s.').format(_('HTTP') + ' / ' + _('HTTPUpgrade') + ' / ' + _('gRPC') + ' / ' + _('WebSocket') + @@ -1359,7 +1383,7 @@ return view.extend({ break; case 'trojan': if (!['grpc', 'ws'].includes(value)) - return _('Expecting: only support %s.').format(_('gRPC') + + return _('Expecting: Only support %s.').format(_('gRPC') + ' / ' + _('WebSocket')); break; default: diff --git a/luci-app-fchomo/po/templates/fchomo.pot b/luci-app-fchomo/po/templates/fchomo.pot index a6507c55..9eb6f6b1 100644 --- a/luci-app-fchomo/po/templates/fchomo.pot +++ b/luci-app-fchomo/po/templates/fchomo.pot @@ -20,15 +20,15 @@ msgstr "" msgid "(Imported)" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1109 -#: htdocs/luci-static/resources/fchomo/listeners.js:1117 -#: htdocs/luci-static/resources/fchomo/listeners.js:1126 +#: htdocs/luci-static/resources/fchomo/listeners.js:1130 +#: htdocs/luci-static/resources/fchomo/listeners.js:1138 +#: htdocs/luci-static/resources/fchomo/listeners.js:1147 #: htdocs/luci-static/resources/view/fchomo/global.js:564 #: htdocs/luci-static/resources/view/fchomo/global.js:570 -#: htdocs/luci-static/resources/view/fchomo/node.js:1247 -#: htdocs/luci-static/resources/view/fchomo/node.js:1253 +#: htdocs/luci-static/resources/view/fchomo/node.js:1255 #: htdocs/luci-static/resources/view/fchomo/node.js:1261 -#: htdocs/luci-static/resources/view/fchomo/node.js:1267 +#: htdocs/luci-static/resources/view/fchomo/node.js:1269 +#: htdocs/luci-static/resources/view/fchomo/node.js:1275 msgid "(mTLS)" msgstr "" @@ -55,10 +55,10 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1105 #: htdocs/luci-static/resources/view/fchomo/client.js:1361 #: htdocs/luci-static/resources/view/fchomo/node.js:288 -#: htdocs/luci-static/resources/view/fchomo/node.js:2161 -#: htdocs/luci-static/resources/view/fchomo/node.js:2172 -#: htdocs/luci-static/resources/view/fchomo/node.js:2191 -#: htdocs/luci-static/resources/view/fchomo/node.js:2202 +#: htdocs/luci-static/resources/view/fchomo/node.js:2185 +#: htdocs/luci-static/resources/view/fchomo/node.js:2196 +#: htdocs/luci-static/resources/view/fchomo/node.js:2215 +#: htdocs/luci-static/resources/view/fchomo/node.js:2226 msgid "-- Please choose --" msgstr "" @@ -103,11 +103,11 @@ msgstr "" msgid "0 or 1 only." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1087 -#: htdocs/luci-static/resources/fchomo/listeners.js:1102 -#: htdocs/luci-static/resources/fchomo/listeners.js:1127 -#: htdocs/luci-static/resources/view/fchomo/node.js:1254 -#: htdocs/luci-static/resources/view/fchomo/node.js:1268 +#: htdocs/luci-static/resources/fchomo/listeners.js:1108 +#: htdocs/luci-static/resources/fchomo/listeners.js:1123 +#: htdocs/luci-static/resources/fchomo/listeners.js:1148 +#: htdocs/luci-static/resources/view/fchomo/node.js:1262 +#: htdocs/luci-static/resources/view/fchomo/node.js:1276 msgid "Save your configuration before uploading files!" msgstr "" @@ -205,11 +205,11 @@ msgstr "" msgid "Add a inbound" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1647 +#: htdocs/luci-static/resources/view/fchomo/node.js:1671 msgid "Add a provider" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2135 +#: htdocs/luci-static/resources/view/fchomo/node.js:2159 msgid "Add a proxy chain" msgstr "" @@ -233,11 +233,11 @@ msgstr "" msgid "Add a sub rule" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1944 +#: htdocs/luci-static/resources/view/fchomo/node.js:1968 msgid "Add prefix" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1948 +#: htdocs/luci-static/resources/view/fchomo/node.js:1972 msgid "Add suffix" msgstr "" @@ -276,7 +276,7 @@ msgid "" "network from a public website, it must be enabled." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1023 +#: htdocs/luci-static/resources/fchomo/listeners.js:1027 msgid "Allow insecure connections" msgstr "" @@ -324,11 +324,11 @@ msgid "Authenticated length" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:361 -#: htdocs/luci-static/resources/fchomo/listeners.js:1285 +#: htdocs/luci-static/resources/fchomo/listeners.js:1315 #: htdocs/luci-static/resources/view/fchomo/global.js:423 #: htdocs/luci-static/resources/view/fchomo/node.js:450 #: htdocs/luci-static/resources/view/fchomo/node.js:474 -#: htdocs/luci-static/resources/view/fchomo/node.js:1453 +#: htdocs/luci-static/resources/view/fchomo/node.js:1477 msgid "Auto" msgstr "" @@ -379,13 +379,13 @@ msgid "Binary mrs" msgstr "" #: htdocs/luci-static/resources/view/fchomo/global.js:758 -#: htdocs/luci-static/resources/view/fchomo/node.js:1614 -#: htdocs/luci-static/resources/view/fchomo/node.js:2033 +#: htdocs/luci-static/resources/view/fchomo/node.js:1638 +#: htdocs/luci-static/resources/view/fchomo/node.js:2057 msgid "Bind interface" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1615 -#: htdocs/luci-static/resources/view/fchomo/node.js:2034 +#: htdocs/luci-static/resources/view/fchomo/node.js:1639 +#: htdocs/luci-static/resources/view/fchomo/node.js:2058 msgid "Bind outbound interface.
" msgstr "" @@ -454,17 +454,17 @@ msgstr "" msgid "Cancel" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1220 +#: htdocs/luci-static/resources/view/fchomo/node.js:1228 msgid "Cert fingerprint" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1221 +#: htdocs/luci-static/resources/view/fchomo/node.js:1229 msgid "" "Certificate fingerprint. Used to implement SSL Pinning and prevent MitM." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1079 -#: htdocs/luci-static/resources/view/fchomo/node.js:1247 +#: htdocs/luci-static/resources/fchomo/listeners.js:1087 +#: htdocs/luci-static/resources/view/fchomo/node.js:1255 msgid "Certificate path" msgstr "" @@ -522,25 +522,25 @@ msgid "" "to download the latest initial package." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:819 -#: htdocs/luci-static/resources/fchomo/listeners.js:1118 +#: htdocs/luci-static/resources/fchomo/listeners.js:823 +#: htdocs/luci-static/resources/fchomo/listeners.js:1139 #: htdocs/luci-static/resources/view/fchomo/global.js:571 #: htdocs/luci-static/resources/view/fchomo/node.js:1076 -#: htdocs/luci-static/resources/view/fchomo/node.js:1248 -#: htdocs/luci-static/resources/view/fchomo/node.js:1262 +#: htdocs/luci-static/resources/view/fchomo/node.js:1256 +#: htdocs/luci-static/resources/view/fchomo/node.js:1270 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:22 msgid "Client" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1117 +#: htdocs/luci-static/resources/fchomo/listeners.js:1138 msgid "Client Auth Certificate path" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1109 +#: htdocs/luci-static/resources/fchomo/listeners.js:1130 msgid "Client Auth type" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1293 +#: htdocs/luci-static/resources/view/fchomo/node.js:1301 msgid "Client fingerprint" msgstr "" @@ -587,14 +587,14 @@ msgid "Content copied to clipboard!" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:687 -#: htdocs/luci-static/resources/view/fchomo/node.js:1804 -#: htdocs/luci-static/resources/view/fchomo/node.js:1830 +#: htdocs/luci-static/resources/view/fchomo/node.js:1828 +#: htdocs/luci-static/resources/view/fchomo/node.js:1854 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:348 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:374 msgid "Content will not be verified, Please make sure you enter it correctly." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1803 +#: htdocs/luci-static/resources/view/fchomo/node.js:1827 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:347 msgid "Contents" msgstr "" @@ -619,7 +619,7 @@ msgstr "" msgid "Custom Direct List" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1935 +#: htdocs/luci-static/resources/view/fchomo/node.js:1959 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:420 msgid "Custom HTTP header." msgstr "" @@ -702,11 +702,11 @@ msgstr "" msgid "Destination addresses allowed to be forwarded via Wireguard." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2158 +#: htdocs/luci-static/resources/view/fchomo/node.js:2182 msgid "Destination provider" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2169 +#: htdocs/luci-static/resources/view/fchomo/node.js:2193 msgid "Destination proxy node" msgstr "" @@ -714,8 +714,8 @@ msgstr "" msgid "Dial fields" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2181 -#: htdocs/luci-static/resources/view/fchomo/node.js:2211 +#: htdocs/luci-static/resources/view/fchomo/node.js:2205 +#: htdocs/luci-static/resources/view/fchomo/node.js:2235 msgid "Different chain head/tail" msgstr "" @@ -784,18 +784,18 @@ msgid "Donot send server name in ClientHello." msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1668 -#: htdocs/luci-static/resources/view/fchomo/node.js:1240 -#: htdocs/luci-static/resources/view/fchomo/node.js:2017 +#: htdocs/luci-static/resources/view/fchomo/node.js:1248 +#: htdocs/luci-static/resources/view/fchomo/node.js:2041 msgid "Donot verifying server certificate." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1337 -#: htdocs/luci-static/resources/view/fchomo/node.js:1591 +#: htdocs/luci-static/resources/fchomo/listeners.js:1367 +#: htdocs/luci-static/resources/view/fchomo/node.js:1615 msgid "Download bandwidth" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1338 -#: htdocs/luci-static/resources/view/fchomo/node.js:1592 +#: htdocs/luci-static/resources/fchomo/listeners.js:1368 +#: htdocs/luci-static/resources/view/fchomo/node.js:1616 msgid "Download bandwidth in Mbps." msgstr "" @@ -811,16 +811,16 @@ msgstr "" msgid "Dual stack" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1287 +#: htdocs/luci-static/resources/view/fchomo/node.js:1295 msgid "ECH HTTPS record query servername" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1175 -#: htdocs/luci-static/resources/view/fchomo/node.js:1281 +#: htdocs/luci-static/resources/fchomo/listeners.js:1196 +#: htdocs/luci-static/resources/view/fchomo/node.js:1289 msgid "ECH config" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1134 +#: htdocs/luci-static/resources/fchomo/listeners.js:1155 msgid "ECH key" msgstr "" @@ -836,11 +836,11 @@ msgstr "" msgid "ETag support" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1431 +#: htdocs/luci-static/resources/view/fchomo/node.js:1455 msgid "Early Data first packet length limit." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1437 +#: htdocs/luci-static/resources/view/fchomo/node.js:1461 msgid "Early Data header name" msgstr "" @@ -856,7 +856,7 @@ msgstr "" msgid "Edit ruleset" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1801 +#: htdocs/luci-static/resources/view/fchomo/node.js:1825 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:345 msgid "Editer" msgstr "" @@ -880,9 +880,9 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/global.js:422 #: htdocs/luci-static/resources/view/fchomo/global.js:704 #: htdocs/luci-static/resources/view/fchomo/node.js:250 -#: htdocs/luci-static/resources/view/fchomo/node.js:1774 -#: htdocs/luci-static/resources/view/fchomo/node.js:2056 -#: htdocs/luci-static/resources/view/fchomo/node.js:2145 +#: htdocs/luci-static/resources/view/fchomo/node.js:1798 +#: htdocs/luci-static/resources/view/fchomo/node.js:2080 +#: htdocs/luci-static/resources/view/fchomo/node.js:2169 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:272 #: htdocs/luci-static/resources/view/fchomo/server.js:49 msgid "Enable" @@ -905,17 +905,17 @@ msgid "" "conversion for outbound connections" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1275 +#: htdocs/luci-static/resources/view/fchomo/node.js:1283 msgid "Enable ECH" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1325 -#: htdocs/luci-static/resources/view/fchomo/node.js:1579 +#: htdocs/luci-static/resources/fchomo/listeners.js:1355 +#: htdocs/luci-static/resources/view/fchomo/node.js:1603 msgid "Enable TCP Brutal" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1326 -#: htdocs/luci-static/resources/view/fchomo/node.js:1580 +#: htdocs/luci-static/resources/fchomo/listeners.js:1356 +#: htdocs/luci-static/resources/view/fchomo/node.js:1604 msgid "Enable TCP Brutal congestion control algorithm" msgstr "" @@ -923,7 +923,7 @@ msgstr "" msgid "Enable fast open" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1568 +#: htdocs/luci-static/resources/view/fchomo/node.js:1592 msgid "Enable multiplexing only for TCP." msgstr "" @@ -932,17 +932,17 @@ msgstr "" msgid "Enable obfuscate for downlink" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1320 -#: htdocs/luci-static/resources/view/fchomo/node.js:1562 +#: htdocs/luci-static/resources/fchomo/listeners.js:1350 +#: htdocs/luci-static/resources/view/fchomo/node.js:1586 msgid "Enable padding" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1573 +#: htdocs/luci-static/resources/view/fchomo/node.js:1597 msgid "Enable statistic" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:954 -#: htdocs/luci-static/resources/view/fchomo/node.js:1993 +#: htdocs/luci-static/resources/view/fchomo/node.js:2017 msgid "" "Enable the SUoT protocol, requires server support. Conflict with Multiplex." msgstr "" @@ -954,7 +954,7 @@ msgid "" "connections, losing the ability to masquerade with HTTP/3." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:782 +#: htdocs/luci-static/resources/fchomo/listeners.js:786 msgid "Encryption method" msgstr "" @@ -981,7 +981,7 @@ msgid "" "if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2114 +#: htdocs/luci-static/resources/view/fchomo/node.js:2138 msgid "Exclude matched node types." msgstr "" @@ -992,7 +992,7 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1243 -#: htdocs/luci-static/resources/view/fchomo/node.js:2107 +#: htdocs/luci-static/resources/view/fchomo/node.js:2131 msgid "Exclude nodes that meet keywords or regexps." msgstr "" @@ -1001,12 +1001,12 @@ msgid "Expand/Collapse result" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1186 -#: htdocs/luci-static/resources/view/fchomo/node.js:2092 +#: htdocs/luci-static/resources/view/fchomo/node.js:2116 msgid "Expected HTTP code. 204 will be used if empty." msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1188 -#: htdocs/luci-static/resources/view/fchomo/node.js:2094 +#: htdocs/luci-static/resources/view/fchomo/node.js:2118 msgid "Expected status" msgstr "" @@ -1036,9 +1036,9 @@ msgstr "" #: htdocs/luci-static/resources/fchomo.js:1968 #: htdocs/luci-static/resources/fchomo/listeners.js:284 #: htdocs/luci-static/resources/fchomo/listeners.js:331 -#: htdocs/luci-static/resources/fchomo/listeners.js:811 -#: htdocs/luci-static/resources/fchomo/listeners.js:842 -#: htdocs/luci-static/resources/fchomo/listeners.js:943 +#: htdocs/luci-static/resources/fchomo/listeners.js:815 +#: htdocs/luci-static/resources/fchomo/listeners.js:846 +#: htdocs/luci-static/resources/fchomo/listeners.js:947 #: htdocs/luci-static/resources/view/fchomo/client.js:71 #: htdocs/luci-static/resources/view/fchomo/client.js:1051 #: htdocs/luci-static/resources/view/fchomo/client.js:1596 @@ -1048,27 +1048,44 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:480 #: htdocs/luci-static/resources/view/fchomo/node.js:482 #: htdocs/luci-static/resources/view/fchomo/node.js:1099 -#: htdocs/luci-static/resources/view/fchomo/node.js:1226 -#: htdocs/luci-static/resources/view/fchomo/node.js:2181 -#: htdocs/luci-static/resources/view/fchomo/node.js:2211 +#: htdocs/luci-static/resources/view/fchomo/node.js:1234 +#: htdocs/luci-static/resources/view/fchomo/node.js:2205 +#: htdocs/luci-static/resources/view/fchomo/node.js:2235 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:300 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:314 msgid "Expecting: %s" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 +msgid "Expecting: %s cannot be empty when %s is enabled." +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/node.js:278 #: htdocs/luci-static/resources/view/fchomo/node.js:296 msgid "Expecting: Least one of %s or %s." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:654 -#: htdocs/luci-static/resources/fchomo/listeners.js:1246 -#: htdocs/luci-static/resources/fchomo/listeners.js:1253 +#: htdocs/luci-static/resources/fchomo/listeners.js:1099 +msgid "Expecting: Cannot be empty." +msgstr "" + +#: htdocs/luci-static/resources/fchomo/listeners.js:1210 +msgid "Expecting: Cannot be enabled when %s is enabled." +msgstr "" + +#: htdocs/luci-static/resources/fchomo/listeners.js:1096 +msgid "Expecting: Keep empty when %s is enabled." +msgstr "" + +#: htdocs/luci-static/resources/fchomo/listeners.js:655 +#: htdocs/luci-static/resources/fchomo/listeners.js:659 +#: htdocs/luci-static/resources/fchomo/listeners.js:1276 +#: htdocs/luci-static/resources/fchomo/listeners.js:1283 #: htdocs/luci-static/resources/view/fchomo/node.js:985 -#: htdocs/luci-static/resources/view/fchomo/node.js:1346 -#: htdocs/luci-static/resources/view/fchomo/node.js:1353 -#: htdocs/luci-static/resources/view/fchomo/node.js:1361 -msgid "Expecting: only support %s." +#: htdocs/luci-static/resources/view/fchomo/node.js:1370 +#: htdocs/luci-static/resources/view/fchomo/node.js:1377 +#: htdocs/luci-static/resources/view/fchomo/node.js:1385 +msgid "Expecting: Only support %s." msgstr "" #: htdocs/luci-static/resources/view/fchomo/global.js:723 @@ -1120,7 +1137,7 @@ msgid "Fallback filter" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1238 -#: htdocs/luci-static/resources/view/fchomo/node.js:2101 +#: htdocs/luci-static/resources/view/fchomo/node.js:2125 msgid "Filter nodes that meet keywords or regexps." msgstr "" @@ -1161,9 +1178,9 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1187 -#: htdocs/luci-static/resources/view/fchomo/node.js:1954 -#: htdocs/luci-static/resources/view/fchomo/node.js:1962 -#: htdocs/luci-static/resources/view/fchomo/node.js:2093 +#: htdocs/luci-static/resources/view/fchomo/node.js:1978 +#: htdocs/luci-static/resources/view/fchomo/node.js:1986 +#: htdocs/luci-static/resources/view/fchomo/node.js:2117 msgid "" "For format see %s." @@ -1182,7 +1199,7 @@ msgstr "" msgid "Format" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:729 +#: htdocs/luci-static/resources/fchomo/listeners.js:733 msgid "Forwarding rate limit" msgstr "" @@ -1193,7 +1210,7 @@ msgstr "" msgid "FullCombo Shark!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1386 +#: htdocs/luci-static/resources/view/fchomo/node.js:1410 msgid "GET" msgstr "" @@ -1213,7 +1230,7 @@ msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:119 #: htdocs/luci-static/resources/view/fchomo/client.js:1042 #: htdocs/luci-static/resources/view/fchomo/node.js:236 -#: htdocs/luci-static/resources/view/fchomo/node.js:1764 +#: htdocs/luci-static/resources/view/fchomo/node.js:1788 msgid "General fields" msgstr "" @@ -1228,10 +1245,10 @@ msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:262 #: htdocs/luci-static/resources/fchomo/listeners.js:306 #: htdocs/luci-static/resources/fchomo/listeners.js:308 -#: htdocs/luci-static/resources/fchomo/listeners.js:915 -#: htdocs/luci-static/resources/fchomo/listeners.js:1167 +#: htdocs/luci-static/resources/fchomo/listeners.js:919 +#: htdocs/luci-static/resources/fchomo/listeners.js:1188 #: htdocs/luci-static/resources/view/fchomo/global.js:608 -#: htdocs/luci-static/resources/view/fchomo/node.js:1922 +#: htdocs/luci-static/resources/view/fchomo/node.js:1946 msgid "Generate" msgstr "" @@ -1300,17 +1317,17 @@ msgstr "" #: htdocs/luci-static/resources/fchomo.js:154 #: htdocs/luci-static/resources/fchomo.js:191 -#: htdocs/luci-static/resources/fchomo/listeners.js:665 +#: htdocs/luci-static/resources/fchomo/listeners.js:669 #: htdocs/luci-static/resources/view/fchomo/node.js:996 -#: htdocs/luci-static/resources/view/fchomo/node.js:1333 -#: htdocs/luci-static/resources/view/fchomo/node.js:1346 -#: htdocs/luci-static/resources/view/fchomo/node.js:1353 +#: htdocs/luci-static/resources/view/fchomo/node.js:1357 +#: htdocs/luci-static/resources/view/fchomo/node.js:1370 +#: htdocs/luci-static/resources/view/fchomo/node.js:1377 msgid "HTTP" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:316 -#: htdocs/luci-static/resources/view/fchomo/node.js:1408 -#: htdocs/luci-static/resources/view/fchomo/node.js:1934 +#: htdocs/luci-static/resources/view/fchomo/node.js:1432 +#: htdocs/luci-static/resources/view/fchomo/node.js:1958 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:419 msgid "HTTP header" msgstr "" @@ -1336,7 +1353,7 @@ msgstr "" msgid "HTTP mask: %s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1385 +#: htdocs/luci-static/resources/view/fchomo/node.js:1409 msgid "HTTP request method" msgstr "" @@ -1355,9 +1372,9 @@ msgid "" "returned if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1334 -#: htdocs/luci-static/resources/view/fchomo/node.js:1347 -#: htdocs/luci-static/resources/view/fchomo/node.js:1354 +#: htdocs/luci-static/resources/view/fchomo/node.js:1358 +#: htdocs/luci-static/resources/view/fchomo/node.js:1371 +#: htdocs/luci-static/resources/view/fchomo/node.js:1378 msgid "HTTPUpgrade" msgstr "" @@ -1369,11 +1386,11 @@ msgstr "" msgid "Handshake mode" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:712 +#: htdocs/luci-static/resources/fchomo/listeners.js:716 msgid "Handshake target proxy" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:677 +#: htdocs/luci-static/resources/fchomo/listeners.js:681 msgid "Handshake target that supports TLS 1.3" msgstr "" @@ -1391,27 +1408,27 @@ msgid "Health check" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1156 -#: htdocs/luci-static/resources/view/fchomo/node.js:2061 +#: htdocs/luci-static/resources/view/fchomo/node.js:2085 msgid "Health check URL" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1185 -#: htdocs/luci-static/resources/view/fchomo/node.js:2091 +#: htdocs/luci-static/resources/view/fchomo/node.js:2115 msgid "Health check expected status" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1165 -#: htdocs/luci-static/resources/view/fchomo/node.js:2071 +#: htdocs/luci-static/resources/view/fchomo/node.js:2095 msgid "Health check interval" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1172 -#: htdocs/luci-static/resources/view/fchomo/node.js:2078 +#: htdocs/luci-static/resources/view/fchomo/node.js:2102 msgid "Health check timeout" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1044 -#: htdocs/luci-static/resources/view/fchomo/node.js:1766 +#: htdocs/luci-static/resources/view/fchomo/node.js:1790 msgid "Health fields" msgstr "" @@ -1424,7 +1441,7 @@ msgstr "" msgid "Hidden" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:670 +#: htdocs/luci-static/resources/fchomo/listeners.js:674 #: htdocs/luci-static/resources/view/fchomo/node.js:1001 msgid "Host that supports TLS 1.3" msgstr "" @@ -1441,7 +1458,7 @@ msgstr "" msgid "Host/SNI override" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1030 +#: htdocs/luci-static/resources/fchomo/listeners.js:1034 #: htdocs/luci-static/resources/view/fchomo/node.js:1168 msgid "" "Hostname that the client attempts to connect to at the start of the TLS " @@ -1480,8 +1497,8 @@ msgstr "" msgid "IP override" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1628 -#: htdocs/luci-static/resources/view/fchomo/node.js:2047 +#: htdocs/luci-static/resources/view/fchomo/node.js:1652 +#: htdocs/luci-static/resources/view/fchomo/node.js:2071 msgid "IP version" msgstr "" @@ -1542,8 +1559,8 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1804 #: htdocs/luci-static/resources/view/fchomo/client.js:1839 #: htdocs/luci-static/resources/view/fchomo/client.js:1860 -#: htdocs/luci-static/resources/view/fchomo/node.js:1654 -#: htdocs/luci-static/resources/view/fchomo/node.js:1752 +#: htdocs/luci-static/resources/view/fchomo/node.js:1678 +#: htdocs/luci-static/resources/view/fchomo/node.js:1776 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:154 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:249 msgid "Import mihomo config" @@ -1559,16 +1576,16 @@ msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:472 #: htdocs/luci-static/resources/view/fchomo/node.js:683 #: htdocs/luci-static/resources/view/fchomo/node.js:689 -#: htdocs/luci-static/resources/view/fchomo/node.js:1999 -#: htdocs/luci-static/resources/view/fchomo/node.js:2005 +#: htdocs/luci-static/resources/view/fchomo/node.js:2023 +#: htdocs/luci-static/resources/view/fchomo/node.js:2029 msgid "In Mbps." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:730 +#: htdocs/luci-static/resources/fchomo/listeners.js:734 msgid "In bps. 0 means no speed limit." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1842 +#: htdocs/luci-static/resources/view/fchomo/node.js:1866 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:392 msgid "In bytes. %s will be used if empty." msgstr "" @@ -1581,11 +1598,11 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1173 #: htdocs/luci-static/resources/view/fchomo/client.js:1219 -#: htdocs/luci-static/resources/view/fchomo/node.js:2079 +#: htdocs/luci-static/resources/view/fchomo/node.js:2103 msgid "In millisecond. %s will be used if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1477 +#: htdocs/luci-static/resources/view/fchomo/node.js:1501 msgid "In milliseconds." msgstr "" @@ -1594,7 +1611,7 @@ msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:619 #: htdocs/luci-static/resources/view/fchomo/node.js:587 #: htdocs/luci-static/resources/view/fchomo/node.js:594 -#: htdocs/luci-static/resources/view/fchomo/node.js:1424 +#: htdocs/luci-static/resources/view/fchomo/node.js:1448 msgid "In seconds." msgstr "" @@ -1603,8 +1620,8 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/global.js:451 #: htdocs/luci-static/resources/view/fchomo/global.js:536 #: htdocs/luci-static/resources/view/fchomo/node.js:677 -#: htdocs/luci-static/resources/view/fchomo/node.js:1848 -#: htdocs/luci-static/resources/view/fchomo/node.js:2072 +#: htdocs/luci-static/resources/view/fchomo/node.js:1872 +#: htdocs/luci-static/resources/view/fchomo/node.js:2096 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:398 msgid "In seconds. %s will be used if empty." msgstr "" @@ -1615,7 +1632,7 @@ msgid "" "connection timeout." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:831 +#: htdocs/luci-static/resources/fchomo/listeners.js:835 #: htdocs/luci-static/resources/view/fchomo/node.js:1088 msgid "" "In the order of one Padding-Length and one Padding-" @@ -1656,7 +1673,7 @@ msgstr "" msgid "Info" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1781 +#: htdocs/luci-static/resources/view/fchomo/node.js:1805 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:288 msgid "Inline" msgstr "" @@ -1665,15 +1682,33 @@ msgstr "" msgid "Interface Control" msgstr "" +#: htdocs/luci-static/resources/fchomo/listeners.js:648 +#: htdocs/luci-static/resources/fchomo/listeners.js:659 +#: htdocs/luci-static/resources/fchomo/listeners.js:1096 +#: htdocs/luci-static/resources/fchomo/listeners.js:1210 +#: htdocs/luci-static/resources/view/fchomo/node.js:978 +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 +#: htdocs/luci-static/resources/view/fchomo/node.js:1311 +msgid "JLS" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:1321 +msgid "JLS password" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:1316 +msgid "JLS username" +msgstr "" + #: htdocs/luci-static/resources/fchomo.js:53 #: htdocs/luci-static/resources/fchomo.js:60 #: htdocs/luci-static/resources/fchomo.js:174 #: htdocs/luci-static/resources/fchomo.js:379 -#: htdocs/luci-static/resources/view/fchomo/node.js:2021 +#: htdocs/luci-static/resources/view/fchomo/node.js:2045 msgid "Keep default" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1513 +#: htdocs/luci-static/resources/view/fchomo/node.js:1537 msgid "Keep-alive period" msgstr "" @@ -1682,12 +1717,12 @@ msgstr "" msgid "Key" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1094 -#: htdocs/luci-static/resources/view/fchomo/node.js:1261 +#: htdocs/luci-static/resources/fchomo/listeners.js:1115 +#: htdocs/luci-static/resources/view/fchomo/node.js:1269 msgid "Key path" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:850 +#: htdocs/luci-static/resources/fchomo/listeners.js:854 msgid "Keypairs" msgstr "" @@ -1699,14 +1734,14 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1810 #: htdocs/luci-static/resources/view/fchomo/client.js:1866 #: htdocs/luci-static/resources/view/fchomo/node.js:245 -#: htdocs/luci-static/resources/view/fchomo/node.js:1769 -#: htdocs/luci-static/resources/view/fchomo/node.js:2140 +#: htdocs/luci-static/resources/view/fchomo/node.js:1793 +#: htdocs/luci-static/resources/view/fchomo/node.js:2164 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:267 msgid "Label" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1179 -#: htdocs/luci-static/resources/view/fchomo/node.js:2085 +#: htdocs/luci-static/resources/view/fchomo/node.js:2109 msgid "Lazy" msgstr "" @@ -1733,8 +1768,8 @@ msgstr "" msgid "Less compatibility and sometimes better performance." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1036 -#: htdocs/luci-static/resources/view/fchomo/node.js:1174 +#: htdocs/luci-static/resources/fchomo/listeners.js:1040 +#: htdocs/luci-static/resources/view/fchomo/node.js:1182 msgid "List of supported application level protocols, in order of preference." msgstr "" @@ -1767,7 +1802,7 @@ msgstr "" msgid "Load balance" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1779 +#: htdocs/luci-static/resources/view/fchomo/node.js:1803 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:286 msgid "Local" msgstr "" @@ -1855,7 +1890,7 @@ msgstr "" msgid "Match rule set." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1430 +#: htdocs/luci-static/resources/view/fchomo/node.js:1454 msgid "Max Early Data" msgstr "" @@ -1864,15 +1899,15 @@ msgstr "" msgid "Max UDP relay packet size" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1297 +#: htdocs/luci-static/resources/fchomo/listeners.js:1327 msgid "Max buffered posts" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1488 +#: htdocs/luci-static/resources/view/fchomo/node.js:1512 msgid "Max concurrency" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1493 +#: htdocs/luci-static/resources/view/fchomo/node.js:1517 msgid "Max connections" msgstr "" @@ -1885,8 +1920,8 @@ msgstr "" msgid "Max download speed" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1308 -#: htdocs/luci-static/resources/view/fchomo/node.js:1470 +#: htdocs/luci-static/resources/fchomo/listeners.js:1338 +#: htdocs/luci-static/resources/view/fchomo/node.js:1494 msgid "Max each POST bytes" msgstr "" @@ -1902,15 +1937,15 @@ msgstr "" msgid "Max realms per client IP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1503 +#: htdocs/luci-static/resources/view/fchomo/node.js:1527 msgid "Max request times" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1508 +#: htdocs/luci-static/resources/view/fchomo/node.js:1532 msgid "Max reusable seconds" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1498 +#: htdocs/luci-static/resources/view/fchomo/node.js:1522 msgid "Max reuse times" msgstr "" @@ -1919,12 +1954,12 @@ msgstr "" msgid "Max upload speed" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1534 -#: htdocs/luci-static/resources/view/fchomo/node.js:1554 +#: htdocs/luci-static/resources/view/fchomo/node.js:1558 +#: htdocs/luci-static/resources/view/fchomo/node.js:1578 msgid "Maximum connections" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1552 +#: htdocs/luci-static/resources/view/fchomo/node.js:1576 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." "
Conflict with %s and %s." @@ -1942,7 +1977,7 @@ msgid "" "rate." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1551 +#: htdocs/luci-static/resources/view/fchomo/node.js:1575 msgid "Maximum streams" msgstr "" @@ -1967,11 +2002,11 @@ msgstr "" msgid "Min of idle sessions to keep" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1476 +#: htdocs/luci-static/resources/view/fchomo/node.js:1500 msgid "Min posts interval" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1543 +#: htdocs/luci-static/resources/view/fchomo/node.js:1567 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "" @@ -1981,8 +2016,8 @@ msgstr "" msgid "Minimum padding rate" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1542 -#: htdocs/luci-static/resources/view/fchomo/node.js:1554 +#: htdocs/luci-static/resources/view/fchomo/node.js:1566 +#: htdocs/luci-static/resources/view/fchomo/node.js:1578 msgid "Minimum streams" msgstr "" @@ -1999,8 +2034,8 @@ msgstr "" msgid "Mixed port" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1315 -#: htdocs/luci-static/resources/view/fchomo/node.js:1520 +#: htdocs/luci-static/resources/fchomo/listeners.js:1345 +#: htdocs/luci-static/resources/view/fchomo/node.js:1544 msgid "Multiplex" msgstr "" @@ -2022,7 +2057,7 @@ msgstr "" msgid "Name of the Proxy group as outbound." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1854 +#: htdocs/luci-static/resources/view/fchomo/node.js:1878 msgid "Name of the Proxy group to download provider." msgstr "" @@ -2050,7 +2085,7 @@ msgstr "" msgid "Network type" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2023 +#: htdocs/luci-static/resources/view/fchomo/node.js:2047 msgid "No" msgstr "" @@ -2058,7 +2093,7 @@ msgstr "" msgid "No Authentication IP ranges" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1292 +#: htdocs/luci-static/resources/fchomo/listeners.js:1322 msgid "No SSE header" msgstr "" @@ -2066,12 +2101,12 @@ msgstr "" msgid "No add'l params" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1460 +#: htdocs/luci-static/resources/view/fchomo/node.js:1484 msgid "No gRPC header" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1180 -#: htdocs/luci-static/resources/view/fchomo/node.js:2086 +#: htdocs/luci-static/resources/view/fchomo/node.js:2110 msgid "No testing is performed when this provider node is not in use." msgstr "" @@ -2089,17 +2124,17 @@ msgid "Node" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1242 -#: htdocs/luci-static/resources/view/fchomo/node.js:2106 +#: htdocs/luci-static/resources/view/fchomo/node.js:2130 msgid "Node exclude filter" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1247 -#: htdocs/luci-static/resources/view/fchomo/node.js:2113 +#: htdocs/luci-static/resources/view/fchomo/node.js:2137 msgid "Node exclude type" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1237 -#: htdocs/luci-static/resources/view/fchomo/node.js:2100 +#: htdocs/luci-static/resources/view/fchomo/node.js:2124 msgid "Node filter" msgstr "" @@ -2127,7 +2162,7 @@ msgstr "" msgid "ON" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:664 +#: htdocs/luci-static/resources/fchomo/listeners.js:668 #: htdocs/luci-static/resources/view/fchomo/node.js:995 msgid "Obfs Mode" msgstr "" @@ -2165,7 +2200,7 @@ msgstr "" msgid "One or more numbers in the range 0-63 separated by commas" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1024 +#: htdocs/luci-static/resources/fchomo/listeners.js:1028 msgid "Only applicable when %s are used as a frontend." msgstr "" @@ -2190,7 +2225,7 @@ msgstr "" msgid "Option is deprecated. Please use %s instead." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1971 +#: htdocs/luci-static/resources/view/fchomo/node.js:1995 msgid "Other configuration items" msgstr "" @@ -2198,8 +2233,8 @@ msgstr "" msgid "Outbound" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1233 -#: htdocs/luci-static/resources/view/fchomo/node.js:2010 +#: htdocs/luci-static/resources/view/fchomo/node.js:1241 +#: htdocs/luci-static/resources/view/fchomo/node.js:2034 msgid "Override cert DNSName" msgstr "" @@ -2209,7 +2244,7 @@ msgid "Override destination" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1043 -#: htdocs/luci-static/resources/view/fchomo/node.js:1765 +#: htdocs/luci-static/resources/view/fchomo/node.js:1789 msgid "Override fields" msgstr "" @@ -2229,7 +2264,7 @@ msgstr "" msgid "Override the existing ECS in original request." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1288 +#: htdocs/luci-static/resources/view/fchomo/node.js:1296 msgid "Overrides the domain name used for HTTPS record queries." msgstr "" @@ -2237,11 +2272,11 @@ msgstr "" msgid "Overview" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1387 +#: htdocs/luci-static/resources/view/fchomo/node.js:1411 msgid "POST" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1388 +#: htdocs/luci-static/resources/view/fchomo/node.js:1412 msgid "PUT" msgstr "" @@ -2249,7 +2284,7 @@ msgstr "" msgid "Packet encoding" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1465 +#: htdocs/luci-static/resources/view/fchomo/node.js:1489 msgid "Padding bytes" msgstr "" @@ -2257,14 +2292,14 @@ msgstr "" msgid "Padding scheme" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:829 +#: htdocs/luci-static/resources/fchomo/listeners.js:833 #: htdocs/luci-static/resources/view/fchomo/node.js:1086 msgid "Paddings" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:167 #: htdocs/luci-static/resources/fchomo/listeners.js:184 -#: htdocs/luci-static/resources/fchomo/listeners.js:691 +#: htdocs/luci-static/resources/fchomo/listeners.js:695 #: htdocs/luci-static/resources/view/fchomo/node.js:310 #: htdocs/luci-static/resources/view/fchomo/node.js:331 #: htdocs/luci-static/resources/view/fchomo/node.js:1014 @@ -2279,8 +2314,8 @@ msgstr "" msgid "Path in bundle: %s" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:769 -#: htdocs/luci-static/resources/view/fchomo/node.js:1829 +#: htdocs/luci-static/resources/fchomo/listeners.js:773 +#: htdocs/luci-static/resources/view/fchomo/node.js:1853 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:373 msgid "Payload" msgstr "" @@ -2320,8 +2355,8 @@ msgid "" "standards." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1802 -#: htdocs/luci-static/resources/view/fchomo/node.js:1828 +#: htdocs/luci-static/resources/view/fchomo/node.js:1826 +#: htdocs/luci-static/resources/view/fchomo/node.js:1852 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:346 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:372 msgid "" @@ -2335,7 +2370,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1533 #: htdocs/luci-static/resources/view/fchomo/client.js:1788 #: htdocs/luci-static/resources/view/fchomo/client.js:1840 -#: htdocs/luci-static/resources/view/fchomo/node.js:1655 +#: htdocs/luci-static/resources/view/fchomo/node.js:1679 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:155 msgid "Please type %s fields of mihomo config.
" msgstr "" @@ -2350,7 +2385,7 @@ msgstr "" msgid "Plugin fields" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:643 +#: htdocs/luci-static/resources/fchomo/listeners.js:644 #: htdocs/luci-static/resources/view/fchomo/node.js:972 msgid "Plugin type" msgstr "" @@ -2387,7 +2422,7 @@ msgstr "" msgid "Pre-shared key" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:967 +#: htdocs/luci-static/resources/fchomo/listeners.js:971 #: htdocs/luci-static/resources/view/fchomo/node.js:1121 msgid "Pre-shared key of rendezvous server" msgstr "" @@ -2407,10 +2442,10 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/global.js:760 #: htdocs/luci-static/resources/view/fchomo/global.js:777 -#: htdocs/luci-static/resources/view/fchomo/node.js:1616 -#: htdocs/luci-static/resources/view/fchomo/node.js:1623 -#: htdocs/luci-static/resources/view/fchomo/node.js:2035 -#: htdocs/luci-static/resources/view/fchomo/node.js:2042 +#: htdocs/luci-static/resources/view/fchomo/node.js:1640 +#: htdocs/luci-static/resources/view/fchomo/node.js:1647 +#: htdocs/luci-static/resources/view/fchomo/node.js:2059 +#: htdocs/luci-static/resources/view/fchomo/node.js:2066 msgid "Priority: Proxy Node > Global." msgstr "" @@ -2427,7 +2462,7 @@ msgstr "" msgid "Private key" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:737 +#: htdocs/luci-static/resources/fchomo/listeners.js:741 msgid "" "Probe the QUIC version of the handshake target during the first connection." msgstr "" @@ -2436,12 +2471,12 @@ msgstr "" msgid "Process matching mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1961 +#: htdocs/luci-static/resources/view/fchomo/node.js:1985 msgid "Programmable replacement" msgstr "" #: htdocs/luci-static/resources/view/fchomo/global.js:708 -#: htdocs/luci-static/resources/view/fchomo/node.js:1526 +#: htdocs/luci-static/resources/view/fchomo/node.js:1550 msgid "Protocol" msgstr "" @@ -2456,13 +2491,13 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1100 -#: htdocs/luci-static/resources/view/fchomo/node.js:1638 -#: htdocs/luci-static/resources/view/fchomo/node.js:1647 -#: htdocs/luci-static/resources/view/fchomo/node.js:2151 +#: htdocs/luci-static/resources/view/fchomo/node.js:1662 +#: htdocs/luci-static/resources/view/fchomo/node.js:1671 +#: htdocs/luci-static/resources/view/fchomo/node.js:2175 msgid "Provider" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1835 +#: htdocs/luci-static/resources/view/fchomo/node.js:1859 msgid "Provider URL" msgstr "" @@ -2485,19 +2520,19 @@ msgid "Proxy MAC-s" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:222 -#: htdocs/luci-static/resources/view/fchomo/node.js:2150 +#: htdocs/luci-static/resources/view/fchomo/node.js:2174 msgid "Proxy Node" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2126 -#: htdocs/luci-static/resources/view/fchomo/node.js:2135 +#: htdocs/luci-static/resources/view/fchomo/node.js:2150 +#: htdocs/luci-static/resources/view/fchomo/node.js:2159 msgid "Proxy chain" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:585 #: htdocs/luci-static/resources/view/fchomo/client.js:801 #: htdocs/luci-static/resources/view/fchomo/client.js:1631 -#: htdocs/luci-static/resources/view/fchomo/node.js:1853 +#: htdocs/luci-static/resources/view/fchomo/node.js:1877 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:403 msgid "Proxy group" msgstr "" @@ -2524,7 +2559,7 @@ msgstr "" msgid "QUIC based 0-RTT" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:736 +#: htdocs/luci-static/resources/fchomo/listeners.js:740 msgid "QUIC version probe" msgstr "" @@ -2538,34 +2573,35 @@ msgstr "" msgid "Quick Reload" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1182 -#: htdocs/luci-static/resources/view/fchomo/node.js:1302 +#: htdocs/luci-static/resources/fchomo/listeners.js:1097 +#: htdocs/luci-static/resources/fchomo/listeners.js:1203 +#: htdocs/luci-static/resources/view/fchomo/node.js:1326 msgid "REALITY" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1317 +#: htdocs/luci-static/resources/view/fchomo/node.js:1341 msgid "REALITY X25519MLKEM768 PQC support" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1219 +#: htdocs/luci-static/resources/fchomo/listeners.js:1249 msgid "REALITY certificate issued to" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1187 +#: htdocs/luci-static/resources/fchomo/listeners.js:1217 msgid "REALITY handshake server" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1194 +#: htdocs/luci-static/resources/fchomo/listeners.js:1224 msgid "REALITY private key" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1209 -#: htdocs/luci-static/resources/view/fchomo/node.js:1307 +#: htdocs/luci-static/resources/fchomo/listeners.js:1239 +#: htdocs/luci-static/resources/view/fchomo/node.js:1331 msgid "REALITY public key" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1213 -#: htdocs/luci-static/resources/view/fchomo/node.js:1312 +#: htdocs/luci-static/resources/fchomo/listeners.js:1243 +#: htdocs/luci-static/resources/view/fchomo/node.js:1336 msgid "REALITY short ID" msgstr "" @@ -2575,8 +2611,8 @@ msgstr "" msgid "REMATCH-NAME marking" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:800 -#: htdocs/luci-static/resources/fchomo/listeners.js:819 +#: htdocs/luci-static/resources/fchomo/listeners.js:804 +#: htdocs/luci-static/resources/fchomo/listeners.js:823 #: htdocs/luci-static/resources/view/fchomo/node.js:1076 msgid "RTT" msgstr "" @@ -2593,12 +2629,12 @@ msgstr "" msgid "Randomized traffic characteristics" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:956 +#: htdocs/luci-static/resources/fchomo/listeners.js:960 #: htdocs/luci-static/resources/view/fchomo/node.js:1110 msgid "Realm" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:972 +#: htdocs/luci-static/resources/fchomo/listeners.js:976 #: htdocs/luci-static/resources/view/fchomo/node.js:1126 msgid "Realm ID" msgstr "" @@ -2646,7 +2682,7 @@ msgstr "" msgid "Rematching routing rules" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1780 +#: htdocs/luci-static/resources/view/fchomo/node.js:1804 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:287 msgid "Remote" msgstr "" @@ -2661,23 +2697,23 @@ msgid "Remove" msgstr "" #: htdocs/luci-static/resources/fchomo.js:1739 -#: htdocs/luci-static/resources/view/fchomo/node.js:1756 -#: htdocs/luci-static/resources/view/fchomo/node.js:1758 +#: htdocs/luci-static/resources/view/fchomo/node.js:1780 +#: htdocs/luci-static/resources/view/fchomo/node.js:1782 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:259 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:261 msgid "Remove idles" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:961 +#: htdocs/luci-static/resources/fchomo/listeners.js:965 #: htdocs/luci-static/resources/view/fchomo/node.js:1115 msgid "Rendezvous server" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1952 +#: htdocs/luci-static/resources/view/fchomo/node.js:1976 msgid "Replace name" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1953 +#: htdocs/luci-static/resources/view/fchomo/node.js:1977 msgid "Replace node name." msgstr "" @@ -2685,9 +2721,9 @@ msgstr "" msgid "Request" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1271 -#: htdocs/luci-static/resources/view/fchomo/node.js:1394 -#: htdocs/luci-static/resources/view/fchomo/node.js:1401 +#: htdocs/luci-static/resources/fchomo/listeners.js:1301 +#: htdocs/luci-static/resources/view/fchomo/node.js:1418 +#: htdocs/luci-static/resources/view/fchomo/node.js:1425 msgid "Request path" msgstr "" @@ -2704,7 +2740,7 @@ msgid "Require any" msgstr "" #: htdocs/luci-static/resources/fchomo.js:406 -#: htdocs/luci-static/resources/view/fchomo/node.js:1318 +#: htdocs/luci-static/resources/view/fchomo/node.js:1342 msgid "Requires server support." msgstr "" @@ -2716,7 +2752,12 @@ msgstr "" msgid "Resources management" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:705 +#: htdocs/luci-static/resources/fchomo/listeners.js:647 +#: htdocs/luci-static/resources/view/fchomo/node.js:977 +msgid "Restls" +msgstr "" + +#: htdocs/luci-static/resources/fchomo/listeners.js:709 #: htdocs/luci-static/resources/view/fchomo/node.js:1034 msgid "Restls script" msgstr "" @@ -2755,8 +2796,8 @@ msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:568 #: htdocs/luci-static/resources/view/fchomo/global.js:776 -#: htdocs/luci-static/resources/view/fchomo/node.js:1622 -#: htdocs/luci-static/resources/view/fchomo/node.js:2041 +#: htdocs/luci-static/resources/view/fchomo/node.js:1646 +#: htdocs/luci-static/resources/view/fchomo/node.js:2065 msgid "Routing mark (Fwmark)" msgstr "" @@ -2836,7 +2877,7 @@ msgstr "" msgid "STUN" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:978 +#: htdocs/luci-static/resources/fchomo/listeners.js:982 #: htdocs/luci-static/resources/view/fchomo/node.js:1132 msgid "STUN servers" msgstr "" @@ -2892,9 +2933,9 @@ msgstr "" msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:800 -#: htdocs/luci-static/resources/fchomo/listeners.js:1080 -#: htdocs/luci-static/resources/fchomo/listeners.js:1095 +#: htdocs/luci-static/resources/fchomo/listeners.js:804 +#: htdocs/luci-static/resources/fchomo/listeners.js:1088 +#: htdocs/luci-static/resources/fchomo/listeners.js:1116 #: htdocs/luci-static/resources/view/fchomo/server.js:58 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:62 msgid "Server" @@ -2904,9 +2945,9 @@ msgstr "" msgid "Server address" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1265 -#: htdocs/luci-static/resources/view/fchomo/node.js:1373 -#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/fchomo/listeners.js:1295 +#: htdocs/luci-static/resources/view/fchomo/node.js:1397 +#: htdocs/luci-static/resources/view/fchomo/node.js:1403 msgid "Server hostname" msgstr "" @@ -2923,6 +2964,13 @@ msgstr "" msgid "ShadowQUIC" msgstr "" +#: htdocs/luci-static/resources/fchomo/listeners.js:646 +#: htdocs/luci-static/resources/fchomo/listeners.js:656 +#: htdocs/luci-static/resources/view/fchomo/node.js:976 +#: htdocs/luci-static/resources/view/fchomo/node.js:986 +msgid "ShadowTLS" +msgstr "" + #: htdocs/luci-static/resources/fchomo.js:157 #: htdocs/luci-static/resources/fchomo.js:193 msgid "Shadowsocks" @@ -2943,7 +2991,7 @@ msgstr "" msgid "Shadowsocks password" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1574 +#: htdocs/luci-static/resources/view/fchomo/node.js:1598 msgid "Show connections in the dashboard for breaking connections easier." msgstr "" @@ -2955,14 +3003,14 @@ msgstr "" msgid "Simple round-robin all nodes" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1841 +#: htdocs/luci-static/resources/view/fchomo/node.js:1865 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:391 msgid "Size limit" msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1667 -#: htdocs/luci-static/resources/view/fchomo/node.js:1239 -#: htdocs/luci-static/resources/view/fchomo/node.js:2016 +#: htdocs/luci-static/resources/view/fchomo/node.js:1247 +#: htdocs/luci-static/resources/view/fchomo/node.js:2040 msgid "Skip cert verify" msgstr "" @@ -3098,7 +3146,7 @@ msgstr "" msgid "TCP concurrency" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1567 +#: htdocs/luci-static/resources/view/fchomo/node.js:1591 msgid "TCP only" msgstr "" @@ -3125,13 +3173,13 @@ msgstr "" msgid "TCP/UDP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1598 -#: htdocs/luci-static/resources/view/fchomo/node.js:1977 +#: htdocs/luci-static/resources/view/fchomo/node.js:1622 +#: htdocs/luci-static/resources/view/fchomo/node.js:2001 msgid "TFO" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:666 -#: htdocs/luci-static/resources/fchomo/listeners.js:988 +#: htdocs/luci-static/resources/fchomo/listeners.js:670 +#: htdocs/luci-static/resources/fchomo/listeners.js:992 #: htdocs/luci-static/resources/view/fchomo/global.js:550 #: htdocs/luci-static/resources/view/fchomo/node.js:455 #: htdocs/luci-static/resources/view/fchomo/node.js:997 @@ -3139,13 +3187,14 @@ msgstr "" msgid "TLS" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1035 -#: htdocs/luci-static/resources/view/fchomo/node.js:1173 +#: htdocs/luci-static/resources/fchomo/listeners.js:1039 +#: htdocs/luci-static/resources/view/fchomo/node.js:1181 msgid "TLS ALPN" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1029 +#: htdocs/luci-static/resources/fchomo/listeners.js:1033 #: htdocs/luci-static/resources/view/fchomo/node.js:1167 +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 msgid "TLS SNI" msgstr "" @@ -3182,19 +3231,19 @@ msgstr "" msgid "The %s address used by local machine in the Wireguard network." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1095 -#: htdocs/luci-static/resources/view/fchomo/node.js:1262 +#: htdocs/luci-static/resources/fchomo/listeners.js:1116 +#: htdocs/luci-static/resources/view/fchomo/node.js:1270 msgid "The %s private key, in PEM format." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1080 -#: htdocs/luci-static/resources/fchomo/listeners.js:1118 +#: htdocs/luci-static/resources/fchomo/listeners.js:1088 +#: htdocs/luci-static/resources/fchomo/listeners.js:1139 #: htdocs/luci-static/resources/view/fchomo/global.js:571 -#: htdocs/luci-static/resources/view/fchomo/node.js:1248 +#: htdocs/luci-static/resources/view/fchomo/node.js:1256 msgid "The %s public key, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1282 +#: htdocs/luci-static/resources/view/fchomo/node.js:1290 msgid "" "The ECH parameter of the HTTPS record for the domain. Leave empty to resolve " "via DNS." @@ -3218,7 +3267,7 @@ msgid "" "connection timeout is used." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:832 +#: htdocs/luci-static/resources/fchomo/listeners.js:836 #: htdocs/luci-static/resources/view/fchomo/node.js:1089 msgid "" "The first padding must have a probability of 100% and at least 35 bytes." @@ -3234,23 +3283,23 @@ msgstr "" msgid "The matching %s will be deemed as poisoned." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:713 +#: htdocs/luci-static/resources/fchomo/listeners.js:717 msgid "The proxy used to connect to the handshake target." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:830 +#: htdocs/luci-static/resources/fchomo/listeners.js:834 #: htdocs/luci-static/resources/view/fchomo/node.js:1087 msgid "The server and client can set different padding parameters." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1176 +#: htdocs/luci-static/resources/fchomo/listeners.js:1197 #: htdocs/luci-static/resources/view/fchomo/global.js:615 msgid "This ECH parameter needs to be added to the HTTPS record of the domain." msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1670 -#: htdocs/luci-static/resources/view/fchomo/node.js:1242 -#: htdocs/luci-static/resources/view/fchomo/node.js:2019 +#: htdocs/luci-static/resources/view/fchomo/node.js:1250 +#: htdocs/luci-static/resources/view/fchomo/node.js:2043 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" @@ -3290,18 +3339,18 @@ msgstr "" msgid "Traffic pattern" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2188 +#: htdocs/luci-static/resources/view/fchomo/node.js:2212 msgid "Transit proxy group" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2199 +#: htdocs/luci-static/resources/view/fchomo/node.js:2223 msgid "Transit proxy node" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:194 -#: htdocs/luci-static/resources/fchomo/listeners.js:1229 +#: htdocs/luci-static/resources/fchomo/listeners.js:1259 #: htdocs/luci-static/resources/view/fchomo/node.js:346 -#: htdocs/luci-static/resources/view/fchomo/node.js:1326 +#: htdocs/luci-static/resources/view/fchomo/node.js:1350 msgid "Transport" msgstr "" @@ -3310,8 +3359,8 @@ msgstr "" msgid "Transport fields" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1234 -#: htdocs/luci-static/resources/view/fchomo/node.js:1331 +#: htdocs/luci-static/resources/fchomo/listeners.js:1264 +#: htdocs/luci-static/resources/view/fchomo/node.js:1355 msgid "Transport type" msgstr "" @@ -3360,8 +3409,8 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:863 #: htdocs/luci-static/resources/view/fchomo/client.js:1061 #: htdocs/luci-static/resources/view/fchomo/node.js:254 -#: htdocs/luci-static/resources/view/fchomo/node.js:1778 -#: htdocs/luci-static/resources/view/fchomo/node.js:2149 +#: htdocs/luci-static/resources/view/fchomo/node.js:1802 +#: htdocs/luci-static/resources/view/fchomo/node.js:2173 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:285 msgid "Type" msgstr "" @@ -3379,7 +3428,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:605 #: htdocs/luci-static/resources/view/fchomo/client.js:697 #: htdocs/luci-static/resources/view/fchomo/node.js:947 -#: htdocs/luci-static/resources/view/fchomo/node.js:1987 +#: htdocs/luci-static/resources/view/fchomo/node.js:2011 msgid "UDP" msgstr "" @@ -3449,7 +3498,7 @@ msgid "Unknown error: %s" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:953 -#: htdocs/luci-static/resources/view/fchomo/node.js:1992 +#: htdocs/luci-static/resources/view/fchomo/node.js:2016 msgid "UoT" msgstr "" @@ -3457,24 +3506,24 @@ msgstr "" msgid "Update failed." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1847 +#: htdocs/luci-static/resources/view/fchomo/node.js:1871 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:397 msgid "Update interval" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1331 -#: htdocs/luci-static/resources/view/fchomo/node.js:1585 +#: htdocs/luci-static/resources/fchomo/listeners.js:1361 +#: htdocs/luci-static/resources/view/fchomo/node.js:1609 msgid "Upload bandwidth" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1332 -#: htdocs/luci-static/resources/view/fchomo/node.js:1586 +#: htdocs/luci-static/resources/fchomo/listeners.js:1362 +#: htdocs/luci-static/resources/view/fchomo/node.js:1610 msgid "Upload bandwidth in Mbps." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1086 -#: htdocs/luci-static/resources/fchomo/listeners.js:1126 -#: htdocs/luci-static/resources/view/fchomo/node.js:1253 +#: htdocs/luci-static/resources/fchomo/listeners.js:1107 +#: htdocs/luci-static/resources/fchomo/listeners.js:1147 +#: htdocs/luci-static/resources/view/fchomo/node.js:1261 msgid "Upload certificate" msgstr "" @@ -3482,17 +3531,17 @@ msgstr "" msgid "Upload initial package" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1101 -#: htdocs/luci-static/resources/view/fchomo/node.js:1267 +#: htdocs/luci-static/resources/fchomo/listeners.js:1122 +#: htdocs/luci-static/resources/view/fchomo/node.js:1275 msgid "Upload key" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1089 -#: htdocs/luci-static/resources/fchomo/listeners.js:1104 -#: htdocs/luci-static/resources/fchomo/listeners.js:1129 +#: htdocs/luci-static/resources/fchomo/listeners.js:1110 +#: htdocs/luci-static/resources/fchomo/listeners.js:1125 +#: htdocs/luci-static/resources/fchomo/listeners.js:1150 #: htdocs/luci-static/resources/view/fchomo/global.js:306 -#: htdocs/luci-static/resources/view/fchomo/node.js:1256 -#: htdocs/luci-static/resources/view/fchomo/node.js:1270 +#: htdocs/luci-static/resources/view/fchomo/node.js:1264 +#: htdocs/luci-static/resources/view/fchomo/node.js:1278 msgid "Upload..." msgstr "" @@ -3522,8 +3571,8 @@ msgstr "" msgid "Used to resolve the domain of the Proxy node." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1234 -#: htdocs/luci-static/resources/view/fchomo/node.js:2011 +#: htdocs/luci-static/resources/view/fchomo/node.js:1242 +#: htdocs/luci-static/resources/view/fchomo/node.js:2035 msgid "Used to verify the hostname on the returned certificates." msgstr "" @@ -3536,7 +3585,7 @@ msgid "User-hint is mandatory" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:162 -#: htdocs/luci-static/resources/fchomo/listeners.js:685 +#: htdocs/luci-static/resources/fchomo/listeners.js:689 #: htdocs/luci-static/resources/view/fchomo/node.js:305 #: htdocs/luci-static/resources/view/fchomo/node.js:1008 msgid "Username" @@ -3546,11 +3595,11 @@ msgstr "" msgid "Users filter mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1442 +#: htdocs/luci-static/resources/view/fchomo/node.js:1466 msgid "V2ray HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1447 +#: htdocs/luci-static/resources/view/fchomo/node.js:1471 msgid "V2ray HTTPUpgrade fast open" msgstr "" @@ -3564,8 +3613,8 @@ msgstr "" msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1784 -#: htdocs/luci-static/resources/view/fchomo/node.js:2155 +#: htdocs/luci-static/resources/view/fchomo/node.js:1808 +#: htdocs/luci-static/resources/view/fchomo/node.js:2179 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:328 msgid "Value" msgstr "" @@ -3575,7 +3624,7 @@ msgid "Verify if given" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:384 -#: htdocs/luci-static/resources/fchomo/listeners.js:697 +#: htdocs/luci-static/resources/fchomo/listeners.js:701 #: htdocs/luci-static/resources/view/fchomo/node.js:497 #: htdocs/luci-static/resources/view/fchomo/node.js:1020 msgid "Version" @@ -3599,15 +3648,15 @@ msgid "Warning" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:362 -#: htdocs/luci-static/resources/fchomo/listeners.js:1236 -#: htdocs/luci-static/resources/fchomo/listeners.js:1247 -#: htdocs/luci-static/resources/fchomo/listeners.js:1254 +#: htdocs/luci-static/resources/fchomo/listeners.js:1266 +#: htdocs/luci-static/resources/fchomo/listeners.js:1277 +#: htdocs/luci-static/resources/fchomo/listeners.js:1284 #: htdocs/luci-static/resources/view/fchomo/node.js:451 #: htdocs/luci-static/resources/view/fchomo/node.js:480 -#: htdocs/luci-static/resources/view/fchomo/node.js:1336 -#: htdocs/luci-static/resources/view/fchomo/node.js:1349 -#: htdocs/luci-static/resources/view/fchomo/node.js:1356 -#: htdocs/luci-static/resources/view/fchomo/node.js:1362 +#: htdocs/luci-static/resources/view/fchomo/node.js:1360 +#: htdocs/luci-static/resources/view/fchomo/node.js:1373 +#: htdocs/luci-static/resources/view/fchomo/node.js:1380 +#: htdocs/luci-static/resources/view/fchomo/node.js:1386 msgid "WebSocket" msgstr "" @@ -3635,32 +3684,32 @@ msgstr "" msgid "WireGuard requires base64-encoded private keys." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1237 -#: htdocs/luci-static/resources/fchomo/listeners.js:1248 -#: htdocs/luci-static/resources/view/fchomo/node.js:1337 -#: htdocs/luci-static/resources/view/fchomo/node.js:1357 +#: htdocs/luci-static/resources/fchomo/listeners.js:1267 +#: htdocs/luci-static/resources/fchomo/listeners.js:1278 +#: htdocs/luci-static/resources/view/fchomo/node.js:1361 +#: htdocs/luci-static/resources/view/fchomo/node.js:1381 msgid "XHTTP" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1284 -#: htdocs/luci-static/resources/view/fchomo/node.js:1452 +#: htdocs/luci-static/resources/fchomo/listeners.js:1314 +#: htdocs/luci-static/resources/view/fchomo/node.js:1476 msgid "XHTTP mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1483 +#: htdocs/luci-static/resources/view/fchomo/node.js:1507 msgid "XMUX" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1488 -#: htdocs/luci-static/resources/view/fchomo/node.js:1493 -#: htdocs/luci-static/resources/view/fchomo/node.js:1498 -#: htdocs/luci-static/resources/view/fchomo/node.js:1503 -#: htdocs/luci-static/resources/view/fchomo/node.js:1508 -#: htdocs/luci-static/resources/view/fchomo/node.js:1513 +#: htdocs/luci-static/resources/view/fchomo/node.js:1512 +#: htdocs/luci-static/resources/view/fchomo/node.js:1517 +#: htdocs/luci-static/resources/view/fchomo/node.js:1522 +#: htdocs/luci-static/resources/view/fchomo/node.js:1527 +#: htdocs/luci-static/resources/view/fchomo/node.js:1532 +#: htdocs/luci-static/resources/view/fchomo/node.js:1537 msgid "XMUX:" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:791 +#: htdocs/luci-static/resources/fchomo/listeners.js:795 msgid "XOR mode" msgstr "" @@ -3672,7 +3721,7 @@ msgstr "" msgid "Yaml text" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2022 +#: htdocs/luci-static/resources/view/fchomo/node.js:2046 msgid "Yes" msgstr "" @@ -3700,11 +3749,11 @@ msgstr "" msgid "aes-256-gcm" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1869 +#: htdocs/luci-static/resources/view/fchomo/node.js:1893 msgid "age private key" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1930 +#: htdocs/luci-static/resources/view/fchomo/node.js:1954 msgid "age public key" msgstr "" @@ -3724,9 +3773,9 @@ msgstr "" msgid "bbr" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1091 -#: htdocs/luci-static/resources/fchomo/listeners.js:1131 -#: htdocs/luci-static/resources/view/fchomo/node.js:1258 +#: htdocs/luci-static/resources/fchomo/listeners.js:1112 +#: htdocs/luci-static/resources/fchomo/listeners.js:1152 +#: htdocs/luci-static/resources/view/fchomo/node.js:1266 msgid "certificate" msgstr "" @@ -3744,8 +3793,8 @@ msgstr "" msgid "cubic" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:743 -#: htdocs/luci-static/resources/fchomo/listeners.js:774 +#: htdocs/luci-static/resources/fchomo/listeners.js:747 +#: htdocs/luci-static/resources/fchomo/listeners.js:778 msgid "decryption" msgstr "" @@ -3753,11 +3802,11 @@ msgstr "" msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:2004 +#: htdocs/luci-static/resources/view/fchomo/node.js:2028 msgid "down" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:778 +#: htdocs/luci-static/resources/fchomo/listeners.js:782 #: htdocs/luci-static/resources/view/fchomo/node.js:1041 #: htdocs/luci-static/resources/view/fchomo/node.js:1064 msgid "encryption" @@ -3768,26 +3817,26 @@ msgstr "" msgid "false = bandwidth optimized downlink; true = pure Sudoku downlink." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1235 -#: htdocs/luci-static/resources/fchomo/listeners.js:1246 -#: htdocs/luci-static/resources/fchomo/listeners.js:1253 -#: htdocs/luci-static/resources/view/fchomo/node.js:1335 -#: htdocs/luci-static/resources/view/fchomo/node.js:1348 -#: htdocs/luci-static/resources/view/fchomo/node.js:1355 -#: htdocs/luci-static/resources/view/fchomo/node.js:1361 +#: htdocs/luci-static/resources/fchomo/listeners.js:1265 +#: htdocs/luci-static/resources/fchomo/listeners.js:1276 +#: htdocs/luci-static/resources/fchomo/listeners.js:1283 +#: htdocs/luci-static/resources/view/fchomo/node.js:1359 +#: htdocs/luci-static/resources/view/fchomo/node.js:1372 +#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/view/fchomo/node.js:1385 msgid "gRPC" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1418 +#: htdocs/luci-static/resources/view/fchomo/node.js:1442 msgid "gRPC User-Agent" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1423 +#: htdocs/luci-static/resources/view/fchomo/node.js:1447 msgid "gRPC ping interval" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1278 -#: htdocs/luci-static/resources/view/fchomo/node.js:1414 +#: htdocs/luci-static/resources/fchomo/listeners.js:1308 +#: htdocs/luci-static/resources/view/fchomo/node.js:1438 msgid "gRPC service name" msgstr "" @@ -3799,7 +3848,7 @@ msgstr "" msgid "h2" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1530 +#: htdocs/luci-static/resources/view/fchomo/node.js:1554 msgid "h2mux" msgstr "" @@ -3811,12 +3860,7 @@ msgstr "" msgid "h3-l4proxy" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:647 -#: htdocs/luci-static/resources/view/fchomo/node.js:978 -msgid "jls" -msgstr "" - -#: htdocs/luci-static/resources/fchomo/listeners.js:943 +#: htdocs/luci-static/resources/fchomo/listeners.js:947 msgid "least one keypair required" msgstr "" @@ -3830,7 +3874,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1568 #: htdocs/luci-static/resources/view/fchomo/client.js:1802 #: htdocs/luci-static/resources/view/fchomo/client.js:1858 -#: htdocs/luci-static/resources/view/fchomo/node.js:1750 +#: htdocs/luci-static/resources/view/fchomo/node.js:1774 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:247 msgid "mihomo config" msgstr "" @@ -3839,8 +3883,8 @@ msgstr "" msgid "mlkem768x25519plus" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1603 -#: htdocs/luci-static/resources/view/fchomo/node.js:1982 +#: htdocs/luci-static/resources/view/fchomo/node.js:1627 +#: htdocs/luci-static/resources/view/fchomo/node.js:2006 msgid "mpTCP" msgstr "" @@ -3882,8 +3926,8 @@ msgstr "" msgid "null" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:644 -#: htdocs/luci-static/resources/fchomo/listeners.js:654 +#: htdocs/luci-static/resources/fchomo/listeners.js:645 +#: htdocs/luci-static/resources/fchomo/listeners.js:655 #: htdocs/luci-static/resources/view/fchomo/node.js:973 #: htdocs/luci-static/resources/view/fchomo/node.js:985 msgid "obfs-simple" @@ -3897,11 +3941,11 @@ msgstr "" msgid "only applies when %s is not %s." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1963 +#: htdocs/luci-static/resources/view/fchomo/node.js:1987 msgid "override.override-expr" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1955 +#: htdocs/luci-static/resources/view/fchomo/node.js:1979 msgid "override.proxy-name" msgstr "" @@ -3909,8 +3953,8 @@ msgstr "" msgid "packet addr (v2ray-core v5+)" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1288 -#: htdocs/luci-static/resources/view/fchomo/node.js:1456 +#: htdocs/luci-static/resources/fchomo/listeners.js:1318 +#: htdocs/luci-static/resources/view/fchomo/node.js:1480 msgid "packet-up" msgstr "" @@ -3919,8 +3963,8 @@ msgstr "" msgid "poll" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1106 -#: htdocs/luci-static/resources/view/fchomo/node.js:1272 +#: htdocs/luci-static/resources/fchomo/listeners.js:1127 +#: htdocs/luci-static/resources/view/fchomo/node.js:1280 msgid "private key" msgstr "" @@ -3933,23 +3977,11 @@ msgstr "" msgid "requires front-end adaptation using the API." msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:646 -#: htdocs/luci-static/resources/view/fchomo/node.js:977 -msgid "restls" -msgstr "" - #: htdocs/luci-static/resources/view/fchomo/ruleset.js:232 msgid "rule-set" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:645 -#: htdocs/luci-static/resources/fchomo/listeners.js:655 -#: htdocs/luci-static/resources/view/fchomo/node.js:976 -#: htdocs/luci-static/resources/view/fchomo/node.js:986 -msgid "shadow-tls" -msgstr "" - -#: htdocs/luci-static/resources/view/fchomo/node.js:1528 +#: htdocs/luci-static/resources/view/fchomo/node.js:1552 msgid "smux" msgstr "" @@ -3962,17 +3994,17 @@ msgstr "" msgid "src" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1286 -#: htdocs/luci-static/resources/view/fchomo/node.js:1454 +#: htdocs/luci-static/resources/fchomo/listeners.js:1316 +#: htdocs/luci-static/resources/view/fchomo/node.js:1478 msgid "stream-one" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1287 -#: htdocs/luci-static/resources/view/fchomo/node.js:1455 +#: htdocs/luci-static/resources/fchomo/listeners.js:1317 +#: htdocs/luci-static/resources/view/fchomo/node.js:1479 msgid "stream-up" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1303 +#: htdocs/luci-static/resources/fchomo/listeners.js:1333 msgid "stream-up server seconds" msgstr "" @@ -4000,12 +4032,12 @@ msgstr "" msgid "unique value" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1998 +#: htdocs/luci-static/resources/view/fchomo/node.js:2022 msgid "up" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:385 -#: htdocs/luci-static/resources/fchomo/listeners.js:698 +#: htdocs/luci-static/resources/fchomo/listeners.js:702 #: htdocs/luci-static/resources/view/fchomo/node.js:498 #: htdocs/luci-static/resources/view/fchomo/node.js:634 #: htdocs/luci-static/resources/view/fchomo/node.js:960 @@ -4014,7 +4046,7 @@ msgid "v1" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:386 -#: htdocs/luci-static/resources/fchomo/listeners.js:699 +#: htdocs/luci-static/resources/fchomo/listeners.js:703 #: htdocs/luci-static/resources/view/fchomo/node.js:499 #: htdocs/luci-static/resources/view/fchomo/node.js:961 #: htdocs/luci-static/resources/view/fchomo/node.js:1022 @@ -4022,7 +4054,7 @@ msgid "v2" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:387 -#: htdocs/luci-static/resources/fchomo/listeners.js:700 +#: htdocs/luci-static/resources/fchomo/listeners.js:704 #: htdocs/luci-static/resources/view/fchomo/node.js:500 #: htdocs/luci-static/resources/view/fchomo/node.js:1023 msgid "v3" @@ -4043,7 +4075,7 @@ msgstr "" msgid "valid JSON format" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1226 +#: htdocs/luci-static/resources/view/fchomo/node.js:1234 msgid "valid SHA256 string with %d characters" msgstr "" @@ -4089,7 +4121,7 @@ msgstr "" msgid "yacd-meta" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1529 +#: htdocs/luci-static/resources/view/fchomo/node.js:1553 msgid "yamux" msgstr "" diff --git a/luci-app-fchomo/po/zh_Hans/fchomo.po b/luci-app-fchomo/po/zh_Hans/fchomo.po index 5d0247eb..0de07731 100644 --- a/luci-app-fchomo/po/zh_Hans/fchomo.po +++ b/luci-app-fchomo/po/zh_Hans/fchomo.po @@ -27,15 +27,15 @@ msgstr "%s 端口" msgid "(Imported)" msgstr "(已导入)" -#: htdocs/luci-static/resources/fchomo/listeners.js:1109 -#: htdocs/luci-static/resources/fchomo/listeners.js:1117 -#: htdocs/luci-static/resources/fchomo/listeners.js:1126 +#: htdocs/luci-static/resources/fchomo/listeners.js:1130 +#: htdocs/luci-static/resources/fchomo/listeners.js:1138 +#: htdocs/luci-static/resources/fchomo/listeners.js:1147 #: htdocs/luci-static/resources/view/fchomo/global.js:564 #: htdocs/luci-static/resources/view/fchomo/global.js:570 -#: htdocs/luci-static/resources/view/fchomo/node.js:1247 -#: htdocs/luci-static/resources/view/fchomo/node.js:1253 +#: htdocs/luci-static/resources/view/fchomo/node.js:1255 #: htdocs/luci-static/resources/view/fchomo/node.js:1261 -#: htdocs/luci-static/resources/view/fchomo/node.js:1267 +#: htdocs/luci-static/resources/view/fchomo/node.js:1269 +#: htdocs/luci-static/resources/view/fchomo/node.js:1275 msgid "(mTLS)" msgstr "" @@ -62,10 +62,10 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1105 #: htdocs/luci-static/resources/view/fchomo/client.js:1361 #: htdocs/luci-static/resources/view/fchomo/node.js:288 -#: htdocs/luci-static/resources/view/fchomo/node.js:2161 -#: htdocs/luci-static/resources/view/fchomo/node.js:2172 -#: htdocs/luci-static/resources/view/fchomo/node.js:2191 -#: htdocs/luci-static/resources/view/fchomo/node.js:2202 +#: htdocs/luci-static/resources/view/fchomo/node.js:2185 +#: htdocs/luci-static/resources/view/fchomo/node.js:2196 +#: htdocs/luci-static/resources/view/fchomo/node.js:2215 +#: htdocs/luci-static/resources/view/fchomo/node.js:2226 msgid "-- Please choose --" msgstr "-- 请选择 --" @@ -110,11 +110,11 @@ msgstr "" msgid "0 or 1 only." msgstr "仅限 01。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1087 -#: htdocs/luci-static/resources/fchomo/listeners.js:1102 -#: htdocs/luci-static/resources/fchomo/listeners.js:1127 -#: htdocs/luci-static/resources/view/fchomo/node.js:1254 -#: htdocs/luci-static/resources/view/fchomo/node.js:1268 +#: htdocs/luci-static/resources/fchomo/listeners.js:1108 +#: htdocs/luci-static/resources/fchomo/listeners.js:1123 +#: htdocs/luci-static/resources/fchomo/listeners.js:1148 +#: htdocs/luci-static/resources/view/fchomo/node.js:1262 +#: htdocs/luci-static/resources/view/fchomo/node.js:1276 msgid "Save your configuration before uploading files!" msgstr "上传文件前请先保存配置!" @@ -214,11 +214,11 @@ msgstr "新增 节点" msgid "Add a inbound" msgstr "新增 入站" -#: htdocs/luci-static/resources/view/fchomo/node.js:1647 +#: htdocs/luci-static/resources/view/fchomo/node.js:1671 msgid "Add a provider" msgstr "新增 供应商" -#: htdocs/luci-static/resources/view/fchomo/node.js:2135 +#: htdocs/luci-static/resources/view/fchomo/node.js:2159 msgid "Add a proxy chain" msgstr "新增 代理链" @@ -242,11 +242,11 @@ msgstr "新增 服务器" msgid "Add a sub rule" msgstr "新增 子规则" -#: htdocs/luci-static/resources/view/fchomo/node.js:1944 +#: htdocs/luci-static/resources/view/fchomo/node.js:1968 msgid "Add prefix" msgstr "添加前缀" -#: htdocs/luci-static/resources/view/fchomo/node.js:1948 +#: htdocs/luci-static/resources/view/fchomo/node.js:1972 msgid "Add suffix" msgstr "添加后缀" @@ -287,7 +287,7 @@ msgid "" msgstr "" "允许从私有网络访问。
要从公共网站访问私有网络上的 API,则必须启用。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1023 +#: htdocs/luci-static/resources/fchomo/listeners.js:1027 msgid "Allow insecure connections" msgstr "允许不安全的连接" @@ -335,11 +335,11 @@ msgid "Authenticated length" msgstr "认证长度" #: htdocs/luci-static/resources/fchomo/listeners.js:361 -#: htdocs/luci-static/resources/fchomo/listeners.js:1285 +#: htdocs/luci-static/resources/fchomo/listeners.js:1315 #: htdocs/luci-static/resources/view/fchomo/global.js:423 #: htdocs/luci-static/resources/view/fchomo/node.js:450 #: htdocs/luci-static/resources/view/fchomo/node.js:474 -#: htdocs/luci-static/resources/view/fchomo/node.js:1453 +#: htdocs/luci-static/resources/view/fchomo/node.js:1477 msgid "Auto" msgstr "自动" @@ -390,13 +390,13 @@ msgid "Binary mrs" msgstr "二进制 mrs" #: htdocs/luci-static/resources/view/fchomo/global.js:758 -#: htdocs/luci-static/resources/view/fchomo/node.js:1614 -#: htdocs/luci-static/resources/view/fchomo/node.js:2033 +#: htdocs/luci-static/resources/view/fchomo/node.js:1638 +#: htdocs/luci-static/resources/view/fchomo/node.js:2057 msgid "Bind interface" msgstr "绑定接口" -#: htdocs/luci-static/resources/view/fchomo/node.js:1615 -#: htdocs/luci-static/resources/view/fchomo/node.js:2034 +#: htdocs/luci-static/resources/view/fchomo/node.js:1639 +#: htdocs/luci-static/resources/view/fchomo/node.js:2058 msgid "Bind outbound interface.
" msgstr "绑定出站接口。
" @@ -465,17 +465,17 @@ msgstr "CORS 允许的来源,留空则使用 *。" msgid "Cancel" msgstr "取消" -#: htdocs/luci-static/resources/view/fchomo/node.js:1220 +#: htdocs/luci-static/resources/view/fchomo/node.js:1228 msgid "Cert fingerprint" msgstr "证书指纹" -#: htdocs/luci-static/resources/view/fchomo/node.js:1221 +#: htdocs/luci-static/resources/view/fchomo/node.js:1229 msgid "" "Certificate fingerprint. Used to implement SSL Pinning and prevent MitM." msgstr "证书指纹。用于实现 SSL证书固定 并防止 MitM。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1079 -#: htdocs/luci-static/resources/view/fchomo/node.js:1247 +#: htdocs/luci-static/resources/fchomo/listeners.js:1087 +#: htdocs/luci-static/resources/view/fchomo/node.js:1255 msgid "Certificate path" msgstr "证书路径" @@ -536,25 +536,25 @@ msgstr "" "点击此处下载" "最新的初始包。" -#: htdocs/luci-static/resources/fchomo/listeners.js:819 -#: htdocs/luci-static/resources/fchomo/listeners.js:1118 +#: htdocs/luci-static/resources/fchomo/listeners.js:823 +#: htdocs/luci-static/resources/fchomo/listeners.js:1139 #: htdocs/luci-static/resources/view/fchomo/global.js:571 #: htdocs/luci-static/resources/view/fchomo/node.js:1076 -#: htdocs/luci-static/resources/view/fchomo/node.js:1248 -#: htdocs/luci-static/resources/view/fchomo/node.js:1262 +#: htdocs/luci-static/resources/view/fchomo/node.js:1256 +#: htdocs/luci-static/resources/view/fchomo/node.js:1270 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:22 msgid "Client" msgstr "客户端" -#: htdocs/luci-static/resources/fchomo/listeners.js:1117 +#: htdocs/luci-static/resources/fchomo/listeners.js:1138 msgid "Client Auth Certificate path" msgstr "客户端认证证书路径" -#: htdocs/luci-static/resources/fchomo/listeners.js:1109 +#: htdocs/luci-static/resources/fchomo/listeners.js:1130 msgid "Client Auth type" msgstr "客户端认证类型" -#: htdocs/luci-static/resources/view/fchomo/node.js:1293 +#: htdocs/luci-static/resources/view/fchomo/node.js:1301 msgid "Client fingerprint" msgstr "客户端指纹" @@ -601,14 +601,14 @@ msgid "Content copied to clipboard!" msgstr "内容已复制到剪贴板!" #: htdocs/luci-static/resources/view/fchomo/client.js:687 -#: htdocs/luci-static/resources/view/fchomo/node.js:1804 -#: htdocs/luci-static/resources/view/fchomo/node.js:1830 +#: htdocs/luci-static/resources/view/fchomo/node.js:1828 +#: htdocs/luci-static/resources/view/fchomo/node.js:1854 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:348 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:374 msgid "Content will not be verified, Please make sure you enter it correctly." msgstr "内容将不会被验证,请确保输入正确。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1803 +#: htdocs/luci-static/resources/view/fchomo/node.js:1827 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:347 msgid "Contents" msgstr "内容" @@ -633,7 +633,7 @@ msgstr "Cron 表达式" msgid "Custom Direct List" msgstr "自定义直连列表" -#: htdocs/luci-static/resources/view/fchomo/node.js:1935 +#: htdocs/luci-static/resources/view/fchomo/node.js:1959 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:420 msgid "Custom HTTP header." msgstr "自定义 HTTP header。" @@ -716,11 +716,11 @@ msgstr "从私钥派生" msgid "Destination addresses allowed to be forwarded via Wireguard." msgstr "允许通过 WireGuard 转发的目的地址" -#: htdocs/luci-static/resources/view/fchomo/node.js:2158 +#: htdocs/luci-static/resources/view/fchomo/node.js:2182 msgid "Destination provider" msgstr "落地供应商" -#: htdocs/luci-static/resources/view/fchomo/node.js:2169 +#: htdocs/luci-static/resources/view/fchomo/node.js:2193 msgid "Destination proxy node" msgstr "落地代理节点" @@ -728,8 +728,8 @@ msgstr "落地代理节点" msgid "Dial fields" msgstr "拨号字段" -#: htdocs/luci-static/resources/view/fchomo/node.js:2181 -#: htdocs/luci-static/resources/view/fchomo/node.js:2211 +#: htdocs/luci-static/resources/view/fchomo/node.js:2205 +#: htdocs/luci-static/resources/view/fchomo/node.js:2235 msgid "Different chain head/tail" msgstr "不同的链头/链尾" @@ -800,18 +800,18 @@ msgid "Donot send server name in ClientHello." msgstr "不要在 ClientHello 中发送服务器名称。" #: htdocs/luci-static/resources/view/fchomo/client.js:1668 -#: htdocs/luci-static/resources/view/fchomo/node.js:1240 -#: htdocs/luci-static/resources/view/fchomo/node.js:2017 +#: htdocs/luci-static/resources/view/fchomo/node.js:1248 +#: htdocs/luci-static/resources/view/fchomo/node.js:2041 msgid "Donot verifying server certificate." msgstr "不验证服务器证书。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1337 -#: htdocs/luci-static/resources/view/fchomo/node.js:1591 +#: htdocs/luci-static/resources/fchomo/listeners.js:1367 +#: htdocs/luci-static/resources/view/fchomo/node.js:1615 msgid "Download bandwidth" msgstr "下载带宽" -#: htdocs/luci-static/resources/fchomo/listeners.js:1338 -#: htdocs/luci-static/resources/view/fchomo/node.js:1592 +#: htdocs/luci-static/resources/fchomo/listeners.js:1368 +#: htdocs/luci-static/resources/view/fchomo/node.js:1616 msgid "Download bandwidth in Mbps." msgstr "下载带宽(单位:Mbps)。" @@ -827,16 +827,16 @@ msgstr "下载成功。" msgid "Dual stack" msgstr "双栈" -#: htdocs/luci-static/resources/view/fchomo/node.js:1287 +#: htdocs/luci-static/resources/view/fchomo/node.js:1295 msgid "ECH HTTPS record query servername" msgstr "ECH HTTPS 记录查询域名" -#: htdocs/luci-static/resources/fchomo/listeners.js:1175 -#: htdocs/luci-static/resources/view/fchomo/node.js:1281 +#: htdocs/luci-static/resources/fchomo/listeners.js:1196 +#: htdocs/luci-static/resources/view/fchomo/node.js:1289 msgid "ECH config" msgstr "ECH 配置" -#: htdocs/luci-static/resources/fchomo/listeners.js:1134 +#: htdocs/luci-static/resources/fchomo/listeners.js:1155 msgid "ECH key" msgstr "ECH 密钥" @@ -852,11 +852,11 @@ msgstr "EDNS 客户端子网" msgid "ETag support" msgstr "ETag 支持" -#: htdocs/luci-static/resources/view/fchomo/node.js:1431 +#: htdocs/luci-static/resources/view/fchomo/node.js:1455 msgid "Early Data first packet length limit." msgstr "前置数据长度阈值" -#: htdocs/luci-static/resources/view/fchomo/node.js:1437 +#: htdocs/luci-static/resources/view/fchomo/node.js:1461 msgid "Early Data header name" msgstr "前置数据标头" @@ -872,7 +872,7 @@ msgstr "编辑出站" msgid "Edit ruleset" msgstr "编辑规则集" -#: htdocs/luci-static/resources/view/fchomo/node.js:1801 +#: htdocs/luci-static/resources/view/fchomo/node.js:1825 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:345 msgid "Editer" msgstr "编辑器" @@ -896,9 +896,9 @@ msgstr "为空时回退" #: htdocs/luci-static/resources/view/fchomo/global.js:422 #: htdocs/luci-static/resources/view/fchomo/global.js:704 #: htdocs/luci-static/resources/view/fchomo/node.js:250 -#: htdocs/luci-static/resources/view/fchomo/node.js:1774 -#: htdocs/luci-static/resources/view/fchomo/node.js:2056 -#: htdocs/luci-static/resources/view/fchomo/node.js:2145 +#: htdocs/luci-static/resources/view/fchomo/node.js:1798 +#: htdocs/luci-static/resources/view/fchomo/node.js:2080 +#: htdocs/luci-static/resources/view/fchomo/node.js:2169 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:272 #: htdocs/luci-static/resources/view/fchomo/server.js:49 msgid "Enable" @@ -925,17 +925,17 @@ msgstr "" "为出站连接启用 IP4P 转换" -#: htdocs/luci-static/resources/view/fchomo/node.js:1275 +#: htdocs/luci-static/resources/view/fchomo/node.js:1283 msgid "Enable ECH" msgstr "启用 ECH" -#: htdocs/luci-static/resources/fchomo/listeners.js:1325 -#: htdocs/luci-static/resources/view/fchomo/node.js:1579 +#: htdocs/luci-static/resources/fchomo/listeners.js:1355 +#: htdocs/luci-static/resources/view/fchomo/node.js:1603 msgid "Enable TCP Brutal" msgstr "启用 TCP Brutal" -#: htdocs/luci-static/resources/fchomo/listeners.js:1326 -#: htdocs/luci-static/resources/view/fchomo/node.js:1580 +#: htdocs/luci-static/resources/fchomo/listeners.js:1356 +#: htdocs/luci-static/resources/view/fchomo/node.js:1604 msgid "Enable TCP Brutal congestion control algorithm" msgstr "启用 TCP Brutal 拥塞控制算法。" @@ -943,7 +943,7 @@ msgstr "启用 TCP Brutal 拥塞控制算法。" msgid "Enable fast open" msgstr "启用 Fast open" -#: htdocs/luci-static/resources/view/fchomo/node.js:1568 +#: htdocs/luci-static/resources/view/fchomo/node.js:1592 msgid "Enable multiplexing only for TCP." msgstr "仅为 TCP 启用多路复用。" @@ -952,17 +952,17 @@ msgstr "仅为 TCP 启用多路复用。" msgid "Enable obfuscate for downlink" msgstr "启用下行链路混淆" -#: htdocs/luci-static/resources/fchomo/listeners.js:1320 -#: htdocs/luci-static/resources/view/fchomo/node.js:1562 +#: htdocs/luci-static/resources/fchomo/listeners.js:1350 +#: htdocs/luci-static/resources/view/fchomo/node.js:1586 msgid "Enable padding" msgstr "启用填充" -#: htdocs/luci-static/resources/view/fchomo/node.js:1573 +#: htdocs/luci-static/resources/view/fchomo/node.js:1597 msgid "Enable statistic" msgstr "启用统计" #: htdocs/luci-static/resources/view/fchomo/node.js:954 -#: htdocs/luci-static/resources/view/fchomo/node.js:1993 +#: htdocs/luci-static/resources/view/fchomo/node.js:2017 msgid "" "Enable the SUoT protocol, requires server support. Conflict with Multiplex." msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。" @@ -974,7 +974,7 @@ msgid "" "connections, losing the ability to masquerade with HTTP/3." msgstr "启用混淆将使服务器与标准的 QUIC 连接不兼容,失去 HTTP/3 伪装的能力。" -#: htdocs/luci-static/resources/fchomo/listeners.js:782 +#: htdocs/luci-static/resources/fchomo/listeners.js:786 msgid "Encryption method" msgstr "加密方法" @@ -1001,7 +1001,7 @@ msgid "" "if empty." msgstr "超过此限制将会触发强制健康检查。留空则使用 5。" -#: htdocs/luci-static/resources/view/fchomo/node.js:2114 +#: htdocs/luci-static/resources/view/fchomo/node.js:2138 msgid "Exclude matched node types." msgstr "排除匹配的节点类型。" @@ -1014,7 +1014,7 @@ msgstr "" "rel=\"noreferrer noopener\">此处。" #: htdocs/luci-static/resources/view/fchomo/client.js:1243 -#: htdocs/luci-static/resources/view/fchomo/node.js:2107 +#: htdocs/luci-static/resources/view/fchomo/node.js:2131 msgid "Exclude nodes that meet keywords or regexps." msgstr "排除匹配关键词或表达式的节点。" @@ -1023,12 +1023,12 @@ msgid "Expand/Collapse result" msgstr "展开/收起 结果" #: htdocs/luci-static/resources/view/fchomo/client.js:1186 -#: htdocs/luci-static/resources/view/fchomo/node.js:2092 +#: htdocs/luci-static/resources/view/fchomo/node.js:2116 msgid "Expected HTTP code. 204 will be used if empty." msgstr "预期的 HTTP code。留空则使用 204。" #: htdocs/luci-static/resources/view/fchomo/client.js:1188 -#: htdocs/luci-static/resources/view/fchomo/node.js:2094 +#: htdocs/luci-static/resources/view/fchomo/node.js:2118 msgid "Expected status" msgstr "预期状态" @@ -1058,9 +1058,9 @@ msgstr "预期状态" #: htdocs/luci-static/resources/fchomo.js:1968 #: htdocs/luci-static/resources/fchomo/listeners.js:284 #: htdocs/luci-static/resources/fchomo/listeners.js:331 -#: htdocs/luci-static/resources/fchomo/listeners.js:811 -#: htdocs/luci-static/resources/fchomo/listeners.js:842 -#: htdocs/luci-static/resources/fchomo/listeners.js:943 +#: htdocs/luci-static/resources/fchomo/listeners.js:815 +#: htdocs/luci-static/resources/fchomo/listeners.js:846 +#: htdocs/luci-static/resources/fchomo/listeners.js:947 #: htdocs/luci-static/resources/view/fchomo/client.js:71 #: htdocs/luci-static/resources/view/fchomo/client.js:1051 #: htdocs/luci-static/resources/view/fchomo/client.js:1596 @@ -1070,27 +1070,44 @@ msgstr "预期状态" #: htdocs/luci-static/resources/view/fchomo/node.js:480 #: htdocs/luci-static/resources/view/fchomo/node.js:482 #: htdocs/luci-static/resources/view/fchomo/node.js:1099 -#: htdocs/luci-static/resources/view/fchomo/node.js:1226 -#: htdocs/luci-static/resources/view/fchomo/node.js:2181 -#: htdocs/luci-static/resources/view/fchomo/node.js:2211 +#: htdocs/luci-static/resources/view/fchomo/node.js:1234 +#: htdocs/luci-static/resources/view/fchomo/node.js:2205 +#: htdocs/luci-static/resources/view/fchomo/node.js:2235 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:300 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:314 msgid "Expecting: %s" msgstr "请输入:%s" +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 +msgid "Expecting: %s cannot be empty when %s is enabled." +msgstr "请输入:%s 不能为空,当 %s 启用时。" + #: htdocs/luci-static/resources/view/fchomo/node.js:278 #: htdocs/luci-static/resources/view/fchomo/node.js:296 msgid "Expecting: Least one of %s or %s." msgstr "请输入:至少包含 %s 或 %s 中的一个。" -#: htdocs/luci-static/resources/fchomo/listeners.js:654 -#: htdocs/luci-static/resources/fchomo/listeners.js:1246 -#: htdocs/luci-static/resources/fchomo/listeners.js:1253 +#: htdocs/luci-static/resources/fchomo/listeners.js:1099 +msgid "Expecting: Cannot be empty." +msgstr "请输入:不能为空。" + +#: htdocs/luci-static/resources/fchomo/listeners.js:1210 +msgid "Expecting: Cannot be enabled when %s is enabled." +msgstr "请输入:当 %s 启用时,无法启用。" + +#: htdocs/luci-static/resources/fchomo/listeners.js:1096 +msgid "Expecting: Keep empty when %s is enabled." +msgstr "请输入:启用 %s 时保持为空。" + +#: htdocs/luci-static/resources/fchomo/listeners.js:655 +#: htdocs/luci-static/resources/fchomo/listeners.js:659 +#: htdocs/luci-static/resources/fchomo/listeners.js:1276 +#: htdocs/luci-static/resources/fchomo/listeners.js:1283 #: htdocs/luci-static/resources/view/fchomo/node.js:985 -#: htdocs/luci-static/resources/view/fchomo/node.js:1346 -#: htdocs/luci-static/resources/view/fchomo/node.js:1353 -#: htdocs/luci-static/resources/view/fchomo/node.js:1361 -msgid "Expecting: only support %s." +#: htdocs/luci-static/resources/view/fchomo/node.js:1370 +#: htdocs/luci-static/resources/view/fchomo/node.js:1377 +#: htdocs/luci-static/resources/view/fchomo/node.js:1385 +msgid "Expecting: Only support %s." msgstr "请输入:仅支援 %s。" #: htdocs/luci-static/resources/view/fchomo/global.js:723 @@ -1142,7 +1159,7 @@ msgid "Fallback filter" msgstr "後備过滤器" #: htdocs/luci-static/resources/view/fchomo/client.js:1238 -#: htdocs/luci-static/resources/view/fchomo/node.js:2101 +#: htdocs/luci-static/resources/view/fchomo/node.js:2125 msgid "Filter nodes that meet keywords or regexps." msgstr "过滤匹配关键字或表达式的节点。" @@ -1185,9 +1202,9 @@ msgstr "" "noopener\">%s." #: htdocs/luci-static/resources/view/fchomo/client.js:1187 -#: htdocs/luci-static/resources/view/fchomo/node.js:1954 -#: htdocs/luci-static/resources/view/fchomo/node.js:1962 -#: htdocs/luci-static/resources/view/fchomo/node.js:2093 +#: htdocs/luci-static/resources/view/fchomo/node.js:1978 +#: htdocs/luci-static/resources/view/fchomo/node.js:1986 +#: htdocs/luci-static/resources/view/fchomo/node.js:2117 msgid "" "For format see %s." @@ -1208,7 +1225,7 @@ msgstr "强制嗅探域名" msgid "Format" msgstr "格式" -#: htdocs/luci-static/resources/fchomo/listeners.js:729 +#: htdocs/luci-static/resources/fchomo/listeners.js:733 msgid "Forwarding rate limit" msgstr "转发速率限制" @@ -1219,7 +1236,7 @@ msgstr "转发速率限制" msgid "FullCombo Shark!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1386 +#: htdocs/luci-static/resources/view/fchomo/node.js:1410 msgid "GET" msgstr "" @@ -1239,7 +1256,7 @@ msgstr "常规" #: htdocs/luci-static/resources/fchomo/listeners.js:119 #: htdocs/luci-static/resources/view/fchomo/client.js:1042 #: htdocs/luci-static/resources/view/fchomo/node.js:236 -#: htdocs/luci-static/resources/view/fchomo/node.js:1764 +#: htdocs/luci-static/resources/view/fchomo/node.js:1788 msgid "General fields" msgstr "常规字段" @@ -1254,10 +1271,10 @@ msgstr "常规设置" #: htdocs/luci-static/resources/fchomo/listeners.js:262 #: htdocs/luci-static/resources/fchomo/listeners.js:306 #: htdocs/luci-static/resources/fchomo/listeners.js:308 -#: htdocs/luci-static/resources/fchomo/listeners.js:915 -#: htdocs/luci-static/resources/fchomo/listeners.js:1167 +#: htdocs/luci-static/resources/fchomo/listeners.js:919 +#: htdocs/luci-static/resources/fchomo/listeners.js:1188 #: htdocs/luci-static/resources/view/fchomo/global.js:608 -#: htdocs/luci-static/resources/view/fchomo/node.js:1922 +#: htdocs/luci-static/resources/view/fchomo/node.js:1946 msgid "Generate" msgstr "生成" @@ -1326,17 +1343,17 @@ msgstr "组" #: htdocs/luci-static/resources/fchomo.js:154 #: htdocs/luci-static/resources/fchomo.js:191 -#: htdocs/luci-static/resources/fchomo/listeners.js:665 +#: htdocs/luci-static/resources/fchomo/listeners.js:669 #: htdocs/luci-static/resources/view/fchomo/node.js:996 -#: htdocs/luci-static/resources/view/fchomo/node.js:1333 -#: htdocs/luci-static/resources/view/fchomo/node.js:1346 -#: htdocs/luci-static/resources/view/fchomo/node.js:1353 +#: htdocs/luci-static/resources/view/fchomo/node.js:1357 +#: htdocs/luci-static/resources/view/fchomo/node.js:1370 +#: htdocs/luci-static/resources/view/fchomo/node.js:1377 msgid "HTTP" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:316 -#: htdocs/luci-static/resources/view/fchomo/node.js:1408 -#: htdocs/luci-static/resources/view/fchomo/node.js:1934 +#: htdocs/luci-static/resources/view/fchomo/node.js:1432 +#: htdocs/luci-static/resources/view/fchomo/node.js:1958 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:419 msgid "HTTP header" msgstr "HTTP header" @@ -1362,7 +1379,7 @@ msgstr "HTTP 伪装多路复用" msgid "HTTP mask: %s" msgstr "HTTP 伪装: %s" -#: htdocs/luci-static/resources/view/fchomo/node.js:1385 +#: htdocs/luci-static/resources/view/fchomo/node.js:1409 msgid "HTTP request method" msgstr "HTTP 请求方法" @@ -1381,9 +1398,9 @@ msgid "" "returned if empty." msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1334 -#: htdocs/luci-static/resources/view/fchomo/node.js:1347 -#: htdocs/luci-static/resources/view/fchomo/node.js:1354 +#: htdocs/luci-static/resources/view/fchomo/node.js:1358 +#: htdocs/luci-static/resources/view/fchomo/node.js:1371 +#: htdocs/luci-static/resources/view/fchomo/node.js:1378 msgid "HTTPUpgrade" msgstr "" @@ -1395,11 +1412,11 @@ msgstr "处理域名" msgid "Handshake mode" msgstr "握手模式" -#: htdocs/luci-static/resources/fchomo/listeners.js:712 +#: htdocs/luci-static/resources/fchomo/listeners.js:716 msgid "Handshake target proxy" msgstr "握手目标代理" -#: htdocs/luci-static/resources/fchomo/listeners.js:677 +#: htdocs/luci-static/resources/fchomo/listeners.js:681 msgid "Handshake target that supports TLS 1.3" msgstr "握手目标 (支援 TLS 1.3)" @@ -1417,27 +1434,27 @@ msgid "Health check" msgstr "健康检查" #: htdocs/luci-static/resources/view/fchomo/client.js:1156 -#: htdocs/luci-static/resources/view/fchomo/node.js:2061 +#: htdocs/luci-static/resources/view/fchomo/node.js:2085 msgid "Health check URL" msgstr "健康检查 URL" #: htdocs/luci-static/resources/view/fchomo/client.js:1185 -#: htdocs/luci-static/resources/view/fchomo/node.js:2091 +#: htdocs/luci-static/resources/view/fchomo/node.js:2115 msgid "Health check expected status" msgstr "健康检查预期状态" #: htdocs/luci-static/resources/view/fchomo/client.js:1165 -#: htdocs/luci-static/resources/view/fchomo/node.js:2071 +#: htdocs/luci-static/resources/view/fchomo/node.js:2095 msgid "Health check interval" msgstr "健康检查间隔" #: htdocs/luci-static/resources/view/fchomo/client.js:1172 -#: htdocs/luci-static/resources/view/fchomo/node.js:2078 +#: htdocs/luci-static/resources/view/fchomo/node.js:2102 msgid "Health check timeout" msgstr "健康检查超时" #: htdocs/luci-static/resources/view/fchomo/client.js:1044 -#: htdocs/luci-static/resources/view/fchomo/node.js:1766 +#: htdocs/luci-static/resources/view/fchomo/node.js:1790 msgid "Health fields" msgstr "健康字段" @@ -1450,7 +1467,7 @@ msgstr "心跳间隔" msgid "Hidden" msgstr "隐藏" -#: htdocs/luci-static/resources/fchomo/listeners.js:670 +#: htdocs/luci-static/resources/fchomo/listeners.js:674 #: htdocs/luci-static/resources/view/fchomo/node.js:1001 msgid "Host that supports TLS 1.3" msgstr "主机名称 (支援 TLS 1.3)" @@ -1467,7 +1484,7 @@ msgstr "主机密钥算法" msgid "Host/SNI override" msgstr "主机/SNI 覆盖" -#: htdocs/luci-static/resources/fchomo/listeners.js:1030 +#: htdocs/luci-static/resources/fchomo/listeners.js:1034 #: htdocs/luci-static/resources/view/fchomo/node.js:1168 msgid "" "Hostname that the client attempts to connect to at the start of the TLS " @@ -1506,8 +1523,8 @@ msgstr "" msgid "IP override" msgstr "IP 覆写" -#: htdocs/luci-static/resources/view/fchomo/node.js:1628 -#: htdocs/luci-static/resources/view/fchomo/node.js:2047 +#: htdocs/luci-static/resources/view/fchomo/node.js:1652 +#: htdocs/luci-static/resources/view/fchomo/node.js:2071 msgid "IP version" msgstr "IP 版本" @@ -1568,8 +1585,8 @@ msgstr "导入" #: htdocs/luci-static/resources/view/fchomo/client.js:1804 #: htdocs/luci-static/resources/view/fchomo/client.js:1839 #: htdocs/luci-static/resources/view/fchomo/client.js:1860 -#: htdocs/luci-static/resources/view/fchomo/node.js:1654 -#: htdocs/luci-static/resources/view/fchomo/node.js:1752 +#: htdocs/luci-static/resources/view/fchomo/node.js:1678 +#: htdocs/luci-static/resources/view/fchomo/node.js:1776 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:154 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:249 msgid "Import mihomo config" @@ -1585,16 +1602,16 @@ msgstr "导入规则集链接" #: htdocs/luci-static/resources/fchomo/listeners.js:472 #: htdocs/luci-static/resources/view/fchomo/node.js:683 #: htdocs/luci-static/resources/view/fchomo/node.js:689 -#: htdocs/luci-static/resources/view/fchomo/node.js:1999 -#: htdocs/luci-static/resources/view/fchomo/node.js:2005 +#: htdocs/luci-static/resources/view/fchomo/node.js:2023 +#: htdocs/luci-static/resources/view/fchomo/node.js:2029 msgid "In Mbps." msgstr "单位为 Mbps。" -#: htdocs/luci-static/resources/fchomo/listeners.js:730 +#: htdocs/luci-static/resources/fchomo/listeners.js:734 msgid "In bps. 0 means no speed limit." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1842 +#: htdocs/luci-static/resources/view/fchomo/node.js:1866 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:392 msgid "In bytes. %s will be used if empty." msgstr "单位为字节。留空则使用 %s。" @@ -1607,11 +1624,11 @@ msgstr "单位为毫秒。" #: htdocs/luci-static/resources/view/fchomo/client.js:1173 #: htdocs/luci-static/resources/view/fchomo/client.js:1219 -#: htdocs/luci-static/resources/view/fchomo/node.js:2079 +#: htdocs/luci-static/resources/view/fchomo/node.js:2103 msgid "In millisecond. %s will be used if empty." msgstr "单位为毫秒。留空则使用 %s。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1477 +#: htdocs/luci-static/resources/view/fchomo/node.js:1501 msgid "In milliseconds." msgstr "单位为毫秒。" @@ -1620,7 +1637,7 @@ msgstr "单位为毫秒。" #: htdocs/luci-static/resources/fchomo/listeners.js:619 #: htdocs/luci-static/resources/view/fchomo/node.js:587 #: htdocs/luci-static/resources/view/fchomo/node.js:594 -#: htdocs/luci-static/resources/view/fchomo/node.js:1424 +#: htdocs/luci-static/resources/view/fchomo/node.js:1448 msgid "In seconds." msgstr "单位为秒。" @@ -1629,8 +1646,8 @@ msgstr "单位为秒。" #: htdocs/luci-static/resources/view/fchomo/global.js:451 #: htdocs/luci-static/resources/view/fchomo/global.js:536 #: htdocs/luci-static/resources/view/fchomo/node.js:677 -#: htdocs/luci-static/resources/view/fchomo/node.js:1848 -#: htdocs/luci-static/resources/view/fchomo/node.js:2072 +#: htdocs/luci-static/resources/view/fchomo/node.js:1872 +#: htdocs/luci-static/resources/view/fchomo/node.js:2096 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:398 msgid "In seconds. %s will be used if empty." msgstr "单位为秒。留空则使用 %s。" @@ -1641,7 +1658,7 @@ msgid "" "connection timeout." msgstr "单位为秒。配置后握手时不受外层连接超时影响。" -#: htdocs/luci-static/resources/fchomo/listeners.js:831 +#: htdocs/luci-static/resources/fchomo/listeners.js:835 #: htdocs/luci-static/resources/view/fchomo/node.js:1088 msgid "" "In the order of one Padding-Length and one Padding-" @@ -1684,7 +1701,7 @@ msgstr "引入所有代理节点。" msgid "Info" msgstr "信息" -#: htdocs/luci-static/resources/view/fchomo/node.js:1781 +#: htdocs/luci-static/resources/view/fchomo/node.js:1805 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:288 msgid "Inline" msgstr "内嵌" @@ -1693,15 +1710,33 @@ msgstr "内嵌" msgid "Interface Control" msgstr "接口控制" +#: htdocs/luci-static/resources/fchomo/listeners.js:648 +#: htdocs/luci-static/resources/fchomo/listeners.js:659 +#: htdocs/luci-static/resources/fchomo/listeners.js:1096 +#: htdocs/luci-static/resources/fchomo/listeners.js:1210 +#: htdocs/luci-static/resources/view/fchomo/node.js:978 +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 +#: htdocs/luci-static/resources/view/fchomo/node.js:1311 +msgid "JLS" +msgstr "JLS" + +#: htdocs/luci-static/resources/view/fchomo/node.js:1321 +msgid "JLS password" +msgstr "JLS 密码" + +#: htdocs/luci-static/resources/view/fchomo/node.js:1316 +msgid "JLS username" +msgstr "JLS 用户名" + #: htdocs/luci-static/resources/fchomo.js:53 #: htdocs/luci-static/resources/fchomo.js:60 #: htdocs/luci-static/resources/fchomo.js:174 #: htdocs/luci-static/resources/fchomo.js:379 -#: htdocs/luci-static/resources/view/fchomo/node.js:2021 +#: htdocs/luci-static/resources/view/fchomo/node.js:2045 msgid "Keep default" msgstr "保持缺省" -#: htdocs/luci-static/resources/view/fchomo/node.js:1513 +#: htdocs/luci-static/resources/view/fchomo/node.js:1537 msgid "Keep-alive period" msgstr "Keep-alive 周期" @@ -1710,12 +1745,12 @@ msgstr "Keep-alive 周期" msgid "Key" msgstr "密钥" -#: htdocs/luci-static/resources/fchomo/listeners.js:1094 -#: htdocs/luci-static/resources/view/fchomo/node.js:1261 +#: htdocs/luci-static/resources/fchomo/listeners.js:1115 +#: htdocs/luci-static/resources/view/fchomo/node.js:1269 msgid "Key path" msgstr "证书路径" -#: htdocs/luci-static/resources/fchomo/listeners.js:850 +#: htdocs/luci-static/resources/fchomo/listeners.js:854 msgid "Keypairs" msgstr "密钥对" @@ -1727,14 +1762,14 @@ msgstr "密钥对" #: htdocs/luci-static/resources/view/fchomo/client.js:1810 #: htdocs/luci-static/resources/view/fchomo/client.js:1866 #: htdocs/luci-static/resources/view/fchomo/node.js:245 -#: htdocs/luci-static/resources/view/fchomo/node.js:1769 -#: htdocs/luci-static/resources/view/fchomo/node.js:2140 +#: htdocs/luci-static/resources/view/fchomo/node.js:1793 +#: htdocs/luci-static/resources/view/fchomo/node.js:2164 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:267 msgid "Label" msgstr "标签" #: htdocs/luci-static/resources/view/fchomo/client.js:1179 -#: htdocs/luci-static/resources/view/fchomo/node.js:2085 +#: htdocs/luci-static/resources/view/fchomo/node.js:2109 msgid "Lazy" msgstr "怠惰状态" @@ -1763,8 +1798,8 @@ msgstr "" msgid "Less compatibility and sometimes better performance." msgstr "有时性能更好。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1036 -#: htdocs/luci-static/resources/view/fchomo/node.js:1174 +#: htdocs/luci-static/resources/fchomo/listeners.js:1040 +#: htdocs/luci-static/resources/view/fchomo/node.js:1182 msgid "List of supported application level protocols, in order of preference." msgstr "支持的应用层协议协商列表,按顺序排列。" @@ -1797,7 +1832,7 @@ msgstr "监听路由标记 (Fwmark)" msgid "Load balance" msgstr "负载均衡" -#: htdocs/luci-static/resources/view/fchomo/node.js:1779 +#: htdocs/luci-static/resources/view/fchomo/node.js:1803 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:286 msgid "Local" msgstr "本地" @@ -1885,7 +1920,7 @@ msgstr "匹配响应通过 ipcidr
" msgid "Match rule set." msgstr "匹配规则集。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1430 +#: htdocs/luci-static/resources/view/fchomo/node.js:1454 msgid "Max Early Data" msgstr "前置数据最大值" @@ -1894,15 +1929,15 @@ msgstr "前置数据最大值" msgid "Max UDP relay packet size" msgstr "UDP 中继数据包最大尺寸" -#: htdocs/luci-static/resources/fchomo/listeners.js:1297 +#: htdocs/luci-static/resources/fchomo/listeners.js:1327 msgid "Max buffered posts" msgstr "POST 最大缓冲" -#: htdocs/luci-static/resources/view/fchomo/node.js:1488 +#: htdocs/luci-static/resources/view/fchomo/node.js:1512 msgid "Max concurrency" msgstr "最大并发" -#: htdocs/luci-static/resources/view/fchomo/node.js:1493 +#: htdocs/luci-static/resources/view/fchomo/node.js:1517 msgid "Max connections" msgstr "最大连接数" @@ -1915,8 +1950,8 @@ msgstr "最大失败次数" msgid "Max download speed" msgstr "最大下载速度" -#: htdocs/luci-static/resources/fchomo/listeners.js:1308 -#: htdocs/luci-static/resources/view/fchomo/node.js:1470 +#: htdocs/luci-static/resources/fchomo/listeners.js:1338 +#: htdocs/luci-static/resources/view/fchomo/node.js:1494 msgid "Max each POST bytes" msgstr "POST 最大字节数" @@ -1932,15 +1967,15 @@ msgstr "最大 Realms 总数" msgid "Max realms per client IP" msgstr "每客户端 IP 最大 Realms 总数" -#: htdocs/luci-static/resources/view/fchomo/node.js:1503 +#: htdocs/luci-static/resources/view/fchomo/node.js:1527 msgid "Max request times" msgstr "最大请求次数" -#: htdocs/luci-static/resources/view/fchomo/node.js:1508 +#: htdocs/luci-static/resources/view/fchomo/node.js:1532 msgid "Max reusable seconds" msgstr "最大可复用秒数" -#: htdocs/luci-static/resources/view/fchomo/node.js:1498 +#: htdocs/luci-static/resources/view/fchomo/node.js:1522 msgid "Max reuse times" msgstr "最大复用次数" @@ -1949,12 +1984,12 @@ msgstr "最大复用次数" msgid "Max upload speed" msgstr "最大上传速度" -#: htdocs/luci-static/resources/view/fchomo/node.js:1534 -#: htdocs/luci-static/resources/view/fchomo/node.js:1554 +#: htdocs/luci-static/resources/view/fchomo/node.js:1558 +#: htdocs/luci-static/resources/view/fchomo/node.js:1578 msgid "Maximum connections" msgstr "最大连接数" -#: htdocs/luci-static/resources/view/fchomo/node.js:1552 +#: htdocs/luci-static/resources/view/fchomo/node.js:1576 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." "
Conflict with %s and %s." @@ -1974,7 +2009,7 @@ msgid "" "rate." msgstr "最大填充率必须大于等于最小填充率。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1551 +#: htdocs/luci-static/resources/view/fchomo/node.js:1575 msgid "Maximum streams" msgstr "最大流数量" @@ -1999,11 +2034,11 @@ msgstr "Mihomo 服务端" msgid "Min of idle sessions to keep" msgstr "要保留的最少闲置会话数" -#: htdocs/luci-static/resources/view/fchomo/node.js:1476 +#: htdocs/luci-static/resources/view/fchomo/node.js:1500 msgid "Min posts interval" msgstr "POST 请求最小间隔时间" -#: htdocs/luci-static/resources/view/fchomo/node.js:1543 +#: htdocs/luci-static/resources/view/fchomo/node.js:1567 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "在打开新连接之前,连接中的最小多路复用流数量。" @@ -2013,8 +2048,8 @@ msgstr "在打开新连接之前,连接中的最小多路复用流数量。" msgid "Minimum padding rate" msgstr "最小填充率" -#: htdocs/luci-static/resources/view/fchomo/node.js:1542 -#: htdocs/luci-static/resources/view/fchomo/node.js:1554 +#: htdocs/luci-static/resources/view/fchomo/node.js:1566 +#: htdocs/luci-static/resources/view/fchomo/node.js:1578 msgid "Minimum streams" msgstr "最小流数量" @@ -2031,8 +2066,8 @@ msgstr "混合 系统 TCP 栈和 gVisor UDP 栈。" msgid "Mixed port" msgstr "混合端口" -#: htdocs/luci-static/resources/fchomo/listeners.js:1315 -#: htdocs/luci-static/resources/view/fchomo/node.js:1520 +#: htdocs/luci-static/resources/fchomo/listeners.js:1345 +#: htdocs/luci-static/resources/view/fchomo/node.js:1544 msgid "Multiplex" msgstr "多路复用" @@ -2054,7 +2089,7 @@ msgstr "NOT" msgid "Name of the Proxy group as outbound." msgstr "出站代理组的名称。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1854 +#: htdocs/luci-static/resources/view/fchomo/node.js:1878 msgid "Name of the Proxy group to download provider." msgstr "用于下载供应商订阅的代理组名称。" @@ -2082,7 +2117,7 @@ msgstr "" msgid "Network type" msgstr "网络类型" -#: htdocs/luci-static/resources/view/fchomo/node.js:2023 +#: htdocs/luci-static/resources/view/fchomo/node.js:2047 msgid "No" msgstr "" @@ -2090,7 +2125,7 @@ msgstr "" msgid "No Authentication IP ranges" msgstr "无需认证的 IP 范围" -#: htdocs/luci-static/resources/fchomo/listeners.js:1292 +#: htdocs/luci-static/resources/fchomo/listeners.js:1322 msgid "No SSE header" msgstr "无 SSE header" @@ -2098,12 +2133,12 @@ msgstr "无 SSE header" msgid "No add'l params" msgstr "无附加参数" -#: htdocs/luci-static/resources/view/fchomo/node.js:1460 +#: htdocs/luci-static/resources/view/fchomo/node.js:1484 msgid "No gRPC header" msgstr "无 gRPC header" #: htdocs/luci-static/resources/view/fchomo/client.js:1180 -#: htdocs/luci-static/resources/view/fchomo/node.js:2086 +#: htdocs/luci-static/resources/view/fchomo/node.js:2110 msgid "No testing is performed when this provider node is not in use." msgstr "当此供应商的节点未使用时,不执行任何测试。" @@ -2121,17 +2156,17 @@ msgid "Node" msgstr "节点" #: htdocs/luci-static/resources/view/fchomo/client.js:1242 -#: htdocs/luci-static/resources/view/fchomo/node.js:2106 +#: htdocs/luci-static/resources/view/fchomo/node.js:2130 msgid "Node exclude filter" msgstr "排除节点" #: htdocs/luci-static/resources/view/fchomo/client.js:1247 -#: htdocs/luci-static/resources/view/fchomo/node.js:2113 +#: htdocs/luci-static/resources/view/fchomo/node.js:2137 msgid "Node exclude type" msgstr "排除节点类型" #: htdocs/luci-static/resources/view/fchomo/client.js:1237 -#: htdocs/luci-static/resources/view/fchomo/node.js:2100 +#: htdocs/luci-static/resources/view/fchomo/node.js:2124 msgid "Node filter" msgstr "过滤节点" @@ -2159,7 +2194,7 @@ msgstr "" msgid "ON" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:664 +#: htdocs/luci-static/resources/fchomo/listeners.js:668 #: htdocs/luci-static/resources/view/fchomo/node.js:995 msgid "Obfs Mode" msgstr "Obfs 模式" @@ -2197,7 +2232,7 @@ msgstr "混淆为%s" msgid "One or more numbers in the range 0-63 separated by commas" msgstr "0-63 范围内的一个或多个数字,以逗号分隔" -#: htdocs/luci-static/resources/fchomo/listeners.js:1024 +#: htdocs/luci-static/resources/fchomo/listeners.js:1028 msgid "Only applicable when %s are used as a frontend." msgstr "仅当 %s 用作前端时适用。" @@ -2222,7 +2257,7 @@ msgstr "运行模式" msgid "Option is deprecated. Please use %s instead." msgstr "该选项已弃用,请使用%s作为代替。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1971 +#: htdocs/luci-static/resources/view/fchomo/node.js:1995 msgid "Other configuration items" msgstr "其他配置项" @@ -2230,8 +2265,8 @@ msgstr "其他配置项" msgid "Outbound" msgstr "出站" -#: htdocs/luci-static/resources/view/fchomo/node.js:1233 -#: htdocs/luci-static/resources/view/fchomo/node.js:2010 +#: htdocs/luci-static/resources/view/fchomo/node.js:1241 +#: htdocs/luci-static/resources/view/fchomo/node.js:2034 msgid "Override cert DNSName" msgstr "覆盖证书 DNSName" @@ -2241,7 +2276,7 @@ msgid "Override destination" msgstr "覆盖目标地址" #: htdocs/luci-static/resources/view/fchomo/client.js:1043 -#: htdocs/luci-static/resources/view/fchomo/node.js:1765 +#: htdocs/luci-static/resources/view/fchomo/node.js:1789 msgid "Override fields" msgstr "覆盖字段" @@ -2261,7 +2296,7 @@ msgstr "使用嗅探到的域名覆盖连接目标。" msgid "Override the existing ECS in original request." msgstr "覆盖原始请求中已有的 ECS。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1288 +#: htdocs/luci-static/resources/view/fchomo/node.js:1296 msgid "Overrides the domain name used for HTTPS record queries." msgstr "覆盖用于 HTTPS 记录查询的域名。" @@ -2269,11 +2304,11 @@ msgstr "覆盖用于 HTTPS 记录查询的域名。" msgid "Overview" msgstr "概览" -#: htdocs/luci-static/resources/view/fchomo/node.js:1387 +#: htdocs/luci-static/resources/view/fchomo/node.js:1411 msgid "POST" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1388 +#: htdocs/luci-static/resources/view/fchomo/node.js:1412 msgid "PUT" msgstr "" @@ -2281,7 +2316,7 @@ msgstr "" msgid "Packet encoding" msgstr "数据包编码" -#: htdocs/luci-static/resources/view/fchomo/node.js:1465 +#: htdocs/luci-static/resources/view/fchomo/node.js:1489 msgid "Padding bytes" msgstr "填充字节" @@ -2289,14 +2324,14 @@ msgstr "填充字节" msgid "Padding scheme" msgstr "填充方案" -#: htdocs/luci-static/resources/fchomo/listeners.js:829 +#: htdocs/luci-static/resources/fchomo/listeners.js:833 #: htdocs/luci-static/resources/view/fchomo/node.js:1086 msgid "Paddings" msgstr "填充 (Paddings)" #: htdocs/luci-static/resources/fchomo/listeners.js:167 #: htdocs/luci-static/resources/fchomo/listeners.js:184 -#: htdocs/luci-static/resources/fchomo/listeners.js:691 +#: htdocs/luci-static/resources/fchomo/listeners.js:695 #: htdocs/luci-static/resources/view/fchomo/node.js:310 #: htdocs/luci-static/resources/view/fchomo/node.js:331 #: htdocs/luci-static/resources/view/fchomo/node.js:1014 @@ -2311,8 +2346,8 @@ msgstr "捆绑包路径" msgid "Path in bundle: %s" msgstr "在捆绑包%s中的路径" -#: htdocs/luci-static/resources/fchomo/listeners.js:769 -#: htdocs/luci-static/resources/view/fchomo/node.js:1829 +#: htdocs/luci-static/resources/fchomo/listeners.js:773 +#: htdocs/luci-static/resources/view/fchomo/node.js:1853 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:373 msgid "Payload" msgstr "Payload" @@ -2354,8 +2389,8 @@ msgid "" "standards." msgstr "链接格式标准请参考 %s。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1802 -#: htdocs/luci-static/resources/view/fchomo/node.js:1828 +#: htdocs/luci-static/resources/view/fchomo/node.js:1826 +#: htdocs/luci-static/resources/view/fchomo/node.js:1852 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:346 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:372 msgid "" @@ -2370,7 +2405,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1533 #: htdocs/luci-static/resources/view/fchomo/client.js:1788 #: htdocs/luci-static/resources/view/fchomo/client.js:1840 -#: htdocs/luci-static/resources/view/fchomo/node.js:1655 +#: htdocs/luci-static/resources/view/fchomo/node.js:1679 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:155 msgid "Please type %s fields of mihomo config.
" msgstr "请输入 mihomo 配置的 %s 字段。
" @@ -2385,7 +2420,7 @@ msgstr "插件" msgid "Plugin fields" msgstr "插件字段" -#: htdocs/luci-static/resources/fchomo/listeners.js:643 +#: htdocs/luci-static/resources/fchomo/listeners.js:644 #: htdocs/luci-static/resources/view/fchomo/node.js:972 msgid "Plugin type" msgstr "插件类型" @@ -2422,7 +2457,7 @@ msgstr "端口池" msgid "Pre-shared key" msgstr "预共享密钥" -#: htdocs/luci-static/resources/fchomo/listeners.js:967 +#: htdocs/luci-static/resources/fchomo/listeners.js:971 #: htdocs/luci-static/resources/view/fchomo/node.js:1121 msgid "Pre-shared key of rendezvous server" msgstr "牵线服务器的预共享密钥" @@ -2442,10 +2477,10 @@ msgstr "防止某些情况下的 ICMP 环回问题。Ping 不会显示实际延 #: htdocs/luci-static/resources/view/fchomo/global.js:760 #: htdocs/luci-static/resources/view/fchomo/global.js:777 -#: htdocs/luci-static/resources/view/fchomo/node.js:1616 -#: htdocs/luci-static/resources/view/fchomo/node.js:1623 -#: htdocs/luci-static/resources/view/fchomo/node.js:2035 -#: htdocs/luci-static/resources/view/fchomo/node.js:2042 +#: htdocs/luci-static/resources/view/fchomo/node.js:1640 +#: htdocs/luci-static/resources/view/fchomo/node.js:1647 +#: htdocs/luci-static/resources/view/fchomo/node.js:2059 +#: htdocs/luci-static/resources/view/fchomo/node.js:2066 msgid "Priority: Proxy Node > Global." msgstr "优先级: 代理节点 > 全局。" @@ -2462,7 +2497,7 @@ msgstr "密钥密码" msgid "Private key" msgstr "私钥" -#: htdocs/luci-static/resources/fchomo/listeners.js:737 +#: htdocs/luci-static/resources/fchomo/listeners.js:741 msgid "" "Probe the QUIC version of the handshake target during the first connection." msgstr "在首次连接期间探测握手目标的 QUIC 版本。" @@ -2471,12 +2506,12 @@ msgstr "在首次连接期间探测握手目标的 QUIC 版本。" msgid "Process matching mode" msgstr "进程匹配模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:1961 +#: htdocs/luci-static/resources/view/fchomo/node.js:1985 msgid "Programmable replacement" msgstr "可编程替换" #: htdocs/luci-static/resources/view/fchomo/global.js:708 -#: htdocs/luci-static/resources/view/fchomo/node.js:1526 +#: htdocs/luci-static/resources/view/fchomo/node.js:1550 msgid "Protocol" msgstr "协议" @@ -2491,13 +2526,13 @@ msgid "" msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。" #: htdocs/luci-static/resources/view/fchomo/client.js:1100 -#: htdocs/luci-static/resources/view/fchomo/node.js:1638 -#: htdocs/luci-static/resources/view/fchomo/node.js:1647 -#: htdocs/luci-static/resources/view/fchomo/node.js:2151 +#: htdocs/luci-static/resources/view/fchomo/node.js:1662 +#: htdocs/luci-static/resources/view/fchomo/node.js:1671 +#: htdocs/luci-static/resources/view/fchomo/node.js:2175 msgid "Provider" msgstr "供应商" -#: htdocs/luci-static/resources/view/fchomo/node.js:1835 +#: htdocs/luci-static/resources/view/fchomo/node.js:1859 msgid "Provider URL" msgstr "供应商订阅 URL" @@ -2520,19 +2555,19 @@ msgid "Proxy MAC-s" msgstr "代理 MAC 地址" #: htdocs/luci-static/resources/view/fchomo/node.js:222 -#: htdocs/luci-static/resources/view/fchomo/node.js:2150 +#: htdocs/luci-static/resources/view/fchomo/node.js:2174 msgid "Proxy Node" msgstr "代理节点" -#: htdocs/luci-static/resources/view/fchomo/node.js:2126 -#: htdocs/luci-static/resources/view/fchomo/node.js:2135 +#: htdocs/luci-static/resources/view/fchomo/node.js:2150 +#: htdocs/luci-static/resources/view/fchomo/node.js:2159 msgid "Proxy chain" msgstr "代理链" #: htdocs/luci-static/resources/fchomo/listeners.js:585 #: htdocs/luci-static/resources/view/fchomo/client.js:801 #: htdocs/luci-static/resources/view/fchomo/client.js:1631 -#: htdocs/luci-static/resources/view/fchomo/node.js:1853 +#: htdocs/luci-static/resources/view/fchomo/node.js:1877 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:403 msgid "Proxy group" msgstr "代理组" @@ -2559,7 +2594,7 @@ msgstr "" msgid "QUIC based 0-RTT" msgstr "基于 QUIC 的 0-RTT" -#: htdocs/luci-static/resources/fchomo/listeners.js:736 +#: htdocs/luci-static/resources/fchomo/listeners.js:740 msgid "QUIC version probe" msgstr "QUIC 版本探测" @@ -2573,34 +2608,35 @@ msgstr "QUIC 版本" msgid "Quick Reload" msgstr "快速重载" -#: htdocs/luci-static/resources/fchomo/listeners.js:1182 -#: htdocs/luci-static/resources/view/fchomo/node.js:1302 +#: htdocs/luci-static/resources/fchomo/listeners.js:1097 +#: htdocs/luci-static/resources/fchomo/listeners.js:1203 +#: htdocs/luci-static/resources/view/fchomo/node.js:1326 msgid "REALITY" msgstr "REALITY" -#: htdocs/luci-static/resources/view/fchomo/node.js:1317 +#: htdocs/luci-static/resources/view/fchomo/node.js:1341 msgid "REALITY X25519MLKEM768 PQC support" msgstr "REALITY X25519MLKEM768 后量子加密支持" -#: htdocs/luci-static/resources/fchomo/listeners.js:1219 +#: htdocs/luci-static/resources/fchomo/listeners.js:1249 msgid "REALITY certificate issued to" msgstr "REALITY 证书颁发给" -#: htdocs/luci-static/resources/fchomo/listeners.js:1187 +#: htdocs/luci-static/resources/fchomo/listeners.js:1217 msgid "REALITY handshake server" msgstr "REALITY 握手服务器" -#: htdocs/luci-static/resources/fchomo/listeners.js:1194 +#: htdocs/luci-static/resources/fchomo/listeners.js:1224 msgid "REALITY private key" msgstr "REALITY 私钥" -#: htdocs/luci-static/resources/fchomo/listeners.js:1209 -#: htdocs/luci-static/resources/view/fchomo/node.js:1307 +#: htdocs/luci-static/resources/fchomo/listeners.js:1239 +#: htdocs/luci-static/resources/view/fchomo/node.js:1331 msgid "REALITY public key" msgstr "REALITY 公钥" -#: htdocs/luci-static/resources/fchomo/listeners.js:1213 -#: htdocs/luci-static/resources/view/fchomo/node.js:1312 +#: htdocs/luci-static/resources/fchomo/listeners.js:1243 +#: htdocs/luci-static/resources/view/fchomo/node.js:1336 msgid "REALITY short ID" msgstr "REALITY 标识符" @@ -2610,8 +2646,8 @@ msgstr "REALITY 标识符" msgid "REMATCH-NAME marking" msgstr "REMATCH-NAME 打标" -#: htdocs/luci-static/resources/fchomo/listeners.js:800 -#: htdocs/luci-static/resources/fchomo/listeners.js:819 +#: htdocs/luci-static/resources/fchomo/listeners.js:804 +#: htdocs/luci-static/resources/fchomo/listeners.js:823 #: htdocs/luci-static/resources/view/fchomo/node.js:1076 msgid "RTT" msgstr "" @@ -2628,12 +2664,12 @@ msgstr "留空将使用随机令牌。" msgid "Randomized traffic characteristics" msgstr "随机化流量特征" -#: htdocs/luci-static/resources/fchomo/listeners.js:956 +#: htdocs/luci-static/resources/fchomo/listeners.js:960 #: htdocs/luci-static/resources/view/fchomo/node.js:1110 msgid "Realm" msgstr "Realm" -#: htdocs/luci-static/resources/fchomo/listeners.js:972 +#: htdocs/luci-static/resources/fchomo/listeners.js:976 #: htdocs/luci-static/resources/view/fchomo/node.js:1126 msgid "Realm ID" msgstr "Realm ID" @@ -2681,7 +2717,7 @@ msgstr "再路由" msgid "Rematching routing rules" msgstr "重新匹配路由规则" -#: htdocs/luci-static/resources/view/fchomo/node.js:1780 +#: htdocs/luci-static/resources/view/fchomo/node.js:1804 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:287 msgid "Remote" msgstr "远程" @@ -2696,23 +2732,23 @@ msgid "Remove" msgstr "移除" #: htdocs/luci-static/resources/fchomo.js:1739 -#: htdocs/luci-static/resources/view/fchomo/node.js:1756 -#: htdocs/luci-static/resources/view/fchomo/node.js:1758 +#: htdocs/luci-static/resources/view/fchomo/node.js:1780 +#: htdocs/luci-static/resources/view/fchomo/node.js:1782 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:259 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:261 msgid "Remove idles" msgstr "移除闲置" -#: htdocs/luci-static/resources/fchomo/listeners.js:961 +#: htdocs/luci-static/resources/fchomo/listeners.js:965 #: htdocs/luci-static/resources/view/fchomo/node.js:1115 msgid "Rendezvous server" msgstr "牵线服务器" -#: htdocs/luci-static/resources/view/fchomo/node.js:1952 +#: htdocs/luci-static/resources/view/fchomo/node.js:1976 msgid "Replace name" msgstr "名称替换" -#: htdocs/luci-static/resources/view/fchomo/node.js:1953 +#: htdocs/luci-static/resources/view/fchomo/node.js:1977 msgid "Replace node name." msgstr "替换节点名称" @@ -2720,9 +2756,9 @@ msgstr "替换节点名称" msgid "Request" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1271 -#: htdocs/luci-static/resources/view/fchomo/node.js:1394 -#: htdocs/luci-static/resources/view/fchomo/node.js:1401 +#: htdocs/luci-static/resources/fchomo/listeners.js:1301 +#: htdocs/luci-static/resources/view/fchomo/node.js:1418 +#: htdocs/luci-static/resources/view/fchomo/node.js:1425 msgid "Request path" msgstr "请求路径" @@ -2739,7 +2775,7 @@ msgid "Require any" msgstr "" #: htdocs/luci-static/resources/fchomo.js:406 -#: htdocs/luci-static/resources/view/fchomo/node.js:1318 +#: htdocs/luci-static/resources/view/fchomo/node.js:1342 msgid "Requires server support." msgstr "需要服务器支持。" @@ -2751,7 +2787,12 @@ msgstr "保留字段字节" msgid "Resources management" msgstr "资源管理" -#: htdocs/luci-static/resources/fchomo/listeners.js:705 +#: htdocs/luci-static/resources/fchomo/listeners.js:647 +#: htdocs/luci-static/resources/view/fchomo/node.js:977 +msgid "Restls" +msgstr "" + +#: htdocs/luci-static/resources/fchomo/listeners.js:709 #: htdocs/luci-static/resources/view/fchomo/node.js:1034 msgid "Restls script" msgstr "Restls 剧本" @@ -2790,8 +2831,8 @@ msgstr "路由 GFW 流量" #: htdocs/luci-static/resources/fchomo/listeners.js:568 #: htdocs/luci-static/resources/view/fchomo/global.js:776 -#: htdocs/luci-static/resources/view/fchomo/node.js:1622 -#: htdocs/luci-static/resources/view/fchomo/node.js:2041 +#: htdocs/luci-static/resources/view/fchomo/node.js:1646 +#: htdocs/luci-static/resources/view/fchomo/node.js:2065 msgid "Routing mark (Fwmark)" msgstr "路由标记 (Fwmark)" @@ -2871,7 +2912,7 @@ msgstr "" msgid "STUN" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:978 +#: htdocs/luci-static/resources/fchomo/listeners.js:982 #: htdocs/luci-static/resources/view/fchomo/node.js:1132 msgid "STUN servers" msgstr "STUN 服务器" @@ -2927,9 +2968,9 @@ msgstr "同时向%s%s发起查询。" msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse." msgstr "发送 300-600 秒的随机票证,以供客户端 0-RTT 重用。" -#: htdocs/luci-static/resources/fchomo/listeners.js:800 -#: htdocs/luci-static/resources/fchomo/listeners.js:1080 -#: htdocs/luci-static/resources/fchomo/listeners.js:1095 +#: htdocs/luci-static/resources/fchomo/listeners.js:804 +#: htdocs/luci-static/resources/fchomo/listeners.js:1088 +#: htdocs/luci-static/resources/fchomo/listeners.js:1116 #: htdocs/luci-static/resources/view/fchomo/server.js:58 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:62 msgid "Server" @@ -2939,9 +2980,9 @@ msgstr "服务端" msgid "Server address" msgstr "服务器地址" -#: htdocs/luci-static/resources/fchomo/listeners.js:1265 -#: htdocs/luci-static/resources/view/fchomo/node.js:1373 -#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/fchomo/listeners.js:1295 +#: htdocs/luci-static/resources/view/fchomo/node.js:1397 +#: htdocs/luci-static/resources/view/fchomo/node.js:1403 msgid "Server hostname" msgstr "服务器主机名称" @@ -2958,6 +2999,13 @@ msgstr "服务状态" msgid "ShadowQUIC" msgstr "" +#: htdocs/luci-static/resources/fchomo/listeners.js:646 +#: htdocs/luci-static/resources/fchomo/listeners.js:656 +#: htdocs/luci-static/resources/view/fchomo/node.js:976 +#: htdocs/luci-static/resources/view/fchomo/node.js:986 +msgid "ShadowTLS" +msgstr "" + #: htdocs/luci-static/resources/fchomo.js:157 #: htdocs/luci-static/resources/fchomo.js:193 msgid "Shadowsocks" @@ -2978,7 +3026,7 @@ msgstr "Shadowsocks 加密" msgid "Shadowsocks password" msgstr "Shadowsocks 密码" -#: htdocs/luci-static/resources/view/fchomo/node.js:1574 +#: htdocs/luci-static/resources/view/fchomo/node.js:1598 msgid "Show connections in the dashboard for breaking connections easier." msgstr "在面板中显示连接以便于打断连接。" @@ -2990,14 +3038,14 @@ msgstr "静音" msgid "Simple round-robin all nodes" msgstr "简单轮替所有节点" -#: htdocs/luci-static/resources/view/fchomo/node.js:1841 +#: htdocs/luci-static/resources/view/fchomo/node.js:1865 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:391 msgid "Size limit" msgstr "大小限制" #: htdocs/luci-static/resources/view/fchomo/client.js:1667 -#: htdocs/luci-static/resources/view/fchomo/node.js:1239 -#: htdocs/luci-static/resources/view/fchomo/node.js:2016 +#: htdocs/luci-static/resources/view/fchomo/node.js:1247 +#: htdocs/luci-static/resources/view/fchomo/node.js:2040 msgid "Skip cert verify" msgstr "跳过证书验证" @@ -3135,7 +3183,7 @@ msgstr "TCP" msgid "TCP concurrency" msgstr "TCP 并发" -#: htdocs/luci-static/resources/view/fchomo/node.js:1567 +#: htdocs/luci-static/resources/view/fchomo/node.js:1591 msgid "TCP only" msgstr "仅 TCP" @@ -3162,13 +3210,13 @@ msgstr "TCP-Keep-Alive 间隔" msgid "TCP/UDP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1598 -#: htdocs/luci-static/resources/view/fchomo/node.js:1977 +#: htdocs/luci-static/resources/view/fchomo/node.js:1622 +#: htdocs/luci-static/resources/view/fchomo/node.js:2001 msgid "TFO" msgstr "TCP 快速打开 (TFO)" -#: htdocs/luci-static/resources/fchomo/listeners.js:666 -#: htdocs/luci-static/resources/fchomo/listeners.js:988 +#: htdocs/luci-static/resources/fchomo/listeners.js:670 +#: htdocs/luci-static/resources/fchomo/listeners.js:992 #: htdocs/luci-static/resources/view/fchomo/global.js:550 #: htdocs/luci-static/resources/view/fchomo/node.js:455 #: htdocs/luci-static/resources/view/fchomo/node.js:997 @@ -3176,13 +3224,14 @@ msgstr "TCP 快速打开 (TFO)" msgid "TLS" msgstr "TLS" -#: htdocs/luci-static/resources/fchomo/listeners.js:1035 -#: htdocs/luci-static/resources/view/fchomo/node.js:1173 +#: htdocs/luci-static/resources/fchomo/listeners.js:1039 +#: htdocs/luci-static/resources/view/fchomo/node.js:1181 msgid "TLS ALPN" msgstr "TLS ALPN" -#: htdocs/luci-static/resources/fchomo/listeners.js:1029 +#: htdocs/luci-static/resources/fchomo/listeners.js:1033 #: htdocs/luci-static/resources/view/fchomo/node.js:1167 +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 msgid "TLS SNI" msgstr "" @@ -3219,19 +3268,19 @@ msgstr "Cloudflare WARP 网络中使用的本机 %s 地址。" msgid "The %s address used by local machine in the Wireguard network." msgstr "WireGuard 网络中使用的本机 %s 地址。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1095 -#: htdocs/luci-static/resources/view/fchomo/node.js:1262 +#: htdocs/luci-static/resources/fchomo/listeners.js:1116 +#: htdocs/luci-static/resources/view/fchomo/node.js:1270 msgid "The %s private key, in PEM format." msgstr "%s私钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1080 -#: htdocs/luci-static/resources/fchomo/listeners.js:1118 +#: htdocs/luci-static/resources/fchomo/listeners.js:1088 +#: htdocs/luci-static/resources/fchomo/listeners.js:1139 #: htdocs/luci-static/resources/view/fchomo/global.js:571 -#: htdocs/luci-static/resources/view/fchomo/node.js:1248 +#: htdocs/luci-static/resources/view/fchomo/node.js:1256 msgid "The %s public key, in PEM format." msgstr "%s公钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1282 +#: htdocs/luci-static/resources/view/fchomo/node.js:1290 msgid "" "The ECH parameter of the HTTPS record for the domain. Leave empty to resolve " "via DNS." @@ -3255,7 +3304,7 @@ msgid "" "connection timeout is used." msgstr "默认值为%s,表示仅使用外层连接超时。" -#: htdocs/luci-static/resources/fchomo/listeners.js:832 +#: htdocs/luci-static/resources/fchomo/listeners.js:836 #: htdocs/luci-static/resources/view/fchomo/node.js:1089 msgid "" "The first padding must have a probability of 100% and at least 35 bytes." @@ -3271,23 +3320,23 @@ msgstr "匹配 %s 的将被视为未被投毒污染。" msgid "The matching %s will be deemed as poisoned." msgstr "匹配 %s 的将被视为已被投毒污染。" -#: htdocs/luci-static/resources/fchomo/listeners.js:713 +#: htdocs/luci-static/resources/fchomo/listeners.js:717 msgid "The proxy used to connect to the handshake target." msgstr "用于连接握手目标的代理。" -#: htdocs/luci-static/resources/fchomo/listeners.js:830 +#: htdocs/luci-static/resources/fchomo/listeners.js:834 #: htdocs/luci-static/resources/view/fchomo/node.js:1087 msgid "The server and client can set different padding parameters." msgstr "服务器和客户端可以设置不同的填充参数。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1176 +#: htdocs/luci-static/resources/fchomo/listeners.js:1197 #: htdocs/luci-static/resources/view/fchomo/global.js:615 msgid "This ECH parameter needs to be added to the HTTPS record of the domain." msgstr "此 ECH 参数需要添加到域名的 HTTPS 记录中。" #: htdocs/luci-static/resources/view/fchomo/client.js:1670 -#: htdocs/luci-static/resources/view/fchomo/node.js:1242 -#: htdocs/luci-static/resources/view/fchomo/node.js:2019 +#: htdocs/luci-static/resources/view/fchomo/node.js:1250 +#: htdocs/luci-static/resources/view/fchomo/node.js:2043 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" @@ -3331,18 +3380,18 @@ msgstr "Tproxy 端口" msgid "Traffic pattern" msgstr "流量模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:2188 +#: htdocs/luci-static/resources/view/fchomo/node.js:2212 msgid "Transit proxy group" msgstr "中转代理组" -#: htdocs/luci-static/resources/view/fchomo/node.js:2199 +#: htdocs/luci-static/resources/view/fchomo/node.js:2223 msgid "Transit proxy node" msgstr "中转代理节点" #: htdocs/luci-static/resources/fchomo/listeners.js:194 -#: htdocs/luci-static/resources/fchomo/listeners.js:1229 +#: htdocs/luci-static/resources/fchomo/listeners.js:1259 #: htdocs/luci-static/resources/view/fchomo/node.js:346 -#: htdocs/luci-static/resources/view/fchomo/node.js:1326 +#: htdocs/luci-static/resources/view/fchomo/node.js:1350 msgid "Transport" msgstr "传输层" @@ -3351,8 +3400,8 @@ msgstr "传输层" msgid "Transport fields" msgstr "传输层字段" -#: htdocs/luci-static/resources/fchomo/listeners.js:1234 -#: htdocs/luci-static/resources/view/fchomo/node.js:1331 +#: htdocs/luci-static/resources/fchomo/listeners.js:1264 +#: htdocs/luci-static/resources/view/fchomo/node.js:1355 msgid "Transport type" msgstr "传输层类型" @@ -3401,8 +3450,8 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:863 #: htdocs/luci-static/resources/view/fchomo/client.js:1061 #: htdocs/luci-static/resources/view/fchomo/node.js:254 -#: htdocs/luci-static/resources/view/fchomo/node.js:1778 -#: htdocs/luci-static/resources/view/fchomo/node.js:2149 +#: htdocs/luci-static/resources/view/fchomo/node.js:1802 +#: htdocs/luci-static/resources/view/fchomo/node.js:2173 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:285 msgid "Type" msgstr "类型" @@ -3420,7 +3469,7 @@ msgstr "类型" #: htdocs/luci-static/resources/view/fchomo/client.js:605 #: htdocs/luci-static/resources/view/fchomo/client.js:697 #: htdocs/luci-static/resources/view/fchomo/node.js:947 -#: htdocs/luci-static/resources/view/fchomo/node.js:1987 +#: htdocs/luci-static/resources/view/fchomo/node.js:2011 msgid "UDP" msgstr "UDP" @@ -3490,7 +3539,7 @@ msgid "Unknown error: %s" msgstr "未知错误:%s" #: htdocs/luci-static/resources/view/fchomo/node.js:953 -#: htdocs/luci-static/resources/view/fchomo/node.js:1992 +#: htdocs/luci-static/resources/view/fchomo/node.js:2016 msgid "UoT" msgstr "UDP over TCP (UoT)" @@ -3498,24 +3547,24 @@ msgstr "UDP over TCP (UoT)" msgid "Update failed." msgstr "更新失败。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1847 +#: htdocs/luci-static/resources/view/fchomo/node.js:1871 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:397 msgid "Update interval" msgstr "更新间隔" -#: htdocs/luci-static/resources/fchomo/listeners.js:1331 -#: htdocs/luci-static/resources/view/fchomo/node.js:1585 +#: htdocs/luci-static/resources/fchomo/listeners.js:1361 +#: htdocs/luci-static/resources/view/fchomo/node.js:1609 msgid "Upload bandwidth" msgstr "上传带宽" -#: htdocs/luci-static/resources/fchomo/listeners.js:1332 -#: htdocs/luci-static/resources/view/fchomo/node.js:1586 +#: htdocs/luci-static/resources/fchomo/listeners.js:1362 +#: htdocs/luci-static/resources/view/fchomo/node.js:1610 msgid "Upload bandwidth in Mbps." msgstr "上传带宽(单位:Mbps)。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1086 -#: htdocs/luci-static/resources/fchomo/listeners.js:1126 -#: htdocs/luci-static/resources/view/fchomo/node.js:1253 +#: htdocs/luci-static/resources/fchomo/listeners.js:1107 +#: htdocs/luci-static/resources/fchomo/listeners.js:1147 +#: htdocs/luci-static/resources/view/fchomo/node.js:1261 msgid "Upload certificate" msgstr "上传证书" @@ -3523,17 +3572,17 @@ msgstr "上传证书" msgid "Upload initial package" msgstr "上传初始资源包" -#: htdocs/luci-static/resources/fchomo/listeners.js:1101 -#: htdocs/luci-static/resources/view/fchomo/node.js:1267 +#: htdocs/luci-static/resources/fchomo/listeners.js:1122 +#: htdocs/luci-static/resources/view/fchomo/node.js:1275 msgid "Upload key" msgstr "上传密钥" -#: htdocs/luci-static/resources/fchomo/listeners.js:1089 -#: htdocs/luci-static/resources/fchomo/listeners.js:1104 -#: htdocs/luci-static/resources/fchomo/listeners.js:1129 +#: htdocs/luci-static/resources/fchomo/listeners.js:1110 +#: htdocs/luci-static/resources/fchomo/listeners.js:1125 +#: htdocs/luci-static/resources/fchomo/listeners.js:1150 #: htdocs/luci-static/resources/view/fchomo/global.js:306 -#: htdocs/luci-static/resources/view/fchomo/node.js:1256 -#: htdocs/luci-static/resources/view/fchomo/node.js:1270 +#: htdocs/luci-static/resources/view/fchomo/node.js:1264 +#: htdocs/luci-static/resources/view/fchomo/node.js:1278 msgid "Upload..." msgstr "上传..." @@ -3563,8 +3612,8 @@ msgstr "用于解析 DNS 服务器的域名。必须是 IP。" msgid "Used to resolve the domain of the Proxy node." msgstr "用于解析代理节点的域名。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1234 -#: htdocs/luci-static/resources/view/fchomo/node.js:2011 +#: htdocs/luci-static/resources/view/fchomo/node.js:1242 +#: htdocs/luci-static/resources/view/fchomo/node.js:2035 msgid "Used to verify the hostname on the returned certificates." msgstr "用于验证返回的证书上的主机名。" @@ -3577,7 +3626,7 @@ msgid "User-hint is mandatory" msgstr "User-hint 是必填项" #: htdocs/luci-static/resources/fchomo/listeners.js:162 -#: htdocs/luci-static/resources/fchomo/listeners.js:685 +#: htdocs/luci-static/resources/fchomo/listeners.js:689 #: htdocs/luci-static/resources/view/fchomo/node.js:305 #: htdocs/luci-static/resources/view/fchomo/node.js:1008 msgid "Username" @@ -3587,11 +3636,11 @@ msgstr "用户名" msgid "Users filter mode" msgstr "使用者过滤模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:1442 +#: htdocs/luci-static/resources/view/fchomo/node.js:1466 msgid "V2ray HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1447 +#: htdocs/luci-static/resources/view/fchomo/node.js:1471 msgid "V2ray HTTPUpgrade fast open" msgstr "" @@ -3605,8 +3654,8 @@ msgstr "" msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1784 -#: htdocs/luci-static/resources/view/fchomo/node.js:2155 +#: htdocs/luci-static/resources/view/fchomo/node.js:1808 +#: htdocs/luci-static/resources/view/fchomo/node.js:2179 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:328 msgid "Value" msgstr "可视化值" @@ -3616,7 +3665,7 @@ msgid "Verify if given" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:384 -#: htdocs/luci-static/resources/fchomo/listeners.js:697 +#: htdocs/luci-static/resources/fchomo/listeners.js:701 #: htdocs/luci-static/resources/view/fchomo/node.js:497 #: htdocs/luci-static/resources/view/fchomo/node.js:1020 msgid "Version" @@ -3640,15 +3689,15 @@ msgid "Warning" msgstr "警告" #: htdocs/luci-static/resources/fchomo/listeners.js:362 -#: htdocs/luci-static/resources/fchomo/listeners.js:1236 -#: htdocs/luci-static/resources/fchomo/listeners.js:1247 -#: htdocs/luci-static/resources/fchomo/listeners.js:1254 +#: htdocs/luci-static/resources/fchomo/listeners.js:1266 +#: htdocs/luci-static/resources/fchomo/listeners.js:1277 +#: htdocs/luci-static/resources/fchomo/listeners.js:1284 #: htdocs/luci-static/resources/view/fchomo/node.js:451 #: htdocs/luci-static/resources/view/fchomo/node.js:480 -#: htdocs/luci-static/resources/view/fchomo/node.js:1336 -#: htdocs/luci-static/resources/view/fchomo/node.js:1349 -#: htdocs/luci-static/resources/view/fchomo/node.js:1356 -#: htdocs/luci-static/resources/view/fchomo/node.js:1362 +#: htdocs/luci-static/resources/view/fchomo/node.js:1360 +#: htdocs/luci-static/resources/view/fchomo/node.js:1373 +#: htdocs/luci-static/resources/view/fchomo/node.js:1380 +#: htdocs/luci-static/resources/view/fchomo/node.js:1386 msgid "WebSocket" msgstr "" @@ -3676,32 +3725,32 @@ msgstr "WireGuard 预共享密钥。" msgid "WireGuard requires base64-encoded private keys." msgstr "WireGuard 要求 base64 编码的私钥。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1237 -#: htdocs/luci-static/resources/fchomo/listeners.js:1248 -#: htdocs/luci-static/resources/view/fchomo/node.js:1337 -#: htdocs/luci-static/resources/view/fchomo/node.js:1357 +#: htdocs/luci-static/resources/fchomo/listeners.js:1267 +#: htdocs/luci-static/resources/fchomo/listeners.js:1278 +#: htdocs/luci-static/resources/view/fchomo/node.js:1361 +#: htdocs/luci-static/resources/view/fchomo/node.js:1381 msgid "XHTTP" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1284 -#: htdocs/luci-static/resources/view/fchomo/node.js:1452 +#: htdocs/luci-static/resources/fchomo/listeners.js:1314 +#: htdocs/luci-static/resources/view/fchomo/node.js:1476 msgid "XHTTP mode" msgstr "XHTTP 模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:1483 +#: htdocs/luci-static/resources/view/fchomo/node.js:1507 msgid "XMUX" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1488 -#: htdocs/luci-static/resources/view/fchomo/node.js:1493 -#: htdocs/luci-static/resources/view/fchomo/node.js:1498 -#: htdocs/luci-static/resources/view/fchomo/node.js:1503 -#: htdocs/luci-static/resources/view/fchomo/node.js:1508 -#: htdocs/luci-static/resources/view/fchomo/node.js:1513 +#: htdocs/luci-static/resources/view/fchomo/node.js:1512 +#: htdocs/luci-static/resources/view/fchomo/node.js:1517 +#: htdocs/luci-static/resources/view/fchomo/node.js:1522 +#: htdocs/luci-static/resources/view/fchomo/node.js:1527 +#: htdocs/luci-static/resources/view/fchomo/node.js:1532 +#: htdocs/luci-static/resources/view/fchomo/node.js:1537 msgid "XMUX:" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:791 +#: htdocs/luci-static/resources/fchomo/listeners.js:795 msgid "XOR mode" msgstr "XOR 模式" @@ -3713,7 +3762,7 @@ msgstr "" msgid "Yaml text" msgstr "Yaml 格式文本" -#: htdocs/luci-static/resources/view/fchomo/node.js:2022 +#: htdocs/luci-static/resources/view/fchomo/node.js:2046 msgid "Yes" msgstr "" @@ -3741,11 +3790,11 @@ msgstr "" msgid "aes-256-gcm" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1869 +#: htdocs/luci-static/resources/view/fchomo/node.js:1893 msgid "age private key" msgstr "age 私钥" -#: htdocs/luci-static/resources/view/fchomo/node.js:1930 +#: htdocs/luci-static/resources/view/fchomo/node.js:1954 msgid "age public key" msgstr "age 公钥" @@ -3765,9 +3814,9 @@ msgstr "自动" msgid "bbr" msgstr "bbr" -#: htdocs/luci-static/resources/fchomo/listeners.js:1091 -#: htdocs/luci-static/resources/fchomo/listeners.js:1131 -#: htdocs/luci-static/resources/view/fchomo/node.js:1258 +#: htdocs/luci-static/resources/fchomo/listeners.js:1112 +#: htdocs/luci-static/resources/fchomo/listeners.js:1152 +#: htdocs/luci-static/resources/view/fchomo/node.js:1266 msgid "certificate" msgstr "证书" @@ -3785,8 +3834,8 @@ msgstr "" msgid "cubic" msgstr "cubic" -#: htdocs/luci-static/resources/fchomo/listeners.js:743 -#: htdocs/luci-static/resources/fchomo/listeners.js:774 +#: htdocs/luci-static/resources/fchomo/listeners.js:747 +#: htdocs/luci-static/resources/fchomo/listeners.js:778 msgid "decryption" msgstr "decryption" @@ -3794,11 +3843,11 @@ msgstr "decryption" msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)" msgstr "dnsmasq 自行选择上游服务器。 (可能影响 CDN 准确性)" -#: htdocs/luci-static/resources/view/fchomo/node.js:2004 +#: htdocs/luci-static/resources/view/fchomo/node.js:2028 msgid "down" msgstr "Hysteria 下载速率" -#: htdocs/luci-static/resources/fchomo/listeners.js:778 +#: htdocs/luci-static/resources/fchomo/listeners.js:782 #: htdocs/luci-static/resources/view/fchomo/node.js:1041 #: htdocs/luci-static/resources/view/fchomo/node.js:1064 msgid "encryption" @@ -3809,26 +3858,26 @@ msgstr "encryption" msgid "false = bandwidth optimized downlink; true = pure Sudoku downlink." msgstr "false = 带宽优化下行 true = 纯 Sudoku 下行。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1235 -#: htdocs/luci-static/resources/fchomo/listeners.js:1246 -#: htdocs/luci-static/resources/fchomo/listeners.js:1253 -#: htdocs/luci-static/resources/view/fchomo/node.js:1335 -#: htdocs/luci-static/resources/view/fchomo/node.js:1348 -#: htdocs/luci-static/resources/view/fchomo/node.js:1355 -#: htdocs/luci-static/resources/view/fchomo/node.js:1361 +#: htdocs/luci-static/resources/fchomo/listeners.js:1265 +#: htdocs/luci-static/resources/fchomo/listeners.js:1276 +#: htdocs/luci-static/resources/fchomo/listeners.js:1283 +#: htdocs/luci-static/resources/view/fchomo/node.js:1359 +#: htdocs/luci-static/resources/view/fchomo/node.js:1372 +#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/view/fchomo/node.js:1385 msgid "gRPC" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1418 +#: htdocs/luci-static/resources/view/fchomo/node.js:1442 msgid "gRPC User-Agent" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1423 +#: htdocs/luci-static/resources/view/fchomo/node.js:1447 msgid "gRPC ping interval" msgstr "gRPC ping 间隔" -#: htdocs/luci-static/resources/fchomo/listeners.js:1278 -#: htdocs/luci-static/resources/view/fchomo/node.js:1414 +#: htdocs/luci-static/resources/fchomo/listeners.js:1308 +#: htdocs/luci-static/resources/view/fchomo/node.js:1438 msgid "gRPC service name" msgstr "gRPC 服务名称" @@ -3840,7 +3889,7 @@ msgstr "gVisor" msgid "h2" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1530 +#: htdocs/luci-static/resources/view/fchomo/node.js:1554 msgid "h2mux" msgstr "" @@ -3852,12 +3901,7 @@ msgstr "" msgid "h3-l4proxy" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:647 -#: htdocs/luci-static/resources/view/fchomo/node.js:978 -msgid "jls" -msgstr "" - -#: htdocs/luci-static/resources/fchomo/listeners.js:943 +#: htdocs/luci-static/resources/fchomo/listeners.js:947 msgid "least one keypair required" msgstr "至少需要一对密钥" @@ -3871,7 +3915,7 @@ msgstr "metacubexd" #: htdocs/luci-static/resources/view/fchomo/client.js:1568 #: htdocs/luci-static/resources/view/fchomo/client.js:1802 #: htdocs/luci-static/resources/view/fchomo/client.js:1858 -#: htdocs/luci-static/resources/view/fchomo/node.js:1750 +#: htdocs/luci-static/resources/view/fchomo/node.js:1774 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:247 msgid "mihomo config" msgstr "mihomo 配置" @@ -3880,8 +3924,8 @@ msgstr "mihomo 配置" msgid "mlkem768x25519plus" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1603 -#: htdocs/luci-static/resources/view/fchomo/node.js:1982 +#: htdocs/luci-static/resources/view/fchomo/node.js:1627 +#: htdocs/luci-static/resources/view/fchomo/node.js:2006 msgid "mpTCP" msgstr "多路径 TCP (mpTCP)" @@ -3923,8 +3967,8 @@ msgstr "不包含 \",\"" msgid "null" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:644 -#: htdocs/luci-static/resources/fchomo/listeners.js:654 +#: htdocs/luci-static/resources/fchomo/listeners.js:645 +#: htdocs/luci-static/resources/fchomo/listeners.js:655 #: htdocs/luci-static/resources/view/fchomo/node.js:973 #: htdocs/luci-static/resources/view/fchomo/node.js:985 msgid "obfs-simple" @@ -3938,11 +3982,11 @@ msgstr "仅当 %s 为 %s 时适用。" msgid "only applies when %s is not %s." msgstr "仅当 %s 不为 %s 时适用。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1963 +#: htdocs/luci-static/resources/view/fchomo/node.js:1987 msgid "override.override-expr" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1955 +#: htdocs/luci-static/resources/view/fchomo/node.js:1979 msgid "override.proxy-name" msgstr "" @@ -3950,8 +3994,8 @@ msgstr "" msgid "packet addr (v2ray-core v5+)" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1288 -#: htdocs/luci-static/resources/view/fchomo/node.js:1456 +#: htdocs/luci-static/resources/fchomo/listeners.js:1318 +#: htdocs/luci-static/resources/view/fchomo/node.js:1480 msgid "packet-up" msgstr "" @@ -3960,8 +4004,8 @@ msgstr "" msgid "poll" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1106 -#: htdocs/luci-static/resources/view/fchomo/node.js:1272 +#: htdocs/luci-static/resources/fchomo/listeners.js:1127 +#: htdocs/luci-static/resources/view/fchomo/node.js:1280 msgid "private key" msgstr "私钥" @@ -3974,23 +4018,11 @@ msgstr "razord-meta" msgid "requires front-end adaptation using the API." msgstr "需要使用 API 的前端适配。" -#: htdocs/luci-static/resources/fchomo/listeners.js:646 -#: htdocs/luci-static/resources/view/fchomo/node.js:977 -msgid "restls" -msgstr "" - #: htdocs/luci-static/resources/view/fchomo/ruleset.js:232 msgid "rule-set" msgstr "规则集" -#: htdocs/luci-static/resources/fchomo/listeners.js:645 -#: htdocs/luci-static/resources/fchomo/listeners.js:655 -#: htdocs/luci-static/resources/view/fchomo/node.js:976 -#: htdocs/luci-static/resources/view/fchomo/node.js:986 -msgid "shadow-tls" -msgstr "" - -#: htdocs/luci-static/resources/view/fchomo/node.js:1528 +#: htdocs/luci-static/resources/view/fchomo/node.js:1552 msgid "smux" msgstr "" @@ -4003,17 +4035,17 @@ msgstr "" msgid "src" msgstr "src" -#: htdocs/luci-static/resources/fchomo/listeners.js:1286 -#: htdocs/luci-static/resources/view/fchomo/node.js:1454 +#: htdocs/luci-static/resources/fchomo/listeners.js:1316 +#: htdocs/luci-static/resources/view/fchomo/node.js:1478 msgid "stream-one" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1287 -#: htdocs/luci-static/resources/view/fchomo/node.js:1455 +#: htdocs/luci-static/resources/fchomo/listeners.js:1317 +#: htdocs/luci-static/resources/view/fchomo/node.js:1479 msgid "stream-up" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1303 +#: htdocs/luci-static/resources/fchomo/listeners.js:1333 msgid "stream-up server seconds" msgstr "" @@ -4041,12 +4073,12 @@ msgstr "独立标识" msgid "unique value" msgstr "独立值" -#: htdocs/luci-static/resources/view/fchomo/node.js:1998 +#: htdocs/luci-static/resources/view/fchomo/node.js:2022 msgid "up" msgstr "Hysteria 上传速率" #: htdocs/luci-static/resources/fchomo/listeners.js:385 -#: htdocs/luci-static/resources/fchomo/listeners.js:698 +#: htdocs/luci-static/resources/fchomo/listeners.js:702 #: htdocs/luci-static/resources/view/fchomo/node.js:498 #: htdocs/luci-static/resources/view/fchomo/node.js:634 #: htdocs/luci-static/resources/view/fchomo/node.js:960 @@ -4055,7 +4087,7 @@ msgid "v1" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:386 -#: htdocs/luci-static/resources/fchomo/listeners.js:699 +#: htdocs/luci-static/resources/fchomo/listeners.js:703 #: htdocs/luci-static/resources/view/fchomo/node.js:499 #: htdocs/luci-static/resources/view/fchomo/node.js:961 #: htdocs/luci-static/resources/view/fchomo/node.js:1022 @@ -4063,7 +4095,7 @@ msgid "v2" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:387 -#: htdocs/luci-static/resources/fchomo/listeners.js:700 +#: htdocs/luci-static/resources/fchomo/listeners.js:704 #: htdocs/luci-static/resources/view/fchomo/node.js:500 #: htdocs/luci-static/resources/view/fchomo/node.js:1023 msgid "v3" @@ -4084,7 +4116,7 @@ msgstr "" msgid "valid JSON format" msgstr "有效的 JSON 格式" -#: htdocs/luci-static/resources/view/fchomo/node.js:1226 +#: htdocs/luci-static/resources/view/fchomo/node.js:1234 msgid "valid SHA256 string with %d characters" msgstr "包含 %d 个字符的有效 SHA256 字符串" @@ -4130,7 +4162,7 @@ msgstr "" msgid "yacd-meta" msgstr "yacd-meta" -#: htdocs/luci-static/resources/view/fchomo/node.js:1529 +#: htdocs/luci-static/resources/view/fchomo/node.js:1553 msgid "yamux" msgstr "" diff --git a/luci-app-fchomo/po/zh_Hant/fchomo.po b/luci-app-fchomo/po/zh_Hant/fchomo.po index 2d7858cd..c5e71415 100644 --- a/luci-app-fchomo/po/zh_Hant/fchomo.po +++ b/luci-app-fchomo/po/zh_Hant/fchomo.po @@ -27,15 +27,15 @@ msgstr "%s 連接埠" msgid "(Imported)" msgstr "(已導入)" -#: htdocs/luci-static/resources/fchomo/listeners.js:1109 -#: htdocs/luci-static/resources/fchomo/listeners.js:1117 -#: htdocs/luci-static/resources/fchomo/listeners.js:1126 +#: htdocs/luci-static/resources/fchomo/listeners.js:1130 +#: htdocs/luci-static/resources/fchomo/listeners.js:1138 +#: htdocs/luci-static/resources/fchomo/listeners.js:1147 #: htdocs/luci-static/resources/view/fchomo/global.js:564 #: htdocs/luci-static/resources/view/fchomo/global.js:570 -#: htdocs/luci-static/resources/view/fchomo/node.js:1247 -#: htdocs/luci-static/resources/view/fchomo/node.js:1253 +#: htdocs/luci-static/resources/view/fchomo/node.js:1255 #: htdocs/luci-static/resources/view/fchomo/node.js:1261 -#: htdocs/luci-static/resources/view/fchomo/node.js:1267 +#: htdocs/luci-static/resources/view/fchomo/node.js:1269 +#: htdocs/luci-static/resources/view/fchomo/node.js:1275 msgid "(mTLS)" msgstr "" @@ -62,10 +62,10 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1105 #: htdocs/luci-static/resources/view/fchomo/client.js:1361 #: htdocs/luci-static/resources/view/fchomo/node.js:288 -#: htdocs/luci-static/resources/view/fchomo/node.js:2161 -#: htdocs/luci-static/resources/view/fchomo/node.js:2172 -#: htdocs/luci-static/resources/view/fchomo/node.js:2191 -#: htdocs/luci-static/resources/view/fchomo/node.js:2202 +#: htdocs/luci-static/resources/view/fchomo/node.js:2185 +#: htdocs/luci-static/resources/view/fchomo/node.js:2196 +#: htdocs/luci-static/resources/view/fchomo/node.js:2215 +#: htdocs/luci-static/resources/view/fchomo/node.js:2226 msgid "-- Please choose --" msgstr "-- 請選擇 --" @@ -110,11 +110,11 @@ msgstr "" msgid "0 or 1 only." msgstr "僅限 01。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1087 -#: htdocs/luci-static/resources/fchomo/listeners.js:1102 -#: htdocs/luci-static/resources/fchomo/listeners.js:1127 -#: htdocs/luci-static/resources/view/fchomo/node.js:1254 -#: htdocs/luci-static/resources/view/fchomo/node.js:1268 +#: htdocs/luci-static/resources/fchomo/listeners.js:1108 +#: htdocs/luci-static/resources/fchomo/listeners.js:1123 +#: htdocs/luci-static/resources/fchomo/listeners.js:1148 +#: htdocs/luci-static/resources/view/fchomo/node.js:1262 +#: htdocs/luci-static/resources/view/fchomo/node.js:1276 msgid "Save your configuration before uploading files!" msgstr "上傳文件前請先保存配置!" @@ -214,11 +214,11 @@ msgstr "新增 節點" msgid "Add a inbound" msgstr "新增 入站" -#: htdocs/luci-static/resources/view/fchomo/node.js:1647 +#: htdocs/luci-static/resources/view/fchomo/node.js:1671 msgid "Add a provider" msgstr "新增 供應商" -#: htdocs/luci-static/resources/view/fchomo/node.js:2135 +#: htdocs/luci-static/resources/view/fchomo/node.js:2159 msgid "Add a proxy chain" msgstr "新增 代理鏈" @@ -242,11 +242,11 @@ msgstr "新增 伺服器" msgid "Add a sub rule" msgstr "新增 子規則" -#: htdocs/luci-static/resources/view/fchomo/node.js:1944 +#: htdocs/luci-static/resources/view/fchomo/node.js:1968 msgid "Add prefix" msgstr "添加前綴" -#: htdocs/luci-static/resources/view/fchomo/node.js:1948 +#: htdocs/luci-static/resources/view/fchomo/node.js:1972 msgid "Add suffix" msgstr "添加後綴" @@ -287,7 +287,7 @@ msgid "" msgstr "" "允許從私有網路訪問。
要從公共網站訪問私有網路上的 API,則必須啟用。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1023 +#: htdocs/luci-static/resources/fchomo/listeners.js:1027 msgid "Allow insecure connections" msgstr "允許不安全的連線" @@ -335,11 +335,11 @@ msgid "Authenticated length" msgstr "認證長度" #: htdocs/luci-static/resources/fchomo/listeners.js:361 -#: htdocs/luci-static/resources/fchomo/listeners.js:1285 +#: htdocs/luci-static/resources/fchomo/listeners.js:1315 #: htdocs/luci-static/resources/view/fchomo/global.js:423 #: htdocs/luci-static/resources/view/fchomo/node.js:450 #: htdocs/luci-static/resources/view/fchomo/node.js:474 -#: htdocs/luci-static/resources/view/fchomo/node.js:1453 +#: htdocs/luci-static/resources/view/fchomo/node.js:1477 msgid "Auto" msgstr "自動" @@ -390,13 +390,13 @@ msgid "Binary mrs" msgstr "二進位 mrs" #: htdocs/luci-static/resources/view/fchomo/global.js:758 -#: htdocs/luci-static/resources/view/fchomo/node.js:1614 -#: htdocs/luci-static/resources/view/fchomo/node.js:2033 +#: htdocs/luci-static/resources/view/fchomo/node.js:1638 +#: htdocs/luci-static/resources/view/fchomo/node.js:2057 msgid "Bind interface" msgstr "綁定介面" -#: htdocs/luci-static/resources/view/fchomo/node.js:1615 -#: htdocs/luci-static/resources/view/fchomo/node.js:2034 +#: htdocs/luci-static/resources/view/fchomo/node.js:1639 +#: htdocs/luci-static/resources/view/fchomo/node.js:2058 msgid "Bind outbound interface.
" msgstr "綁定出站介面。
" @@ -465,17 +465,17 @@ msgstr "CORS 允許的來源,留空則使用 *。" msgid "Cancel" msgstr "取消" -#: htdocs/luci-static/resources/view/fchomo/node.js:1220 +#: htdocs/luci-static/resources/view/fchomo/node.js:1228 msgid "Cert fingerprint" msgstr "憑證指紋" -#: htdocs/luci-static/resources/view/fchomo/node.js:1221 +#: htdocs/luci-static/resources/view/fchomo/node.js:1229 msgid "" "Certificate fingerprint. Used to implement SSL Pinning and prevent MitM." msgstr "憑證指紋。用於實現 SSL憑證固定 並防止 MitM。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1079 -#: htdocs/luci-static/resources/view/fchomo/node.js:1247 +#: htdocs/luci-static/resources/fchomo/listeners.js:1087 +#: htdocs/luci-static/resources/view/fchomo/node.js:1255 msgid "Certificate path" msgstr "憑證路徑" @@ -536,25 +536,25 @@ msgstr "" "點擊此處下載" "最新的初始包。" -#: htdocs/luci-static/resources/fchomo/listeners.js:819 -#: htdocs/luci-static/resources/fchomo/listeners.js:1118 +#: htdocs/luci-static/resources/fchomo/listeners.js:823 +#: htdocs/luci-static/resources/fchomo/listeners.js:1139 #: htdocs/luci-static/resources/view/fchomo/global.js:571 #: htdocs/luci-static/resources/view/fchomo/node.js:1076 -#: htdocs/luci-static/resources/view/fchomo/node.js:1248 -#: htdocs/luci-static/resources/view/fchomo/node.js:1262 +#: htdocs/luci-static/resources/view/fchomo/node.js:1256 +#: htdocs/luci-static/resources/view/fchomo/node.js:1270 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:22 msgid "Client" msgstr "客戶端" -#: htdocs/luci-static/resources/fchomo/listeners.js:1117 +#: htdocs/luci-static/resources/fchomo/listeners.js:1138 msgid "Client Auth Certificate path" msgstr "客戶端認證憑證路徑" -#: htdocs/luci-static/resources/fchomo/listeners.js:1109 +#: htdocs/luci-static/resources/fchomo/listeners.js:1130 msgid "Client Auth type" msgstr "客戶端認證類型" -#: htdocs/luci-static/resources/view/fchomo/node.js:1293 +#: htdocs/luci-static/resources/view/fchomo/node.js:1301 msgid "Client fingerprint" msgstr "客戶端指紋" @@ -601,14 +601,14 @@ msgid "Content copied to clipboard!" msgstr "內容已複製到剪貼簿!" #: htdocs/luci-static/resources/view/fchomo/client.js:687 -#: htdocs/luci-static/resources/view/fchomo/node.js:1804 -#: htdocs/luci-static/resources/view/fchomo/node.js:1830 +#: htdocs/luci-static/resources/view/fchomo/node.js:1828 +#: htdocs/luci-static/resources/view/fchomo/node.js:1854 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:348 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:374 msgid "Content will not be verified, Please make sure you enter it correctly." msgstr "內容將不會被驗證,請確保輸入正確。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1803 +#: htdocs/luci-static/resources/view/fchomo/node.js:1827 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:347 msgid "Contents" msgstr "內容" @@ -633,7 +633,7 @@ msgstr "Cron 表達式" msgid "Custom Direct List" msgstr "自訂直連清單" -#: htdocs/luci-static/resources/view/fchomo/node.js:1935 +#: htdocs/luci-static/resources/view/fchomo/node.js:1959 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:420 msgid "Custom HTTP header." msgstr "自訂 HTTP header。" @@ -716,11 +716,11 @@ msgstr "從私鑰派生" msgid "Destination addresses allowed to be forwarded via Wireguard." msgstr "允許通過 WireGuard 轉發的目的位址" -#: htdocs/luci-static/resources/view/fchomo/node.js:2158 +#: htdocs/luci-static/resources/view/fchomo/node.js:2182 msgid "Destination provider" msgstr "落地供應商" -#: htdocs/luci-static/resources/view/fchomo/node.js:2169 +#: htdocs/luci-static/resources/view/fchomo/node.js:2193 msgid "Destination proxy node" msgstr "落地代理節點" @@ -728,8 +728,8 @@ msgstr "落地代理節點" msgid "Dial fields" msgstr "撥號欄位" -#: htdocs/luci-static/resources/view/fchomo/node.js:2181 -#: htdocs/luci-static/resources/view/fchomo/node.js:2211 +#: htdocs/luci-static/resources/view/fchomo/node.js:2205 +#: htdocs/luci-static/resources/view/fchomo/node.js:2235 msgid "Different chain head/tail" msgstr "不同的鏈頭/鏈尾" @@ -800,18 +800,18 @@ msgid "Donot send server name in ClientHello." msgstr "不要在 ClientHello 中傳送伺服器名稱。" #: htdocs/luci-static/resources/view/fchomo/client.js:1668 -#: htdocs/luci-static/resources/view/fchomo/node.js:1240 -#: htdocs/luci-static/resources/view/fchomo/node.js:2017 +#: htdocs/luci-static/resources/view/fchomo/node.js:1248 +#: htdocs/luci-static/resources/view/fchomo/node.js:2041 msgid "Donot verifying server certificate." msgstr "不驗證伺服器憑證。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1337 -#: htdocs/luci-static/resources/view/fchomo/node.js:1591 +#: htdocs/luci-static/resources/fchomo/listeners.js:1367 +#: htdocs/luci-static/resources/view/fchomo/node.js:1615 msgid "Download bandwidth" msgstr "下載頻寬" -#: htdocs/luci-static/resources/fchomo/listeners.js:1338 -#: htdocs/luci-static/resources/view/fchomo/node.js:1592 +#: htdocs/luci-static/resources/fchomo/listeners.js:1368 +#: htdocs/luci-static/resources/view/fchomo/node.js:1616 msgid "Download bandwidth in Mbps." msgstr "下載頻寬(單位:Mbps)。" @@ -827,16 +827,16 @@ msgstr "下載成功。" msgid "Dual stack" msgstr "雙棧" -#: htdocs/luci-static/resources/view/fchomo/node.js:1287 +#: htdocs/luci-static/resources/view/fchomo/node.js:1295 msgid "ECH HTTPS record query servername" msgstr "ECH HTTPS 記錄查詢網域" -#: htdocs/luci-static/resources/fchomo/listeners.js:1175 -#: htdocs/luci-static/resources/view/fchomo/node.js:1281 +#: htdocs/luci-static/resources/fchomo/listeners.js:1196 +#: htdocs/luci-static/resources/view/fchomo/node.js:1289 msgid "ECH config" msgstr "ECH 配置" -#: htdocs/luci-static/resources/fchomo/listeners.js:1134 +#: htdocs/luci-static/resources/fchomo/listeners.js:1155 msgid "ECH key" msgstr "ECH 密鑰" @@ -852,11 +852,11 @@ msgstr "EDNS 客戶端子網" msgid "ETag support" msgstr "ETag 支援" -#: htdocs/luci-static/resources/view/fchomo/node.js:1431 +#: htdocs/luci-static/resources/view/fchomo/node.js:1455 msgid "Early Data first packet length limit." msgstr "前置數據長度閾值" -#: htdocs/luci-static/resources/view/fchomo/node.js:1437 +#: htdocs/luci-static/resources/view/fchomo/node.js:1461 msgid "Early Data header name" msgstr "前置數據標頭" @@ -872,7 +872,7 @@ msgstr "編輯出站" msgid "Edit ruleset" msgstr "編輯規則集" -#: htdocs/luci-static/resources/view/fchomo/node.js:1801 +#: htdocs/luci-static/resources/view/fchomo/node.js:1825 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:345 msgid "Editer" msgstr "編輯器" @@ -896,9 +896,9 @@ msgstr "為空時回退" #: htdocs/luci-static/resources/view/fchomo/global.js:422 #: htdocs/luci-static/resources/view/fchomo/global.js:704 #: htdocs/luci-static/resources/view/fchomo/node.js:250 -#: htdocs/luci-static/resources/view/fchomo/node.js:1774 -#: htdocs/luci-static/resources/view/fchomo/node.js:2056 -#: htdocs/luci-static/resources/view/fchomo/node.js:2145 +#: htdocs/luci-static/resources/view/fchomo/node.js:1798 +#: htdocs/luci-static/resources/view/fchomo/node.js:2080 +#: htdocs/luci-static/resources/view/fchomo/node.js:2169 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:272 #: htdocs/luci-static/resources/view/fchomo/server.js:49 msgid "Enable" @@ -925,17 +925,17 @@ msgstr "" "為出站連線啟用 IP4P 轉換" -#: htdocs/luci-static/resources/view/fchomo/node.js:1275 +#: htdocs/luci-static/resources/view/fchomo/node.js:1283 msgid "Enable ECH" msgstr "啟用 ECH" -#: htdocs/luci-static/resources/fchomo/listeners.js:1325 -#: htdocs/luci-static/resources/view/fchomo/node.js:1579 +#: htdocs/luci-static/resources/fchomo/listeners.js:1355 +#: htdocs/luci-static/resources/view/fchomo/node.js:1603 msgid "Enable TCP Brutal" msgstr "啟用 TCP Brutal" -#: htdocs/luci-static/resources/fchomo/listeners.js:1326 -#: htdocs/luci-static/resources/view/fchomo/node.js:1580 +#: htdocs/luci-static/resources/fchomo/listeners.js:1356 +#: htdocs/luci-static/resources/view/fchomo/node.js:1604 msgid "Enable TCP Brutal congestion control algorithm" msgstr "啟用 TCP Brutal 擁塞控制演算法。" @@ -943,7 +943,7 @@ msgstr "啟用 TCP Brutal 擁塞控制演算法。" msgid "Enable fast open" msgstr "啟用 Fast open" -#: htdocs/luci-static/resources/view/fchomo/node.js:1568 +#: htdocs/luci-static/resources/view/fchomo/node.js:1592 msgid "Enable multiplexing only for TCP." msgstr "僅為 TCP 啟用多路復用。" @@ -952,17 +952,17 @@ msgstr "僅為 TCP 啟用多路復用。" msgid "Enable obfuscate for downlink" msgstr "啟用下行鏈路混淆" -#: htdocs/luci-static/resources/fchomo/listeners.js:1320 -#: htdocs/luci-static/resources/view/fchomo/node.js:1562 +#: htdocs/luci-static/resources/fchomo/listeners.js:1350 +#: htdocs/luci-static/resources/view/fchomo/node.js:1586 msgid "Enable padding" msgstr "啟用填充" -#: htdocs/luci-static/resources/view/fchomo/node.js:1573 +#: htdocs/luci-static/resources/view/fchomo/node.js:1597 msgid "Enable statistic" msgstr "啟用統計" #: htdocs/luci-static/resources/view/fchomo/node.js:954 -#: htdocs/luci-static/resources/view/fchomo/node.js:1993 +#: htdocs/luci-static/resources/view/fchomo/node.js:2017 msgid "" "Enable the SUoT protocol, requires server support. Conflict with Multiplex." msgstr "啟用 SUoT 協議,需要服務端支援。與多路復用衝突。" @@ -974,7 +974,7 @@ msgid "" "connections, losing the ability to masquerade with HTTP/3." msgstr "啟用混淆將使伺服器與標準的 QUIC 連線不相容,失去 HTTP/3 偽裝的能力。" -#: htdocs/luci-static/resources/fchomo/listeners.js:782 +#: htdocs/luci-static/resources/fchomo/listeners.js:786 msgid "Encryption method" msgstr "加密方法" @@ -1001,7 +1001,7 @@ msgid "" "if empty." msgstr "超過此限制將會觸發強制健康檢查。留空則使用 5。" -#: htdocs/luci-static/resources/view/fchomo/node.js:2114 +#: htdocs/luci-static/resources/view/fchomo/node.js:2138 msgid "Exclude matched node types." msgstr "排除匹配的節點類型。" @@ -1014,7 +1014,7 @@ msgstr "" "rel=\"noreferrer noopener\">此處。" #: htdocs/luci-static/resources/view/fchomo/client.js:1243 -#: htdocs/luci-static/resources/view/fchomo/node.js:2107 +#: htdocs/luci-static/resources/view/fchomo/node.js:2131 msgid "Exclude nodes that meet keywords or regexps." msgstr "排除匹配關鍵字或表達式的節點。" @@ -1023,12 +1023,12 @@ msgid "Expand/Collapse result" msgstr "展開/收起 結果" #: htdocs/luci-static/resources/view/fchomo/client.js:1186 -#: htdocs/luci-static/resources/view/fchomo/node.js:2092 +#: htdocs/luci-static/resources/view/fchomo/node.js:2116 msgid "Expected HTTP code. 204 will be used if empty." msgstr "預期的 HTTP code。留空則使用 204。" #: htdocs/luci-static/resources/view/fchomo/client.js:1188 -#: htdocs/luci-static/resources/view/fchomo/node.js:2094 +#: htdocs/luci-static/resources/view/fchomo/node.js:2118 msgid "Expected status" msgstr "預期狀態" @@ -1058,9 +1058,9 @@ msgstr "預期狀態" #: htdocs/luci-static/resources/fchomo.js:1968 #: htdocs/luci-static/resources/fchomo/listeners.js:284 #: htdocs/luci-static/resources/fchomo/listeners.js:331 -#: htdocs/luci-static/resources/fchomo/listeners.js:811 -#: htdocs/luci-static/resources/fchomo/listeners.js:842 -#: htdocs/luci-static/resources/fchomo/listeners.js:943 +#: htdocs/luci-static/resources/fchomo/listeners.js:815 +#: htdocs/luci-static/resources/fchomo/listeners.js:846 +#: htdocs/luci-static/resources/fchomo/listeners.js:947 #: htdocs/luci-static/resources/view/fchomo/client.js:71 #: htdocs/luci-static/resources/view/fchomo/client.js:1051 #: htdocs/luci-static/resources/view/fchomo/client.js:1596 @@ -1070,27 +1070,44 @@ msgstr "預期狀態" #: htdocs/luci-static/resources/view/fchomo/node.js:480 #: htdocs/luci-static/resources/view/fchomo/node.js:482 #: htdocs/luci-static/resources/view/fchomo/node.js:1099 -#: htdocs/luci-static/resources/view/fchomo/node.js:1226 -#: htdocs/luci-static/resources/view/fchomo/node.js:2181 -#: htdocs/luci-static/resources/view/fchomo/node.js:2211 +#: htdocs/luci-static/resources/view/fchomo/node.js:1234 +#: htdocs/luci-static/resources/view/fchomo/node.js:2205 +#: htdocs/luci-static/resources/view/fchomo/node.js:2235 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:300 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:314 msgid "Expecting: %s" msgstr "請輸入:%s" +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 +msgid "Expecting: %s cannot be empty when %s is enabled." +msgstr "請輸入:%s 不能為空,當 %s 啟用時。" + #: htdocs/luci-static/resources/view/fchomo/node.js:278 #: htdocs/luci-static/resources/view/fchomo/node.js:296 msgid "Expecting: Least one of %s or %s." msgstr "請輸入:至少包含 %s 或 %s 中的一個。" -#: htdocs/luci-static/resources/fchomo/listeners.js:654 -#: htdocs/luci-static/resources/fchomo/listeners.js:1246 -#: htdocs/luci-static/resources/fchomo/listeners.js:1253 +#: htdocs/luci-static/resources/fchomo/listeners.js:1099 +msgid "Expecting: Cannot be empty." +msgstr "請輸入:不能為空。" + +#: htdocs/luci-static/resources/fchomo/listeners.js:1210 +msgid "Expecting: Cannot be enabled when %s is enabled." +msgstr "請輸入:當 %s 啟用時,無法啟用。" + +#: htdocs/luci-static/resources/fchomo/listeners.js:1096 +msgid "Expecting: Keep empty when %s is enabled." +msgstr "請輸入:啟用 %s 時保持為空。" + +#: htdocs/luci-static/resources/fchomo/listeners.js:655 +#: htdocs/luci-static/resources/fchomo/listeners.js:659 +#: htdocs/luci-static/resources/fchomo/listeners.js:1276 +#: htdocs/luci-static/resources/fchomo/listeners.js:1283 #: htdocs/luci-static/resources/view/fchomo/node.js:985 -#: htdocs/luci-static/resources/view/fchomo/node.js:1346 -#: htdocs/luci-static/resources/view/fchomo/node.js:1353 -#: htdocs/luci-static/resources/view/fchomo/node.js:1361 -msgid "Expecting: only support %s." +#: htdocs/luci-static/resources/view/fchomo/node.js:1370 +#: htdocs/luci-static/resources/view/fchomo/node.js:1377 +#: htdocs/luci-static/resources/view/fchomo/node.js:1385 +msgid "Expecting: Only support %s." msgstr "請輸入:僅支援 %s。" #: htdocs/luci-static/resources/view/fchomo/global.js:723 @@ -1142,7 +1159,7 @@ msgid "Fallback filter" msgstr "後備過濾器" #: htdocs/luci-static/resources/view/fchomo/client.js:1238 -#: htdocs/luci-static/resources/view/fchomo/node.js:2101 +#: htdocs/luci-static/resources/view/fchomo/node.js:2125 msgid "Filter nodes that meet keywords or regexps." msgstr "過濾匹配關鍵字或表達式的節點。" @@ -1185,9 +1202,9 @@ msgstr "" "noopener\">%s." #: htdocs/luci-static/resources/view/fchomo/client.js:1187 -#: htdocs/luci-static/resources/view/fchomo/node.js:1954 -#: htdocs/luci-static/resources/view/fchomo/node.js:1962 -#: htdocs/luci-static/resources/view/fchomo/node.js:2093 +#: htdocs/luci-static/resources/view/fchomo/node.js:1978 +#: htdocs/luci-static/resources/view/fchomo/node.js:1986 +#: htdocs/luci-static/resources/view/fchomo/node.js:2117 msgid "" "For format see %s." @@ -1208,7 +1225,7 @@ msgstr "強制嗅探網域" msgid "Format" msgstr "格式" -#: htdocs/luci-static/resources/fchomo/listeners.js:729 +#: htdocs/luci-static/resources/fchomo/listeners.js:733 msgid "Forwarding rate limit" msgstr "轉發速率限制" @@ -1219,7 +1236,7 @@ msgstr "轉發速率限制" msgid "FullCombo Shark!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1386 +#: htdocs/luci-static/resources/view/fchomo/node.js:1410 msgid "GET" msgstr "" @@ -1239,7 +1256,7 @@ msgstr "常規" #: htdocs/luci-static/resources/fchomo/listeners.js:119 #: htdocs/luci-static/resources/view/fchomo/client.js:1042 #: htdocs/luci-static/resources/view/fchomo/node.js:236 -#: htdocs/luci-static/resources/view/fchomo/node.js:1764 +#: htdocs/luci-static/resources/view/fchomo/node.js:1788 msgid "General fields" msgstr "常規欄位" @@ -1254,10 +1271,10 @@ msgstr "常規設定" #: htdocs/luci-static/resources/fchomo/listeners.js:262 #: htdocs/luci-static/resources/fchomo/listeners.js:306 #: htdocs/luci-static/resources/fchomo/listeners.js:308 -#: htdocs/luci-static/resources/fchomo/listeners.js:915 -#: htdocs/luci-static/resources/fchomo/listeners.js:1167 +#: htdocs/luci-static/resources/fchomo/listeners.js:919 +#: htdocs/luci-static/resources/fchomo/listeners.js:1188 #: htdocs/luci-static/resources/view/fchomo/global.js:608 -#: htdocs/luci-static/resources/view/fchomo/node.js:1922 +#: htdocs/luci-static/resources/view/fchomo/node.js:1946 msgid "Generate" msgstr "生成" @@ -1326,17 +1343,17 @@ msgstr "組" #: htdocs/luci-static/resources/fchomo.js:154 #: htdocs/luci-static/resources/fchomo.js:191 -#: htdocs/luci-static/resources/fchomo/listeners.js:665 +#: htdocs/luci-static/resources/fchomo/listeners.js:669 #: htdocs/luci-static/resources/view/fchomo/node.js:996 -#: htdocs/luci-static/resources/view/fchomo/node.js:1333 -#: htdocs/luci-static/resources/view/fchomo/node.js:1346 -#: htdocs/luci-static/resources/view/fchomo/node.js:1353 +#: htdocs/luci-static/resources/view/fchomo/node.js:1357 +#: htdocs/luci-static/resources/view/fchomo/node.js:1370 +#: htdocs/luci-static/resources/view/fchomo/node.js:1377 msgid "HTTP" msgstr "" #: htdocs/luci-static/resources/view/fchomo/node.js:316 -#: htdocs/luci-static/resources/view/fchomo/node.js:1408 -#: htdocs/luci-static/resources/view/fchomo/node.js:1934 +#: htdocs/luci-static/resources/view/fchomo/node.js:1432 +#: htdocs/luci-static/resources/view/fchomo/node.js:1958 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:419 msgid "HTTP header" msgstr "HTTP header" @@ -1362,7 +1379,7 @@ msgstr "HTTP 偽裝多路復用" msgid "HTTP mask: %s" msgstr "HTTP 偽裝: %s" -#: htdocs/luci-static/resources/view/fchomo/node.js:1385 +#: htdocs/luci-static/resources/view/fchomo/node.js:1409 msgid "HTTP request method" msgstr "HTTP 請求方法" @@ -1381,9 +1398,9 @@ msgid "" "returned if empty." msgstr "身份驗證失敗時的 HTTP3 伺服器回應。預設回傳 404 頁面。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1334 -#: htdocs/luci-static/resources/view/fchomo/node.js:1347 -#: htdocs/luci-static/resources/view/fchomo/node.js:1354 +#: htdocs/luci-static/resources/view/fchomo/node.js:1358 +#: htdocs/luci-static/resources/view/fchomo/node.js:1371 +#: htdocs/luci-static/resources/view/fchomo/node.js:1378 msgid "HTTPUpgrade" msgstr "" @@ -1395,11 +1412,11 @@ msgstr "處理網域" msgid "Handshake mode" msgstr "握手模式" -#: htdocs/luci-static/resources/fchomo/listeners.js:712 +#: htdocs/luci-static/resources/fchomo/listeners.js:716 msgid "Handshake target proxy" msgstr "握手目標代理" -#: htdocs/luci-static/resources/fchomo/listeners.js:677 +#: htdocs/luci-static/resources/fchomo/listeners.js:681 msgid "Handshake target that supports TLS 1.3" msgstr "握手目標 (支援 TLS 1.3)" @@ -1417,27 +1434,27 @@ msgid "Health check" msgstr "健康檢查" #: htdocs/luci-static/resources/view/fchomo/client.js:1156 -#: htdocs/luci-static/resources/view/fchomo/node.js:2061 +#: htdocs/luci-static/resources/view/fchomo/node.js:2085 msgid "Health check URL" msgstr "健康檢查 URL" #: htdocs/luci-static/resources/view/fchomo/client.js:1185 -#: htdocs/luci-static/resources/view/fchomo/node.js:2091 +#: htdocs/luci-static/resources/view/fchomo/node.js:2115 msgid "Health check expected status" msgstr "健康檢查预期状态" #: htdocs/luci-static/resources/view/fchomo/client.js:1165 -#: htdocs/luci-static/resources/view/fchomo/node.js:2071 +#: htdocs/luci-static/resources/view/fchomo/node.js:2095 msgid "Health check interval" msgstr "健康檢查間隔" #: htdocs/luci-static/resources/view/fchomo/client.js:1172 -#: htdocs/luci-static/resources/view/fchomo/node.js:2078 +#: htdocs/luci-static/resources/view/fchomo/node.js:2102 msgid "Health check timeout" msgstr "健康檢查逾時" #: htdocs/luci-static/resources/view/fchomo/client.js:1044 -#: htdocs/luci-static/resources/view/fchomo/node.js:1766 +#: htdocs/luci-static/resources/view/fchomo/node.js:1790 msgid "Health fields" msgstr "健康欄位" @@ -1450,7 +1467,7 @@ msgstr "心跳間隔" msgid "Hidden" msgstr "隱藏" -#: htdocs/luci-static/resources/fchomo/listeners.js:670 +#: htdocs/luci-static/resources/fchomo/listeners.js:674 #: htdocs/luci-static/resources/view/fchomo/node.js:1001 msgid "Host that supports TLS 1.3" msgstr "主機名稱 (支援 TLS 1.3)" @@ -1467,7 +1484,7 @@ msgstr "主機金鑰演算法" msgid "Host/SNI override" msgstr "主機/SNI 覆蓋" -#: htdocs/luci-static/resources/fchomo/listeners.js:1030 +#: htdocs/luci-static/resources/fchomo/listeners.js:1034 #: htdocs/luci-static/resources/view/fchomo/node.js:1168 msgid "" "Hostname that the client attempts to connect to at the start of the TLS " @@ -1506,8 +1523,8 @@ msgstr "" msgid "IP override" msgstr "IP 覆寫" -#: htdocs/luci-static/resources/view/fchomo/node.js:1628 -#: htdocs/luci-static/resources/view/fchomo/node.js:2047 +#: htdocs/luci-static/resources/view/fchomo/node.js:1652 +#: htdocs/luci-static/resources/view/fchomo/node.js:2071 msgid "IP version" msgstr "IP 版本" @@ -1568,8 +1585,8 @@ msgstr "導入" #: htdocs/luci-static/resources/view/fchomo/client.js:1804 #: htdocs/luci-static/resources/view/fchomo/client.js:1839 #: htdocs/luci-static/resources/view/fchomo/client.js:1860 -#: htdocs/luci-static/resources/view/fchomo/node.js:1654 -#: htdocs/luci-static/resources/view/fchomo/node.js:1752 +#: htdocs/luci-static/resources/view/fchomo/node.js:1678 +#: htdocs/luci-static/resources/view/fchomo/node.js:1776 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:154 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:249 msgid "Import mihomo config" @@ -1585,16 +1602,16 @@ msgstr "導入規則集連結" #: htdocs/luci-static/resources/fchomo/listeners.js:472 #: htdocs/luci-static/resources/view/fchomo/node.js:683 #: htdocs/luci-static/resources/view/fchomo/node.js:689 -#: htdocs/luci-static/resources/view/fchomo/node.js:1999 -#: htdocs/luci-static/resources/view/fchomo/node.js:2005 +#: htdocs/luci-static/resources/view/fchomo/node.js:2023 +#: htdocs/luci-static/resources/view/fchomo/node.js:2029 msgid "In Mbps." msgstr "單位為 Mbps。" -#: htdocs/luci-static/resources/fchomo/listeners.js:730 +#: htdocs/luci-static/resources/fchomo/listeners.js:734 msgid "In bps. 0 means no speed limit." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1842 +#: htdocs/luci-static/resources/view/fchomo/node.js:1866 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:392 msgid "In bytes. %s will be used if empty." msgstr "單位為位元組。留空則使用 %s。" @@ -1607,11 +1624,11 @@ msgstr "單位為毫秒。" #: htdocs/luci-static/resources/view/fchomo/client.js:1173 #: htdocs/luci-static/resources/view/fchomo/client.js:1219 -#: htdocs/luci-static/resources/view/fchomo/node.js:2079 +#: htdocs/luci-static/resources/view/fchomo/node.js:2103 msgid "In millisecond. %s will be used if empty." msgstr "單位為毫秒。留空則使用 %s。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1477 +#: htdocs/luci-static/resources/view/fchomo/node.js:1501 msgid "In milliseconds." msgstr "單位為毫秒。" @@ -1620,7 +1637,7 @@ msgstr "單位為毫秒。" #: htdocs/luci-static/resources/fchomo/listeners.js:619 #: htdocs/luci-static/resources/view/fchomo/node.js:587 #: htdocs/luci-static/resources/view/fchomo/node.js:594 -#: htdocs/luci-static/resources/view/fchomo/node.js:1424 +#: htdocs/luci-static/resources/view/fchomo/node.js:1448 msgid "In seconds." msgstr "單位為秒。" @@ -1629,8 +1646,8 @@ msgstr "單位為秒。" #: htdocs/luci-static/resources/view/fchomo/global.js:451 #: htdocs/luci-static/resources/view/fchomo/global.js:536 #: htdocs/luci-static/resources/view/fchomo/node.js:677 -#: htdocs/luci-static/resources/view/fchomo/node.js:1848 -#: htdocs/luci-static/resources/view/fchomo/node.js:2072 +#: htdocs/luci-static/resources/view/fchomo/node.js:1872 +#: htdocs/luci-static/resources/view/fchomo/node.js:2096 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:398 msgid "In seconds. %s will be used if empty." msgstr "單位為秒。留空則使用 %s。" @@ -1641,7 +1658,7 @@ msgid "" "connection timeout." msgstr "單位為秒。配置後握手時不受外層連線逾時影響。" -#: htdocs/luci-static/resources/fchomo/listeners.js:831 +#: htdocs/luci-static/resources/fchomo/listeners.js:835 #: htdocs/luci-static/resources/view/fchomo/node.js:1088 msgid "" "In the order of one Padding-Length and one Padding-" @@ -1684,7 +1701,7 @@ msgstr "引入所有代理節點。" msgid "Info" msgstr "訊息" -#: htdocs/luci-static/resources/view/fchomo/node.js:1781 +#: htdocs/luci-static/resources/view/fchomo/node.js:1805 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:288 msgid "Inline" msgstr "內嵌" @@ -1693,15 +1710,33 @@ msgstr "內嵌" msgid "Interface Control" msgstr "介面控制" +#: htdocs/luci-static/resources/fchomo/listeners.js:648 +#: htdocs/luci-static/resources/fchomo/listeners.js:659 +#: htdocs/luci-static/resources/fchomo/listeners.js:1096 +#: htdocs/luci-static/resources/fchomo/listeners.js:1210 +#: htdocs/luci-static/resources/view/fchomo/node.js:978 +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 +#: htdocs/luci-static/resources/view/fchomo/node.js:1311 +msgid "JLS" +msgstr "JLS" + +#: htdocs/luci-static/resources/view/fchomo/node.js:1321 +msgid "JLS password" +msgstr "JLS 密碼" + +#: htdocs/luci-static/resources/view/fchomo/node.js:1316 +msgid "JLS username" +msgstr "JLS 使用者名稱" + #: htdocs/luci-static/resources/fchomo.js:53 #: htdocs/luci-static/resources/fchomo.js:60 #: htdocs/luci-static/resources/fchomo.js:174 #: htdocs/luci-static/resources/fchomo.js:379 -#: htdocs/luci-static/resources/view/fchomo/node.js:2021 +#: htdocs/luci-static/resources/view/fchomo/node.js:2045 msgid "Keep default" msgstr "保持預設" -#: htdocs/luci-static/resources/view/fchomo/node.js:1513 +#: htdocs/luci-static/resources/view/fchomo/node.js:1537 msgid "Keep-alive period" msgstr "Keep-alive 週期" @@ -1710,12 +1745,12 @@ msgstr "Keep-alive 週期" msgid "Key" msgstr "密鑰" -#: htdocs/luci-static/resources/fchomo/listeners.js:1094 -#: htdocs/luci-static/resources/view/fchomo/node.js:1261 +#: htdocs/luci-static/resources/fchomo/listeners.js:1115 +#: htdocs/luci-static/resources/view/fchomo/node.js:1269 msgid "Key path" msgstr "憑證路徑" -#: htdocs/luci-static/resources/fchomo/listeners.js:850 +#: htdocs/luci-static/resources/fchomo/listeners.js:854 msgid "Keypairs" msgstr "密鑰對" @@ -1727,14 +1762,14 @@ msgstr "密鑰對" #: htdocs/luci-static/resources/view/fchomo/client.js:1810 #: htdocs/luci-static/resources/view/fchomo/client.js:1866 #: htdocs/luci-static/resources/view/fchomo/node.js:245 -#: htdocs/luci-static/resources/view/fchomo/node.js:1769 -#: htdocs/luci-static/resources/view/fchomo/node.js:2140 +#: htdocs/luci-static/resources/view/fchomo/node.js:1793 +#: htdocs/luci-static/resources/view/fchomo/node.js:2164 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:267 msgid "Label" msgstr "標籤" #: htdocs/luci-static/resources/view/fchomo/client.js:1179 -#: htdocs/luci-static/resources/view/fchomo/node.js:2085 +#: htdocs/luci-static/resources/view/fchomo/node.js:2109 msgid "Lazy" msgstr "怠惰狀態" @@ -1763,8 +1798,8 @@ msgstr "" msgid "Less compatibility and sometimes better performance." msgstr "有時效能較好。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1036 -#: htdocs/luci-static/resources/view/fchomo/node.js:1174 +#: htdocs/luci-static/resources/fchomo/listeners.js:1040 +#: htdocs/luci-static/resources/view/fchomo/node.js:1182 msgid "List of supported application level protocols, in order of preference." msgstr "支援的應用層協議協商清單,依序排列。" @@ -1797,7 +1832,7 @@ msgstr "監聽路由標記 (Fwmark)" msgid "Load balance" msgstr "負載均衡" -#: htdocs/luci-static/resources/view/fchomo/node.js:1779 +#: htdocs/luci-static/resources/view/fchomo/node.js:1803 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:286 msgid "Local" msgstr "本地" @@ -1885,7 +1920,7 @@ msgstr "匹配回應通過 ipcidr
" msgid "Match rule set." msgstr "匹配規則集。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1430 +#: htdocs/luci-static/resources/view/fchomo/node.js:1454 msgid "Max Early Data" msgstr "前置數據最大值" @@ -1894,15 +1929,15 @@ msgstr "前置數據最大值" msgid "Max UDP relay packet size" msgstr "UDP 中繼數據包最大尺寸" -#: htdocs/luci-static/resources/fchomo/listeners.js:1297 +#: htdocs/luci-static/resources/fchomo/listeners.js:1327 msgid "Max buffered posts" msgstr "POST 最大緩衝" -#: htdocs/luci-static/resources/view/fchomo/node.js:1488 +#: htdocs/luci-static/resources/view/fchomo/node.js:1512 msgid "Max concurrency" msgstr "最大並發" -#: htdocs/luci-static/resources/view/fchomo/node.js:1493 +#: htdocs/luci-static/resources/view/fchomo/node.js:1517 msgid "Max connections" msgstr "最大連線數" @@ -1915,8 +1950,8 @@ msgstr "最大失敗次數" msgid "Max download speed" msgstr "最大下載速度" -#: htdocs/luci-static/resources/fchomo/listeners.js:1308 -#: htdocs/luci-static/resources/view/fchomo/node.js:1470 +#: htdocs/luci-static/resources/fchomo/listeners.js:1338 +#: htdocs/luci-static/resources/view/fchomo/node.js:1494 msgid "Max each POST bytes" msgstr "POST 最大位元組數" @@ -1932,15 +1967,15 @@ msgstr "最大 Realms 數量" msgid "Max realms per client IP" msgstr "每客戶端 IP 最大 Realms 數量" -#: htdocs/luci-static/resources/view/fchomo/node.js:1503 +#: htdocs/luci-static/resources/view/fchomo/node.js:1527 msgid "Max request times" msgstr "最大請求次數" -#: htdocs/luci-static/resources/view/fchomo/node.js:1508 +#: htdocs/luci-static/resources/view/fchomo/node.js:1532 msgid "Max reusable seconds" msgstr "最大可重用秒數" -#: htdocs/luci-static/resources/view/fchomo/node.js:1498 +#: htdocs/luci-static/resources/view/fchomo/node.js:1522 msgid "Max reuse times" msgstr "最大重用次數" @@ -1949,12 +1984,12 @@ msgstr "最大重用次數" msgid "Max upload speed" msgstr "最大上傳速度" -#: htdocs/luci-static/resources/view/fchomo/node.js:1534 -#: htdocs/luci-static/resources/view/fchomo/node.js:1554 +#: htdocs/luci-static/resources/view/fchomo/node.js:1558 +#: htdocs/luci-static/resources/view/fchomo/node.js:1578 msgid "Maximum connections" msgstr "最大連線數" -#: htdocs/luci-static/resources/view/fchomo/node.js:1552 +#: htdocs/luci-static/resources/view/fchomo/node.js:1576 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." "
Conflict with %s and %s." @@ -1974,7 +2009,7 @@ msgid "" "rate." msgstr "最大填充率必須大於等于最小填充率。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1551 +#: htdocs/luci-static/resources/view/fchomo/node.js:1575 msgid "Maximum streams" msgstr "最大流數量" @@ -1999,11 +2034,11 @@ msgstr "Mihomo 服務端" msgid "Min of idle sessions to keep" msgstr "要保留的最少閒置會話數" -#: htdocs/luci-static/resources/view/fchomo/node.js:1476 +#: htdocs/luci-static/resources/view/fchomo/node.js:1500 msgid "Min posts interval" msgstr "POST 請求最小間隔時間" -#: htdocs/luci-static/resources/view/fchomo/node.js:1543 +#: htdocs/luci-static/resources/view/fchomo/node.js:1567 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "在開啟新連線之前,連線中的最小多路復用流數量。" @@ -2013,8 +2048,8 @@ msgstr "在開啟新連線之前,連線中的最小多路復用流數量。" msgid "Minimum padding rate" msgstr "最小填充率" -#: htdocs/luci-static/resources/view/fchomo/node.js:1542 -#: htdocs/luci-static/resources/view/fchomo/node.js:1554 +#: htdocs/luci-static/resources/view/fchomo/node.js:1566 +#: htdocs/luci-static/resources/view/fchomo/node.js:1578 msgid "Minimum streams" msgstr "最小流數量" @@ -2031,8 +2066,8 @@ msgstr "混合 系統 TCP 堆栈和 gVisor UDP 堆栈 msgid "Mixed port" msgstr "混合連接埠" -#: htdocs/luci-static/resources/fchomo/listeners.js:1315 -#: htdocs/luci-static/resources/view/fchomo/node.js:1520 +#: htdocs/luci-static/resources/fchomo/listeners.js:1345 +#: htdocs/luci-static/resources/view/fchomo/node.js:1544 msgid "Multiplex" msgstr "多路復用" @@ -2054,7 +2089,7 @@ msgstr "NOT" msgid "Name of the Proxy group as outbound." msgstr "出站代理組的名稱。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1854 +#: htdocs/luci-static/resources/view/fchomo/node.js:1878 msgid "Name of the Proxy group to download provider." msgstr "用於下載供應商訂閱的代理組名稱。" @@ -2082,7 +2117,7 @@ msgstr "" msgid "Network type" msgstr "網路類型" -#: htdocs/luci-static/resources/view/fchomo/node.js:2023 +#: htdocs/luci-static/resources/view/fchomo/node.js:2047 msgid "No" msgstr "" @@ -2090,7 +2125,7 @@ msgstr "" msgid "No Authentication IP ranges" msgstr "無需認證的 IP 範圍" -#: htdocs/luci-static/resources/fchomo/listeners.js:1292 +#: htdocs/luci-static/resources/fchomo/listeners.js:1322 msgid "No SSE header" msgstr "無 SSE header" @@ -2098,12 +2133,12 @@ msgstr "無 SSE header" msgid "No add'l params" msgstr "無附加參數" -#: htdocs/luci-static/resources/view/fchomo/node.js:1460 +#: htdocs/luci-static/resources/view/fchomo/node.js:1484 msgid "No gRPC header" msgstr "無 gRPC header" #: htdocs/luci-static/resources/view/fchomo/client.js:1180 -#: htdocs/luci-static/resources/view/fchomo/node.js:2086 +#: htdocs/luci-static/resources/view/fchomo/node.js:2110 msgid "No testing is performed when this provider node is not in use." msgstr "當此供應商的節點未使用時,不執行任何測試。" @@ -2121,17 +2156,17 @@ msgid "Node" msgstr "節點" #: htdocs/luci-static/resources/view/fchomo/client.js:1242 -#: htdocs/luci-static/resources/view/fchomo/node.js:2106 +#: htdocs/luci-static/resources/view/fchomo/node.js:2130 msgid "Node exclude filter" msgstr "排除節點" #: htdocs/luci-static/resources/view/fchomo/client.js:1247 -#: htdocs/luci-static/resources/view/fchomo/node.js:2113 +#: htdocs/luci-static/resources/view/fchomo/node.js:2137 msgid "Node exclude type" msgstr "排除節點類型" #: htdocs/luci-static/resources/view/fchomo/client.js:1237 -#: htdocs/luci-static/resources/view/fchomo/node.js:2100 +#: htdocs/luci-static/resources/view/fchomo/node.js:2124 msgid "Node filter" msgstr "過濾節點" @@ -2159,7 +2194,7 @@ msgstr "" msgid "ON" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:664 +#: htdocs/luci-static/resources/fchomo/listeners.js:668 #: htdocs/luci-static/resources/view/fchomo/node.js:995 msgid "Obfs Mode" msgstr "Obfs 模式" @@ -2197,7 +2232,7 @@ msgstr "混淆為%s" msgid "One or more numbers in the range 0-63 separated by commas" msgstr "0-63 範圍內的一個或多個數字,以逗號分隔" -#: htdocs/luci-static/resources/fchomo/listeners.js:1024 +#: htdocs/luci-static/resources/fchomo/listeners.js:1028 msgid "Only applicable when %s are used as a frontend." msgstr "僅當 %s 用作前端時適用。" @@ -2222,7 +2257,7 @@ msgstr "運作模式" msgid "Option is deprecated. Please use %s instead." msgstr "該選項已棄用,請使用%s作為代替。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1971 +#: htdocs/luci-static/resources/view/fchomo/node.js:1995 msgid "Other configuration items" msgstr "其他配置項" @@ -2230,8 +2265,8 @@ msgstr "其他配置項" msgid "Outbound" msgstr "出站" -#: htdocs/luci-static/resources/view/fchomo/node.js:1233 -#: htdocs/luci-static/resources/view/fchomo/node.js:2010 +#: htdocs/luci-static/resources/view/fchomo/node.js:1241 +#: htdocs/luci-static/resources/view/fchomo/node.js:2034 msgid "Override cert DNSName" msgstr "覆蓋憑證 DNSName" @@ -2241,7 +2276,7 @@ msgid "Override destination" msgstr "覆蓋目標位址" #: htdocs/luci-static/resources/view/fchomo/client.js:1043 -#: htdocs/luci-static/resources/view/fchomo/node.js:1765 +#: htdocs/luci-static/resources/view/fchomo/node.js:1789 msgid "Override fields" msgstr "覆蓋欄位" @@ -2261,7 +2296,7 @@ msgstr "使用嗅探到的網域覆寫連線目標。" msgid "Override the existing ECS in original request." msgstr "覆蓋原始請求中已有的 ECS。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1288 +#: htdocs/luci-static/resources/view/fchomo/node.js:1296 msgid "Overrides the domain name used for HTTPS record queries." msgstr "覆蓋用於 HTTPS 記錄查詢的網域。" @@ -2269,11 +2304,11 @@ msgstr "覆蓋用於 HTTPS 記錄查詢的網域。" msgid "Overview" msgstr "概覽" -#: htdocs/luci-static/resources/view/fchomo/node.js:1387 +#: htdocs/luci-static/resources/view/fchomo/node.js:1411 msgid "POST" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1388 +#: htdocs/luci-static/resources/view/fchomo/node.js:1412 msgid "PUT" msgstr "" @@ -2281,7 +2316,7 @@ msgstr "" msgid "Packet encoding" msgstr "數據包編碼" -#: htdocs/luci-static/resources/view/fchomo/node.js:1465 +#: htdocs/luci-static/resources/view/fchomo/node.js:1489 msgid "Padding bytes" msgstr "填充位元組" @@ -2289,14 +2324,14 @@ msgstr "填充位元組" msgid "Padding scheme" msgstr "填充方案" -#: htdocs/luci-static/resources/fchomo/listeners.js:829 +#: htdocs/luci-static/resources/fchomo/listeners.js:833 #: htdocs/luci-static/resources/view/fchomo/node.js:1086 msgid "Paddings" msgstr "填充 (Paddings)" #: htdocs/luci-static/resources/fchomo/listeners.js:167 #: htdocs/luci-static/resources/fchomo/listeners.js:184 -#: htdocs/luci-static/resources/fchomo/listeners.js:691 +#: htdocs/luci-static/resources/fchomo/listeners.js:695 #: htdocs/luci-static/resources/view/fchomo/node.js:310 #: htdocs/luci-static/resources/view/fchomo/node.js:331 #: htdocs/luci-static/resources/view/fchomo/node.js:1014 @@ -2311,8 +2346,8 @@ msgstr "捆綁包路徑" msgid "Path in bundle: %s" msgstr "在捆綁包%s中的路徑" -#: htdocs/luci-static/resources/fchomo/listeners.js:769 -#: htdocs/luci-static/resources/view/fchomo/node.js:1829 +#: htdocs/luci-static/resources/fchomo/listeners.js:773 +#: htdocs/luci-static/resources/view/fchomo/node.js:1853 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:373 msgid "Payload" msgstr "Payload" @@ -2354,8 +2389,8 @@ msgid "" "standards." msgstr "連結格式標準請參考 %s。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1802 -#: htdocs/luci-static/resources/view/fchomo/node.js:1828 +#: htdocs/luci-static/resources/view/fchomo/node.js:1826 +#: htdocs/luci-static/resources/view/fchomo/node.js:1852 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:346 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:372 msgid "" @@ -2370,7 +2405,7 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:1533 #: htdocs/luci-static/resources/view/fchomo/client.js:1788 #: htdocs/luci-static/resources/view/fchomo/client.js:1840 -#: htdocs/luci-static/resources/view/fchomo/node.js:1655 +#: htdocs/luci-static/resources/view/fchomo/node.js:1679 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:155 msgid "Please type %s fields of mihomo config.
" msgstr "請輸入 mihomo 配置的 %s 欄位。
" @@ -2385,7 +2420,7 @@ msgstr "外掛" msgid "Plugin fields" msgstr "外掛欄位" -#: htdocs/luci-static/resources/fchomo/listeners.js:643 +#: htdocs/luci-static/resources/fchomo/listeners.js:644 #: htdocs/luci-static/resources/view/fchomo/node.js:972 msgid "Plugin type" msgstr "外掛類型" @@ -2422,7 +2457,7 @@ msgstr "連接埠池" msgid "Pre-shared key" msgstr "預先共用金鑰" -#: htdocs/luci-static/resources/fchomo/listeners.js:967 +#: htdocs/luci-static/resources/fchomo/listeners.js:971 #: htdocs/luci-static/resources/view/fchomo/node.js:1121 msgid "Pre-shared key of rendezvous server" msgstr "牽線伺服器的預先共用金鑰" @@ -2442,10 +2477,10 @@ msgstr "防止某些情況下的 ICMP 環回問題。 Ping 不會顯示實際延 #: htdocs/luci-static/resources/view/fchomo/global.js:760 #: htdocs/luci-static/resources/view/fchomo/global.js:777 -#: htdocs/luci-static/resources/view/fchomo/node.js:1616 -#: htdocs/luci-static/resources/view/fchomo/node.js:1623 -#: htdocs/luci-static/resources/view/fchomo/node.js:2035 -#: htdocs/luci-static/resources/view/fchomo/node.js:2042 +#: htdocs/luci-static/resources/view/fchomo/node.js:1640 +#: htdocs/luci-static/resources/view/fchomo/node.js:1647 +#: htdocs/luci-static/resources/view/fchomo/node.js:2059 +#: htdocs/luci-static/resources/view/fchomo/node.js:2066 msgid "Priority: Proxy Node > Global." msgstr "優先權: 代理節點 > 全域。" @@ -2462,7 +2497,7 @@ msgstr "金鑰密碼" msgid "Private key" msgstr "私鑰" -#: htdocs/luci-static/resources/fchomo/listeners.js:737 +#: htdocs/luci-static/resources/fchomo/listeners.js:741 msgid "" "Probe the QUIC version of the handshake target during the first connection." msgstr "在首次連線期間探測握手目標的 QUIC 版本。" @@ -2471,12 +2506,12 @@ msgstr "在首次連線期間探測握手目標的 QUIC 版本。" msgid "Process matching mode" msgstr "進程匹配模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:1961 +#: htdocs/luci-static/resources/view/fchomo/node.js:1985 msgid "Programmable replacement" msgstr "可編程替換" #: htdocs/luci-static/resources/view/fchomo/global.js:708 -#: htdocs/luci-static/resources/view/fchomo/node.js:1526 +#: htdocs/luci-static/resources/view/fchomo/node.js:1550 msgid "Protocol" msgstr "協議" @@ -2491,13 +2526,13 @@ msgid "" msgstr "協議參數。 如啟用會隨機浪費流量(在 v2ray 中預設為啟用且無法停用)。" #: htdocs/luci-static/resources/view/fchomo/client.js:1100 -#: htdocs/luci-static/resources/view/fchomo/node.js:1638 -#: htdocs/luci-static/resources/view/fchomo/node.js:1647 -#: htdocs/luci-static/resources/view/fchomo/node.js:2151 +#: htdocs/luci-static/resources/view/fchomo/node.js:1662 +#: htdocs/luci-static/resources/view/fchomo/node.js:1671 +#: htdocs/luci-static/resources/view/fchomo/node.js:2175 msgid "Provider" msgstr "供應商" -#: htdocs/luci-static/resources/view/fchomo/node.js:1835 +#: htdocs/luci-static/resources/view/fchomo/node.js:1859 msgid "Provider URL" msgstr "供應商訂閱 URL" @@ -2520,19 +2555,19 @@ msgid "Proxy MAC-s" msgstr "代理 MAC 位址" #: htdocs/luci-static/resources/view/fchomo/node.js:222 -#: htdocs/luci-static/resources/view/fchomo/node.js:2150 +#: htdocs/luci-static/resources/view/fchomo/node.js:2174 msgid "Proxy Node" msgstr "代理節點" -#: htdocs/luci-static/resources/view/fchomo/node.js:2126 -#: htdocs/luci-static/resources/view/fchomo/node.js:2135 +#: htdocs/luci-static/resources/view/fchomo/node.js:2150 +#: htdocs/luci-static/resources/view/fchomo/node.js:2159 msgid "Proxy chain" msgstr "代理鏈" #: htdocs/luci-static/resources/fchomo/listeners.js:585 #: htdocs/luci-static/resources/view/fchomo/client.js:801 #: htdocs/luci-static/resources/view/fchomo/client.js:1631 -#: htdocs/luci-static/resources/view/fchomo/node.js:1853 +#: htdocs/luci-static/resources/view/fchomo/node.js:1877 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:403 msgid "Proxy group" msgstr "代理組" @@ -2559,7 +2594,7 @@ msgstr "" msgid "QUIC based 0-RTT" msgstr "基於 QUIC 的 0-RTT" -#: htdocs/luci-static/resources/fchomo/listeners.js:736 +#: htdocs/luci-static/resources/fchomo/listeners.js:740 msgid "QUIC version probe" msgstr "QUIC 版本探測" @@ -2573,34 +2608,35 @@ msgstr "QUIC 版本" msgid "Quick Reload" msgstr "快速重載" -#: htdocs/luci-static/resources/fchomo/listeners.js:1182 -#: htdocs/luci-static/resources/view/fchomo/node.js:1302 +#: htdocs/luci-static/resources/fchomo/listeners.js:1097 +#: htdocs/luci-static/resources/fchomo/listeners.js:1203 +#: htdocs/luci-static/resources/view/fchomo/node.js:1326 msgid "REALITY" msgstr "REALITY" -#: htdocs/luci-static/resources/view/fchomo/node.js:1317 +#: htdocs/luci-static/resources/view/fchomo/node.js:1341 msgid "REALITY X25519MLKEM768 PQC support" msgstr "REALITY X25519MLKEM768 後量子加密支援" -#: htdocs/luci-static/resources/fchomo/listeners.js:1219 +#: htdocs/luci-static/resources/fchomo/listeners.js:1249 msgid "REALITY certificate issued to" msgstr "REALITY 憑證頒發給" -#: htdocs/luci-static/resources/fchomo/listeners.js:1187 +#: htdocs/luci-static/resources/fchomo/listeners.js:1217 msgid "REALITY handshake server" msgstr "REALITY 握手伺服器" -#: htdocs/luci-static/resources/fchomo/listeners.js:1194 +#: htdocs/luci-static/resources/fchomo/listeners.js:1224 msgid "REALITY private key" msgstr "REALITY 私鑰" -#: htdocs/luci-static/resources/fchomo/listeners.js:1209 -#: htdocs/luci-static/resources/view/fchomo/node.js:1307 +#: htdocs/luci-static/resources/fchomo/listeners.js:1239 +#: htdocs/luci-static/resources/view/fchomo/node.js:1331 msgid "REALITY public key" msgstr "REALITY 公鑰" -#: htdocs/luci-static/resources/fchomo/listeners.js:1213 -#: htdocs/luci-static/resources/view/fchomo/node.js:1312 +#: htdocs/luci-static/resources/fchomo/listeners.js:1243 +#: htdocs/luci-static/resources/view/fchomo/node.js:1336 msgid "REALITY short ID" msgstr "REALITY 標識符" @@ -2610,8 +2646,8 @@ msgstr "REALITY 標識符" msgid "REMATCH-NAME marking" msgstr "REMATCH-NAME 打標" -#: htdocs/luci-static/resources/fchomo/listeners.js:800 -#: htdocs/luci-static/resources/fchomo/listeners.js:819 +#: htdocs/luci-static/resources/fchomo/listeners.js:804 +#: htdocs/luci-static/resources/fchomo/listeners.js:823 #: htdocs/luci-static/resources/view/fchomo/node.js:1076 msgid "RTT" msgstr "" @@ -2628,12 +2664,12 @@ msgstr "留空將使用隨機令牌。" msgid "Randomized traffic characteristics" msgstr "隨機化流量特徵" -#: htdocs/luci-static/resources/fchomo/listeners.js:956 +#: htdocs/luci-static/resources/fchomo/listeners.js:960 #: htdocs/luci-static/resources/view/fchomo/node.js:1110 msgid "Realm" msgstr "Realm" -#: htdocs/luci-static/resources/fchomo/listeners.js:972 +#: htdocs/luci-static/resources/fchomo/listeners.js:976 #: htdocs/luci-static/resources/view/fchomo/node.js:1126 msgid "Realm ID" msgstr "Realm ID" @@ -2681,7 +2717,7 @@ msgstr "再路由" msgid "Rematching routing rules" msgstr "重新匹配路由規則" -#: htdocs/luci-static/resources/view/fchomo/node.js:1780 +#: htdocs/luci-static/resources/view/fchomo/node.js:1804 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:287 msgid "Remote" msgstr "遠端" @@ -2696,23 +2732,23 @@ msgid "Remove" msgstr "移除" #: htdocs/luci-static/resources/fchomo.js:1739 -#: htdocs/luci-static/resources/view/fchomo/node.js:1756 -#: htdocs/luci-static/resources/view/fchomo/node.js:1758 +#: htdocs/luci-static/resources/view/fchomo/node.js:1780 +#: htdocs/luci-static/resources/view/fchomo/node.js:1782 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:259 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:261 msgid "Remove idles" msgstr "移除閒置" -#: htdocs/luci-static/resources/fchomo/listeners.js:961 +#: htdocs/luci-static/resources/fchomo/listeners.js:965 #: htdocs/luci-static/resources/view/fchomo/node.js:1115 msgid "Rendezvous server" msgstr "牽線伺服器" -#: htdocs/luci-static/resources/view/fchomo/node.js:1952 +#: htdocs/luci-static/resources/view/fchomo/node.js:1976 msgid "Replace name" msgstr "名稱替換" -#: htdocs/luci-static/resources/view/fchomo/node.js:1953 +#: htdocs/luci-static/resources/view/fchomo/node.js:1977 msgid "Replace node name." msgstr "替換節點名稱" @@ -2720,9 +2756,9 @@ msgstr "替換節點名稱" msgid "Request" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1271 -#: htdocs/luci-static/resources/view/fchomo/node.js:1394 -#: htdocs/luci-static/resources/view/fchomo/node.js:1401 +#: htdocs/luci-static/resources/fchomo/listeners.js:1301 +#: htdocs/luci-static/resources/view/fchomo/node.js:1418 +#: htdocs/luci-static/resources/view/fchomo/node.js:1425 msgid "Request path" msgstr "請求路徑" @@ -2739,7 +2775,7 @@ msgid "Require any" msgstr "" #: htdocs/luci-static/resources/fchomo.js:406 -#: htdocs/luci-static/resources/view/fchomo/node.js:1318 +#: htdocs/luci-static/resources/view/fchomo/node.js:1342 msgid "Requires server support." msgstr "需要伺服器支援。" @@ -2751,7 +2787,12 @@ msgstr "保留字段位元組" msgid "Resources management" msgstr "資源管理" -#: htdocs/luci-static/resources/fchomo/listeners.js:705 +#: htdocs/luci-static/resources/fchomo/listeners.js:647 +#: htdocs/luci-static/resources/view/fchomo/node.js:977 +msgid "Restls" +msgstr "" + +#: htdocs/luci-static/resources/fchomo/listeners.js:709 #: htdocs/luci-static/resources/view/fchomo/node.js:1034 msgid "Restls script" msgstr "Restls 劇本" @@ -2790,8 +2831,8 @@ msgstr "路由 GFW 流量" #: htdocs/luci-static/resources/fchomo/listeners.js:568 #: htdocs/luci-static/resources/view/fchomo/global.js:776 -#: htdocs/luci-static/resources/view/fchomo/node.js:1622 -#: htdocs/luci-static/resources/view/fchomo/node.js:2041 +#: htdocs/luci-static/resources/view/fchomo/node.js:1646 +#: htdocs/luci-static/resources/view/fchomo/node.js:2065 msgid "Routing mark (Fwmark)" msgstr "路由標記 (Fwmark)" @@ -2871,7 +2912,7 @@ msgstr "" msgid "STUN" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:978 +#: htdocs/luci-static/resources/fchomo/listeners.js:982 #: htdocs/luci-static/resources/view/fchomo/node.js:1132 msgid "STUN servers" msgstr "STUN 伺服器" @@ -2927,9 +2968,9 @@ msgstr "同時向%s%s發起查詢。" msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse." msgstr "發送 300-600 秒的隨機票證,以供客戶端 0-RTT 重用。" -#: htdocs/luci-static/resources/fchomo/listeners.js:800 -#: htdocs/luci-static/resources/fchomo/listeners.js:1080 -#: htdocs/luci-static/resources/fchomo/listeners.js:1095 +#: htdocs/luci-static/resources/fchomo/listeners.js:804 +#: htdocs/luci-static/resources/fchomo/listeners.js:1088 +#: htdocs/luci-static/resources/fchomo/listeners.js:1116 #: htdocs/luci-static/resources/view/fchomo/server.js:58 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:62 msgid "Server" @@ -2939,9 +2980,9 @@ msgstr "服務端" msgid "Server address" msgstr "伺服器位址" -#: htdocs/luci-static/resources/fchomo/listeners.js:1265 -#: htdocs/luci-static/resources/view/fchomo/node.js:1373 -#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/fchomo/listeners.js:1295 +#: htdocs/luci-static/resources/view/fchomo/node.js:1397 +#: htdocs/luci-static/resources/view/fchomo/node.js:1403 msgid "Server hostname" msgstr "伺服器主機名稱" @@ -2958,6 +2999,13 @@ msgstr "服務狀態" msgid "ShadowQUIC" msgstr "" +#: htdocs/luci-static/resources/fchomo/listeners.js:646 +#: htdocs/luci-static/resources/fchomo/listeners.js:656 +#: htdocs/luci-static/resources/view/fchomo/node.js:976 +#: htdocs/luci-static/resources/view/fchomo/node.js:986 +msgid "ShadowTLS" +msgstr "" + #: htdocs/luci-static/resources/fchomo.js:157 #: htdocs/luci-static/resources/fchomo.js:193 msgid "Shadowsocks" @@ -2978,7 +3026,7 @@ msgstr "Shadowsocks 加密" msgid "Shadowsocks password" msgstr "Shadowsocks 密碼" -#: htdocs/luci-static/resources/view/fchomo/node.js:1574 +#: htdocs/luci-static/resources/view/fchomo/node.js:1598 msgid "Show connections in the dashboard for breaking connections easier." msgstr "在面板中顯示連線以便於打斷連線。" @@ -2990,14 +3038,14 @@ msgstr "靜音" msgid "Simple round-robin all nodes" msgstr "簡單輪替所有節點" -#: htdocs/luci-static/resources/view/fchomo/node.js:1841 +#: htdocs/luci-static/resources/view/fchomo/node.js:1865 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:391 msgid "Size limit" msgstr "大小限制" #: htdocs/luci-static/resources/view/fchomo/client.js:1667 -#: htdocs/luci-static/resources/view/fchomo/node.js:1239 -#: htdocs/luci-static/resources/view/fchomo/node.js:2016 +#: htdocs/luci-static/resources/view/fchomo/node.js:1247 +#: htdocs/luci-static/resources/view/fchomo/node.js:2040 msgid "Skip cert verify" msgstr "跳過憑證驗證" @@ -3135,7 +3183,7 @@ msgstr "TCP" msgid "TCP concurrency" msgstr "TCP 併發" -#: htdocs/luci-static/resources/view/fchomo/node.js:1567 +#: htdocs/luci-static/resources/view/fchomo/node.js:1591 msgid "TCP only" msgstr "僅 TCP" @@ -3162,13 +3210,13 @@ msgstr "TCP-Keep-Alive 間隔" msgid "TCP/UDP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1598 -#: htdocs/luci-static/resources/view/fchomo/node.js:1977 +#: htdocs/luci-static/resources/view/fchomo/node.js:1622 +#: htdocs/luci-static/resources/view/fchomo/node.js:2001 msgid "TFO" msgstr "TCP 快速開啟 (TFO)" -#: htdocs/luci-static/resources/fchomo/listeners.js:666 -#: htdocs/luci-static/resources/fchomo/listeners.js:988 +#: htdocs/luci-static/resources/fchomo/listeners.js:670 +#: htdocs/luci-static/resources/fchomo/listeners.js:992 #: htdocs/luci-static/resources/view/fchomo/global.js:550 #: htdocs/luci-static/resources/view/fchomo/node.js:455 #: htdocs/luci-static/resources/view/fchomo/node.js:997 @@ -3176,13 +3224,14 @@ msgstr "TCP 快速開啟 (TFO)" msgid "TLS" msgstr "TLS" -#: htdocs/luci-static/resources/fchomo/listeners.js:1035 -#: htdocs/luci-static/resources/view/fchomo/node.js:1173 +#: htdocs/luci-static/resources/fchomo/listeners.js:1039 +#: htdocs/luci-static/resources/view/fchomo/node.js:1181 msgid "TLS ALPN" msgstr "TLS ALPN" -#: htdocs/luci-static/resources/fchomo/listeners.js:1029 +#: htdocs/luci-static/resources/fchomo/listeners.js:1033 #: htdocs/luci-static/resources/view/fchomo/node.js:1167 +#: htdocs/luci-static/resources/view/fchomo/node.js:1173 msgid "TLS SNI" msgstr "" @@ -3219,19 +3268,19 @@ msgstr "Cloudflare WARP 網路中使用的本機 %s 位址。" msgid "The %s address used by local machine in the Wireguard network." msgstr "WireGuard 網路中使用的本機 %s 位址。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1095 -#: htdocs/luci-static/resources/view/fchomo/node.js:1262 +#: htdocs/luci-static/resources/fchomo/listeners.js:1116 +#: htdocs/luci-static/resources/view/fchomo/node.js:1270 msgid "The %s private key, in PEM format." msgstr "%s私鑰,需要 PEM 格式。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1080 -#: htdocs/luci-static/resources/fchomo/listeners.js:1118 +#: htdocs/luci-static/resources/fchomo/listeners.js:1088 +#: htdocs/luci-static/resources/fchomo/listeners.js:1139 #: htdocs/luci-static/resources/view/fchomo/global.js:571 -#: htdocs/luci-static/resources/view/fchomo/node.js:1248 +#: htdocs/luci-static/resources/view/fchomo/node.js:1256 msgid "The %s public key, in PEM format." msgstr "%s公鑰,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1282 +#: htdocs/luci-static/resources/view/fchomo/node.js:1290 msgid "" "The ECH parameter of the HTTPS record for the domain. Leave empty to resolve " "via DNS." @@ -3255,7 +3304,7 @@ msgid "" "connection timeout is used." msgstr "預設值為%s,表示僅使用外層連線逾時。" -#: htdocs/luci-static/resources/fchomo/listeners.js:832 +#: htdocs/luci-static/resources/fchomo/listeners.js:836 #: htdocs/luci-static/resources/view/fchomo/node.js:1089 msgid "" "The first padding must have a probability of 100% and at least 35 bytes." @@ -3271,23 +3320,23 @@ msgstr "匹配 %s 的將被視為未被投毒汙染。" msgid "The matching %s will be deemed as poisoned." msgstr "匹配 %s 的將被視為已被投毒汙染。" -#: htdocs/luci-static/resources/fchomo/listeners.js:713 +#: htdocs/luci-static/resources/fchomo/listeners.js:717 msgid "The proxy used to connect to the handshake target." msgstr "用於連接握手目標的代理。" -#: htdocs/luci-static/resources/fchomo/listeners.js:830 +#: htdocs/luci-static/resources/fchomo/listeners.js:834 #: htdocs/luci-static/resources/view/fchomo/node.js:1087 msgid "The server and client can set different padding parameters." msgstr "伺服器和客戶端可以設定不同的填充參數。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1176 +#: htdocs/luci-static/resources/fchomo/listeners.js:1197 #: htdocs/luci-static/resources/view/fchomo/global.js:615 msgid "This ECH parameter needs to be added to the HTTPS record of the domain." msgstr "此 ECH 參數需要加入到網域的 HTTPS 記錄中。" #: htdocs/luci-static/resources/view/fchomo/client.js:1670 -#: htdocs/luci-static/resources/view/fchomo/node.js:1242 -#: htdocs/luci-static/resources/view/fchomo/node.js:2019 +#: htdocs/luci-static/resources/view/fchomo/node.js:1250 +#: htdocs/luci-static/resources/view/fchomo/node.js:2043 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" @@ -3331,18 +3380,18 @@ msgstr "Tproxy 連接埠" msgid "Traffic pattern" msgstr "流量模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:2188 +#: htdocs/luci-static/resources/view/fchomo/node.js:2212 msgid "Transit proxy group" msgstr "中轉代理組" -#: htdocs/luci-static/resources/view/fchomo/node.js:2199 +#: htdocs/luci-static/resources/view/fchomo/node.js:2223 msgid "Transit proxy node" msgstr "中轉代理節點" #: htdocs/luci-static/resources/fchomo/listeners.js:194 -#: htdocs/luci-static/resources/fchomo/listeners.js:1229 +#: htdocs/luci-static/resources/fchomo/listeners.js:1259 #: htdocs/luci-static/resources/view/fchomo/node.js:346 -#: htdocs/luci-static/resources/view/fchomo/node.js:1326 +#: htdocs/luci-static/resources/view/fchomo/node.js:1350 msgid "Transport" msgstr "傳輸層" @@ -3351,8 +3400,8 @@ msgstr "傳輸層" msgid "Transport fields" msgstr "傳輸層欄位" -#: htdocs/luci-static/resources/fchomo/listeners.js:1234 -#: htdocs/luci-static/resources/view/fchomo/node.js:1331 +#: htdocs/luci-static/resources/fchomo/listeners.js:1264 +#: htdocs/luci-static/resources/view/fchomo/node.js:1355 msgid "Transport type" msgstr "傳輸層類型" @@ -3401,8 +3450,8 @@ msgstr "" #: htdocs/luci-static/resources/view/fchomo/client.js:863 #: htdocs/luci-static/resources/view/fchomo/client.js:1061 #: htdocs/luci-static/resources/view/fchomo/node.js:254 -#: htdocs/luci-static/resources/view/fchomo/node.js:1778 -#: htdocs/luci-static/resources/view/fchomo/node.js:2149 +#: htdocs/luci-static/resources/view/fchomo/node.js:1802 +#: htdocs/luci-static/resources/view/fchomo/node.js:2173 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:285 msgid "Type" msgstr "類型" @@ -3420,7 +3469,7 @@ msgstr "類型" #: htdocs/luci-static/resources/view/fchomo/client.js:605 #: htdocs/luci-static/resources/view/fchomo/client.js:697 #: htdocs/luci-static/resources/view/fchomo/node.js:947 -#: htdocs/luci-static/resources/view/fchomo/node.js:1987 +#: htdocs/luci-static/resources/view/fchomo/node.js:2011 msgid "UDP" msgstr "UDP" @@ -3490,7 +3539,7 @@ msgid "Unknown error: %s" msgstr "未知錯誤:%s" #: htdocs/luci-static/resources/view/fchomo/node.js:953 -#: htdocs/luci-static/resources/view/fchomo/node.js:1992 +#: htdocs/luci-static/resources/view/fchomo/node.js:2016 msgid "UoT" msgstr "UDP over TCP (UoT)" @@ -3498,24 +3547,24 @@ msgstr "UDP over TCP (UoT)" msgid "Update failed." msgstr "更新失敗。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1847 +#: htdocs/luci-static/resources/view/fchomo/node.js:1871 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:397 msgid "Update interval" msgstr "更新間隔" -#: htdocs/luci-static/resources/fchomo/listeners.js:1331 -#: htdocs/luci-static/resources/view/fchomo/node.js:1585 +#: htdocs/luci-static/resources/fchomo/listeners.js:1361 +#: htdocs/luci-static/resources/view/fchomo/node.js:1609 msgid "Upload bandwidth" msgstr "上傳頻寬" -#: htdocs/luci-static/resources/fchomo/listeners.js:1332 -#: htdocs/luci-static/resources/view/fchomo/node.js:1586 +#: htdocs/luci-static/resources/fchomo/listeners.js:1362 +#: htdocs/luci-static/resources/view/fchomo/node.js:1610 msgid "Upload bandwidth in Mbps." msgstr "上傳頻寬(單位:Mbps)。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1086 -#: htdocs/luci-static/resources/fchomo/listeners.js:1126 -#: htdocs/luci-static/resources/view/fchomo/node.js:1253 +#: htdocs/luci-static/resources/fchomo/listeners.js:1107 +#: htdocs/luci-static/resources/fchomo/listeners.js:1147 +#: htdocs/luci-static/resources/view/fchomo/node.js:1261 msgid "Upload certificate" msgstr "上傳憑證" @@ -3523,17 +3572,17 @@ msgstr "上傳憑證" msgid "Upload initial package" msgstr "上傳初始資源包" -#: htdocs/luci-static/resources/fchomo/listeners.js:1101 -#: htdocs/luci-static/resources/view/fchomo/node.js:1267 +#: htdocs/luci-static/resources/fchomo/listeners.js:1122 +#: htdocs/luci-static/resources/view/fchomo/node.js:1275 msgid "Upload key" msgstr "上傳金鑰" -#: htdocs/luci-static/resources/fchomo/listeners.js:1089 -#: htdocs/luci-static/resources/fchomo/listeners.js:1104 -#: htdocs/luci-static/resources/fchomo/listeners.js:1129 +#: htdocs/luci-static/resources/fchomo/listeners.js:1110 +#: htdocs/luci-static/resources/fchomo/listeners.js:1125 +#: htdocs/luci-static/resources/fchomo/listeners.js:1150 #: htdocs/luci-static/resources/view/fchomo/global.js:306 -#: htdocs/luci-static/resources/view/fchomo/node.js:1256 -#: htdocs/luci-static/resources/view/fchomo/node.js:1270 +#: htdocs/luci-static/resources/view/fchomo/node.js:1264 +#: htdocs/luci-static/resources/view/fchomo/node.js:1278 msgid "Upload..." msgstr "上傳..." @@ -3563,8 +3612,8 @@ msgstr "用於解析 DNS 伺服器的網域。必須是 IP。" msgid "Used to resolve the domain of the Proxy node." msgstr "用於解析代理節點的網域。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1234 -#: htdocs/luci-static/resources/view/fchomo/node.js:2011 +#: htdocs/luci-static/resources/view/fchomo/node.js:1242 +#: htdocs/luci-static/resources/view/fchomo/node.js:2035 msgid "Used to verify the hostname on the returned certificates." msgstr "用於驗證傳回的憑證上的主機名稱。" @@ -3577,7 +3626,7 @@ msgid "User-hint is mandatory" msgstr "User-hint 是必填項" #: htdocs/luci-static/resources/fchomo/listeners.js:162 -#: htdocs/luci-static/resources/fchomo/listeners.js:685 +#: htdocs/luci-static/resources/fchomo/listeners.js:689 #: htdocs/luci-static/resources/view/fchomo/node.js:305 #: htdocs/luci-static/resources/view/fchomo/node.js:1008 msgid "Username" @@ -3587,11 +3636,11 @@ msgstr "使用者名稱" msgid "Users filter mode" msgstr "使用者過濾模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:1442 +#: htdocs/luci-static/resources/view/fchomo/node.js:1466 msgid "V2ray HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1447 +#: htdocs/luci-static/resources/view/fchomo/node.js:1471 msgid "V2ray HTTPUpgrade fast open" msgstr "" @@ -3605,8 +3654,8 @@ msgstr "" msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1784 -#: htdocs/luci-static/resources/view/fchomo/node.js:2155 +#: htdocs/luci-static/resources/view/fchomo/node.js:1808 +#: htdocs/luci-static/resources/view/fchomo/node.js:2179 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:328 msgid "Value" msgstr "可視化值" @@ -3616,7 +3665,7 @@ msgid "Verify if given" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:384 -#: htdocs/luci-static/resources/fchomo/listeners.js:697 +#: htdocs/luci-static/resources/fchomo/listeners.js:701 #: htdocs/luci-static/resources/view/fchomo/node.js:497 #: htdocs/luci-static/resources/view/fchomo/node.js:1020 msgid "Version" @@ -3640,15 +3689,15 @@ msgid "Warning" msgstr "警告" #: htdocs/luci-static/resources/fchomo/listeners.js:362 -#: htdocs/luci-static/resources/fchomo/listeners.js:1236 -#: htdocs/luci-static/resources/fchomo/listeners.js:1247 -#: htdocs/luci-static/resources/fchomo/listeners.js:1254 +#: htdocs/luci-static/resources/fchomo/listeners.js:1266 +#: htdocs/luci-static/resources/fchomo/listeners.js:1277 +#: htdocs/luci-static/resources/fchomo/listeners.js:1284 #: htdocs/luci-static/resources/view/fchomo/node.js:451 #: htdocs/luci-static/resources/view/fchomo/node.js:480 -#: htdocs/luci-static/resources/view/fchomo/node.js:1336 -#: htdocs/luci-static/resources/view/fchomo/node.js:1349 -#: htdocs/luci-static/resources/view/fchomo/node.js:1356 -#: htdocs/luci-static/resources/view/fchomo/node.js:1362 +#: htdocs/luci-static/resources/view/fchomo/node.js:1360 +#: htdocs/luci-static/resources/view/fchomo/node.js:1373 +#: htdocs/luci-static/resources/view/fchomo/node.js:1380 +#: htdocs/luci-static/resources/view/fchomo/node.js:1386 msgid "WebSocket" msgstr "" @@ -3676,32 +3725,32 @@ msgstr "WireGuard 預先共用金鑰。" msgid "WireGuard requires base64-encoded private keys." msgstr "WireGuard 要求 base64 編碼的私鑰。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1237 -#: htdocs/luci-static/resources/fchomo/listeners.js:1248 -#: htdocs/luci-static/resources/view/fchomo/node.js:1337 -#: htdocs/luci-static/resources/view/fchomo/node.js:1357 +#: htdocs/luci-static/resources/fchomo/listeners.js:1267 +#: htdocs/luci-static/resources/fchomo/listeners.js:1278 +#: htdocs/luci-static/resources/view/fchomo/node.js:1361 +#: htdocs/luci-static/resources/view/fchomo/node.js:1381 msgid "XHTTP" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1284 -#: htdocs/luci-static/resources/view/fchomo/node.js:1452 +#: htdocs/luci-static/resources/fchomo/listeners.js:1314 +#: htdocs/luci-static/resources/view/fchomo/node.js:1476 msgid "XHTTP mode" msgstr "XHTTP 模式" -#: htdocs/luci-static/resources/view/fchomo/node.js:1483 +#: htdocs/luci-static/resources/view/fchomo/node.js:1507 msgid "XMUX" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1488 -#: htdocs/luci-static/resources/view/fchomo/node.js:1493 -#: htdocs/luci-static/resources/view/fchomo/node.js:1498 -#: htdocs/luci-static/resources/view/fchomo/node.js:1503 -#: htdocs/luci-static/resources/view/fchomo/node.js:1508 -#: htdocs/luci-static/resources/view/fchomo/node.js:1513 +#: htdocs/luci-static/resources/view/fchomo/node.js:1512 +#: htdocs/luci-static/resources/view/fchomo/node.js:1517 +#: htdocs/luci-static/resources/view/fchomo/node.js:1522 +#: htdocs/luci-static/resources/view/fchomo/node.js:1527 +#: htdocs/luci-static/resources/view/fchomo/node.js:1532 +#: htdocs/luci-static/resources/view/fchomo/node.js:1537 msgid "XMUX:" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:791 +#: htdocs/luci-static/resources/fchomo/listeners.js:795 msgid "XOR mode" msgstr "XOR 模式" @@ -3713,7 +3762,7 @@ msgstr "" msgid "Yaml text" msgstr "Yaml 格式文本" -#: htdocs/luci-static/resources/view/fchomo/node.js:2022 +#: htdocs/luci-static/resources/view/fchomo/node.js:2046 msgid "Yes" msgstr "" @@ -3741,11 +3790,11 @@ msgstr "" msgid "aes-256-gcm" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1869 +#: htdocs/luci-static/resources/view/fchomo/node.js:1893 msgid "age private key" msgstr "age 私鑰" -#: htdocs/luci-static/resources/view/fchomo/node.js:1930 +#: htdocs/luci-static/resources/view/fchomo/node.js:1954 msgid "age public key" msgstr "age 公鑰" @@ -3765,9 +3814,9 @@ msgstr "自動" msgid "bbr" msgstr "bbr" -#: htdocs/luci-static/resources/fchomo/listeners.js:1091 -#: htdocs/luci-static/resources/fchomo/listeners.js:1131 -#: htdocs/luci-static/resources/view/fchomo/node.js:1258 +#: htdocs/luci-static/resources/fchomo/listeners.js:1112 +#: htdocs/luci-static/resources/fchomo/listeners.js:1152 +#: htdocs/luci-static/resources/view/fchomo/node.js:1266 msgid "certificate" msgstr "憑證" @@ -3785,8 +3834,8 @@ msgstr "" msgid "cubic" msgstr "cubic" -#: htdocs/luci-static/resources/fchomo/listeners.js:743 -#: htdocs/luci-static/resources/fchomo/listeners.js:774 +#: htdocs/luci-static/resources/fchomo/listeners.js:747 +#: htdocs/luci-static/resources/fchomo/listeners.js:778 msgid "decryption" msgstr "decryption" @@ -3794,11 +3843,11 @@ msgstr "decryption" msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)" msgstr "dnsmasq 自行選擇上游服務器。 (可能影響 CDN 準確性)" -#: htdocs/luci-static/resources/view/fchomo/node.js:2004 +#: htdocs/luci-static/resources/view/fchomo/node.js:2028 msgid "down" msgstr "Hysteria 下載速率" -#: htdocs/luci-static/resources/fchomo/listeners.js:778 +#: htdocs/luci-static/resources/fchomo/listeners.js:782 #: htdocs/luci-static/resources/view/fchomo/node.js:1041 #: htdocs/luci-static/resources/view/fchomo/node.js:1064 msgid "encryption" @@ -3809,26 +3858,26 @@ msgstr "encryption" msgid "false = bandwidth optimized downlink; true = pure Sudoku downlink." msgstr "false = 頻寬最佳化下行 true = 純 Sudoku 下行。" -#: htdocs/luci-static/resources/fchomo/listeners.js:1235 -#: htdocs/luci-static/resources/fchomo/listeners.js:1246 -#: htdocs/luci-static/resources/fchomo/listeners.js:1253 -#: htdocs/luci-static/resources/view/fchomo/node.js:1335 -#: htdocs/luci-static/resources/view/fchomo/node.js:1348 -#: htdocs/luci-static/resources/view/fchomo/node.js:1355 -#: htdocs/luci-static/resources/view/fchomo/node.js:1361 +#: htdocs/luci-static/resources/fchomo/listeners.js:1265 +#: htdocs/luci-static/resources/fchomo/listeners.js:1276 +#: htdocs/luci-static/resources/fchomo/listeners.js:1283 +#: htdocs/luci-static/resources/view/fchomo/node.js:1359 +#: htdocs/luci-static/resources/view/fchomo/node.js:1372 +#: htdocs/luci-static/resources/view/fchomo/node.js:1379 +#: htdocs/luci-static/resources/view/fchomo/node.js:1385 msgid "gRPC" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1418 +#: htdocs/luci-static/resources/view/fchomo/node.js:1442 msgid "gRPC User-Agent" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1423 +#: htdocs/luci-static/resources/view/fchomo/node.js:1447 msgid "gRPC ping interval" msgstr "gRPC ping 間隔" -#: htdocs/luci-static/resources/fchomo/listeners.js:1278 -#: htdocs/luci-static/resources/view/fchomo/node.js:1414 +#: htdocs/luci-static/resources/fchomo/listeners.js:1308 +#: htdocs/luci-static/resources/view/fchomo/node.js:1438 msgid "gRPC service name" msgstr "gRPC 服務名稱" @@ -3840,7 +3889,7 @@ msgstr "gVisor" msgid "h2" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1530 +#: htdocs/luci-static/resources/view/fchomo/node.js:1554 msgid "h2mux" msgstr "" @@ -3852,12 +3901,7 @@ msgstr "" msgid "h3-l4proxy" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:647 -#: htdocs/luci-static/resources/view/fchomo/node.js:978 -msgid "jls" -msgstr "" - -#: htdocs/luci-static/resources/fchomo/listeners.js:943 +#: htdocs/luci-static/resources/fchomo/listeners.js:947 msgid "least one keypair required" msgstr "至少需要一對密鑰" @@ -3871,7 +3915,7 @@ msgstr "metacubexd" #: htdocs/luci-static/resources/view/fchomo/client.js:1568 #: htdocs/luci-static/resources/view/fchomo/client.js:1802 #: htdocs/luci-static/resources/view/fchomo/client.js:1858 -#: htdocs/luci-static/resources/view/fchomo/node.js:1750 +#: htdocs/luci-static/resources/view/fchomo/node.js:1774 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:247 msgid "mihomo config" msgstr "mihomo 配置" @@ -3880,8 +3924,8 @@ msgstr "mihomo 配置" msgid "mlkem768x25519plus" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1603 -#: htdocs/luci-static/resources/view/fchomo/node.js:1982 +#: htdocs/luci-static/resources/view/fchomo/node.js:1627 +#: htdocs/luci-static/resources/view/fchomo/node.js:2006 msgid "mpTCP" msgstr "多路徑 TCP (mpTCP)" @@ -3923,8 +3967,8 @@ msgstr "不包含 \",\"" msgid "null" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:644 -#: htdocs/luci-static/resources/fchomo/listeners.js:654 +#: htdocs/luci-static/resources/fchomo/listeners.js:645 +#: htdocs/luci-static/resources/fchomo/listeners.js:655 #: htdocs/luci-static/resources/view/fchomo/node.js:973 #: htdocs/luci-static/resources/view/fchomo/node.js:985 msgid "obfs-simple" @@ -3938,11 +3982,11 @@ msgstr "僅當 %s 為 %s 時適用。" msgid "only applies when %s is not %s." msgstr "僅當 %s 不為 %s 時適用。" -#: htdocs/luci-static/resources/view/fchomo/node.js:1963 +#: htdocs/luci-static/resources/view/fchomo/node.js:1987 msgid "override.override-expr" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:1955 +#: htdocs/luci-static/resources/view/fchomo/node.js:1979 msgid "override.proxy-name" msgstr "" @@ -3950,8 +3994,8 @@ msgstr "" msgid "packet addr (v2ray-core v5+)" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1288 -#: htdocs/luci-static/resources/view/fchomo/node.js:1456 +#: htdocs/luci-static/resources/fchomo/listeners.js:1318 +#: htdocs/luci-static/resources/view/fchomo/node.js:1480 msgid "packet-up" msgstr "" @@ -3960,8 +4004,8 @@ msgstr "" msgid "poll" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1106 -#: htdocs/luci-static/resources/view/fchomo/node.js:1272 +#: htdocs/luci-static/resources/fchomo/listeners.js:1127 +#: htdocs/luci-static/resources/view/fchomo/node.js:1280 msgid "private key" msgstr "私鑰" @@ -3974,23 +4018,11 @@ msgstr "razord-meta" msgid "requires front-end adaptation using the API." msgstr "需要使用 API 的前端適配。" -#: htdocs/luci-static/resources/fchomo/listeners.js:646 -#: htdocs/luci-static/resources/view/fchomo/node.js:977 -msgid "restls" -msgstr "" - #: htdocs/luci-static/resources/view/fchomo/ruleset.js:232 msgid "rule-set" msgstr "規則集" -#: htdocs/luci-static/resources/fchomo/listeners.js:645 -#: htdocs/luci-static/resources/fchomo/listeners.js:655 -#: htdocs/luci-static/resources/view/fchomo/node.js:976 -#: htdocs/luci-static/resources/view/fchomo/node.js:986 -msgid "shadow-tls" -msgstr "" - -#: htdocs/luci-static/resources/view/fchomo/node.js:1528 +#: htdocs/luci-static/resources/view/fchomo/node.js:1552 msgid "smux" msgstr "" @@ -4003,17 +4035,17 @@ msgstr "" msgid "src" msgstr "src" -#: htdocs/luci-static/resources/fchomo/listeners.js:1286 -#: htdocs/luci-static/resources/view/fchomo/node.js:1454 +#: htdocs/luci-static/resources/fchomo/listeners.js:1316 +#: htdocs/luci-static/resources/view/fchomo/node.js:1478 msgid "stream-one" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1287 -#: htdocs/luci-static/resources/view/fchomo/node.js:1455 +#: htdocs/luci-static/resources/fchomo/listeners.js:1317 +#: htdocs/luci-static/resources/view/fchomo/node.js:1479 msgid "stream-up" msgstr "" -#: htdocs/luci-static/resources/fchomo/listeners.js:1303 +#: htdocs/luci-static/resources/fchomo/listeners.js:1333 msgid "stream-up server seconds" msgstr "" @@ -4041,12 +4073,12 @@ msgstr "獨立標識" msgid "unique value" msgstr "獨立值" -#: htdocs/luci-static/resources/view/fchomo/node.js:1998 +#: htdocs/luci-static/resources/view/fchomo/node.js:2022 msgid "up" msgstr "Hysteria 上傳速率" #: htdocs/luci-static/resources/fchomo/listeners.js:385 -#: htdocs/luci-static/resources/fchomo/listeners.js:698 +#: htdocs/luci-static/resources/fchomo/listeners.js:702 #: htdocs/luci-static/resources/view/fchomo/node.js:498 #: htdocs/luci-static/resources/view/fchomo/node.js:634 #: htdocs/luci-static/resources/view/fchomo/node.js:960 @@ -4055,7 +4087,7 @@ msgid "v1" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:386 -#: htdocs/luci-static/resources/fchomo/listeners.js:699 +#: htdocs/luci-static/resources/fchomo/listeners.js:703 #: htdocs/luci-static/resources/view/fchomo/node.js:499 #: htdocs/luci-static/resources/view/fchomo/node.js:961 #: htdocs/luci-static/resources/view/fchomo/node.js:1022 @@ -4063,7 +4095,7 @@ msgid "v2" msgstr "" #: htdocs/luci-static/resources/fchomo/listeners.js:387 -#: htdocs/luci-static/resources/fchomo/listeners.js:700 +#: htdocs/luci-static/resources/fchomo/listeners.js:704 #: htdocs/luci-static/resources/view/fchomo/node.js:500 #: htdocs/luci-static/resources/view/fchomo/node.js:1023 msgid "v3" @@ -4084,7 +4116,7 @@ msgstr "" msgid "valid JSON format" msgstr "有效的 JSON 格式" -#: htdocs/luci-static/resources/view/fchomo/node.js:1226 +#: htdocs/luci-static/resources/view/fchomo/node.js:1234 msgid "valid SHA256 string with %d characters" msgstr "包含 %d 個字元的有效 SHA256 字串" @@ -4130,7 +4162,7 @@ msgstr "" msgid "yacd-meta" msgstr "yacd-meta" -#: htdocs/luci-static/resources/view/fchomo/node.js:1529 +#: htdocs/luci-static/resources/view/fchomo/node.js:1553 msgid "yamux" msgstr "" diff --git a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_inbound b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_inbound index 2c4557a7..6b67df3c 100755 --- a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_inbound +++ b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_inbound @@ -25,6 +25,30 @@ migrate() { uci_set "$CONF" "$1" max_idle_time "$tuic_max_idle_time" fi + # hysteria_up_mbps -> brutal_up_mbps + if isDefined "$1" hysteria_up_mbps; then + local hysteria_up_mbps + config_get hysteria_up_mbps "$1" hysteria_up_mbps "" + uci_remove "$CONF" "$1" hysteria_up_mbps + uci_set "$CONF" "$1" brutal_up_mbps "$hysteria_up_mbps" + fi + + # hysteria_down_mbps -> brutal_down_mbps + if isDefined "$1" hysteria_down_mbps; then + local hysteria_down_mbps + config_get hysteria_down_mbps "$1" hysteria_down_mbps "" + uci_remove "$CONF" "$1" hysteria_down_mbps + uci_set "$CONF" "$1" brutal_down_mbps "$hysteria_down_mbps" + fi + + # hysteria_ignore_client_bandwidth -> brutal_ignore_client_bandwidth + if isDefined "$1" hysteria_ignore_client_bandwidth; then + local hysteria_ignore_client_bandwidth + config_get hysteria_ignore_client_bandwidth "$1" hysteria_ignore_client_bandwidth "" + uci_remove "$CONF" "$1" hysteria_ignore_client_bandwidth + uci_set "$CONF" "$1" brutal_ignore_client_bandwidth "$hysteria_ignore_client_bandwidth" + fi + # plugin -> plugin_type if isDefined "$1" plugin; then local plugin diff --git a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_node b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_node index 111fa573..4bf0acd1 100755 --- a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_node +++ b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_node @@ -59,6 +59,22 @@ migrate() { uci_set "$CONF" "$1" max_open_streams "$tuic_max_open_streams" fi + # hysteria_up_mbps -> brutal_up_mbps + if isDefined "$1" hysteria_up_mbps; then + local hysteria_up_mbps + config_get hysteria_up_mbps "$1" hysteria_up_mbps "" + uci_remove "$CONF" "$1" hysteria_up_mbps + uci_set "$CONF" "$1" brutal_up_mbps "$hysteria_up_mbps" + fi + + # hysteria_down_mbps -> brutal_down_mbps + if isDefined "$1" hysteria_down_mbps; then + local hysteria_down_mbps + config_get hysteria_down_mbps "$1" hysteria_down_mbps "" + uci_remove "$CONF" "$1" hysteria_down_mbps + uci_set "$CONF" "$1" brutal_down_mbps "$hysteria_down_mbps" + fi + # plugin -> plugin_type if isDefined "$1" plugin; then local plugin diff --git a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_server b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_server index b2218d3f..1dd0769e 100755 --- a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_server +++ b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_server @@ -33,6 +33,30 @@ migrate() { uci_set "$CONF" "$1" max_idle_time "$tuic_max_idle_time" fi + # hysteria_up_mbps -> brutal_up_mbps + if isDefined "$1" hysteria_up_mbps; then + local hysteria_up_mbps + config_get hysteria_up_mbps "$1" hysteria_up_mbps "" + uci_remove "$CONF" "$1" hysteria_up_mbps + uci_set "$CONF" "$1" brutal_up_mbps "$hysteria_up_mbps" + fi + + # hysteria_down_mbps -> brutal_down_mbps + if isDefined "$1" hysteria_down_mbps; then + local hysteria_down_mbps + config_get hysteria_down_mbps "$1" hysteria_down_mbps "" + uci_remove "$CONF" "$1" hysteria_down_mbps + uci_set "$CONF" "$1" brutal_down_mbps "$hysteria_down_mbps" + fi + + # hysteria_ignore_client_bandwidth -> brutal_ignore_client_bandwidth + if isDefined "$1" hysteria_ignore_client_bandwidth; then + local hysteria_ignore_client_bandwidth + config_get hysteria_ignore_client_bandwidth "$1" hysteria_ignore_client_bandwidth "" + uci_remove "$CONF" "$1" hysteria_ignore_client_bandwidth + uci_set "$CONF" "$1" brutal_ignore_client_bandwidth "$hysteria_ignore_client_bandwidth" + fi + # plugin -> plugin_type if isDefined "$1" plugin; then local plugin diff --git a/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc b/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc index 162f87e1..13b0e6a7 100644 --- a/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc +++ b/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc @@ -573,11 +573,13 @@ uci.foreach(uciconf, ucinode, (cfg) => { "reduce-rtt": strToBool(cfg.tuic_reduce_rtt), "request-timeout": strToInt(cfg.tuic_request_timeout) || null, + /* Brutal */ + up: strToInt(cfg.brutal_up_mbps), + down: strToInt(cfg.brutal_down_mbps), + /* Hysteria / Hysteria2 */ ports: isEmpty(cfg.hysteria_ports) ? null : join(',', cfg.hysteria_ports), "hop-interval": strToInt(cfg.hysteria_hop_interval), // @DEBUG ERROR data type *utils.IntRanges[uint16] - up: cfg.hysteria_up_mbps ? cfg.hysteria_up_mbps + ' Mbps' : null, - down: cfg.hysteria_down_mbps ? cfg.hysteria_down_mbps + ' Mbps' : null, obfs: cfg.hysteria_obfs_type, "obfs-password": cfg.hysteria_obfs_password, "obfs-min-packet-size": strToInt(cfg.hysteria_obfs_min_packet_size), @@ -682,6 +684,10 @@ uci.foreach(uciconf, ucinode, (cfg) => { config: cfg.tls_ech_config, "query-server-name": cfg.tls_ech_query_server_name } : null, + "jls-opts": cfg.tls_jls === '1' ? { + "username": cfg.tls_jls_username, + "password": cfg.tls_jls_password + } : null, "reality-opts": cfg.tls_reality === '1' ? { "public-key": cfg.tls_reality_public_key, "short-id": cfg.tls_reality_short_id, diff --git a/luci-app-fchomo/root/usr/share/ucode/fchomo.uc b/luci-app-fchomo/root/usr/share/ucode/fchomo.uc index ad9c8701..dc4c4c4d 100644 --- a/luci-app-fchomo/root/usr/share/ucode/fchomo.uc +++ b/luci-app-fchomo/root/usr/share/ucode/fchomo.uc @@ -292,10 +292,12 @@ export function parseListener(cfg) { "authentication-timeout": durationToSecond(cfg.tuic_authentication_timeout), "max-udp-relay-packet-size": strToInt(cfg.tuic_max_udp_relay_packet_size), + /* Brutal */ + up: strToInt(cfg.brutal_up_mbps), + down: strToInt(cfg.brutal_down_mbps), + "ignore-client-bandwidth": strToBool(cfg.brutal_ignore_client_bandwidth), + /* Hysteria2 */ - up: strToInt(cfg.hysteria_up_mbps), - down: strToInt(cfg.hysteria_down_mbps), - "ignore-client-bandwidth": strToBool(cfg.hysteria_ignore_client_bandwidth), obfs: cfg.hysteria_obfs_type, "obfs-password": cfg.hysteria_obfs_password, "obfs-min-packet-size": strToInt(cfg.hysteria_obfs_min_packet_size), @@ -417,7 +419,7 @@ export function parseListener(cfg) { /* TLS fields */ ...(cfg.allow_insecure === '1' ? { "allow-insecure": true } : cfg.tls === '1' ? { - alpn: cfg.tls_alpn, + alpn: cfg.plugin_type in ['jls'] ? null : cfg.tls_alpn, ...(cfg.tls_reality === '1' ? { "reality-config": { dest: cfg.tls_reality_dest, diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index b901bce5..1e94a163 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall -PKG_VERSION:=26.7.1 -PKG_RELEASE:=179 +PKG_VERSION:=26.7.15 +PKG_RELEASE:=180 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua index 853e642b..00fd19a4 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua @@ -441,24 +441,15 @@ o = s:option(Value, _n("tls_serverName"), "SNI " .. translate("Domain")) o:depends({ [_n("tls")] = true }) o:depends({ [_n("protocol")] = "hysteria2" }) -if api.compare_versions(os.date("%Y.%m.%d"), "<", "3026.6.1") then - o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped.")) - o.default = "0" - o:depends({ [_n("tls")] = true, [_n("reality")] = false }) - o:depends({ [_n("protocol")] = "hysteria2" }) -end +o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)")) +o:depends({ [_n("tls")] = true, [_n("reality")] = false }) +o:depends({ [_n("protocol")] = "hysteria2" }) +o.description = translate("Once set, connects only when the server’s chain fingerprint matches.") .. + string.format("%s", "→ " .. translate("Fetch Manually")) -if api.compare_versions(xray_version, ">=", "26.1.31") then - o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)")) - o:depends({ [_n("tls")] = true, [_n("reality")] = false }) - o:depends({ [_n("protocol")] = "hysteria2" }) - o.description = translate("Once set, connects only when the server’s chain fingerprint matches.") .. - string.format("%s", "→ " .. translate("Fetch Manually")) - - o = s:option(Value, _n("tls_CertByName"), translate("TLS Certificate Name (CertName)"), translate("TLS is used to verify the leaf certificate name.")) - o:depends({ [_n("tls")] = true, [_n("reality")] = false }) - o:depends({ [_n("protocol")] = "hysteria2" }) -end +o = s:option(Value, _n("tls_CertByName"), translate("TLS Certificate Name (CertName)"), translate("TLS is used to verify the leaf certificate name.")) +o:depends({ [_n("tls")] = true, [_n("reality")] = false }) +o:depends({ [_n("protocol")] = "hysteria2" }) o = s:option(Flag, _n("tls_certificate"), translate("TLS Certificate (PEM)")) o.default = "0" diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index 66920df6..2ed73aea 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -152,21 +152,9 @@ function gen_outbound(flag, node, tag, proxy_table) security = node.stream_security, tlsSettings = (node.stream_security == "tls") and { serverName = node.tls_serverName, - allowInsecure = (function() - if node.tls_pinSHA256 and node.tls_pinSHA256 ~= "" then return nil end - if node.tls_allowInsecure == "1" then return true end - end)(), fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil, - pinnedPeerCertSha256 = (function() - if api.compare_versions(xray_version, "<", "26.1.31") then return nil end - if not node.tls_pinSHA256 then return "" end - return node.tls_pinSHA256 - end)(), - verifyPeerCertByName = (function() - if api.compare_versions(xray_version, "<", "26.1.31") then return nil end - if not node.tls_CertByName then return "" end - return node.tls_CertByName - end)(), + pinnedPeerCertSha256 = node.tls_pinSHA256, + verifyPeerCertByName = node.tls_CertByName, echConfigList = (node.ech == "1") and node.ech_config or nil, certificates = (node.tls_certificate == "1" and node.tls_certificate_pem ~= "") and { certificate = api.split(node.tls_certificate_pem, "\n"), @@ -820,7 +808,8 @@ function gen_config_server(node) serverNames = node.reality_serverNames or {}, privateKey = node.reality_private_key, shortIds = node.reality_shortId or "", - mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil + mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil, + minClientVer = "1.0.0" } or nil end end diff --git a/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm b/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm index 895219bb..0aafedfe 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm @@ -1313,6 +1313,8 @@ local current_node = map:get(section) opt.set(dom_prefix + 'utls', true); opt.set(dom_prefix + 'fingerprint', queryParam.fp); } + opt.set(dom_prefix + 'ech', !!queryParam.ech); + opt.set(dom_prefix + 'ech_config', queryParam.ech || ''); opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || ''); opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || ''); opt.set( diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua index 1c8720d1..57a1bf60 100755 --- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -1069,6 +1069,10 @@ local function processData(szType, content, add_mode, group, sub_cfg) result.reality_publicKey = params.pbk or nil result.reality_shortId = params.sid or nil end + if params.ech and params.ech ~= "" then + result.ech = "1" + result.ech_config = params.ech + end result.tls_pinSHA256 = params.pcs result.tls_CertByName = params.vcn result.tls_allowInsecure = params.allowinsecure or params.allowInsecure or params.insecure diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index 441f3820..772ca3ac 100644 --- a/luci-app-passwall2/Makefile +++ b/luci-app-passwall2/Makefile @@ -6,8 +6,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 -PKG_VERSION:=26.7.12 -PKG_RELEASE:=62 +PKG_VERSION:=26.7.16 +PKG_RELEASE:=63 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall2/htdocs/luci-static/resources/view/passwall2/cbi.js b/luci-app-passwall2/htdocs/luci-static/resources/view/passwall2/cbi.js new file mode 100644 index 00000000..3f9d6470 --- /dev/null +++ b/luci-app-passwall2/htdocs/luci-static/resources/view/passwall2/cbi.js @@ -0,0 +1,38 @@ +function is_json(str) { + try { + const result = JSON.parse(str); + return typeof result === 'object' && result !== null; + } catch (e) { + return false; + } +} + +function is_timehhmm(str) { + const match = String(str).match(/^(\d?\d):(\d\d)$/); + if (match) { + const hour = parseInt(match[1], 10); + const minute = parseInt(match[2], 10); + if (hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59) { + return true; + } + } + return false; +} + +if (typeof cbi_validators !== 'undefined' && cbi_validators !== null) { + cbi_validators['json'] = function() { + return is_json(this); + } + cbi_validators['timehhmm'] = function() { + return is_timehhmm(this); + } +} else { + L.require('validation').then(function(validation) { + validation.types['json'] = function() { + return this.assert(is_json(this.value), _('Must be JSON text!')); + } + validation.types['timehhmm'] = function() { + return this.assert(is_timehhmm(this.value), _('valid time (hh:mm)')); + } + }); +} diff --git a/luci-app-passwall2/luasrc/controller/passwall2.lua b/luci-app-passwall2/luasrc/controller/passwall2.lua index c01dbae0..29c9d841 100644 --- a/luci-app-passwall2/luasrc/controller/passwall2.lua +++ b/luci-app-passwall2/luasrc/controller/passwall2.lua @@ -114,6 +114,8 @@ function index() --[[geoview]] entry({"admin", "services", appname, "geo_view"}, call("geo_view")).leaf = true + + entry({"admin", "services", appname, "fetch_certsha256"}, call("fetch_certsha256")).leaf = true end function check_site(host, port) @@ -995,3 +997,17 @@ function flush_set() http.redirect(api.url("log")) end end + +function fetch_certsha256() + local id = http.formvalue("id") or "" + local address = (id ~= "") and uci:get(appname, id, "address") or "" + local port = (id ~= "") and uci:get(appname, id, "port") or 0 + local sni = (id ~= "") and uci:get(appname, id, "tls_serverName") or "" + sni = (sni ~= "") and sni or address + if address == "" or port == 0 then + http_write_json_error() + return + end + local data = api.fetch_cert_sha256(address, port, sni, 5) + http_write_json(data ~= "" and { code = 1, data = data } or { code = 0 }) +end diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua index 3df0c9f7..0b815a51 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua @@ -2,6 +2,8 @@ local api = require "luci.passwall2.api" local appname = api.appname local sys = api.sys +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -13,7 +15,8 @@ o.rmempty = false o.default = false -- [[ ACLs Settings ]]-- -s = m:section(TypedSection, "acl_rule") +local cfgname = "acl_rule" +s = m:section(TypedSection, cfgname) s.template = "cbi/tblsection" s.sortable = true s.anonymous = true @@ -65,4 +68,9 @@ i.cfgvalue = function(t, n) return v end -return m +local sortable = Template(appname .. "/cbi/sortable") +sortable.api = api +sortable.target_cfgname = cfgname +m:append(sortable) + +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua index b8b77501..b366d623 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua @@ -1,6 +1,8 @@ local api = require "luci.passwall2.api" local appname = api.appname +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -379,4 +381,4 @@ for k, v in pairs(nodes_table) do end end -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/app_update.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/app_update.lua index afdef1b9..462046e3 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/app_update.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/app_update.lua @@ -2,6 +2,8 @@ local api = require "luci.passwall2.api" local com = require "luci.passwall2.com" local appname = api.appname +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -28,4 +30,4 @@ o.cfgvalue = function(t, n) return string.format('%s', translate("if you want to run from memory, change the path, /tmp beginning then save the application and update it manually.")) end -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/geoview.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/geoview.lua index 071d8e80..abd9c1f1 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/geoview.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/geoview.lua @@ -1,5 +1,5 @@ local api = require "luci.passwall2.api" -local appname = "passwall2" +local appname = api.appname local fs = api.fs local uci = api.uci diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua index 0afe66f8..d00c8f1b 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua @@ -4,6 +4,8 @@ datatypes = api.datatypes has_singbox = api.finded_com("sing-box") has_xray = api.finded_com("xray") +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -387,4 +389,4 @@ footer.shunt_list = api.jsonc.stringify(shunt_list) m:append(footer) m:append(Template(appname .. "/global/status_bottom")) -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/haproxy.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/haproxy.lua index 6a8732ee..06dad374 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/haproxy.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/haproxy.lua @@ -15,6 +15,8 @@ for k, e in ipairs(api.get_valid_nodes()) do end end +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -100,7 +102,8 @@ end o:depends("health_check_type", "passwall_logic") -- [[ Balancing Settings ]]-- -s = m:section(TypedSection, "haproxy_config", translate("Node List")) +local cfgname = "haproxy_config" +s = m:section(TypedSection, cfgname, translate("Node List")) s.description = "" .. translate("Add a node, Export Of Multi WAN Only support Multi Wan. Load specific gravity range 1-256. Multiple primary servers can be load balanced, standby will only be enabled when the primary server is offline! Multiple groups can be set, Haproxy port same one for each group.") .. "
" .. translate("Note that the node configuration parameters for load balancing must be consistent when use TCP health check type, otherwise it cannot be used normally!") .. "
" @@ -176,6 +179,11 @@ o:value(0, translate("Primary")) o:value(1, translate("Standby")) o.rmempty = false +local sortable = Template(appname .. "/cbi/sortable") +sortable.api = api +sortable.target_cfgname = cfgname +m:append(sortable) + m:append(Template(appname .. "/haproxy/js")) -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_config.lua index 5051bd7b..ead7043f 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_config.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_config.lua @@ -1,6 +1,8 @@ api = require "luci.passwall2.api" appname = api.appname +api.set_default_cbi() + m = Map(appname, translate("Node Config")) m.redirect = api.url() api.set_apply_on_parse(m) @@ -94,7 +96,6 @@ local footer = Template(appname .. "/node_config/footer") footer.api = api footer.config = m.config footer.section = arg[1] - m:append(footer) -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua index 745188de..37fb1867 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua @@ -3,6 +3,8 @@ local appname = api.appname local datatypes = api.datatypes local sys = api.sys +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -33,4 +35,4 @@ s:append(Template(appname .. "/node_list/link_add_node")) m:append(Template(appname .. "/node_list/node_list")) -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua index 7140ac5c..6ffdd44a 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua @@ -38,6 +38,8 @@ if has_hysteria2 then table.insert(hysteria2_type, s) end +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -124,7 +126,8 @@ o.cfgvalue = function(self, section) translate("Manual subscription All")) end -s = m:section(TypedSection, "subscribe_list", "", "" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "") +local cfgname = "subscribe_list" +s = m:section(TypedSection, cfgname, "", "" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "") s.addremove = true s.anonymous = true s.sortable = true @@ -144,7 +147,7 @@ o.validate = function(self, value, section) return nil, translate("Remark cannot be empty.") end local duplicate = false - m.uci:foreach(appname, "subscribe_list", function(e) + m.uci:foreach(appname, cfgname, function(e) if e[".name"] ~= section and e["remark"] and e["remark"]:lower() == value:lower() then duplicate = true return false @@ -219,6 +222,11 @@ o.cfgvalue = function(self, section) section, translate("Manual subscription")) end +local sortable = Template(appname .. "/cbi/sortable") +sortable.api = api +sortable.target_cfgname = cfgname +m:append(sortable) + m:append(Template(appname .. "/node_subscribe/js")) -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua index b5068ccc..198e19bc 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua @@ -1,6 +1,8 @@ local api = require "luci.passwall2.api" local appname = api.appname +api.set_default_cbi() + m = Map(appname) m.redirect = api.url("node_subscribe") api.set_apply_on_parse(m) @@ -255,13 +257,7 @@ for t = 0, 23 do end end o.default = "0:00" -o.validate = function(self, value) - local b = api.is_timehhmm(value) - if b then - return value - end - return nil -end +o.datatype = "timehhmm" o:depends("update_week_mode", "0") o:depends("update_week_mode", "1") o:depends("update_week_mode", "2") @@ -336,4 +332,4 @@ o.description = translate("Some subscription providers may require a hardware id translate("Enabling this option will send a hashed HWID when updating subscriptions.") .. "
" .. translate("This may reveal limited hardware information. Enable only if you trust your provider.") -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua index a715756c..b46db196 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua @@ -8,6 +8,8 @@ local port_validate = function(self, value, t) return value:gsub("-", ":") end +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -53,13 +55,7 @@ for index, value in ipairs({"stop", "start", "restart"}) do end end o.default = "0:00" - o.validate = function(self, value) - local b = api.is_timehhmm(value) - if b then - return value - end - return nil - end + o.datatype = "timehhmm" o:depends(value .. "_week_mode", "0") o:depends(value .. "_week_mode", "1") o:depends(value .. "_week_mode", "2") @@ -312,4 +308,4 @@ if has_singbox then o.default = 0 end -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/rule.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/rule.lua index 2fba7319..e0b65f42 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/rule.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/rule.lua @@ -1,6 +1,8 @@ local api = require "luci.passwall2.api" local appname = api.appname +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -59,13 +61,7 @@ for t = 0, 23 do end end o.default = "0:00" -o.validate = function(self, value) - local b = api.is_timehhmm(value) - if b then - return value - end - return nil -end +o.datatype = "timehhmm" o:depends("update_week_mode", "0") o:depends("update_week_mode", "1") o:depends("update_week_mode", "2") @@ -92,7 +88,8 @@ end s:append(Template(appname .. "/rule/rule_version")) -s = m:section(TypedSection, "shunt_rules", "Sing-Box/Xray " .. translate("Shunt Rule"), "" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "") +local cfgname = "shunt_rules" +s = m:section(TypedSection, cfgname, "Sing-Box/Xray " .. translate("Shunt Rule"), "" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "") s.template = "cbi/tblsection" s.anonymous = false s.addremove = true @@ -113,4 +110,9 @@ end o = s:option(DummyValue, "remarks", translate("Remarks")) -return m +local sortable = Template(appname .. "/cbi/sortable") +sortable.api = api +sortable.target_cfgname = cfgname +m:append(sortable) + +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua index e154fa84..f7035984 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua @@ -2,6 +2,8 @@ local api = require "luci.passwall2.api" local appname = api.appname local datatypes = api.datatypes +api.set_default_cbi() + m = Map(appname, "Sing-Box/Xray " .. translate("Shunt Rule")) m.redirect = api.url("rule") api.set_apply_on_parse(m) @@ -248,4 +250,4 @@ ip_list.description = "
    " o = s:option(Flag, "invert", "invert", translate("Invert match result.") .. " " .. translate("Only support Sing-Box.")) -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua index 59723a56..9d9ac64a 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua @@ -1,6 +1,8 @@ local api = require "luci.passwall2.api" local appname = api.appname +api.set_default_cbi() + m = Map(appname) api.set_apply_on_parse(m) @@ -80,23 +82,14 @@ o = s:option(Flag, "enable_autoswitch", translate("Auto Switch")) o.default = 0 o.rmempty = false -o = s:option(Value, "autoswitch_testing_time", translate("How often to test"), translate("Units:seconds")) -o.datatype = "min(10)" -o.default = 30 +o = s:option(ListValue, "backup_node_add_mode", translate("Backup Node Addition Method")) o:depends("enable_autoswitch", true) +o.default = "manual" +o:value("manual", translate("Manual")) +o:value("batch", translate("Batch")) -o = s:option(Value, "autoswitch_connect_timeout", translate("Timeout seconds"), translate("Units:seconds")) -o.datatype = "min(1)" -o.default = 3 -o:depends("enable_autoswitch", true) - -o = s:option(Value, "autoswitch_retry_num", translate("Timeout retry num")) -o.datatype = "min(1)" -o.default = 1 -o:depends("enable_autoswitch", true) - o = s:option(DynamicList, "autoswitch_backup_node", translate("List of backup nodes")) -o:depends("enable_autoswitch", true) +o:depends("backup_node_add_mode", "manual") o.template = appname .. "/cbi/nodes_dynamiclist" o.group = {} o.write = function(self, section, value) @@ -118,6 +111,44 @@ for i, v in pairs(nodes_table) do socks_node.group[#socks_node.group+1] = (v.group and v.group ~= "") and v.group or translate("default") end +o = s:option(MultiValue, "backup_node_group", translate("Select Group")) +o:depends("backup_node_add_mode", "batch") +o.widget = "checkbox" +o:value("default", translate("default")) +local groups = {} +m.uci:foreach(appname, "nodes", function(s) + if s.group and s.group ~= "" then + groups[s.group] = true + end +end) +for k, v in pairs(groups) do + o:value(api.UrlEncode(k), k) +end + +o = s:option(Value, "backup_node_match_rule", translate("Node Matching Rules")) +o:depends("backup_node_add_mode", "batch") +local descrStr = "Example: ^A && B && !C && D$
    " +descrStr = descrStr .. "This means the node remark must start with A (^), include B, exclude C (!), and end with D ($).
    " +descrStr = descrStr .. "Conditions are joined by && (AND), and their order does not affect the result.
    " +descrStr = descrStr .. "Multiple groups can be separated by || (OR), matching succeeds if any group matches.
    " +descrStr = descrStr .. "Example: A && B || C && D means (A AND B) OR (C AND D)." +o.description = translate(descrStr) + +o = s:option(Value, "autoswitch_testing_time", translate("How often to test"), translate("Units:seconds")) +o.datatype = "min(10)" +o.default = 30 +o:depends("enable_autoswitch", true) + +o = s:option(Value, "autoswitch_connect_timeout", translate("Timeout seconds"), translate("Units:seconds")) +o.datatype = "min(1)" +o.default = 3 +o:depends("enable_autoswitch", true) + +o = s:option(Value, "autoswitch_retry_num", translate("Timeout retry num")) +o.datatype = "min(1)" +o.default = 1 +o:depends("enable_autoswitch", true) + o = s:option(Flag, "autoswitch_restore_switch", translate("Restore Switch"), translate("When detects main node is available, switch back to the main node.")) o:depends("enable_autoswitch", true) @@ -134,6 +165,6 @@ o:depends("enable_autoswitch", true) o = s:option(DummyValue, "btn") o.template = appname .. "/socks_auto_switch/btn" -o:depends("enable_autoswitch", true) +o:depends("backup_node_add_mode", "manual") -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua index 9fc3f6eb..12e44eb6 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua @@ -442,22 +442,15 @@ o = s:option(Value, _n("tls_serverName"), "SNI " .. translate("Domain")) o:depends({ [_n("tls")] = true }) o:depends({ [_n("protocol")] = "hysteria2" }) -if api.compare_versions(os.date("%Y.%m.%d"), "<", "3026.6.1") then - o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped.")) - o.default = "0" - o:depends({ [_n("tls")] = true, [_n("reality")] = false }) - o:depends({ [_n("protocol")] = "hysteria2" }) -end +o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)")) +o:depends({ [_n("tls")] = true, [_n("reality")] = false }) +o:depends({ [_n("protocol")] = "hysteria2" }) +o.description = translate("Once set, connects only when the server’s chain fingerprint matches.") .. + string.format("%s", "→ " .. translate("Fetch Manually")) -if api.compare_versions(xray_version, ">=", "26.1.31") then - o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)")) - o:depends({ [_n("tls")] = true, [_n("reality")] = false }) - o:depends({ [_n("protocol")] = "hysteria2" }) - - o = s:option(Value, _n("tls_CertByName"), translate("TLS Certificate Name (CertName)"), translate("TLS is used to verify the leaf certificate name.")) - o:depends({ [_n("tls")] = true, [_n("reality")] = false }) - o:depends({ [_n("protocol")] = "hysteria2" }) -end +o = s:option(Value, _n("tls_CertByName"), translate("TLS Certificate Name (CertName)"), translate("TLS is used to verify the leaf certificate name.")) +o:depends({ [_n("tls")] = true, [_n("reality")] = false }) +o:depends({ [_n("protocol")] = "hysteria2" }) o = s:option(Flag, _n("tls_certificate"), translate("TLS Certificate (PEM)")) o.default = "0" @@ -671,6 +664,14 @@ o = s:option(TextValue, _n("xhttp_extra"), " ", translate("An XHttpObject in J o:depends({ [_n("use_xhttp_extra")] = true }) o.rows = 10 o.wrap = "off" +o.datatype = "json" +local o_validate = o.validate +o.validate = function(self, value) + value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n") + local v = o_validate(self, value) + if v then return v end + return nil, "XHTTP Extra " .. translate("Must be JSON text!") +end o.custom_cfgvalue = function(self, section, value) local raw = m:get(section, "xhttp_extra") if raw then @@ -693,14 +694,6 @@ o.custom_write = function(self, section, value) m:del(section, "download_address") end end -o.validate = function(self, value) - value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n") - if api.jsonc.parse(value) then - return value - else - return nil, "XHTTP Extra " .. translate("Must be JSON text!") - end -end o.custom_remove = function(self, section, value) m:del(section, "xhttp_extra") m:del(section, "download_address") @@ -758,6 +751,14 @@ o.rows = 10 o.wrap = "off" o.description = translate("An FinalMaskObject in JSON format, used for sharing.") .. "
    " .. translate("Custom finalmask overrides mkcp, hysteria2, fragment, noise, and related settings.") +o.datatype = "json" +local o_validate = o.validate +o.validate = function(self, value) + value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n") + local v = o_validate(self, value) + if v then return v end + return nil, "FinalMask " .. translate("Must be JSON text!") +end o.custom_cfgvalue = function(self, section, value) local raw = m:get(section, "finalmask") if raw then @@ -767,14 +768,6 @@ end o.custom_write = function(self, section, value) m:set(section, "finalmask", api.base64Encode(value) or "") end -o.validate = function(self, value) - value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n") - if api.jsonc.parse(value) then - return value - else - return nil, "FinalMask " .. translate("Must be JSON text!") - end -end --[[Fast Open]] o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required")) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/index.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/index.lua index 70bec3f8..33f24596 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/index.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/index.lua @@ -1,4 +1,7 @@ local api = require "luci.passwall2.api" +local appname = api.appname + +api.set_default_cbi() m = Map("passwall2_server", translate("Server-Side")) api.set_apply_on_parse(m) @@ -10,7 +13,8 @@ t.addremove = false e = t:option(Flag, "enable", translate("Enable")) e.rmempty = false -t = m:section(TypedSection, "user", translate("Users Manager")) +local cfgname = "user" +t = m:section(TypedSection, cfgname, translate("Users Manager")) t.anonymous = true t.addremove = true t.sortable = true @@ -85,8 +89,14 @@ e = t:option(Flag, "log", translate("Log")) e.default = "1" e.rmempty = false -m:append(Template("passwall2/server/log")) +local sortable = Template(appname .. "/cbi/sortable") +sortable.api = api +sortable.appname = m.config +sortable.target_cfgname = cfgname +m:append(sortable) -m:append(Template("passwall2/server/users_list_status")) -return m +m:append(Template(appname .. "/server/log")) +m:append(Template(appname .. "/server/users_list_status")) + +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria2.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria2.lua index 0b0dd1e2..5473fc30 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria2.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria2.lua @@ -129,12 +129,12 @@ o = s:option(TextValue, _n("custom_config"), translate("Custom Config")) o.rows = 10 o.wrap = "off" o:depends({ [_n("custom")] = true }) -o.validate = function(self, value, t) - if value and api.jsonc.parse(value) then - return value - else - return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") - end +o.datatype = "json" +local o_validate = o.validate +o.validate = function(self, value) + local v = o_validate(self, value) + if v then return v end + return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") end o.custom_cfgvalue = function(self, section, value) local config_str = m:get(section, "config_str") diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua index cf944c3f..09dd948d 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua @@ -412,6 +412,7 @@ o = s:option(TextValue, _n("finalmask"), "FinalMask JSON") o:depends({ [_n("use_finalmask")] = true }) o.rows = 10 o.wrap = "off" +o.datatype = "json" o.custom_cfgvalue = function(self, section, value) local raw = m:get(section, "finalmask") if raw then @@ -421,14 +422,6 @@ end o.custom_write = function(self, section, value) m:set(section, "finalmask", api.base64Encode(value) or "") end -o.validate = function(self, value) - value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n") - if api.jsonc.parse(value) then - return value - else - return nil, "FinalMask " .. translate("Must be JSON text!") - end -end --[[acceptProxyProtocol]] o = s:option(Flag, _n("acceptProxyProtocol"), translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used.")) @@ -523,16 +516,16 @@ for _, d in ipairs(netdev_list) do o:value(d.name, d.label) end -o = s:option(TextValue, _n("custom_config"), translate("Custom Config")) +o = s:option(TextValue, _n("custom_config"), translate("Custom Config") .. " (JSON)") o.rows = 10 o.wrap = "off" o:depends({ [_n("custom")] = true }) -o.validate = function(self, value, t) - if value and api.jsonc.parse(value) then - return value - else - return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") - end +o.datatype = "json" +local o_validate = o.validate +o.validate = function(self, value) + local v = o_validate(self, value) + if v then return v end + return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") end o.custom_cfgvalue = function(self, section, value) local config_str = m:get(section, "config_str") diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua index d45dc4ad..8f906243 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua @@ -489,16 +489,16 @@ for _, d in ipairs(netdev_list) do o:value(d.name, d.label) end -o = s:option(TextValue, _n("custom_config"), translate("Custom Config")) +o = s:option(TextValue, _n("custom_config"), translate("Custom Config") .. " (JSON)") o.rows = 10 o.wrap = "off" o:depends({ [_n("custom")] = true }) -o.validate = function(self, value, t) - if value and api.jsonc.parse(value) then - return value - else - return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") - end +o.datatype = "json" +local o_validate = o.validate +o.validate = function(self, value) + local v = o_validate(self, value) + if v then return v end + return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") end o.custom_cfgvalue = function(self, section, value) local config_str = m:get(section, "config_str") diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ss-rust.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ss-rust.lua index d0939430..a6bca4f9 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ss-rust.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ss-rust.lua @@ -49,16 +49,16 @@ o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open")) o.default = "0" o:depends({ [_n("custom")] = false }) -o = s:option(TextValue, _n("custom_config"), translate("Custom Config")) +o = s:option(TextValue, _n("custom_config"), translate("Custom Config") .. " (JSON)") o.rows = 10 o.wrap = "off" o:depends({ [_n("custom")] = true }) -o.validate = function(self, value, t) - if value and api.jsonc.parse(value) then - return value - else - return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") - end +o.datatype = "json" +local o_validate = o.validate +o.validate = function(self, value) + local v = o_validate(self, value) + if v then return v end + return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") end o.custom_cfgvalue = function(self, section, value) local config_str = m:get(section, "config_str") diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ssr.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ssr.lua index 02a94f61..d77cf74c 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ssr.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ssr.lua @@ -76,16 +76,16 @@ o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open")) o.default = "0" o:depends({ [_n("custom")] = false }) -o = s:option(TextValue, _n("custom_config"), translate("Custom Config")) +o = s:option(TextValue, _n("custom_config"), translate("Custom Config") .. " (JSON)") o.rows = 10 o.wrap = "off" o:depends({ [_n("custom")] = true }) -o.validate = function(self, value, t) - if value and api.jsonc.parse(value) then - return value - else - return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") - end +o.datatype = "json" +local o_validate = o.validate +o.validate = function(self, value) + local v = o_validate(self, value) + if v then return v end + return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!") end o.custom_cfgvalue = function(self, section, value) local config_str = m:get(section, "config_str") diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua index c50d5ca9..b3da0a04 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua @@ -2,6 +2,8 @@ api = require "luci.passwall2.api" appname = api.appname fs = api.fs +api.set_default_cbi() + m = Map("passwall2_server", translate("Server Config")) m.redirect = api.url("server") api.set_apply_on_parse(m) @@ -54,4 +56,4 @@ footer.config = m.config footer.section = arg[1] m:append(footer) -return m +return api.return_map(m) diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua index 7da2d87a..18a13dec 100644 --- a/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/luci-app-passwall2/luasrc/passwall2/api.lua @@ -367,8 +367,16 @@ function strToTable(str) return loadstring("return " .. str)() end -function is_timehhmm(timeStr) - local hour, minute = string.match(timeStr, "^(%d?%d):(%d%d)$") +function is_json(str) + if str and jsonc.parse(str) then + return true + end + return false +end +datatypes.json = is_json + +function is_timehhmm(str) + local hour, minute = string.match(str, "^(%d?%d):(%d%d)$") if hour and minute then hour = tonumber(hour) minute = tonumber(minute) @@ -378,6 +386,7 @@ function is_timehhmm(timeStr) end return false end +datatypes.timehhmm = is_timehhmm function is_normal_node(e) if e and e.type and e.protocol and (e.protocol == "_balancing" or e.protocol == "_shunt" or e.protocol == "_iface" or e.protocol == "_urltest") then @@ -1380,6 +1389,40 @@ function set_apply_on_parse(map) end end +function set_default_cbi() + local cbi = require "luci.cbi" + if true then + --TextValue + local TextValue = cbi.TextValue + local original_init = TextValue.__init__ + function TextValue.__init__(self, ...) + original_init(self, ...) + self.template = appname .. "/cbi/tvalue" + end + end +end + +function return_map(map) + local cbi = require "luci.cbi" + local api = require "luci.passwall2.api" + if true then + -- header + local header = cbi.Template(appname .. "/cbi/header") + header.api = api + header.config = map.config + table.insert(map.children, 1, header) + end + if true then + -- footer + local footer = cbi.Template(appname .. "/cbi/footer") + footer.api = api + footer.config = map.config + map:append(footer) + end + + return map +end + function luci_types(id, m, s, type_name, option_prefix) local fv_type local field_type = s.fields["type"] @@ -1585,6 +1628,56 @@ function match_node_rule(name, rule) return false end +local normal_nodes = {} +function get_batch_nodes(node) + if #normal_nodes == 0 then + for k, e in ipairs(get_valid_nodes()) do + if e.node_type == "normal" and (not e.chain_proxy or e.chain_proxy == "") then + normal_nodes[#normal_nodes + 1] = { + id = e[".name"], + remarks = e["remarks"], + group = e["group"] + } + end + end + end + if not node.node_group or node.node_group == "" then return {} end + local nodes = {} + for g in node.node_group:gmatch("%S+") do + g = UrlDecode(g) + for k, v in pairs(normal_nodes) do + local gn = (v.group and v.group ~= "") and v.group or "default" + if gn:lower() == g:lower() and match_node_rule(v.remarks, node.node_match_rule) then + nodes[#nodes + 1] = v.id + end + end + end + return nodes +end + +function get_socks_backup_nodes(id) + id = trim(id) + if id == "" then return "" end + local socks = uci:get_all(appname, id) + local nodes + if socks.backup_node_add_mode and socks.backup_node_add_mode == "batch" then + local node = {} + node.node_group = socks.backup_node_group + node.node_match_rule = socks.backup_node_match_rule + nodes = get_batch_nodes(node) + else + nodes = socks.autoswitch_backup_node + end + local backup_nodes, seen = {}, {} + for _, v in ipairs(nodes or {}) do + if v ~= socks.node and not seen[v] then + seen[v] = true + table.insert(backup_nodes, v) + end + end + return table.concat(backup_nodes, " ") +end + function get_core(field, candidates) local v = uci:get(appname, "@global_subscribe[0]", field) if v and v ~= "" then @@ -1610,6 +1703,26 @@ function cleanEmptyTables(t) return next(t) and t or nil end +function fetch_cert_sha256(host, port, sni, timeout) + if not host then return "" end + port = tonumber(port) or 443 + sni = sni or host + timeout = tonumber(timeout) or 5 + local cmd = string.format( + "timeout %d openssl s_client -connect %s:%d -servername %s -showcerts /dev/null " .. + "| awk 'BEGIN{c=0}/BEGIN CERT/{c++} c==1{print} /END CERT/{if(c==1)exit}' " .. + "| openssl x509 -outform der 2>/dev/null " .. + "| sha256sum 2>/dev/null", + timeout, host, port, sni + ) + local out = trim(sys.exec(cmd)) + local fp = out:match("^([0-9a-fA-F]+)") + if not fp or fp:lower():match("^e3b0c44298fc1c149afbf4c8996fb924") then + return "" + end + return fp:upper() +end + function get_dnsmasq_server_domain() local dnsmasq_server = uci:get("dhcp", "@dnsmasq[0]", "server") local dnsmasq_server_t = {} diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index bbb5e872..f25afa17 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua @@ -1329,33 +1329,6 @@ function gen_config(var) return result end - local nodes_list = {} - function get_urltest_batch_nodes(_node) - if #nodes_list == 0 then - for k, e in ipairs(api.get_valid_nodes()) do - if e.node_type == "normal" and (not e.chain_proxy or e.chain_proxy == "") then - nodes_list[#nodes_list + 1] = { - id = e[".name"], - remarks = e["remarks"], - group = e["group"] - } - end - end - end - if not _node.node_group or _node.node_group == "" then return {} end - local nodes = {} - for g in _node.node_group:gmatch("%S+") do - g = api.UrlDecode(g) - for k, v in pairs(nodes_list) do - local gn = (v.group and v.group ~= "") and v.group or "default" - if gn:lower() == g:lower() and api.match_node_rule(v.remarks, _node.node_match_rule) then - nodes[#nodes + 1] = v.id - end - end - end - return nodes - end - function get_node_by_id(node_id) if not node_id or node_id == "" or node_id == "nil" then return nil end if node_id:find("Socks_") then @@ -1377,7 +1350,7 @@ function gen_config(var) -- new urltest local ut_nodes if _node.node_add_mode and _node.node_add_mode == "batch" then - ut_nodes = get_urltest_batch_nodes(_node) + ut_nodes = api.get_batch_nodes(_node) else ut_nodes = _node.urltest_node end diff --git a/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/luci-app-passwall2/luasrc/passwall2/util_xray.lua index 21d387cd..914320be 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_xray.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_xray.lua @@ -176,21 +176,9 @@ function gen_outbound(flag, node, tag, proxy_table) security = node.stream_security, tlsSettings = (node.stream_security == "tls") and { serverName = node.tls_serverName, - allowInsecure = (function() - if node.tls_pinSHA256 and node.tls_pinSHA256 ~= "" then return nil end - if node.tls_allowInsecure == "1" then return true end - end)(), fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil, - pinnedPeerCertSha256 = (function() - if api.compare_versions(xray_version, "<", "26.1.31") then return nil end - if not node.tls_pinSHA256 then return "" end - return node.tls_pinSHA256 - end)(), - verifyPeerCertByName = (function() - if api.compare_versions(xray_version, "<", "26.1.31") then return nil end - if not node.tls_CertByName then return "" end - return node.tls_CertByName - end)(), + pinnedPeerCertSha256 = node.tls_pinSHA256, + verifyPeerCertByName = node.tls_CertByName, echConfigList = (node.ech == "1") and node.ech_config or nil, certificates = (node.tls_certificate == "1" and node.tls_certificate_pem ~= "") and { certificate = api.split(node.tls_certificate_pem, "\n"), @@ -839,7 +827,8 @@ function gen_config_server(node) serverNames = node.reality_serverNames or {}, privateKey = node.reality_private_key, shortIds = node.reality_shortId or "", - mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil + mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil, + minClientVer = "1.0.0" } or nil end end @@ -1032,33 +1021,6 @@ function gen_config(var) end end - local nodes_list = {} - function get_balancer_batch_nodes(_node) - if #nodes_list == 0 then - for k, e in ipairs(api.get_valid_nodes()) do - if e.node_type == "normal" and (not e.chain_proxy or e.chain_proxy == "") then - nodes_list[#nodes_list + 1] = { - id = e[".name"], - remarks = e["remarks"], - group = e["group"] - } - end - end - end - if not _node.node_group or _node.node_group == "" then return {} end - local nodes = {} - for g in _node.node_group:gmatch("%S+") do - g = api.UrlDecode(g) - for k, v in pairs(nodes_list) do - local gn = (v.group and v.group ~= "") and v.group or "default" - if gn:lower() == g:lower() and api.match_node_rule(v.remarks, _node.node_match_rule) then - nodes[#nodes + 1] = v.id - end - end - end - return nodes - end - function gen_loopback(outbound_tag, loopback_dst) if not outbound_tag or outbound_tag == "" then return nil end local inbound_tag = loopback_dst and "lo-to-" .. loopback_dst or outbound_tag .. "-lo" @@ -1090,7 +1052,7 @@ function gen_config(var) -- new balancer local blc_nodes if _node.node_add_mode and _node.node_add_mode == "batch" then - blc_nodes = get_balancer_batch_nodes(_node) + blc_nodes = api.get_batch_nodes(_node) else blc_nodes = _node.balancing_node end diff --git a/luci-app-passwall2/luasrc/view/passwall2/cbi/footer.htm b/luci-app-passwall2/luasrc/view/passwall2/cbi/footer.htm new file mode 100644 index 00000000..46a25d3e --- /dev/null +++ b/luci-app-passwall2/luasrc/view/passwall2/cbi/footer.htm @@ -0,0 +1 @@ + diff --git a/luci-app-passwall2/luasrc/view/passwall2/cbi/header.htm b/luci-app-passwall2/luasrc/view/passwall2/cbi/header.htm new file mode 100644 index 00000000..5d284d90 --- /dev/null +++ b/luci-app-passwall2/luasrc/view/passwall2/cbi/header.htm @@ -0,0 +1,2 @@ + + diff --git a/luci-app-passwall2/luasrc/view/passwall2/cbi/sortable.htm b/luci-app-passwall2/luasrc/view/passwall2/cbi/sortable.htm new file mode 100644 index 00000000..2f508eaf --- /dev/null +++ b/luci-app-passwall2/luasrc/view/passwall2/cbi/sortable.htm @@ -0,0 +1,159 @@ +<% +local api = self.api +local appname = self.appname or api.appname +local target_cfgname = self.target_cfgname +-%> + + + \ No newline at end of file diff --git a/luci-app-passwall2/luasrc/view/passwall2/cbi/tvalue.htm b/luci-app-passwall2/luasrc/view/passwall2/cbi/tvalue.htm new file mode 100644 index 00000000..8037b3d2 --- /dev/null +++ b/luci-app-passwall2/luasrc/view/passwall2/cbi/tvalue.htm @@ -0,0 +1,13 @@ +<%+cbi/valueheader%> + +<%+cbi/valuefooter%> diff --git a/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm b/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm index aca4d853..f993843d 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm @@ -2,46 +2,8 @@ local api = require "luci.passwall2.api" local appname = api.appname -%> - diff --git a/luci-app-passwall2/luasrc/view/passwall2/rule/rule_version.htm b/luci-app-passwall2/luasrc/view/passwall2/rule/rule_version.htm index f5fbce49..8dbed277 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/rule/rule_version.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/rule/rule_version.htm @@ -4,44 +4,12 @@ local fs = api.fs local has_old_geoip = fs.access("/tmp/bak_v2ray/geoip.dat") local has_old_geosite = fs.access("/tmp/bak_v2ray/geosite.dat") -%> -
    @@ -157,118 +125,5 @@ local has_old_geosite = fs.access("/tmp/bak_v2ray/geosite.dat") } ); } - - //分流规则添加拖拽排序 - document.addEventListener("DOMContentLoaded", function () { - function initSortableForTable() { - var section = document.getElementById("cbi-<%=api.appname%>-shunt_rules"); - if (!section) return; - - // === 插入 drag handle === - var rows = section.querySelectorAll("tr"); - rows.forEach(function(row) { - var btn = row.querySelector(".cbi-button-remove:last-of-type"); - if (!btn) return; - if (btn.nextElementSibling && btn.nextElementSibling.classList.contains("drag-handle")) return; - var handle = document.createElement("span"); - handle.className = "drag-handle center"; - handle.title = "<%:Drag to reorder%>"; - handle.innerHTML = "⠿"; - btn.after(handle); - }); - - // === 初始化 Sortable === - var table = section.getElementsByTagName("table")[0]; - if (!table) return; - var root = table.tBodies[0] || table; - if (root._sortable_initialized) return root._sortable_instance; - root._sortable_initialized = true; - - // 保存原始顺序 - root._origOrder = getCurrentOrder(root); - - try { - root._sortable_instance = Sortable.create(root, { - handle: ".drag-handle", - draggable: "tr.cbi-section-table-row", - animation: 150, - ghostClass: "dragging-row", - fallbackOnBody: true, - forceFallback: false, - swapThreshold: 0.65, - onEnd: function (evt) { - updateHiddenInput(root, section); - } - }); - return root._sortable_instance; - } catch (e) { - root._sortable_initialized = false; - console.error("Sortable init failed:", e); - } - } - - // 获取 table 当前行顺序 - function getCurrentOrder(root) { - var order = []; - var rows = root.querySelectorAll("tr.cbi-section-table-row"); - rows.forEach(function (tr) { - var id = tr.id || ""; - if (id.startsWith("cbi-<%=api.appname%>-")) - id = id.replace("cbi-<%=api.appname%>-", ""); - order.push(id); - }); - return order; - } - - // 拖拽完成后更新 hidden input - function updateHiddenInput(root, section) { - var newOrder = getCurrentOrder(root); - var changed = newOrder.join(" ") !== root._origOrder.join(" "); - var hiddenInput = section.querySelector('input[type="hidden"][id^="cbi.sts."]'); - if (hiddenInput) { - hiddenInput.value = changed ? newOrder.join(" ") : ""; - } - } - - // 隐藏18.06 up/down 列 - function hideSortColumn(section) { - var table = section.getElementsByTagName("table")[0]; - if(!table) return; - var rows = table.querySelectorAll("tr.cbi-section-table-row"); - if(!rows.length) return; - var colCount = rows[0].children.length, sortCol = -1; - for(var col=0; col= THRESHOLD) - setTimeout(initSortableForTable, 200); - else - requestAnimationFrame(tick); - } - tick(); - })(); - }); //]]> diff --git a/luci-app-passwall2/po/fa/passwall2.po b/luci-app-passwall2/po/fa/passwall2.po index 3c185094..cd8e2625 100644 --- a/luci-app-passwall2/po/fa/passwall2.po +++ b/luci-app-passwall2/po/fa/passwall2.po @@ -379,6 +379,9 @@ msgstr "توزیع بار" msgid "Node Addition Method" msgstr "روش افزودن گره" +msgid "Backup Node Addition Method" +msgstr "روش افزودن گره پشتیبان" + msgid "Manual" msgstr "دستی" @@ -1651,6 +1654,12 @@ msgstr "گواهی TLS (PEM)" msgid "Full certificate (chain), PEM format." msgstr "گواهی کامل (زنجیره‌ای)، فرمت PEM." +msgid "Fetch Manually" +msgstr "دریافت دستی" + +msgid "Fetch Failed" +msgstr "واکشی ناموفق" + msgid "ECH Config" msgstr "پیکربندی ECH" @@ -2400,4 +2409,7 @@ msgid "Gecko Packet Size (min)" msgstr "اندازه بسته Gecko (دقیقه)" msgid "Gecko Packet Size (max)" -msgstr "اندازه بسته Gecko (حداکثر)" \ No newline at end of file +msgstr "اندازه بسته Gecko (حداکثر)" + +msgid "valid time (hh:mm)" +msgstr "زمان معتبر (ساعت:میلی‌متر)" diff --git a/luci-app-passwall2/po/ru/passwall2.po b/luci-app-passwall2/po/ru/passwall2.po index 4bea8828..04797312 100644 --- a/luci-app-passwall2/po/ru/passwall2.po +++ b/luci-app-passwall2/po/ru/passwall2.po @@ -376,6 +376,9 @@ msgstr "Балансировка" msgid "Node Addition Method" msgstr "Способ добавления узлов" +msgid "Backup Node Addition Method" +msgstr "Метод добавления резервного узла" + msgid "Manual" msgstr "Вручную" @@ -1652,6 +1655,12 @@ msgstr "Сертификат TLS (PEM)" msgid "Full certificate (chain), PEM format." msgstr "Полный сертификат (цепочка), формат PEM." +msgid "Fetch Manually" +msgstr "Получить вручную" + +msgid "Fetch Failed" +msgstr "Не удалось получить данные." + msgid "ECH Config" msgstr "Конфигурация ECH" @@ -2399,3 +2408,6 @@ msgstr "Размер упаковки Gecko (мин)" msgid "Gecko Packet Size (max)" msgstr "Размер упаковки Gecko (макс)" + +msgid "valid time (hh:mm)" +msgstr "Время действия (чч:мм)" diff --git a/luci-app-passwall2/po/zh-cn/passwall2.po b/luci-app-passwall2/po/zh-cn/passwall2.po index da052b98..baad1ec2 100644 --- a/luci-app-passwall2/po/zh-cn/passwall2.po +++ b/luci-app-passwall2/po/zh-cn/passwall2.po @@ -376,6 +376,9 @@ msgstr "负载均衡" msgid "Node Addition Method" msgstr "节点添加方式" +msgid "Backup Node Addition Method" +msgstr "后备节点添加方式" + msgid "Manual" msgstr "手动" @@ -1643,6 +1646,12 @@ msgstr "TLS 证书(PEM)" msgid "Full certificate (chain), PEM format." msgstr "完整证书(链),PEM 格式。" +msgid "Fetch Manually" +msgstr "手动获取" + +msgid "Fetch Failed" +msgstr "获取失败" + msgid "ECH Config" msgstr "ECH 配置" @@ -2387,3 +2396,6 @@ msgstr "Gecko 包大小(最小)" msgid "Gecko Packet Size (max)" msgstr "Gecko 包大小(最大)" + +msgid "valid time (hh:mm)" +msgstr "有效时间(hh:mm)" diff --git a/luci-app-passwall2/po/zh-tw/passwall2.po b/luci-app-passwall2/po/zh-tw/passwall2.po index 9245e80e..c7b79250 100644 --- a/luci-app-passwall2/po/zh-tw/passwall2.po +++ b/luci-app-passwall2/po/zh-tw/passwall2.po @@ -376,6 +376,9 @@ msgstr "負載均衡" msgid "Node Addition Method" msgstr "節點新增方式" +msgid "Backup Node Addition Method" +msgstr "備用節點新增方式" + msgid "Manual" msgstr "手動" @@ -1643,6 +1646,12 @@ msgstr "TLS 憑證(PEM)" msgid "Full certificate (chain), PEM format." msgstr "完整憑證(鏈),PEM 格式。" +msgid "Fetch Manually" +msgstr "手動獲取" + +msgid "Fetch Failed" +msgstr "獲取失敗" + msgid "ECH Config" msgstr "ECH 配置" @@ -2393,3 +2402,6 @@ msgstr "Gecko 包大小(最小)" msgid "Gecko Packet Size (max)" msgstr "Gecko 包大小(最大)" + +msgid "valid time (hh:mm)" +msgstr "有效時間(hh:mm)" diff --git a/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2 b/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2 index 4b503027..6f7740fb 100644 --- a/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2 +++ b/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2 @@ -62,6 +62,10 @@ chmod +x /usr/share/passwall2/*.sh [ "$(uci -q get passwall2.@global_xray[0].sniffing)" == "1" ] && [ "$(uci -q get passwall2.@global_xray[0].route_only)" != "1" ] && uci -q set passwall2.@global_xray[0].sniffing_override_dest=1 uci -q delete passwall2.@global_xray[0].sniffing uci -q delete passwall2.@global_xray[0].route_only +frag_len=$(uci -q get passwall2.@global_xray[0].fragment_length) +[ -n "$frag_len" ] && uci -q set passwall2.@global_xray[0].fragment_lengths="$frag_len" && uci -q delete passwall2.@global_xray[0].fragment_length +frag_dly=$(uci -q get passwall2.@global_xray[0].fragment_delay) +[ -n "$frag_dly" ] && uci -q set passwall2.@global_xray[0].fragment_delays="$frag_dly" && uci -q delete passwall2.@global_xray[0].fragment_delay uci -q commit passwall2 sed -i "s#add_from#group#g" /etc/config/passwall2 2>/dev/null diff --git a/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh b/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh index 310a2070..54b8b23f 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh @@ -166,9 +166,8 @@ start() { retry_num=$(config_n_get $id autoswitch_retry_num 1) restore_switch=$(config_n_get $id autoswitch_restore_switch 0) probe_url=$(config_n_get $id autoswitch_probe_url "https://www.google.com/generate_204") - backup_node=$(config_n_get $id autoswitch_backup_node) + backup_node=$(lua_api "get_socks_backup_nodes(\"${id}\")") if [ -n "$backup_node" ]; then - backup_node=$(echo "$backup_node" | tr -s ' ' '\n' | uniq | tr -s '\n' ' ') backup_node_num=$(printf "%s\n" "$backup_node" | wc -w) if [ "$backup_node_num" -eq 1 ]; then [ "$main_node" = "$backup_node" ] && return diff --git a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua index 2ec0ca8d..c5f81cbf 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua +++ b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua @@ -1368,6 +1368,10 @@ local function processData(szType, content, add_mode, group, sub_cfg) result.reality_publicKey = params.pbk or nil result.reality_shortId = params.sid or nil end + if params.ech and params.ech ~= "" then + result.ech = "1" + result.ech_config = params.ech + end result.tls_pinSHA256 = params.pcs result.tls_CertByName = params.vcn local insecure = params.allowinsecure or params.allowInsecure or params.insecure diff --git a/luci-app-ssr-plus/Makefile b/luci-app-ssr-plus/Makefile index 561417eb..27790221 100644 --- a/luci-app-ssr-plus/Makefile +++ b/luci-app-ssr-plus/Makefile @@ -4,7 +4,7 @@ LUCI_TITLE:=luci-app-ssr-plus LUCI_PKGARCH:=all PKG_NAME:=luci-app-ssr-plus PKG_VERSION:=196 -PKG_RELEASE:=44 +PKG_RELEASE:=45 PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_Iptables_Transparent_Proxy \ diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua index 7795aed3..a36c25ac 100755 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua @@ -499,7 +499,10 @@ Xray.outbounds = { fingerprint = server.fingerprint, allowInsecure = (function() if server.tls_CertSha and server.tls_CertSha ~= "" then return nil end - return server.insecure == "1" + if os.date("%Y.%m.%d") < "2026.06.01" then + return server.insecure == "1" + end + return nil end)(), serverName = server.tls_host, certificates = server.certificate and { diff --git a/netdata/Makefile b/netdata/Makefile index f5afe529..70e13c61 100644 --- a/netdata/Makefile +++ b/netdata/Makefile @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=netdata -PKG_VERSION:=2.10.3 -PKG_RELEASE:=13 +PKG_VERSION:=2.10.4 +PKG_RELEASE:=14 PKG_MAINTAINER:=Josef Schlehofer , Daniel Engberg PKG_LICENSE:=GPL-3.0-or-later diff --git a/openwrt-alwaysonline/Makefile b/openwrt-alwaysonline/Makefile index 82cb429b..3b091611 100644 --- a/openwrt-alwaysonline/Makefile +++ b/openwrt-alwaysonline/Makefile @@ -8,12 +8,12 @@ PKG_NAME:=alwaysonline PKG_UPSTREAM_VERSION:=1.2.1 PKG_UPSTREAM_GITHASH:=206292ca68e4d6c81b215163a7bbd0cd2eb36860 PKG_VERSION:=$(PKG_UPSTREAM_VERSION)~$(call version_abbrev,$(PKG_UPSTREAM_GITHASH)) -PKG_RELEASE:=8 +PKG_RELEASE:=9 UCI_VERSION:=0.2025.01.25 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/Jamesits/alwaysonline.git -PKG_SOURCE_VERSION:=0b7050013224cea1e9d4843817f9baa12b0bfe19 +PKG_SOURCE_VERSION:=e5f20a72c8cf6a9ce0c5901e84dff18e96df5812 PKG_MIRROR_HASH:=skip PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION) diff --git a/tcptraceroute/Makefile b/tcptraceroute/Makefile index dad0bf8f..6a796c0c 100644 --- a/tcptraceroute/Makefile +++ b/tcptraceroute/Makefile @@ -10,12 +10,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=tcptraceroute PKG_REALVERSION:=1.5beta7 PKG_VERSION:=1.5_beta7 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_VERSION:=tcptraceroute-$(PKG_REALVERSION) PKG_SOURCE_URL:=https://github.com/mct/tcptraceroute.git + include $(INCLUDE_DIR)/package.mk define Package/tcptraceroute diff --git a/xray-core/Makefile b/xray-core/Makefile index 88f6d844..271099ea 100644 --- a/xray-core/Makefile +++ b/xray-core/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=Xray-core PKG_VERSION:=26.7.11 -PKG_RELEASE:=19 +PKG_RELEASE:=20 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/XTLS/Xray-core/tar.gz/v$(PKG_VERSION)? diff --git a/xray-core/patches/AllowInsecure.patch b/xray-core/patches/AllowInsecure.patch deleted file mode 100644 index b43b5618..00000000 --- a/xray-core/patches/AllowInsecure.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- a/infra/conf/transport_internet.go -+++ b/infra/conf/transport_internet.go -@@ -14,7 +14,6 @@ import ( - "strconv" - "strings" - "syscall" -- "time" - - "github.com/xtls/xray-core/common" - "github.com/xtls/xray-core/common/errors" -@@ -699,12 +698,7 @@ func (c *TLSConfig) Build() (proto.Message, error) { - config.MasterKeyLog = c.MasterKeyLog - - if c.AllowInsecure { -- if time.Now().After(time.Date(2026, 6, 1, 0, 0, 0, 0, time.UTC)) { -- return nil, errors.PrintRemovedFeatureError(`"allowInsecure"`, `"pinnedPeerCertSha256"`) -- } else { -- errors.LogWarning(context.Background(), `"allowInsecure" will be removed automatically after 2026-06-01, please use "pinnedPeerCertSha256"(pcs) and "verifyPeerCertByName"(vcn) instead, PLEASE CONTACT YOUR SERVICE PROVIDER (AIRPORT)`) -- config.AllowInsecure = true -- } -+ config.AllowInsecure = true - } - if c.PinnedPeerCertSha256 != "" { - for v := range strings.SplitSeq(c.PinnedPeerCertSha256, ",") { diff --git a/z8102/Makefile b/z8102/Makefile index 238edc0a..3202f24b 100644 --- a/z8102/Makefile +++ b/z8102/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=z8102 PKG_VERSION:=0.2 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_MAINTAINER:=Yannick Chabanois diff --git a/z8102/files/etc/init.d/z8102 b/z8102/files/etc/init.d/z8102 index 8a2ca411..e0b60f08 100755 --- a/z8102/files/etc/init.d/z8102 +++ b/z8102/files/etc/init.d/z8102 @@ -12,13 +12,15 @@ log() { modem_reset() { modemnb=$1 - # sim - if [ -e /sys/class/gpio/sim${modemnb}/value ]; then - echo "0" > /sys/class/gpio/sim${modemnb}/value - elif [ -f /usr/bin/gpiofind ]; then - gpioset `gpiofind "sim=${modemnb}"`=0 - else - gpioset -t0 sim${modemnb}=0 + if [ -z "$(cat /etc/board.json | grep z8802)" ]; then + # sim + if [ -e /sys/class/gpio/sim${modemnb}/value ]; then + echo "0" > /sys/class/gpio/sim${modemnb}/value + elif [ -f /usr/bin/gpiofind ]; then + gpioset `gpiofind "sim=${modemnb}"`=0 + else + gpioset -t0 sim${modemnb}=0 + fi fi # stop modem