diff --git a/haproxy/Makefile b/haproxy/Makefile index 6e13923b6..6d20cea13 100644 --- a/haproxy/Makefile +++ b/haproxy/Makefile @@ -10,12 +10,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=haproxy -PKG_VERSION:=3.0.5 +PKG_VERSION:=3.0.6 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://www.haproxy.org/download/3.0/src -PKG_HASH:=ae38221e85aeba038a725efbef5bfe5e76671ba7959e5eb74c39fd079e5d002e +PKG_HASH:=cf1bf58b5bc79c48db7b01667596ffd98343adb29a41096f075f00a8f90a7335 PKG_MAINTAINER:=Thomas Heil , \ Christian Lachner diff --git a/haproxy/get-latest-patches.sh b/haproxy/get-latest-patches.sh index 734196ce3..f649b1ed7 100755 --- a/haproxy/get-latest-patches.sh +++ b/haproxy/get-latest-patches.sh @@ -1,7 +1,7 @@ #!/bin/sh CLONEURL=https://git.haproxy.org/git/haproxy-3.0.git -BASE_TAG=v3.0.5 +BASE_TAG=v3.0.6 TMP_REPODIR=tmprepo PATCHESDIR=patches diff --git a/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js b/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js index aa1c1780d..146e9e7f6 100644 --- a/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js +++ b/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js @@ -81,6 +81,7 @@ return baseclass.extend({ ], outbound_type: [ + ['direct', _('DIRECT')], ['http', _('HTTP')], ['socks5', _('SOCKS5')], ['ss', _('Shadowsocks')], @@ -89,7 +90,7 @@ return baseclass.extend({ ['vmess', _('VMess')], ['vless', _('VLESS')], ['trojan', _('Trojan')], - ['hysteria', _('Hysteria')], + //['hysteria', _('Hysteria')], ['hysteria2', _('Hysteria2')], ['tuic', _('TUIC')], ['wireguard', _('WireGuard')], @@ -652,6 +653,8 @@ return baseclass.extend({ return true; }, validateAuthPassword: function(section_id, value) { + if (!value) + return true; if (!value.match(/^[^:]+$/)) return _('Expecting: %s').format('[^:]+'); @@ -703,6 +706,25 @@ return baseclass.extend({ return true; }, + validateShadowsocksPassword: function(self, encmode, section_id, value) { + var length = self.shadowsocks_cipher_length[encmode]; + if (typeof length !== 'undefined') { + length = Math.ceil(length/3)*4; + if (encmode.match(/^2022-/)) { + if (value.length !== length || !value.match(/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/) || value[length-1] !== '=') + return _('Expecting: %s').format(_('valid base64 key with %d characters').format(length)); + } else { + if (length === 0 && !value) + return _('Expecting: %s').format(_('non-empty value')); + if (length !== 0 && value.length !== length) + return _('Expecting: %s').format(_('valid key length with %d characters').format(length)); + } + } else + return true; + + return true; + }, + validateTimeDuration: function(section_id, value) { if (!value) return true; 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 62084ddcc..2aeeb78ff 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 @@ -37,20 +37,672 @@ return view.extend({ ss.renderSectionAdd = L.bind(hm.renderSectionAdd, ss, prefmt, true); ss.handleAdd = L.bind(hm.handleAdd, ss, prefmt); - so = ss.option(form.Value, 'label', _('Label')); + ss.tab('field_general', _('General fields')); + ss.tab('field_tls', _('TLS fields')); + ss.tab('field_transport', _('Transport fields')); + ss.tab('field_multiplex', _('Multiplex fields')); + ss.tab('field_dial', _('Dial fields')); + + so = ss.taboption('field_general', form.Value, 'label', _('Label')); so.load = L.bind(hm.loadDefaultLabel, so); so.validate = L.bind(hm.validateUniqueValue, so); so.modalonly = true; - so = ss.option(form.Flag, 'enabled', _('Enable')); + so = ss.taboption('field_general', form.Flag, 'enabled', _('Enable')); so.default = so.enabled; so.editable = true; - so = ss.option(form.ListValue, 'type', _('Type')); + so = ss.taboption('field_general', form.ListValue, 'type', _('Type')); so.default = hm.outbound_type[0][0]; hm.outbound_type.forEach((res) => { so.value.apply(so, res); }) + + so = ss.taboption('field_general', form.Value, 'server', _('Server address')); + so.datatype = 'host'; + so.rmempty = false; + so.depends({type: 'direct', '!reverse': true}); + + so = ss.taboption('field_general', form.Value, 'port', _('Port')); + so.datatype = 'port'; + so.rmempty = false; + so.depends({type: 'direct', '!reverse': true}); + + /* HTTP / SOCKS fields */ + /* hm.validateAuth */ + so = ss.taboption('field_general', form.Value, 'username', _('Username')); + so.validate = L.bind(hm.validateAuthUsername, so); + so.depends({type: /^(http|socks5|ssh)$/}); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'password', _('Password')); + so.password = true; + so.validate = L.bind(hm.validateAuthPassword, so); + so.depends({type: /^(http|socks5|trojan|hysteria2|tuic|ssh)$/}); + so.modalonly = true; + + so = ss.taboption('field_general', form.TextValue, 'headers', _('HTTP header')); + so.renderWidget = function(/* ... */) { + var frameEl = form.TextValue.prototype.renderWidget.apply(this, arguments); + + frameEl.firstChild.style.fontFamily = hm.monospacefonts.join(','); + + return frameEl; + } + so.placeholder = '{\n "User-Agent": [\n "Clash/v1.18.0",\n "mihomo/1.18.3"\n ],\n "Authorization": [\n //"token 1231231"\n ]\n}'; + so.validate = L.bind(hm.validateJson, so); + so.depends('type', 'http'); + so.modalonly = true; + + /* Hysteria / Hysteria2 fields */ + so = ss.taboption('field_general', form.DynamicList, 'hysteria_ports', _('Ports pool')); + so.datatype = 'or(port, portrange)'; + so.depends({type: /^(hysteria|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')); + so.depends('type', 'hysteria2'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'hysteria_obfs_password', _('Obfuscate password'), + _('Enabling obfuscation will make the server incompatible with standard QUIC connections, losing the ability to masquerade with HTTP/3.')); + so.password = true; + so.rmempty = false; + so.depends('type', 'hysteria'); + so.depends({type: 'hysteria2', hysteria_obfs_type: /.+/}); + so.modalonly = true; + + /* SSH fields */ + so = ss.taboption('field_general', form.TextValue, 'ssh_priv_key', _('Priv-key')); + so.depends('type', 'ssh'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'ssh_priv_key_passphrase', _('Priv-key passphrase')); + so.password = true; + so.depends({type: 'ssh', ssh_priv_key: /.+/}); + so.modalonly = true; + + so = ss.taboption('field_general', form.DynamicList, 'ssh_host_key_algorithms', _('Host-key algorithms')); + so.placeholder = 'rsa'; + so.depends('type', 'ssh'); + so.modalonly = true; + + so = ss.taboption('field_general', form.DynamicList, 'ssh_host_key', _('Host-key')); + so.placeholder = 'ssh-rsa AAAAB3NzaC1yc2EAA...'; + so.depends({type: 'ssh', ssh_host_key_algorithms: /.+/}); + so.modalonly = true; + + /* Shadowsocks fields */ + so = ss.taboption('field_general', form.ListValue, 'shadowsocks_chipher', _('Chipher')); + so.default = hm.shadowsocks_cipher_methods[1][0]; + hm.shadowsocks_cipher_methods.forEach((res) => { + so.value.apply(so, res); + }) + so.depends('type', 'ss'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'shadowsocks_password', _('Password')); + so.password = true; + so.validate = function(section_id, value) { + var encmode = this.section.getOption('shadowsocks_chipher').formvalue(section_id); + return hm.validateShadowsocksPassword.call(this, hm, encmode, section_id, value); + } + so.depends({type: 'ss', shadowsocks_chipher: /.+/}); + so.modalonly = true; + + /* Snell fields */ + so = ss.taboption('field_general', form.Value, 'snell_psk', _('Pre-shared key')); + so.password = true; + so.rmempty = false; + so.validate = L.bind(hm.validateAuthPassword, so); + so.depends('type', 'snell'); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'snell_version', _('Version')); + so.value('1', _('v1')); + so.value('2', _('v2')); + so.value('3', _('v3')); + so.default = '3'; + so.depends('type', 'snell'); + so.modalonly = true; + + /* TUIC fields */ + so = ss.taboption('field_general', form.Value, 'uuid', _('UUID')); + so.rmempty = false; + so.validate = L.bind(hm.validateUUID, so); + so.depends('type', 'tuic'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'tuic_ip', _('IP override'), + _('Override the IP address of the server that DNS response.')); + so.datatype = 'ipaddr(1)'; + so.depends('type', 'tuic'); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'tuic_congestion_controller', _('Congestion controller'), + _('QUIC congestion controller.')); + so.default = 'cubic'; + so.value('cubic', _('cubic')); + so.value('new_reno', _('new_reno')); + so.value('bbr', _('bbr')); + so.depends('type', 'tuic'); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'tuic_udp_relay_mode', _('UDP relay mode'), + _('UDP packet relay mode.')); + so.value('', _('Default')); + so.value('native', _('Native')); + so.value('quic', _('QUIC')); + so.depends({type: 'tuic', tuic_udp_over_stream: '0'}); + so.modalonly = true; + + so = ss.taboption('field_general', form.Flag, 'tuic_udp_over_stream', _('UDP over stream'), + _('This is the TUIC port of the SUoT protocol, designed to provide a QUIC stream based UDP relay mode that TUIC does not provide.')); + so.default = so.disabled; + so.depends('type', 'tuic'); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'tuic_udp_over_stream_version', _('UDP over stream version')); + so.value('1', _('v1')); + so.depends({type: 'tuic', tuic_udp_over_stream: '1'}); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'tuic_max_udp_relay_packet_size', _('Max UDP relay packet size')); + so.datatype = 'uinteger'; + so.placeholder = '1500'; + so.depends('type', 'tuic'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Flag, 'tuic_reduce_rtt', _('Enable 0-RTT handshake'), + _('Enable 0-RTT QUIC connection handshake on the client side. This is not impacting much on the performance, as the protocol is fully multiplexed.
' + + 'Disabling this is highly recommended, as it is vulnerable to replay attacks.')); + so.default = so.disabled; + so.depends('type', 'tuic'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'tuic_heartbeat', _('Heartbeat interval'), + _('In millisecond.')); + so.datatype = 'uinteger'; + so.placeholder = '10000'; + so.depends('type', 'tuic'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'tuic_request_timeout', _('Request timeout'), + _('In millisecond.')); + so.datatype = 'uinteger'; + so.placeholder = '8000'; + so.depends('type', 'tuic'); + so.modalonly = true; + + /* Trojan fields */ + so = ss.taboption('field_general', form.Flag, 'trojan_ss_enabled', _('Shadowsocks encrypt')); + so.default = so.disabled; + so.depends('type', 'trojan'); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'trojan_ss_chipher', _('Shadowsocks chipher')); + so.value('aes-128-gcm', _('aes-128-gcm')); + so.value('aes-256-gcm', _('aes-256-gcm')); + so.value('chacha20-ietf-poly1305', _('chacha20-ietf-poly1305')); + so.depends({type: 'trojan', trojan_ss_enabled: '1'}); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'trojan_ss_password', _('Shadowsocks password')); + so.password = true; + so.validate = function(section_id, value) { + var encmode = this.section.getOption('trojan_ss_chipher').formvalue(section_id); + return hm.validateShadowsocksPassword.call(this, hm, encmode, section_id, value); + } + so.depends({type: 'trojan', trojan_ss_enabled: '1'}); + so.modalonly = true; + + /* VMess / VLESS fields */ + so = ss.taboption('field_general', form.Value, 'vmess_uuid', _('UUID')); + so.rmempty = false; + so.validate = L.bind(hm.validateUUID, so); + so.depends({type: /^(vmess|vless)$/}); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'vless_flow', _('Flow')); + so.value('', _('None')); + so.value('xtls-rprx-vision'); + so.depends('type', 'vless'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'vmess_alterid', _('Alter ID')); + so.datatype = 'uinteger'; + so.default = '0'; + so.depends('type', 'vmess'); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'vmess_chipher', _('Chipher')); + so.default = 'auto'; + so.value('auto', _('auto')); + so.value('none', _('none')); + so.value('zero', _('zero')); + so.value('aes-128-gcm', _('aes-128-gcm')); + so.value('chacha20-poly1305', _('chacha20-poly1305')); + so.depends('type', 'vmess'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Flag, 'vmess_global_padding', _('Global padding'), + _('Protocol parameter. Will waste traffic randomly if enabled (enabled by default in v2ray and cannot be disabled).')); + so.default = so.enabled; + so.depends('type', 'vmess'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Flag, 'vmess_authenticated_length', _('Authenticated length'), + _('Protocol parameter. Enable length block encryption.')); + so.default = so.disabled; + so.depends('type', 'vmess'); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'vmess_packet_encoding', _('Packet encoding')); + so.value('', _('none')); + so.value('packetaddr', _('packet addr (v2ray-core v5+)')); + so.value('xudp', _('Xudp (Xray-core)')); + so.depends({type: /^(vmess|vless)$/}); + so.modalonly = true; + + /* Plugin fields */ + so = ss.taboption('field_general', form.ListValue, 'plugin', _('Plugin')); + so.value('', _('none')); + so.value('obfs', _('obfs-simple')); + //so.value('v2ray-plugin', _('v2ray-plugin')); + so.value('shadow-tls', _('shadow-tls')); + so.value('restls', _('restls')); + so.depends('type', 'ss'); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'plugin_opts_obfsmode', _('Plugin: ') + _('Obfs Mode')); + so.value('http', _('HTTP')); + so.value('tls', _('TLS')); + so.depends('plugin', 'obfs'); + so.depends('type', 'snell'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'plugin_opts_host', _('Plugin: ') + _('Host that supports TLS 1.3')); + so.placeholder = 'cloud.tencent.com'; + so.rmempty = false; + so.depends({plugin: /^(obfs|v2ray-plugin|shadow-tls|restls)$/}); + so.depends('type', 'snell'); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'plugin_opts_thetlspassword', _('Plugin: ') + _('Password')); + so.password = true; + so.rmempty = false; + so.depends({plugin: /^(shadow-tls|restls)$/}); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'plugin_opts_shadowtls_version', _('Plugin: ') + _('Version')); + so.value('1', _('v1')); + so.value('2', _('v2')); + so.value('3', _('v3')); + so.default = '2'; + so.depends({plugin: 'shadow-tls'}); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'plugin_opts_restls_versionhint', _('Plugin: ') + _('Version hint')); + so.default = 'tls13'; + so.rmempty = false; + so.depends({plugin: 'restls'}); + so.modalonly = true; + + so = ss.taboption('field_general', form.Value, 'plugin_opts_restls_script', _('Plugin: ') + _('Restls script')); + so.default = '300?100<1,400~100,350~100,600~100,300~200,300~100'; + so.rmempty = false; + so.depends({plugin: 'restls'}); + so.modalonly = true; + + /* Extra fields */ + so = ss.taboption('field_general', form.Flag, 'udp', _('UDP')); + so.default = so.disabled; + so.depends({type: /^(direct|socks5|ss|vmess|vless|trojan|wireguard)$/}); + so.modalonly = true; + + so = ss.taboption('field_general', form.Flag, 'uot', _('UoT'), + _('Enable the SUoT protocol, requires server support. Conflict with Multiplex.')); + so.default = so.disabled; + so.depends('type', 'ss'); + so.modalonly = true; + + so = ss.taboption('field_general', form.ListValue, 'uot_version', _('SUoT version')); + so.value('1', _('v1')); + so.value('2', _('v2')); + so.default = '2'; + so.depends('uot', '1'); + so.modalonly = true; + + /* TLS fields */ + so = ss.taboption('field_general', form.Flag, 'tls', _('TLS')); + so.default = so.disabled; + so.validate = function(section_id, value) { + var type = this.section.getOption('type').formvalue(section_id); + var tls = this.section.getUIElement(section_id, 'tls').node.querySelector('input'); + var tls_alpn = this.section.getUIElement(section_id, 'tls_alpn'); + + // Force enabled + if (['trojan', 'hysteria', 'hysteria2', 'tuic'].includes(type)) { + tls.checked = true; + tls.disabled = true; + } else { + tls.disabled = null; + } + + // Default alpn + if (!`${tls_alpn.getValue()}`) { + let def_alpn; + + switch (type) { + case 'hysteria': + case 'hysteria2': + case 'tuic': + def_alpn = ['h3']; + break; + case 'vmess': + case 'vless': + case 'trojan': + def_alpn = ['h2', 'http/1.1']; + break; + default: + def_alpn = []; + } + + tls_alpn.setValue(def_alpn); + } + + return true; + } + so.depends({type: /^(http|socks5|vmess|vless|trojan|hysteria|hysteria2|tuic)$/}); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Flag, 'tls_disable_sni', _('Disable SNI'), + _('Donot send server name in ClientHello.')); + so.default = so.disabled; + so.depends({tls: '1', type: /^(tuic)$/}); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Value, 'tls_sni', _('TLS SNI'), + _('Used to verify the hostname on the returned certificates.')); + so.depends({tls: '1', type: /^(http|vmess|vless|trojan|hysteria|hysteria2)$/}); + so.depends({tls: '1', tls_disable_sni: '0', type: /^(tuic)$/}); + so.modalonly = true; + + so = ss.taboption('field_tls', form.DynamicList, 'tls_alpn', _('TLS ALPN'), + _('List of supported application level protocols, in order of preference.')); + so.depends({tls: '1', type: /^(vmess|vless|trojan|hysteria|hysteria2|tuic)$/}); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Value, 'tls_fingerprint', _('Cert fingerprint'), + _('Certificate fingerprint. Used to implement SSL Pinning and prevent MitM.')); + so.validate = function(section_id, value) { + if (!value) + return true; + if (!((value.length === 64) && (value.match(/^[0-9a-fA-F]+$/)))) + return _('Expecting: %s').format(_('valid SHA256 string with %d characters').format(64)); + + return true; + } + so.depends({tls: '1', type: /^(http|socks5|vmess|vless|trojan|hysteria|hysteria2)$/}); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Flag, 'tls_skip_cert_verify', _('Skip cert verify'), + _('Donot verifying server certificate.') + + '
' + + _('This is DANGEROUS, your traffic is almost like PLAIN TEXT! Use at your own risk!')); + so.default = so.disabled; + so.depends({tls: '1', type: /^(http|socks5|vmess|vless|trojan|hysteria|hysteria2|tuic)$/}); + so.modalonly = true; + + // uTLS fields + so = ss.taboption('field_tls', form.ListValue, 'tls_client_fingerprint', _('Client fingerprint')); + so.default = hm.tls_client_fingerprints[0][0]; + hm.tls_client_fingerprints.forEach((res) => { + so.value.apply(so, res); + }) + so.depends({tls: '1', type: /^(vmess|vless|trojan)$/}); + so.depends({type: 'ss', plugin: /^(shadow-tls|restls)$/}); + 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.modalonly = true; + + so = ss.taboption('field_tls', form.Value, 'tls_reality_public_key', _('REALITY public key')); + so.rmempty = false; + so.depends('tls_reality', '1'); + so.modalonly = true; + + so = ss.taboption('field_tls', form.Value, 'tls_reality_short_id', _('REALITY short ID')); + so.rmempty = false; + so.depends('tls_reality', '1'); + so.modalonly = true; + + /* Transport fields */ + so = ss.taboption('field_general', form.Flag, 'transport_enabled', _('Transport')); + so.default = so.disabled; + so.depends({type: /^(vmess|vless|trojan)$/}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.ListValue, 'transport_type', _('Transport type')); + so.default = 'http'; + so.value('http', _('HTTP')); + so.value('h2', _('HTTPUpgrade')); + so.value('grpc', _('gRPC')); + so.value('ws', _('WebSocket')); + so.validate = function(section_id, value) { + var type = this.section.getOption('type').formvalue(section_id); + + switch (type) { + case 'vmess': + case 'vless': + if (!['http', 'h2', 'grpc', 'ws'].includes(value)) + return _('Expecting: only support %s.').format(_('HTTP') + + ' / ' + _('HTTPUpgrade') + + ' / ' + _('gRPC') + + ' / ' + _('WebSocket')); + break; + case 'trojan': + if (!['grpc', 'ws'].includes(value)) + return _('Expecting: only support %s.').format(_('gRPC') + + ' / ' + _('WebSocket')); + break; + default: + break; + } + + return true; + } + so.depends('transport_enabled', '1'); + so.modalonly = true; + + so = ss.taboption('field_transport', form.DynamicList, 'transport_hosts', _('Server hostname')); + so.datatype = 'list(hostname)'; + so.placeholder = 'example.com'; + so.depends({transport_enabled: '1', transport_type: 'h2'}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.Value, 'transport_http_method', _('HTTP request method')); + so.value('GET', _('GET')); + so.value('POST', _('POST')); + so.value('PUT', _('PUT')); + so.default = 'GET'; + so.rmempty = false; + so.depends({transport_enabled: '1', transport_type: 'http'}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.DynamicList, 'transport_paths', _('Request path')); + so.placeholder = '/video'; + so.default = '/'; + so.rmempty = false; + so.depends({transport_enabled: '1', transport_type: 'http'}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.Value, 'transport_path', _('Request path')); + so.placeholder = '/'; + so.default = '/'; + so.rmempty = false; + so.depends({transport_enabled: '1', transport_type: /^(h2|ws)$/}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.TextValue, 'transport_http_headers', _('HTTP header')); + so.renderWidget = function(/* ... */) { + var frameEl = form.TextValue.prototype.renderWidget.apply(this, arguments); + + frameEl.firstChild.style.fontFamily = hm.monospacefonts.join(','); + + return frameEl; + } + so.placeholder = '{\n "Host": "example.com",\n "Connection": [\n "keep-alive"\n ]\n}'; + so.validate = L.bind(hm.validateJson, so); + so.depends({transport_enabled: '1', transport_type: /^(http|ws)$/}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.Value, 'transport_grpc_servicename', _('gRPC service name')); + so.depends({transport_enabled: '1', transport_type: 'grpc'}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.Value, 'transport_ws_max_early_data', _('Max Early Data'), + _('Early Data first packet length limit.')); + so.datatype = 'uinteger'; + so.value('2048'); + so.depends({transport_enabled: '1', transport_type: 'ws'}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.Value, 'transport_ws_early_data_header', _('Early Data header name')); + so.value('Sec-WebSocket-Protocol'); + so.depends({transport_enabled: '1', transport_type: 'ws'}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.Flag, 'transport_ws_v2ray_http_upgrade', _('V2ray HTTPUpgrade')); + so.default = so.disabled; + so.depends({transport_enabled: '1', transport_type: 'ws'}); + so.modalonly = true; + + so = ss.taboption('field_transport', form.Flag, 'transport_ws_v2ray_http_upgrade_fast_open', _('V2ray HTTPUpgrade fast open')); + so.default = so.disabled; + so.depends({transport_enabled: '1', transport_type: 'ws', transport_ws_v2ray_http_upgrade: '1'}); + so.modalonly = true; + + /* Multiplex fields */ // TCP protocol only + so = ss.taboption('field_general', form.Flag, 'smux_enabled', _('Multiplex')); + so.default = so.disabled; + so.depends({type: /^(vmess|vless|trojan)$/}); + so.depends({type: 'ss', uot: '0'}); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.ListValue, 'smux_protocol', _('Protocol')); + so.default = 'h2mux'; + so.value('smux', _('smux')); + so.value('yamux', _('yamux')); + so.value('h2mux', _('h2mux')); + so.depends('smux_enabled', '1'); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.Value, 'smux_max_connections', _('Maximum connections')); + so.datatype = 'uinteger'; + so.placeholder = '4'; + so.depends('smux_enabled', '1'); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.Value, 'smux_min_streams', _('Minimum streams'), + _('Minimum multiplexed streams in a connection before opening a new connection.')); + so.datatype = 'uinteger'; + so.placeholder = '4'; + so.depends('smux_enabled', '1'); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.Value, 'smux_max_streams', _('Maximum streams'), + _('Maximum multiplexed streams in a connection before opening a new connection.
' + + 'Conflict with %s and %s.') + .format(_('Maximum connections'), _('Minimum streams'))); + so.datatype = 'uinteger'; + so.placeholder = '0'; + so.depends({smux_enabled: '1', smux_max_connections: '', smux_min_streams: ''}); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.Flag, 'smux_padding', _('Enable padding')); + so.default = so.disabled; + so.depends('smux_enabled', '1'); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.Flag, 'smux_only_tcp', _('TCP only'), + _('Enable multiplexing only for TCP.')); + so.default = so.disabled; + so.depends('smux_enabled', '1'); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.Flag, 'smux_statistic', _('Enable statistic'), + _('Show connections in the dashboard for breaking connections easier.')); + so.default = so.disabled; + so.depends('smux_enabled', '1'); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.Flag, 'smux_brutal', _('Enable TCP Brutal'), + _('Enable TCP Brutal congestion control algorithm')); + so.default = so.disabled; + so.depends('smux_enabled', '1'); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.Value, 'smux_brutal_up', _('Upload bandwidth'), + _('Upload bandwidth in Mbps.')); + so.datatype = 'uinteger'; + so.depends('smux_brutal', '1'); + so.modalonly = true; + + so = ss.taboption('field_multiplex', form.Value, 'smux_brutal_down', _('Download bandwidth'), + _('Download bandwidth in Mbps.')); + so.datatype = 'uinteger'; + so.depends('smux_brutal', '1'); + so.modalonly = true; + + /* Dial fields */ + so = ss.taboption('field_dial', form.Flag, 'tfo', _('TFO')); + so.default = so.disabled; + so.modalonly = true; + + so = ss.taboption('field_dial', form.Flag, 'mptcp', _('mpTCP')); + so.default = so.disabled; + so.modalonly = true; + + // dev: Features under development + so = ss.taboption('field_dial', form.Value, 'dialer_proxy', _('dialer-proxy')); + so.readonly = true; + so.modalonly = true; + + so = ss.taboption('field_dial', widgets.DeviceSelect, 'interface_name', _('Bind interface'), + _('Bind outbound interface.
') + + _('Priority: Proxy Node > Proxy Group > Global.')); + so.multiple = false; + so.noaliases = true; + so.modalonly = true; + + so = ss.taboption('field_dial', form.Value, 'routing_mark', _('Routing mark'), + _('Priority: Proxy Node > Proxy Group > Global.')); + so.datatype = 'uinteger'; + so.modalonly = true; + + so = ss.taboption('field_dial', form.ListValue, 'ip_version', _('IP version')); + so.default = hm.ip_version[0][0]; + hm.ip_version.forEach((res) => { + so.value.apply(so, res); + }) + so.modalonly = true; /* Proxy Node END */ /* Provider START */ @@ -210,7 +862,8 @@ return view.extend({ so.default = so.enabled; so.modalonly = true; - so = ss.taboption('field_override', form.Flag, 'override_uot', _('UoT')); + so = ss.taboption('field_override', form.Flag, 'override_uot', _('UoT'), + _('Enable the SUoT protocol, requires server support. Conflict with Multiplex.')); so.default = so.disabled; so.modalonly = true; @@ -224,7 +877,10 @@ return view.extend({ so.datatype = 'uinteger'; so.modalonly = true; - so = ss.taboption('field_override', form.Flag, 'override_skip_cert_verify', _('skip-cert-verify')); + so = ss.taboption('field_override', form.Flag, 'override_skip_cert_verify', _('Skip cert verify'), + _('Donot verifying server certificate.') + + '
' + + _('This is DANGEROUS, your traffic is almost like PLAIN TEXT! Use at your own risk!')); so.default = so.disabled; so.modalonly = true; @@ -245,7 +901,7 @@ return view.extend({ so.datatype = 'uinteger'; so.modalonly = true; - so = ss.taboption('field_override', form.ListValue, 'override_ip_version', _('ip-version')); + so = ss.taboption('field_override', form.ListValue, 'override_ip_version', _('IP version')); so.default = hm.ip_version[0][0]; hm.ip_version.forEach((res) => { so.value.apply(so, res); diff --git a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/server.js b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/server.js index cacdc9b7f..af539fab5 100644 --- a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/server.js +++ b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/server.js @@ -148,8 +148,6 @@ return view.extend({ return node; } - o.validate = function(section_id, value) { - } o.validate = L.bind(hm.validateAuthPassword, o); o.rmempty = false; o.depends({type: /^(http|socks|mixed|hysteria2)$/, username: /.+/}); @@ -229,21 +227,8 @@ return view.extend({ return node; } o.validate = function(section_id, value) { - var encmode = this.section.getOption('shadowsocks_chipher').formvalue(section_id); - var length = hm.shadowsocks_cipher_length[encmode]; - if (length) { - length = Math.ceil(length/3)*4; - if (encmode.match(/^2022-/)) { - if (value.length !== length || !value.match(/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/) || value[length-1] !== '=') - return _('Expecting: %s').format(_('valid base64 key with %d characters').format(length)); - } else { - if (length !== 0 && value.length !== length) - return _('Expecting: %s').format(_('valid key length with %d characters').format(length)); - } - } else - return true; - - return true; + var encmode = this.section.getOption('shadowsocks_chipher').formvalue(section_id); + return hm.validateShadowsocksPassword.call(this, hm, encmode, section_id, value); } o.depends({type: 'shadowsocks', shadowsocks_chipher: /.+/}); o.modalonly = true; @@ -275,6 +260,12 @@ return view.extend({ o.depends('type', 'tuic'); o.modalonly = true; + o = s.option(form.Value, 'tuic_max_udp_relay_packet_size', _('Max UDP relay packet size')); + o.datatype = 'uinteger'; + o.default = '1500'; + o.depends('type', 'tuic'); + o.modalonly = true; + o = s.option(form.Value, 'tuic_max_idle_time', _('Idle timeout'), _('In seconds.')); o.default = '15000'; @@ -289,12 +280,6 @@ return view.extend({ o.depends('type', 'tuic'); o.modalonly = true; - o = s.option(form.Value, 'tuic_max_udp_relay_packet_size', _('Max UDP relay packet size')); - o.datatype = 'uinteger'; - o.default = '1500'; - o.depends('type', 'tuic'); - o.modalonly = true; - /* VMess fields */ o = s.option(form.Value, 'vmess_uuid', _('UUID')); o.renderWidget = function() { diff --git a/luci-app-fchomo/po/templates/fchomo.pot b/luci-app-fchomo/po/templates/fchomo.pot index c738dbaf8..323c686fd 100644 --- a/luci-app-fchomo/po/templates/fchomo.pot +++ b/luci-app-fchomo/po/templates/fchomo.pot @@ -5,18 +5,19 @@ msgstr "Content-Type: text/plain; charset=UTF-8" msgid "%s log" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:414 -#: htdocs/luci-static/resources/fchomo.js:427 -#: htdocs/luci-static/resources/fchomo.js:440 -#: htdocs/luci-static/resources/view/fchomo/client.js:256 -#: htdocs/luci-static/resources/view/fchomo/client.js:358 -#: htdocs/luci-static/resources/view/fchomo/client.js:372 -#: htdocs/luci-static/resources/view/fchomo/client.js:867 -#: htdocs/luci-static/resources/view/fchomo/global.js:456 +#: htdocs/luci-static/resources/fchomo.js:417 +#: htdocs/luci-static/resources/fchomo.js:430 +#: htdocs/luci-static/resources/fchomo.js:443 +#: htdocs/luci-static/resources/fchomo.js:457 +#: htdocs/luci-static/resources/view/fchomo/client.js:282 +#: htdocs/luci-static/resources/view/fchomo/client.js:496 +#: htdocs/luci-static/resources/view/fchomo/client.js:510 +#: htdocs/luci-static/resources/view/fchomo/client.js:978 +#: htdocs/luci-static/resources/view/fchomo/global.js:459 msgid "-- Please choose --" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:692 +#: htdocs/luci-static/resources/fchomo.js:733 msgid "/^(\\d+)(s|m|h|d)?$/" msgstr "" @@ -24,61 +25,65 @@ msgstr "" msgid "163Music" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:187 +#: htdocs/luci-static/resources/fchomo.js:190 msgid "2022-blake3-aes-128-gcm" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:188 +#: htdocs/luci-static/resources/fchomo.js:191 msgid "2022-blake3-aes-256-gcm" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:189 +#: htdocs/luci-static/resources/fchomo.js:192 msgid "2022-blake3-chacha20-poly1305" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:358 -#: htdocs/luci-static/resources/view/fchomo/server.js:373 +#: htdocs/luci-static/resources/view/fchomo/server.js:344 +#: htdocs/luci-static/resources/view/fchomo/server.js:359 msgid "Save your configuration before uploading files!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:444 +#: htdocs/luci-static/resources/view/fchomo/global.js:447 msgid "API" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:485 +#: htdocs/luci-static/resources/view/fchomo/global.js:488 msgid "API DoH service" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:476 +#: htdocs/luci-static/resources/view/fchomo/global.js:479 msgid "API HTTP port" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:480 +#: htdocs/luci-static/resources/view/fchomo/global.js:483 msgid "API HTTPS port" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:434 +#: htdocs/luci-static/resources/view/fchomo/global.js:437 msgid "API TLS certificate path" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:438 +#: htdocs/luci-static/resources/view/fchomo/global.js:441 msgid "API TLS private key path" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:489 +#: htdocs/luci-static/resources/view/fchomo/global.js:492 msgid "API secret" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:562 -#: htdocs/luci-static/resources/view/fchomo/global.js:612 +#: htdocs/luci-static/resources/view/fchomo/global.js:262 +msgid "ASN version" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:565 +#: htdocs/luci-static/resources/view/fchomo/global.js:615 msgid "Access Control" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:835 +#: htdocs/luci-static/resources/view/fchomo/client.js:946 msgid "Add a DNS policy" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:694 +#: htdocs/luci-static/resources/view/fchomo/client.js:805 msgid "Add a DNS server" msgstr "" @@ -86,15 +91,15 @@ msgstr "" msgid "Add a Node" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:67 +#: htdocs/luci-static/resources/view/fchomo/node.js:719 msgid "Add a provider" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:320 +#: htdocs/luci-static/resources/view/fchomo/client.js:458 msgid "Add a proxy group" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:510 +#: htdocs/luci-static/resources/view/fchomo/client.js:648 msgid "Add a routing rule" msgstr "" @@ -102,34 +107,38 @@ msgstr "" msgid "Add a rule set" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:96 +#: htdocs/luci-static/resources/view/fchomo/server.js:97 msgid "Add a server" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:179 +#: htdocs/luci-static/resources/view/fchomo/client.js:718 +msgid "Add a sub rule" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:831 msgid "Add prefix" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:182 +#: htdocs/luci-static/resources/view/fchomo/node.js:834 msgid "Add suffix" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:708 -#: htdocs/luci-static/resources/view/fchomo/client.js:713 +#: htdocs/luci-static/resources/view/fchomo/client.js:819 +#: htdocs/luci-static/resources/view/fchomo/client.js:824 msgid "Address" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:615 -#: htdocs/luci-static/resources/view/fchomo/global.js:659 +#: htdocs/luci-static/resources/view/fchomo/global.js:618 +#: htdocs/luci-static/resources/view/fchomo/global.js:662 msgid "All allowed" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:645 -#: htdocs/luci-static/resources/view/fchomo/global.js:652 +#: htdocs/luci-static/resources/view/fchomo/global.js:648 +#: htdocs/luci-static/resources/view/fchomo/global.js:655 msgid "All ports" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:472 +#: htdocs/luci-static/resources/view/fchomo/global.js:475 msgid "" "Allow access from private network.
To access the API on a private " "network from a public website, it must be enabled." @@ -143,7 +152,8 @@ msgstr "" msgid "Already in updating." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:315 +#: htdocs/luci-static/resources/view/fchomo/node.js:286 +#: htdocs/luci-static/resources/view/fchomo/server.js:301 msgid "Alter ID" msgstr "" @@ -151,15 +161,19 @@ msgstr "" msgid "Application version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:284 +#: htdocs/luci-static/resources/view/fchomo/server.js:276 msgid "Auth timeout" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:290 +#: htdocs/luci-static/resources/view/fchomo/node.js:308 +msgid "Authenticated length" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:293 msgid "Auto" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:86 +#: htdocs/luci-static/resources/view/fchomo/server.js:87 msgid "Auto configure firewall" msgstr "" @@ -175,7 +189,7 @@ msgstr "" msgid "Baidu" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:395 +#: htdocs/luci-static/resources/view/fchomo/global.js:398 msgid "Based on google/gvisor." msgstr "" @@ -192,23 +206,25 @@ msgstr "" msgid "Binary format only supports domain / ipcidr" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:405 -#: htdocs/luci-static/resources/view/fchomo/global.js:576 -#: htdocs/luci-static/resources/view/fchomo/node.js:236 +#: htdocs/luci-static/resources/view/fchomo/client.js:543 +#: htdocs/luci-static/resources/view/fchomo/global.js:579 +#: htdocs/luci-static/resources/view/fchomo/node.js:688 +#: htdocs/luci-static/resources/view/fchomo/node.js:892 msgid "Bind interface" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:406 -#: htdocs/luci-static/resources/view/fchomo/node.js:237 +#: htdocs/luci-static/resources/view/fchomo/client.js:544 +#: htdocs/luci-static/resources/view/fchomo/node.js:689 +#: htdocs/luci-static/resources/view/fchomo/node.js:893 msgid "Bind outbound interface.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:577 +#: htdocs/luci-static/resources/view/fchomo/global.js:580 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:617 +#: htdocs/luci-static/resources/view/fchomo/global.js:620 msgid "Black list" msgstr "" @@ -216,27 +232,27 @@ msgstr "" msgid "Block DNS queries" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:645 +#: htdocs/luci-static/resources/view/fchomo/client.js:756 msgid "Boot DNS server" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:652 +#: htdocs/luci-static/resources/view/fchomo/client.js:763 msgid "Boot DNS server (Node)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:660 +#: htdocs/luci-static/resources/view/fchomo/global.js:663 msgid "Bypass CN" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:467 +#: htdocs/luci-static/resources/view/fchomo/global.js:470 msgid "CORS Allow origins" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:471 +#: htdocs/luci-static/resources/view/fchomo/global.js:474 msgid "CORS Allow private network" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:468 +#: htdocs/luci-static/resources/view/fchomo/global.js:471 msgid "CORS allowed origins, * will be used if empty." msgstr "" @@ -244,7 +260,16 @@ msgstr "" msgid "Cancel" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:350 +#: htdocs/luci-static/resources/view/fchomo/node.js:450 +msgid "Cert fingerprint" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:451 +msgid "" +"Certificate fingerprint. Used to implement SSL Pinning and prevent MitM." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/server.js:336 msgid "Certificate path" msgstr "" @@ -256,19 +281,21 @@ msgstr "" msgid "Check update" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:262 +#: htdocs/luci-static/resources/view/fchomo/global.js:265 msgid "China IPv4 list version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:265 +#: htdocs/luci-static/resources/view/fchomo/global.js:268 msgid "China IPv6 list version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:271 +#: htdocs/luci-static/resources/view/fchomo/global.js:274 msgid "China list version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:209 +#: htdocs/luci-static/resources/view/fchomo/node.js:150 +#: htdocs/luci-static/resources/view/fchomo/node.js:292 +#: htdocs/luci-static/resources/view/fchomo/server.js:208 msgid "Chipher" msgstr "" @@ -280,6 +307,10 @@ msgstr "" msgid "Client" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:472 +msgid "Client fingerprint" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/global.js:145 msgid "Client status" msgstr "" @@ -288,25 +319,26 @@ msgstr "" msgid "Collecting data..." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:647 -#: htdocs/luci-static/resources/view/fchomo/global.js:654 +#: htdocs/luci-static/resources/view/fchomo/global.js:650 +#: htdocs/luci-static/resources/view/fchomo/global.js:657 msgid "Common and STUN ports" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:646 -#: htdocs/luci-static/resources/view/fchomo/global.js:653 +#: htdocs/luci-static/resources/view/fchomo/global.js:649 +#: htdocs/luci-static/resources/view/fchomo/global.js:656 msgid "Common ports only (bypass P2P traffic)" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:606 +#: htdocs/luci-static/resources/fchomo.js:626 msgid "Complete" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:196 +#: htdocs/luci-static/resources/view/fchomo/node.js:848 msgid "Configuration Items" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:268 +#: htdocs/luci-static/resources/view/fchomo/node.js:196 +#: htdocs/luci-static/resources/view/fchomo/server.js:254 msgid "Congestion controller" msgstr "" @@ -314,12 +346,12 @@ msgstr "" msgid "Connection check" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:128 +#: htdocs/luci-static/resources/view/fchomo/node.js:780 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:243 msgid "Content will not be verified, Please make sure you enter it correctly." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:120 +#: htdocs/luci-static/resources/view/fchomo/node.js:772 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:235 msgid "Contents" msgstr "" @@ -336,15 +368,15 @@ msgstr "" msgid "Cron expression" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:676 +#: htdocs/luci-static/resources/view/fchomo/global.js:679 msgid "Custom Direct List" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:163 +#: htdocs/luci-static/resources/view/fchomo/node.js:815 msgid "Custom HTTP header." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:701 +#: htdocs/luci-static/resources/view/fchomo/global.js:704 msgid "Custom Proxy List" msgstr "" @@ -353,22 +385,26 @@ msgid "" "Custom internal hosts. Support yaml or json format." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:825 -#: htdocs/luci-static/resources/view/fchomo/client.js:835 +#: htdocs/luci-static/resources/fchomo.js:84 +msgid "DIRECT" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:936 +#: htdocs/luci-static/resources/view/fchomo/client.js:946 msgid "DNS policy" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:360 +#: htdocs/luci-static/resources/view/fchomo/global.js:363 msgid "DNS port" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:684 -#: htdocs/luci-static/resources/view/fchomo/client.js:694 -#: htdocs/luci-static/resources/view/fchomo/client.js:880 +#: htdocs/luci-static/resources/view/fchomo/client.js:795 +#: htdocs/luci-static/resources/view/fchomo/client.js:805 +#: htdocs/luci-static/resources/view/fchomo/client.js:991 msgid "DNS server" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:631 +#: htdocs/luci-static/resources/view/fchomo/client.js:742 msgid "DNS settings" msgstr "" @@ -376,60 +412,86 @@ msgstr "" msgid "Dashboard version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:299 +#: htdocs/luci-static/resources/view/fchomo/global.js:302 msgid "Debug" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:207 +msgid "Default" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/client.js:14 msgid "Default DNS (issued by WAN)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:659 +#: htdocs/luci-static/resources/view/fchomo/client.js:770 msgid "Default DNS server" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:309 -msgid "Default outbound" +#: htdocs/luci-static/resources/view/fchomo/node.js:44 +msgid "Dial fields" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:283 +#: htdocs/luci-static/resources/view/fchomo/global.js:286 msgid "Direct" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:619 +#: htdocs/luci-static/resources/view/fchomo/global.js:622 msgid "Direct IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:622 +#: htdocs/luci-static/resources/view/fchomo/global.js:625 msgid "Direct IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:625 +#: htdocs/luci-static/resources/view/fchomo/global.js:628 msgid "Direct MAC-s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:291 -#: htdocs/luci-static/resources/view/fchomo/server.js:178 +#: htdocs/luci-static/resources/view/fchomo/global.js:294 +#: htdocs/luci-static/resources/view/fchomo/node.js:116 +#: htdocs/luci-static/resources/view/fchomo/server.js:177 msgid "Disable" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:401 +#: htdocs/luci-static/resources/view/fchomo/node.js:433 +msgid "Disable SNI" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:539 msgid "Disable UDP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:850 -#: htdocs/luci-static/resources/view/fchomo/client.js:855 -#: htdocs/luci-static/resources/view/fchomo/client.js:920 -#: htdocs/luci-static/resources/view/fchomo/client.js:927 -#: htdocs/luci-static/resources/view/fchomo/client.js:929 +#: htdocs/luci-static/resources/view/fchomo/client.js:961 +#: htdocs/luci-static/resources/view/fchomo/client.js:966 +#: htdocs/luci-static/resources/view/fchomo/client.js:1031 +#: htdocs/luci-static/resources/view/fchomo/client.js:1038 +#: htdocs/luci-static/resources/view/fchomo/client.js:1040 msgid "Domain" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:512 +#: htdocs/luci-static/resources/view/fchomo/node.js:434 +msgid "Donot send server name in ClientHello." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:464 +#: htdocs/luci-static/resources/view/fchomo/node.js:881 +msgid "Donot verifying server certificate." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:668 +msgid "Download bandwidth" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:669 +msgid "Download bandwidth in Mbps." +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:532 msgid "Download failed: %s" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:510 +#: htdocs/luci-static/resources/fchomo.js:530 msgid "Download successful." msgstr "" @@ -437,18 +499,26 @@ msgstr "" msgid "Dual stack" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:805 +#: htdocs/luci-static/resources/view/fchomo/client.js:916 msgid "ECS override" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:789 +#: htdocs/luci-static/resources/view/fchomo/client.js:900 msgid "EDNS Client Subnet" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:302 +#: htdocs/luci-static/resources/view/fchomo/global.js:305 msgid "ETag support" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:581 +msgid "Early Data first packet length limit." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:587 +msgid "Early Data header name" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/node.js:20 msgid "Edit node" msgstr "" @@ -457,165 +527,216 @@ msgstr "" msgid "Edit ruleset" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:118 +#: htdocs/luci-static/resources/view/fchomo/node.js:770 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:233 msgid "Editer" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:340 -#: htdocs/luci-static/resources/view/fchomo/client.js:520 -#: htdocs/luci-static/resources/view/fchomo/client.js:704 -#: htdocs/luci-static/resources/view/fchomo/client.js:845 -#: htdocs/luci-static/resources/view/fchomo/global.js:289 -#: htdocs/luci-static/resources/view/fchomo/global.js:526 -#: htdocs/luci-static/resources/view/fchomo/node.js:45 -#: htdocs/luci-static/resources/view/fchomo/node.js:94 -#: htdocs/luci-static/resources/view/fchomo/node.js:256 +#: htdocs/luci-static/resources/view/fchomo/client.js:447 +#: htdocs/luci-static/resources/view/fchomo/client.js:478 +#: htdocs/luci-static/resources/view/fchomo/client.js:658 +#: htdocs/luci-static/resources/view/fchomo/client.js:728 +#: htdocs/luci-static/resources/view/fchomo/client.js:815 +#: htdocs/luci-static/resources/view/fchomo/client.js:956 +#: htdocs/luci-static/resources/view/fchomo/global.js:292 +#: htdocs/luci-static/resources/view/fchomo/global.js:529 +#: htdocs/luci-static/resources/view/fchomo/node.js:51 +#: htdocs/luci-static/resources/view/fchomo/node.js:746 +#: htdocs/luci-static/resources/view/fchomo/node.js:912 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:181 -#: htdocs/luci-static/resources/view/fchomo/server.js:83 -#: htdocs/luci-static/resources/view/fchomo/server.js:107 +#: htdocs/luci-static/resources/view/fchomo/server.js:84 +#: htdocs/luci-static/resources/view/fchomo/server.js:108 msgid "Enable" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:184 +#: htdocs/luci-static/resources/view/fchomo/node.js:231 +msgid "" +"Enable 0-RTT QUIC connection handshake on the client side. This is not " +"impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:230 +msgid "Enable 0-RTT handshake" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:656 +msgid "Enable TCP Brutal" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:657 +msgid "Enable TCP Brutal congestion control algorithm" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:645 +msgid "Enable multiplexing only for TCP." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:639 +msgid "Enable padding" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:650 +msgid "Enable statistic" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:378 +#: htdocs/luci-static/resources/view/fchomo/node.js:866 +msgid "" +"Enable the SUoT protocol, requires server support. Conflict with Multiplex." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:122 +#: htdocs/luci-static/resources/view/fchomo/server.js:183 msgid "" "Enabling obfuscation will make the server incompatible with standard QUIC " "connections, losing the ability to masquerade with HTTP/3." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:416 +#: htdocs/luci-static/resources/view/fchomo/global.js:419 msgid "Endpoint-Independent NAT" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:524 -#: htdocs/luci-static/resources/view/fchomo/client.js:872 +#: htdocs/luci-static/resources/view/fchomo/client.js:298 +#: htdocs/luci-static/resources/view/fchomo/client.js:983 msgid "Entry" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:296 +#: htdocs/luci-static/resources/view/fchomo/global.js:299 msgid "Error" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:457 +#: htdocs/luci-static/resources/view/fchomo/client.js:595 msgid "" "Exceeding this triggers a forced health check. 5 will be used " "if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:494 -#: htdocs/luci-static/resources/view/fchomo/node.js:306 +#: htdocs/luci-static/resources/view/fchomo/client.js:632 +#: htdocs/luci-static/resources/view/fchomo/node.js:962 msgid "Exclude matched node types." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:489 -#: htdocs/luci-static/resources/view/fchomo/node.js:300 +#: htdocs/luci-static/resources/view/fchomo/client.js:627 +#: htdocs/luci-static/resources/view/fchomo/node.js:956 msgid "Exclude nodes that meet keywords or regexps." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:449 -#: htdocs/luci-static/resources/view/fchomo/node.js:287 +#: htdocs/luci-static/resources/view/fchomo/client.js:587 +#: htdocs/luci-static/resources/view/fchomo/node.js:943 msgid "Expected HTTP code. 204 will be used if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:451 -#: htdocs/luci-static/resources/view/fchomo/node.js:289 +#: htdocs/luci-static/resources/view/fchomo/client.js:589 +#: htdocs/luci-static/resources/view/fchomo/node.js:945 msgid "Expected status" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:536 -#: htdocs/luci-static/resources/fchomo.js:539 -#: htdocs/luci-static/resources/fchomo.js:542 -#: htdocs/luci-static/resources/fchomo.js:623 -#: htdocs/luci-static/resources/fchomo.js:631 -#: htdocs/luci-static/resources/fchomo.js:637 -#: htdocs/luci-static/resources/fchomo.js:661 -#: htdocs/luci-static/resources/fchomo.js:678 -#: htdocs/luci-static/resources/fchomo.js:681 -#: htdocs/luci-static/resources/fchomo.js:692 -#: htdocs/luci-static/resources/fchomo.js:699 -#: htdocs/luci-static/resources/fchomo.js:708 +#: htdocs/luci-static/resources/fchomo.js:556 +#: htdocs/luci-static/resources/fchomo.js:559 +#: htdocs/luci-static/resources/fchomo.js:562 +#: htdocs/luci-static/resources/fchomo.js:643 +#: htdocs/luci-static/resources/fchomo.js:651 +#: htdocs/luci-static/resources/fchomo.js:659 +#: htdocs/luci-static/resources/fchomo.js:683 +#: htdocs/luci-static/resources/fchomo.js:700 +#: htdocs/luci-static/resources/fchomo.js:703 +#: htdocs/luci-static/resources/fchomo.js:715 +#: htdocs/luci-static/resources/fchomo.js:718 #: htdocs/luci-static/resources/fchomo.js:720 -#: htdocs/luci-static/resources/fchomo.js:723 #: htdocs/luci-static/resources/fchomo.js:733 +#: htdocs/luci-static/resources/fchomo.js:740 +#: htdocs/luci-static/resources/fchomo.js:749 +#: htdocs/luci-static/resources/fchomo.js:761 +#: htdocs/luci-static/resources/fchomo.js:764 +#: htdocs/luci-static/resources/fchomo.js:774 #: htdocs/luci-static/resources/view/fchomo/client.js:27 -#: htdocs/luci-static/resources/view/fchomo/client.js:334 -#: htdocs/luci-static/resources/view/fchomo/client.js:719 +#: htdocs/luci-static/resources/view/fchomo/client.js:472 +#: htdocs/luci-static/resources/view/fchomo/client.js:830 +#: htdocs/luci-static/resources/view/fchomo/node.js:456 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:199 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:213 -#: htdocs/luci-static/resources/view/fchomo/server.js:237 -#: htdocs/luci-static/resources/view/fchomo/server.js:240 msgid "Expecting: %s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:545 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 +#: htdocs/luci-static/resources/view/fchomo/node.js:522 +msgid "Expecting: only support %s." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:548 msgid "Experimental" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:222 -#: htdocs/luci-static/resources/view/fchomo/client.js:233 -#: htdocs/luci-static/resources/view/fchomo/client.js:240 -#: htdocs/luci-static/resources/view/fchomo/client.js:247 -#: htdocs/luci-static/resources/view/fchomo/client.js:255 +#: htdocs/luci-static/resources/view/fchomo/client.js:243 +#: htdocs/luci-static/resources/view/fchomo/client.js:256 +#: htdocs/luci-static/resources/view/fchomo/client.js:266 +#: htdocs/luci-static/resources/view/fchomo/client.js:273 +#: htdocs/luci-static/resources/view/fchomo/client.js:281 msgid "Factor" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:564 +#: htdocs/luci-static/resources/fchomo.js:584 msgid "Failed to execute \"/etc/init.d/fchomo %s %s\" reason: %s" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:833 +#: htdocs/luci-static/resources/fchomo.js:874 msgid "Failed to upload %s, error: %s." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:119 +#: htdocs/luci-static/resources/fchomo.js:120 msgid "Fallback" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:666 -#: htdocs/luci-static/resources/view/fchomo/client.js:667 -#: htdocs/luci-static/resources/view/fchomo/client.js:678 +#: htdocs/luci-static/resources/view/fchomo/client.js:777 +#: htdocs/luci-static/resources/view/fchomo/client.js:778 +#: htdocs/luci-static/resources/view/fchomo/client.js:789 msgid "Fallback DNS server" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:899 +#: htdocs/luci-static/resources/view/fchomo/client.js:1010 msgid "Fallback filter" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:484 -#: htdocs/luci-static/resources/view/fchomo/node.js:295 +#: htdocs/luci-static/resources/view/fchomo/client.js:622 +#: htdocs/luci-static/resources/view/fchomo/node.js:951 msgid "Filter nodes that meet keywords or regexps." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:660 -#: htdocs/luci-static/resources/view/fchomo/client.js:677 +#: htdocs/luci-static/resources/view/fchomo/client.js:771 +#: htdocs/luci-static/resources/view/fchomo/client.js:788 msgid "Final DNS server" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:660 -#: htdocs/luci-static/resources/view/fchomo/client.js:674 +#: htdocs/luci-static/resources/view/fchomo/client.js:771 +#: htdocs/luci-static/resources/view/fchomo/client.js:785 msgid "Final DNS server (Used to Domestic-IP response)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:667 -#: htdocs/luci-static/resources/view/fchomo/client.js:675 +#: htdocs/luci-static/resources/view/fchomo/client.js:778 +#: htdocs/luci-static/resources/view/fchomo/client.js:786 msgid "Final DNS server (Used to Overseas-IP response)" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:473 +#: htdocs/luci-static/resources/view/fchomo/node.js:280 +msgid "Flow" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:611 msgid "" "For details, see %s." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:450 -#: htdocs/luci-static/resources/view/fchomo/node.js:187 -#: htdocs/luci-static/resources/view/fchomo/node.js:288 +#: htdocs/luci-static/resources/view/fchomo/client.js:588 +#: htdocs/luci-static/resources/view/fchomo/node.js:839 +#: htdocs/luci-static/resources/view/fchomo/node.js:944 msgid "" "For format see %s." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:505 +#: htdocs/luci-static/resources/view/fchomo/global.js:508 msgid "Forced sniffing domain" msgstr "" @@ -629,37 +750,42 @@ msgstr "" msgid "FullCombo Mihomo" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:268 +#: htdocs/luci-static/resources/view/fchomo/node.js:541 +msgid "GET" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:271 msgid "GFW list version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:276 +#: htdocs/luci-static/resources/view/fchomo/global.js:279 msgid "General" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:325 -#: htdocs/luci-static/resources/view/fchomo/node.js:84 +#: htdocs/luci-static/resources/view/fchomo/client.js:463 +#: htdocs/luci-static/resources/view/fchomo/node.js:40 +#: htdocs/luci-static/resources/view/fchomo/node.js:736 msgid "General fields" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:279 +#: htdocs/luci-static/resources/view/fchomo/global.js:282 msgid "General settings" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:144 -#: htdocs/luci-static/resources/view/fchomo/server.js:146 -#: htdocs/luci-static/resources/view/fchomo/server.js:191 -#: htdocs/luci-static/resources/view/fchomo/server.js:193 -#: htdocs/luci-static/resources/view/fchomo/server.js:224 -#: htdocs/luci-static/resources/view/fchomo/server.js:226 -#: htdocs/luci-static/resources/view/fchomo/server.js:257 -#: htdocs/luci-static/resources/view/fchomo/server.js:259 -#: htdocs/luci-static/resources/view/fchomo/server.js:304 -#: htdocs/luci-static/resources/view/fchomo/server.js:306 +#: htdocs/luci-static/resources/view/fchomo/server.js:145 +#: htdocs/luci-static/resources/view/fchomo/server.js:147 +#: htdocs/luci-static/resources/view/fchomo/server.js:190 +#: htdocs/luci-static/resources/view/fchomo/server.js:192 +#: htdocs/luci-static/resources/view/fchomo/server.js:223 +#: htdocs/luci-static/resources/view/fchomo/server.js:225 +#: htdocs/luci-static/resources/view/fchomo/server.js:243 +#: htdocs/luci-static/resources/view/fchomo/server.js:245 +#: htdocs/luci-static/resources/view/fchomo/server.js:290 +#: htdocs/luci-static/resources/view/fchomo/server.js:292 msgid "Generate" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:404 +#: htdocs/luci-static/resources/view/fchomo/global.js:407 msgid "Generic segmentation offload" msgstr "" @@ -671,17 +797,17 @@ msgstr "" msgid "GeoSite version" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:909 +#: htdocs/luci-static/resources/view/fchomo/client.js:1020 msgid "Geoip code" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:906 +#: htdocs/luci-static/resources/view/fchomo/client.js:1017 msgid "Geoip enable" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:851 -#: htdocs/luci-static/resources/view/fchomo/client.js:860 -#: htdocs/luci-static/resources/view/fchomo/client.js:918 +#: htdocs/luci-static/resources/view/fchomo/client.js:962 +#: htdocs/luci-static/resources/view/fchomo/client.js:971 +#: htdocs/luci-static/resources/view/fchomo/client.js:1029 msgid "Geosite" msgstr "" @@ -689,19 +815,23 @@ msgstr "" msgid "GitHub" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:285 +#: htdocs/luci-static/resources/view/fchomo/global.js:288 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:14 msgid "Global" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:325 +#: htdocs/luci-static/resources/view/fchomo/global.js:328 msgid "Global Authentication" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:428 +#: htdocs/luci-static/resources/view/fchomo/global.js:431 msgid "Global client fingerprint" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:302 +msgid "Global padding" +msgstr "" + #: htdocs/luci-static/resources/fchomo.js:47 msgid "Google" msgstr "" @@ -710,81 +840,116 @@ msgstr "" msgid "Grant access to fchomo configuration" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:350 +#: htdocs/luci-static/resources/view/fchomo/client.js:488 msgid "Group" msgstr "" #: htdocs/luci-static/resources/fchomo.js:58 -#: htdocs/luci-static/resources/fchomo.js:84 +#: htdocs/luci-static/resources/fchomo.js:85 +#: htdocs/luci-static/resources/view/fchomo/node.js:332 +#: htdocs/luci-static/resources/view/fchomo/node.js:504 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 msgid "HTTP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:162 +#: htdocs/luci-static/resources/view/fchomo/node.js:84 +#: htdocs/luci-static/resources/view/fchomo/node.js:563 +#: htdocs/luci-static/resources/view/fchomo/node.js:814 msgid "HTTP header" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:773 +#: htdocs/luci-static/resources/view/fchomo/node.js:540 +msgid "HTTP request method" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:884 msgid "HTTP/3" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:203 +#: htdocs/luci-static/resources/view/fchomo/server.js:202 msgid "" "HTTP3 server behavior when authentication fails.
A 404 page will be " "returned if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:505 +#: htdocs/luci-static/resources/view/fchomo/node.js:516 +msgid "HTTPUpgrade" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:666 msgid "Handle domain" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:419 -#: htdocs/luci-static/resources/view/fchomo/node.js:260 +#: htdocs/luci-static/resources/view/fchomo/client.js:557 +#: htdocs/luci-static/resources/view/fchomo/node.js:916 msgid "Health check URL" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:448 -#: htdocs/luci-static/resources/view/fchomo/node.js:286 +#: htdocs/luci-static/resources/view/fchomo/client.js:586 +#: htdocs/luci-static/resources/view/fchomo/node.js:942 msgid "Health check expected status" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:428 -#: htdocs/luci-static/resources/view/fchomo/node.js:269 +#: htdocs/luci-static/resources/view/fchomo/client.js:566 +#: htdocs/luci-static/resources/view/fchomo/node.js:925 msgid "Health check interval" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:435 -#: htdocs/luci-static/resources/view/fchomo/node.js:275 +#: htdocs/luci-static/resources/view/fchomo/client.js:573 +#: htdocs/luci-static/resources/view/fchomo/node.js:931 msgid "Health check timeout" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:327 -#: htdocs/luci-static/resources/view/fchomo/node.js:86 +#: htdocs/luci-static/resources/view/fchomo/client.js:465 +#: htdocs/luci-static/resources/view/fchomo/node.js:738 msgid "Health fields" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:237 +msgid "Heartbeat interval" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:338 +msgid "Host that supports TLS 1.3" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:144 +msgid "Host-key" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:139 +msgid "Host-key algorithms" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/hosts.js:27 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:30 msgid "Hosts" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:92 -msgid "Hysteria" -msgstr "" - #: htdocs/luci-static/resources/fchomo.js:64 -#: htdocs/luci-static/resources/fchomo.js:93 +#: htdocs/luci-static/resources/fchomo.js:94 msgid "Hysteria2" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:911 -#: htdocs/luci-static/resources/view/fchomo/client.js:924 +#: htdocs/luci-static/resources/view/fchomo/client.js:1022 +#: htdocs/luci-static/resources/view/fchomo/client.js:1035 msgid "IP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:922 +#: htdocs/luci-static/resources/view/fchomo/client.js:1033 msgid "IP CIDR" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:190 +msgid "IP override" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:700 +#: htdocs/luci-static/resources/view/fchomo/node.js:904 +msgid "IP version" +msgstr "" + #: htdocs/luci-static/resources/fchomo.js:71 msgid "IPv4 only" msgstr "" @@ -793,12 +958,12 @@ msgstr "" msgid "IPv6 only" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:642 -#: htdocs/luci-static/resources/view/fchomo/global.js:305 +#: htdocs/luci-static/resources/view/fchomo/client.js:753 +#: htdocs/luci-static/resources/view/fchomo/global.js:308 msgid "IPv6 support" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:277 +#: htdocs/luci-static/resources/view/fchomo/server.js:269 msgid "Idle timeout" msgstr "" @@ -806,7 +971,7 @@ msgstr "" msgid "If Block is selected, uncheck others" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:171 +#: htdocs/luci-static/resources/view/fchomo/server.js:170 msgid "Ignore client bandwidth" msgstr "" @@ -820,67 +985,74 @@ msgstr "" msgid "Import rule-set links" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:218 -#: htdocs/luci-static/resources/view/fchomo/node.js:223 -#: htdocs/luci-static/resources/view/fchomo/server.js:160 -#: htdocs/luci-static/resources/view/fchomo/server.js:166 +#: htdocs/luci-static/resources/view/fchomo/node.js:104 +#: htdocs/luci-static/resources/view/fchomo/node.js:110 +#: htdocs/luci-static/resources/view/fchomo/node.js:871 +#: htdocs/luci-static/resources/view/fchomo/node.js:876 +#: htdocs/luci-static/resources/view/fchomo/server.js:159 +#: htdocs/luci-static/resources/view/fchomo/server.js:165 msgid "In Mbps." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:436 -#: htdocs/luci-static/resources/view/fchomo/client.js:465 -#: htdocs/luci-static/resources/view/fchomo/node.js:276 +#: htdocs/luci-static/resources/view/fchomo/node.js:238 +#: htdocs/luci-static/resources/view/fchomo/node.js:245 +msgid "In millisecond." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:574 +#: htdocs/luci-static/resources/view/fchomo/client.js:603 +#: htdocs/luci-static/resources/view/fchomo/node.js:932 msgid "In millisecond. %s will be used if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:278 -#: htdocs/luci-static/resources/view/fchomo/server.js:285 +#: htdocs/luci-static/resources/view/fchomo/server.js:270 +#: htdocs/luci-static/resources/view/fchomo/server.js:277 msgid "In seconds." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:429 -#: htdocs/luci-static/resources/view/fchomo/global.js:315 -#: htdocs/luci-static/resources/view/fchomo/global.js:320 -#: htdocs/luci-static/resources/view/fchomo/global.js:412 -#: htdocs/luci-static/resources/view/fchomo/node.js:146 -#: htdocs/luci-static/resources/view/fchomo/node.js:270 +#: htdocs/luci-static/resources/view/fchomo/client.js:567 +#: htdocs/luci-static/resources/view/fchomo/global.js:318 +#: htdocs/luci-static/resources/view/fchomo/global.js:323 +#: htdocs/luci-static/resources/view/fchomo/global.js:415 +#: htdocs/luci-static/resources/view/fchomo/node.js:798 +#: htdocs/luci-static/resources/view/fchomo/node.js:926 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:261 msgid "In seconds. %s will be used if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:339 +#: htdocs/luci-static/resources/view/fchomo/global.js:342 msgid "Inbound" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:385 +#: htdocs/luci-static/resources/view/fchomo/client.js:523 msgid "Include all" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:390 +#: htdocs/luci-static/resources/view/fchomo/client.js:528 msgid "Include all node" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:395 +#: htdocs/luci-static/resources/view/fchomo/client.js:533 msgid "Include all provider" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:396 +#: htdocs/luci-static/resources/view/fchomo/client.js:534 msgid "Includes all Provider." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:386 +#: htdocs/luci-static/resources/view/fchomo/client.js:524 msgid "Includes all Proxy Node and Provider." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:391 +#: htdocs/luci-static/resources/view/fchomo/client.js:529 msgid "Includes all Proxy Node." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:298 +#: htdocs/luci-static/resources/view/fchomo/global.js:301 msgid "Info" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:569 +#: htdocs/luci-static/resources/view/fchomo/global.js:572 msgid "Interface Control" msgstr "" @@ -888,62 +1060,64 @@ msgstr "" msgid "Keep default" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:365 +#: htdocs/luci-static/resources/view/fchomo/server.js:351 msgid "Key path" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:330 -#: htdocs/luci-static/resources/view/fchomo/client.js:515 -#: htdocs/luci-static/resources/view/fchomo/client.js:699 -#: htdocs/luci-static/resources/view/fchomo/client.js:840 -#: htdocs/luci-static/resources/view/fchomo/node.js:40 -#: htdocs/luci-static/resources/view/fchomo/node.js:89 +#: htdocs/luci-static/resources/view/fchomo/client.js:468 +#: htdocs/luci-static/resources/view/fchomo/client.js:653 +#: htdocs/luci-static/resources/view/fchomo/client.js:723 +#: htdocs/luci-static/resources/view/fchomo/client.js:810 +#: htdocs/luci-static/resources/view/fchomo/client.js:951 +#: htdocs/luci-static/resources/view/fchomo/node.js:46 +#: htdocs/luci-static/resources/view/fchomo/node.js:741 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:176 -#: htdocs/luci-static/resources/view/fchomo/server.js:102 +#: htdocs/luci-static/resources/view/fchomo/server.js:103 msgid "Label" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:442 -#: htdocs/luci-static/resources/view/fchomo/node.js:281 +#: htdocs/luci-static/resources/view/fchomo/client.js:580 +#: htdocs/luci-static/resources/view/fchomo/node.js:937 msgid "Lazy" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:316 +#: htdocs/luci-static/resources/view/fchomo/server.js:302 msgid "" "Legacy protocol support (VMess MD5 Authentication) is provided for " "compatibility purposes only, use of alterId > 1 is not recommended." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:397 +#: htdocs/luci-static/resources/view/fchomo/global.js:400 msgid "Less compatibility and sometimes better performance." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/node.js:446 +#: htdocs/luci-static/resources/view/fchomo/server.js:332 msgid "List of supported application level protocols, in order of preference." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:117 +#: htdocs/luci-static/resources/view/fchomo/server.js:118 msgid "Listen address" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:571 +#: htdocs/luci-static/resources/view/fchomo/global.js:574 msgid "Listen interfaces" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:637 -#: htdocs/luci-static/resources/view/fchomo/server.js:122 +#: htdocs/luci-static/resources/view/fchomo/client.js:748 +#: htdocs/luci-static/resources/view/fchomo/server.js:123 msgid "Listen port" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:342 +#: htdocs/luci-static/resources/view/fchomo/global.js:345 msgid "Listen ports" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:121 +#: htdocs/luci-static/resources/fchomo.js:122 msgid "Load balance" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:99 +#: htdocs/luci-static/resources/view/fchomo/node.js:751 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:186 msgid "Local" msgstr "" @@ -960,67 +1134,89 @@ msgstr "" msgid "Log is empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:294 +#: htdocs/luci-static/resources/view/fchomo/global.js:297 msgid "Log level" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:536 +#: htdocs/luci-static/resources/fchomo.js:556 msgid "Lowercase only" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:400 +#: htdocs/luci-static/resources/view/fchomo/global.js:403 msgid "MTU" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:202 +#: htdocs/luci-static/resources/view/fchomo/server.js:201 msgid "Masquerade" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:856 +#: htdocs/luci-static/resources/view/fchomo/client.js:967 msgid "Match domain. Support wildcards." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:928 +#: htdocs/luci-static/resources/view/fchomo/client.js:1039 msgid "Match domain. Support wildcards.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:861 +#: htdocs/luci-static/resources/view/fchomo/client.js:972 msgid "Match geosite." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:919 +#: htdocs/luci-static/resources/view/fchomo/client.js:1030 msgid "Match geosite.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:910 +#: htdocs/luci-static/resources/view/fchomo/client.js:1021 msgid "Match response with geoip.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:923 +#: htdocs/luci-static/resources/view/fchomo/client.js:1034 msgid "Match response with ipcidr.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:866 +#: htdocs/luci-static/resources/view/fchomo/client.js:977 msgid "Match rule set." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:291 +#: htdocs/luci-static/resources/view/fchomo/node.js:580 +msgid "Max Early Data" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:224 +#: htdocs/luci-static/resources/view/fchomo/server.js:263 msgid "Max UDP relay packet size" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:456 +#: htdocs/luci-static/resources/view/fchomo/client.js:594 msgid "Max count of failures" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:165 +#: htdocs/luci-static/resources/view/fchomo/node.js:109 +#: htdocs/luci-static/resources/view/fchomo/server.js:164 msgid "Max download speed" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:159 +#: htdocs/luci-static/resources/view/fchomo/node.js:103 +#: htdocs/luci-static/resources/view/fchomo/server.js:158 msgid "Max upload speed" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:281 +#: htdocs/luci-static/resources/view/fchomo/node.js:617 +#: htdocs/luci-static/resources/view/fchomo/node.js:633 +msgid "Maximum connections" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:631 +msgid "" +"Maximum multiplexed streams in a connection before opening a new connection." +"
Conflict with %s and %s." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:630 +msgid "Maximum streams" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:419 #: htdocs/luci-static/resources/view/fchomo/log.js:100 msgid "Mihomo client" msgstr "" @@ -1030,20 +1226,38 @@ msgstr "" msgid "Mihomo server" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:624 +msgid "" +"Minimum multiplexed streams in a connection before opening a new connection." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:623 +#: htdocs/luci-static/resources/view/fchomo/node.js:633 +msgid "Minimum streams" +msgstr "" + #: htdocs/luci-static/resources/fchomo.js:60 -#: htdocs/luci-static/resources/view/fchomo/global.js:386 +#: htdocs/luci-static/resources/view/fchomo/global.js:389 msgid "Mixed" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:393 +#: htdocs/luci-static/resources/view/fchomo/global.js:396 msgid "Mixed system TCP stack and gVisor UDP stack." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:345 +#: htdocs/luci-static/resources/view/fchomo/global.js:348 msgid "Mixed port" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:152 +#: htdocs/luci-static/resources/view/fchomo/node.js:603 +msgid "Multiplex" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:43 +msgid "Multiplex fields" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:804 msgid "Name of the Proxy group to download provider." msgstr "" @@ -1051,16 +1265,20 @@ msgstr "" msgid "Name of the Proxy group to download rule set." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:333 +#: htdocs/luci-static/resources/view/fchomo/node.js:208 +msgid "Native" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:336 msgid "No Authentication IP ranges" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:719 +#: htdocs/luci-static/resources/view/fchomo/client.js:830 msgid "No add'l params" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:443 -#: htdocs/luci-static/resources/view/fchomo/node.js:282 +#: htdocs/luci-static/resources/view/fchomo/client.js:581 +#: htdocs/luci-static/resources/view/fchomo/node.js:938 msgid "No testing is performed when this provider node is not in use." msgstr "" @@ -1068,78 +1286,92 @@ msgstr "" msgid "No valid rule-set link found." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:357 +#: htdocs/luci-static/resources/view/fchomo/client.js:495 #: htdocs/luci-static/resources/view/fchomo/node.js:35 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:38 msgid "Node" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:488 -#: htdocs/luci-static/resources/view/fchomo/node.js:299 +#: htdocs/luci-static/resources/view/fchomo/client.js:626 +#: htdocs/luci-static/resources/view/fchomo/node.js:955 msgid "Node exclude filter" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:493 -#: htdocs/luci-static/resources/view/fchomo/node.js:305 +#: htdocs/luci-static/resources/view/fchomo/client.js:631 +#: htdocs/luci-static/resources/view/fchomo/node.js:961 msgid "Node exclude type" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:483 -#: htdocs/luci-static/resources/view/fchomo/node.js:294 +#: htdocs/luci-static/resources/view/fchomo/client.js:621 +#: htdocs/luci-static/resources/view/fchomo/node.js:950 msgid "Node filter" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:464 +#: htdocs/luci-static/resources/view/fchomo/client.js:602 msgid "Node switch tolerance" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:459 +#: htdocs/luci-static/resources/view/fchomo/node.js:281 +msgid "None" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:462 msgid "Not Installed" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:470 +#: htdocs/luci-static/resources/fchomo.js:490 msgid "Not Running" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:183 +#: htdocs/luci-static/resources/view/fchomo/node.js:331 +msgid "Obfs Mode" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:121 +#: htdocs/luci-static/resources/view/fchomo/server.js:182 msgid "Obfuscate password" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:177 +#: htdocs/luci-static/resources/view/fchomo/node.js:115 +#: htdocs/luci-static/resources/view/fchomo/server.js:176 msgid "Obfuscate type" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:572 +#: htdocs/luci-static/resources/view/fchomo/global.js:575 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:464 +#: htdocs/luci-static/resources/fchomo.js:484 msgid "Open Dashboard" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:282 +#: htdocs/luci-static/resources/view/fchomo/global.js:285 msgid "Operation mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:806 +#: htdocs/luci-static/resources/view/fchomo/client.js:917 msgid "Override ECS in original request." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:501 -#: htdocs/luci-static/resources/view/fchomo/global.js:539 +#: htdocs/luci-static/resources/view/fchomo/global.js:504 +#: htdocs/luci-static/resources/view/fchomo/global.js:542 msgid "Override destination" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:326 -#: htdocs/luci-static/resources/view/fchomo/node.js:85 +#: htdocs/luci-static/resources/view/fchomo/client.js:464 +#: htdocs/luci-static/resources/view/fchomo/node.js:737 msgid "Override fields" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:889 +#: htdocs/luci-static/resources/view/fchomo/node.js:191 +msgid "Override the IP address of the server that DNS response." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:1000 msgid "Override the Proxy group of DNS server." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:502 +#: htdocs/luci-static/resources/view/fchomo/global.js:505 msgid "Override the connection destination address with the sniffed domain." msgstr "" @@ -1147,12 +1379,27 @@ msgstr "" msgid "Overview" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:137 -#: htdocs/luci-static/resources/view/fchomo/server.js:217 +#: htdocs/luci-static/resources/view/fchomo/node.js:542 +msgid "POST" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:543 +msgid "PUT" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:314 +msgid "Packet encoding" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:78 +#: htdocs/luci-static/resources/view/fchomo/node.js:158 +#: htdocs/luci-static/resources/view/fchomo/node.js:345 +#: htdocs/luci-static/resources/view/fchomo/server.js:138 +#: htdocs/luci-static/resources/view/fchomo/server.js:216 msgid "Password" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:417 +#: htdocs/luci-static/resources/view/fchomo/global.js:420 msgid "" "Performance may degrade slightly, so it is not recommended to enable on when " "it is not needed." @@ -1168,21 +1415,46 @@ msgid "" "standards." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:119 +#: htdocs/luci-static/resources/view/fchomo/node.js:771 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:234 msgid "" "Please type %s." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:322 +msgid "Plugin" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:331 +#: htdocs/luci-static/resources/view/fchomo/node.js:338 +#: htdocs/luci-static/resources/view/fchomo/node.js:345 +#: htdocs/luci-static/resources/view/fchomo/node.js:351 +#: htdocs/luci-static/resources/view/fchomo/node.js:359 +#: htdocs/luci-static/resources/view/fchomo/node.js:365 +msgid "Plugin:" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:66 +msgid "Port" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:685 msgid "Port %s alrealy exists!" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:536 +#: htdocs/luci-static/resources/view/fchomo/global.js:539 msgid "Ports" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:98 +msgid "Ports pool" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:168 +msgid "Pre-shared key" +msgstr "" + #: htdocs/luci-static/resources/fchomo.js:73 msgid "Prefer IPv4" msgstr "" @@ -1191,47 +1463,68 @@ msgstr "" msgid "Prefer IPv6" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:407 -#: htdocs/luci-static/resources/view/fchomo/client.js:413 -#: htdocs/luci-static/resources/view/fchomo/global.js:578 -#: htdocs/luci-static/resources/view/fchomo/global.js:595 -#: htdocs/luci-static/resources/view/fchomo/node.js:238 -#: htdocs/luci-static/resources/view/fchomo/node.js:244 +#: htdocs/luci-static/resources/view/fchomo/client.js:545 +#: htdocs/luci-static/resources/view/fchomo/client.js:551 +#: htdocs/luci-static/resources/view/fchomo/global.js:581 +#: htdocs/luci-static/resources/view/fchomo/global.js:598 +#: htdocs/luci-static/resources/view/fchomo/node.js:690 +#: htdocs/luci-static/resources/view/fchomo/node.js:696 +#: htdocs/luci-static/resources/view/fchomo/node.js:894 +#: htdocs/luci-static/resources/view/fchomo/node.js:900 msgid "Priority: Proxy Node > Proxy Group > Global." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:288 +#: htdocs/luci-static/resources/view/fchomo/node.js:130 +msgid "Priv-key" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:134 +msgid "Priv-key passphrase" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:291 msgid "Process matching mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:530 +#: htdocs/luci-static/resources/view/fchomo/global.js:533 +#: htdocs/luci-static/resources/view/fchomo/node.js:609 msgid "Protocol" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:371 -#: htdocs/luci-static/resources/view/fchomo/node.js:57 -#: htdocs/luci-static/resources/view/fchomo/node.js:67 +#: htdocs/luci-static/resources/view/fchomo/node.js:309 +msgid "Protocol parameter. Enable length block encryption." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:303 +msgid "" +"Protocol parameter. Will waste traffic randomly if enabled (enabled by " +"default in v2ray and cannot be disabled)." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:509 +#: htdocs/luci-static/resources/view/fchomo/node.js:709 +#: htdocs/luci-static/resources/view/fchomo/node.js:719 msgid "Provider" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:139 +#: htdocs/luci-static/resources/view/fchomo/node.js:791 msgid "Provider URL" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:301 -#: htdocs/luci-static/resources/view/fchomo/client.js:320 +#: htdocs/luci-static/resources/view/fchomo/client.js:439 +#: htdocs/luci-static/resources/view/fchomo/client.js:458 msgid "Proxy Group" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:628 +#: htdocs/luci-static/resources/view/fchomo/global.js:631 msgid "Proxy IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:631 +#: htdocs/luci-static/resources/view/fchomo/global.js:634 msgid "Proxy IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:634 +#: htdocs/luci-static/resources/view/fchomo/global.js:637 msgid "Proxy MAC-s" msgstr "" @@ -1239,48 +1532,65 @@ msgstr "" msgid "Proxy Node" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:580 -#: htdocs/luci-static/resources/view/fchomo/client.js:756 -#: htdocs/luci-static/resources/view/fchomo/client.js:888 -#: htdocs/luci-static/resources/view/fchomo/node.js:151 +#: htdocs/luci-static/resources/view/fchomo/client.js:354 +#: htdocs/luci-static/resources/view/fchomo/client.js:867 +#: htdocs/luci-static/resources/view/fchomo/client.js:999 +#: htdocs/luci-static/resources/view/fchomo/node.js:803 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:266 msgid "Proxy group" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:365 +#: htdocs/luci-static/resources/view/fchomo/global.js:368 msgid "Proxy mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:637 +#: htdocs/luci-static/resources/view/fchomo/global.js:640 msgid "Proxy routerself" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:269 +#: htdocs/luci-static/resources/view/fchomo/node.js:209 +msgid "QUIC" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:197 +#: htdocs/luci-static/resources/view/fchomo/server.js:255 msgid "QUIC congestion controller." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:304 -#: htdocs/luci-static/resources/view/fchomo/server.js:78 +#: htdocs/luci-static/resources/view/fchomo/client.js:442 +#: htdocs/luci-static/resources/view/fchomo/server.js:79 msgid "Quick Reload" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:490 +#: htdocs/luci-static/resources/view/fchomo/node.js:481 +msgid "REALITY" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:486 +msgid "REALITY public key" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:491 +msgid "REALITY short ID" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:493 msgid "Random will be used if empty." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:350 +#: htdocs/luci-static/resources/view/fchomo/global.js:353 msgid "Redir port" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:366 +#: htdocs/luci-static/resources/view/fchomo/global.js:369 msgid "Redirect TCP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:368 +#: htdocs/luci-static/resources/view/fchomo/global.js:371 msgid "Redirect TCP + TProxy UDP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:370 +#: htdocs/luci-static/resources/view/fchomo/global.js:373 msgid "Redirect TCP + Tun UDP" msgstr "" @@ -1288,10 +1598,10 @@ msgstr "" msgid "Refresh every %s seconds." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:457 -#: htdocs/luci-static/resources/view/fchomo/client.js:305 +#: htdocs/luci-static/resources/fchomo.js:477 +#: htdocs/luci-static/resources/view/fchomo/client.js:443 #: htdocs/luci-static/resources/view/fchomo/global.js:162 -#: htdocs/luci-static/resources/view/fchomo/server.js:79 +#: htdocs/luci-static/resources/view/fchomo/server.js:80 msgid "Reload" msgstr "" @@ -1299,85 +1609,99 @@ msgstr "" msgid "Reload All" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:100 +#: htdocs/luci-static/resources/view/fchomo/node.js:752 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:187 msgid "Remote" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:595 +#: htdocs/luci-static/resources/fchomo.js:615 msgid "Remove" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:600 -#: htdocs/luci-static/resources/view/fchomo/node.js:75 -#: htdocs/luci-static/resources/view/fchomo/node.js:77 +#: htdocs/luci-static/resources/fchomo.js:620 +#: htdocs/luci-static/resources/view/fchomo/node.js:727 +#: htdocs/luci-static/resources/view/fchomo/node.js:729 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:167 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:169 msgid "Remove idles" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:185 +#: htdocs/luci-static/resources/view/fchomo/node.js:837 msgid "Replace name" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:186 +#: htdocs/luci-static/resources/view/fchomo/node.js:838 msgid "Replace node name." msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:549 +#: htdocs/luci-static/resources/view/fchomo/node.js:556 +msgid "Request path" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:244 +msgid "Request timeout" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/global.js:198 msgid "Resources management" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:641 +#: htdocs/luci-static/resources/view/fchomo/node.js:365 +msgid "Restls script" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:644 msgid "Routing Control" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:661 +#: htdocs/luci-static/resources/view/fchomo/global.js:664 msgid "Routing GFW" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:412 -#: htdocs/luci-static/resources/view/fchomo/global.js:594 -#: htdocs/luci-static/resources/view/fchomo/node.js:243 +#: htdocs/luci-static/resources/view/fchomo/client.js:550 +#: htdocs/luci-static/resources/view/fchomo/global.js:597 +#: htdocs/luci-static/resources/view/fchomo/node.js:695 +#: htdocs/luci-static/resources/view/fchomo/node.js:899 msgid "Routing mark" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:657 +#: htdocs/luci-static/resources/view/fchomo/global.js:660 msgid "Routing mode" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:658 +#: htdocs/luci-static/resources/view/fchomo/global.js:661 msgid "Routing mode of the traffic enters mihomo via firewall rules." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:664 +#: htdocs/luci-static/resources/view/fchomo/global.js:667 msgid "Routing mode will be handle domain." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:643 -#: htdocs/luci-static/resources/view/fchomo/global.js:650 +#: htdocs/luci-static/resources/view/fchomo/global.js:646 +#: htdocs/luci-static/resources/view/fchomo/global.js:653 msgid "Routing ports" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:500 -#: htdocs/luci-static/resources/view/fchomo/client.js:510 +#: htdocs/luci-static/resources/view/fchomo/client.js:638 +#: htdocs/luci-static/resources/view/fchomo/client.js:648 msgid "Routing rule" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:588 +#: htdocs/luci-static/resources/view/fchomo/global.js:591 msgid "Routing rule priority" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:582 +#: htdocs/luci-static/resources/view/fchomo/global.js:585 msgid "Routing table ID" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:284 +#: htdocs/luci-static/resources/view/fchomo/global.js:287 msgid "Rule" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:852 -#: htdocs/luci-static/resources/view/fchomo/client.js:865 +#: htdocs/luci-static/resources/view/fchomo/client.js:963 +#: htdocs/luci-static/resources/view/fchomo/client.js:976 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:96 msgid "Rule set" msgstr "" @@ -1394,7 +1718,7 @@ msgstr "" msgid "Ruleset-URI-Scheme" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:470 +#: htdocs/luci-static/resources/fchomo.js:490 msgid "Running" msgstr "" @@ -1402,15 +1726,24 @@ msgstr "" msgid "SOCKS" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:85 +#: htdocs/luci-static/resources/fchomo.js:86 msgid "SOCKS5" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:96 +#: htdocs/luci-static/resources/fchomo.js:97 msgid "SSH" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:179 +#: htdocs/luci-static/resources/view/fchomo/client.js:664 +msgid "SUB-RULE" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:383 +msgid "SUoT version" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:117 +#: htdocs/luci-static/resources/view/fchomo/server.js:178 msgid "Salamander" msgstr "" @@ -1422,23 +1755,31 @@ msgstr "" msgid "Same srcaddr and dstaddr requests. Same node" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:407 +#: htdocs/luci-static/resources/view/fchomo/global.js:410 msgid "Segment maximum size" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:118 +#: htdocs/luci-static/resources/fchomo.js:119 msgid "Select" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:450 +#: htdocs/luci-static/resources/view/fchomo/global.js:453 msgid "Select Dashboard" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:96 +#: htdocs/luci-static/resources/view/fchomo/server.js:97 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:54 msgid "Server" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:61 +msgid "Server address" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:534 +msgid "Server hostname" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/global.js:153 msgid "Server status" msgstr "" @@ -1448,11 +1789,27 @@ msgid "Service status" msgstr "" #: htdocs/luci-static/resources/fchomo.js:61 -#: htdocs/luci-static/resources/fchomo.js:86 +#: htdocs/luci-static/resources/fchomo.js:87 msgid "Shadowsocks" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:295 +#: htdocs/luci-static/resources/view/fchomo/node.js:257 +msgid "Shadowsocks chipher" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:252 +msgid "Shadowsocks encrypt" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:264 +msgid "Shadowsocks password" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:651 +msgid "Show connections in the dashboard for breaking connections easier." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:298 msgid "Silent" msgstr "" @@ -1460,50 +1817,65 @@ msgstr "" msgid "Simple round-robin all nodes" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:508 -msgid "Skiped sniffing domain" -msgstr "" - -#: htdocs/luci-static/resources/view/fchomo/global.js:514 -msgid "Skiped sniffing dst address" +#: htdocs/luci-static/resources/view/fchomo/node.js:463 +#: htdocs/luci-static/resources/view/fchomo/node.js:880 +msgid "Skip cert verify" msgstr "" #: htdocs/luci-static/resources/view/fchomo/global.js:511 +msgid "Skiped sniffing domain" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:517 +msgid "Skiped sniffing dst address" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:514 msgid "Skiped sniffing src address" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:88 +#: htdocs/luci-static/resources/fchomo.js:89 msgid "Snell" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:518 +#: htdocs/luci-static/resources/view/fchomo/global.js:521 msgid "Sniff protocol" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:495 +#: htdocs/luci-static/resources/view/fchomo/global.js:498 msgid "Sniffer" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:498 +#: htdocs/luci-static/resources/view/fchomo/global.js:501 msgid "Sniffer settings" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:644 -#: htdocs/luci-static/resources/view/fchomo/global.js:651 +#: htdocs/luci-static/resources/view/fchomo/global.js:647 +#: htdocs/luci-static/resources/view/fchomo/global.js:654 msgid "" "Specify target ports to be proxied. Multiple ports must be separated by " "commas." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:381 +#: htdocs/luci-static/resources/view/fchomo/global.js:384 msgid "Stack" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:472 -#: htdocs/luci-static/resources/view/fchomo/client.js:474 +#: htdocs/luci-static/resources/view/fchomo/client.js:610 +#: htdocs/luci-static/resources/view/fchomo/client.js:612 msgid "Strategy" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/client.js:687 +#: htdocs/luci-static/resources/view/fchomo/client.js:708 +#: htdocs/luci-static/resources/view/fchomo/client.js:718 +msgid "Sub rule" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:732 +msgid "Sub rule group" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/ruleset.js:140 msgid "Successfully imported %s rule-set of total %s." msgstr "" @@ -1518,7 +1890,7 @@ msgid "" "text, yaml, mrs.
" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:383 +#: htdocs/luci-static/resources/view/fchomo/global.js:386 msgid "System" msgstr "" @@ -1526,41 +1898,57 @@ msgstr "" msgid "System DNS" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:249 +#: htdocs/luci-static/resources/view/fchomo/client.js:275 msgid "TCP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:311 +#: htdocs/luci-static/resources/view/fchomo/global.js:314 msgid "TCP concurrency" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:319 -msgid "TCP-Keep-Alive idle" +#: htdocs/luci-static/resources/view/fchomo/node.js:644 +msgid "TCP only" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:314 +#: htdocs/luci-static/resources/view/fchomo/global.js:322 +msgid "TCP-Keep-Alive idle timeout" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:317 msgid "TCP-Keep-Alive interval" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:201 +#: htdocs/luci-static/resources/view/fchomo/node.js:675 +#: htdocs/luci-static/resources/view/fchomo/node.js:853 msgid "TFO" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:422 -#: htdocs/luci-static/resources/view/fchomo/server.js:323 +#: htdocs/luci-static/resources/view/fchomo/global.js:425 +#: htdocs/luci-static/resources/view/fchomo/node.js:333 +#: htdocs/luci-static/resources/view/fchomo/node.js:391 +#: htdocs/luci-static/resources/view/fchomo/server.js:309 msgid "TLS" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:345 +#: htdocs/luci-static/resources/view/fchomo/node.js:445 +#: htdocs/luci-static/resources/view/fchomo/server.js:331 msgid "TLS ALPN" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:439 +msgid "TLS SNI" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:41 +msgid "TLS fields" +msgstr "" + #: htdocs/luci-static/resources/fchomo.js:63 -#: htdocs/luci-static/resources/fchomo.js:94 +#: htdocs/luci-static/resources/fchomo.js:95 msgid "TUIC" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:172 +#: htdocs/luci-static/resources/view/fchomo/server.js:171 msgid "" "Tell the client to use the BBR flow control algorithm instead of Hysteria CC." msgstr "" @@ -1569,93 +1957,137 @@ msgstr "" msgid "The default value is 2:00 every day." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:911 +#: htdocs/luci-static/resources/view/fchomo/client.js:1022 msgid "The matching %s will be deemed as not-poisoned." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:920 -#: htdocs/luci-static/resources/view/fchomo/client.js:924 -#: htdocs/luci-static/resources/view/fchomo/client.js:929 +#: htdocs/luci-static/resources/view/fchomo/client.js:1031 +#: htdocs/luci-static/resources/view/fchomo/client.js:1035 +#: htdocs/luci-static/resources/view/fchomo/client.js:1040 msgid "The matching %s will be deemed as poisoned." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:366 +#: htdocs/luci-static/resources/view/fchomo/server.js:352 msgid "The server private key, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:351 +#: htdocs/luci-static/resources/view/fchomo/server.js:337 msgid "The server public key, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:373 +#: htdocs/luci-static/resources/view/fchomo/node.js:466 +#: htdocs/luci-static/resources/view/fchomo/node.js:883 +msgid "" +"This is DANGEROUS, your traffic is almost like " +"PLAIN TEXT! Use at your own risk!" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:214 +msgid "" +"This is the TUIC port of the SUoT protocol, designed to provide a QUIC " +"stream based UDP relay mode that TUIC does not provide." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:376 msgid "" "To enable Tun support, you need to install ip-full and " "kmod-tun" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:667 +#: htdocs/luci-static/resources/view/fchomo/global.js:670 msgid "To enable, you need to install dnsmasq-full." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:601 +#: htdocs/luci-static/resources/view/fchomo/global.js:604 msgid "Tproxy Fwmark" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:355 +#: htdocs/luci-static/resources/view/fchomo/global.js:358 msgid "Tproxy port" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:91 +#: htdocs/luci-static/resources/view/fchomo/node.js:497 +msgid "Transport" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:42 +msgid "Transport fields" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:502 +msgid "Transport type" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:92 msgid "Trojan" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:606 +#: htdocs/luci-static/resources/view/fchomo/global.js:609 msgid "Tun Fwmark" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:371 +#: htdocs/luci-static/resources/view/fchomo/global.js:374 msgid "Tun TCP/UDP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:378 +#: htdocs/luci-static/resources/view/fchomo/global.js:381 msgid "Tun settings" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:382 +#: htdocs/luci-static/resources/view/fchomo/global.js:385 msgid "Tun stack." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:202 -#: htdocs/luci-static/resources/view/fchomo/client.js:344 -#: htdocs/luci-static/resources/view/fchomo/client.js:532 -#: htdocs/luci-static/resources/view/fchomo/client.js:849 -#: htdocs/luci-static/resources/view/fchomo/node.js:49 -#: htdocs/luci-static/resources/view/fchomo/node.js:98 +#: htdocs/luci-static/resources/view/fchomo/client.js:223 +#: htdocs/luci-static/resources/view/fchomo/client.js:306 +#: htdocs/luci-static/resources/view/fchomo/client.js:482 +#: htdocs/luci-static/resources/view/fchomo/client.js:960 +#: htdocs/luci-static/resources/view/fchomo/node.js:55 +#: htdocs/luci-static/resources/view/fchomo/node.js:750 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:185 -#: htdocs/luci-static/resources/view/fchomo/server.js:111 +#: htdocs/luci-static/resources/view/fchomo/server.js:112 msgid "Type" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:248 -#: htdocs/luci-static/resources/view/fchomo/node.js:209 -#: htdocs/luci-static/resources/view/fchomo/server.js:381 +#: htdocs/luci-static/resources/view/fchomo/client.js:274 +#: htdocs/luci-static/resources/view/fchomo/node.js:372 +#: htdocs/luci-static/resources/view/fchomo/node.js:861 +#: htdocs/luci-static/resources/view/fchomo/server.js:367 msgid "UDP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:411 +#: htdocs/luci-static/resources/view/fchomo/global.js:414 msgid "UDP NAT expiration time" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:120 +#: htdocs/luci-static/resources/view/fchomo/node.js:213 +msgid "UDP over stream" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:219 +msgid "UDP over stream version" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:206 +msgid "UDP packet relay mode." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:205 +msgid "UDP relay mode" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:121 msgid "URL test" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:251 -#: htdocs/luci-static/resources/view/fchomo/server.js:298 +#: htdocs/luci-static/resources/view/fchomo/node.js:184 +#: htdocs/luci-static/resources/view/fchomo/node.js:274 +#: htdocs/luci-static/resources/view/fchomo/server.js:237 +#: htdocs/luci-static/resources/view/fchomo/server.js:284 msgid "UUID" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:515 +#: htdocs/luci-static/resources/fchomo.js:535 msgid "Unable to download unsupported type: %s" msgstr "" @@ -1663,7 +2095,7 @@ msgstr "" msgid "Unable to save contents: %s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:308 +#: htdocs/luci-static/resources/view/fchomo/global.js:311 msgid "Unified delay" msgstr "" @@ -1680,7 +2112,8 @@ msgstr "" msgid "Unknown error: %s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:213 +#: htdocs/luci-static/resources/view/fchomo/node.js:377 +#: htdocs/luci-static/resources/view/fchomo/node.js:865 msgid "UoT" msgstr "" @@ -1688,74 +2121,114 @@ msgstr "" msgid "Update failed." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:145 +#: htdocs/luci-static/resources/view/fchomo/node.js:797 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:260 msgid "Update interval" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:357 +#: htdocs/luci-static/resources/view/fchomo/node.js:662 +msgid "Upload bandwidth" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:663 +msgid "Upload bandwidth in Mbps." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/server.js:343 msgid "Upload certificate" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:372 +#: htdocs/luci-static/resources/view/fchomo/server.js:358 msgid "Upload key" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:360 -#: htdocs/luci-static/resources/view/fchomo/server.js:375 +#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/server.js:361 msgid "Upload..." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:646 +#: htdocs/luci-static/resources/view/fchomo/client.js:757 msgid "Used to resolve the domain of the DNS server. Must be IP." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:653 +#: htdocs/luci-static/resources/view/fchomo/client.js:764 msgid "Used to resolve the domain of the Proxy node." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:328 +#: htdocs/luci-static/resources/view/fchomo/node.js:440 +msgid "Used to verify the hostname on the returned certificates." +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:331 msgid "User Authentication" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:132 +#: htdocs/luci-static/resources/view/fchomo/node.js:73 +#: htdocs/luci-static/resources/view/fchomo/server.js:133 msgid "Username" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:614 +#: htdocs/luci-static/resources/view/fchomo/global.js:617 msgid "Users filter mode" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:90 +#: htdocs/luci-static/resources/view/fchomo/node.js:592 +msgid "V2ray HTTPUpgrade" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:597 +msgid "V2ray HTTPUpgrade fast open" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:91 msgid "VLESS" msgstr "" #: htdocs/luci-static/resources/fchomo.js:62 -#: htdocs/luci-static/resources/fchomo.js:89 +#: htdocs/luci-static/resources/fchomo.js:90 msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:103 +#: htdocs/luci-static/resources/view/fchomo/node.js:755 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:218 msgid "Value" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:297 +#: htdocs/luci-static/resources/view/fchomo/node.js:175 +#: htdocs/luci-static/resources/view/fchomo/node.js:351 +msgid "Version" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:359 +msgid "Version hint" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:300 msgid "Warning" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:507 +#: htdocs/luci-static/resources/view/fchomo/node.js:518 +#: htdocs/luci-static/resources/view/fchomo/node.js:523 +msgid "WebSocket" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/server.js:59 msgid "When used as a server, HomeProxy is a better choice." msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:616 +#: htdocs/luci-static/resources/view/fchomo/global.js:619 msgid "White list" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:95 +#: htdocs/luci-static/resources/fchomo.js:96 msgid "WireGuard" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:317 +msgid "Xudp (Xray-core)" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/ruleset.js:192 msgid "Yaml text" msgstr "" @@ -1764,79 +2237,110 @@ msgstr "" msgid "YouTube" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:831 +#: htdocs/luci-static/resources/fchomo.js:872 msgid "Your %s was successfully uploaded. Size: %sB." msgstr "" -#: htdocs/luci-static/resources/fchomo.js:181 +#: htdocs/luci-static/resources/fchomo.js:184 +#: htdocs/luci-static/resources/view/fchomo/node.js:258 +#: htdocs/luci-static/resources/view/fchomo/node.js:297 msgid "aes-128-gcm" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:182 +#: htdocs/luci-static/resources/fchomo.js:185 msgid "aes-192-gcm" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:183 +#: htdocs/luci-static/resources/fchomo.js:186 +#: htdocs/luci-static/resources/view/fchomo/node.js:259 msgid "aes-256-gcm" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:273 +#: htdocs/luci-static/resources/view/fchomo/node.js:294 +msgid "auto" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:201 +#: htdocs/luci-static/resources/view/fchomo/server.js:259 msgid "bbr" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:362 +#: htdocs/luci-static/resources/view/fchomo/server.js:348 msgid "certificate" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:184 +#: htdocs/luci-static/resources/fchomo.js:187 +#: htdocs/luci-static/resources/view/fchomo/node.js:260 msgid "chacha20-ietf-poly1305" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:271 +#: htdocs/luci-static/resources/view/fchomo/node.js:298 +msgid "chacha20-poly1305" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:199 +#: htdocs/luci-static/resources/view/fchomo/server.js:257 msgid "cubic" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:557 +#: htdocs/luci-static/resources/view/fchomo/global.js:560 msgid "dialer-ip4p-convert" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:232 +#: htdocs/luci-static/resources/view/fchomo/node.js:684 +#: htdocs/luci-static/resources/view/fchomo/node.js:888 msgid "dialer-proxy" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:222 +#: htdocs/luci-static/resources/view/fchomo/node.js:875 msgid "down" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:385 +#: htdocs/luci-static/resources/view/fchomo/node.js:506 +#: htdocs/luci-static/resources/view/fchomo/node.js:517 +#: htdocs/luci-static/resources/view/fchomo/node.js:522 +msgid "gRPC" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:576 +msgid "gRPC service name" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:388 msgid "gVisor" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:248 -msgid "ip-version" +#: htdocs/luci-static/resources/view/fchomo/node.js:613 +msgid "h2mux" msgstr "" #: htdocs/luci-static/resources/fchomo.js:33 msgid "metacubexd" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:205 +#: htdocs/luci-static/resources/view/fchomo/node.js:679 +#: htdocs/luci-static/resources/view/fchomo/node.js:857 msgid "mpTCP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:272 +#: htdocs/luci-static/resources/view/fchomo/node.js:200 +#: htdocs/luci-static/resources/view/fchomo/server.js:258 msgid "new_reno" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:613 +#: htdocs/luci-static/resources/view/fchomo/client.js:389 msgid "no-resolve" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:699 +#: htdocs/luci-static/resources/fchomo.js:718 +#: htdocs/luci-static/resources/fchomo.js:740 msgid "non-empty value" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:179 +#: htdocs/luci-static/resources/fchomo.js:182 +#: htdocs/luci-static/resources/view/fchomo/node.js:295 +#: htdocs/luci-static/resources/view/fchomo/node.js:315 +#: htdocs/luci-static/resources/view/fchomo/node.js:323 msgid "none" msgstr "" @@ -1844,27 +2348,35 @@ msgstr "" msgid "not found" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:334 +#: htdocs/luci-static/resources/view/fchomo/client.js:472 msgid "not included \",\"" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:108 +#: htdocs/luci-static/resources/fchomo.js:109 msgid "null" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:188 +#: htdocs/luci-static/resources/view/fchomo/node.js:324 +msgid "obfs-simple" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:840 msgid "override.proxy-name" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:377 +#: htdocs/luci-static/resources/view/fchomo/node.js:316 +msgid "packet addr (v2ray-core v5+)" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/server.js:363 msgid "private key" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:554 +#: htdocs/luci-static/resources/view/fchomo/global.js:557 msgid "quic-go-disable-ecn" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:551 +#: htdocs/luci-static/resources/view/fchomo/global.js:554 msgid "quic-go-disable-gso" msgstr "" @@ -1872,11 +2384,19 @@ msgstr "" msgid "razord-meta" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:227 -msgid "skip-cert-verify" +#: htdocs/luci-static/resources/view/fchomo/node.js:327 +msgid "restls" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:597 +#: htdocs/luci-static/resources/view/fchomo/node.js:326 +msgid "shadow-tls" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:611 +msgid "smux" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:372 msgid "src" msgstr "" @@ -1884,49 +2404,71 @@ msgstr "" msgid "unchecked" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:539 +#: htdocs/luci-static/resources/fchomo.js:559 msgid "unique UCI identifier" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:542 +#: htdocs/luci-static/resources/fchomo.js:562 msgid "unique identifier" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:708 +#: htdocs/luci-static/resources/fchomo.js:749 msgid "unique value" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:217 +#: htdocs/luci-static/resources/view/fchomo/node.js:870 msgid "up" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:678 -#: htdocs/luci-static/resources/fchomo.js:681 +#: htdocs/luci-static/resources/view/fchomo/node.js:176 +#: htdocs/luci-static/resources/view/fchomo/node.js:220 +#: htdocs/luci-static/resources/view/fchomo/node.js:352 +#: htdocs/luci-static/resources/view/fchomo/node.js:384 +msgid "v1" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:177 +#: htdocs/luci-static/resources/view/fchomo/node.js:353 +#: htdocs/luci-static/resources/view/fchomo/node.js:385 +msgid "v2" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:178 +#: htdocs/luci-static/resources/view/fchomo/node.js:354 +msgid "v3" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:700 +#: htdocs/luci-static/resources/fchomo.js:703 msgid "valid JSON format" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:720 -#: htdocs/luci-static/resources/fchomo.js:723 +#: htdocs/luci-static/resources/view/fchomo/node.js:456 +msgid "valid SHA256 string with %d characters" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:761 +#: htdocs/luci-static/resources/fchomo.js:764 msgid "valid URL" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:237 +#: htdocs/luci-static/resources/fchomo.js:715 msgid "valid base64 key with %d characters" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:240 +#: htdocs/luci-static/resources/fchomo.js:720 msgid "valid key length with %d characters" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:661 +#: htdocs/luci-static/resources/fchomo.js:683 msgid "valid port value" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:733 +#: htdocs/luci-static/resources/fchomo.js:774 msgid "valid uuid" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:185 +#: htdocs/luci-static/resources/fchomo.js:188 msgid "xchacha20-ietf-poly1305" msgstr "" @@ -1934,6 +2476,14 @@ msgstr "" msgid "yacd-meta" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:517 +#: htdocs/luci-static/resources/view/fchomo/node.js:612 +msgid "yamux" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:296 +msgid "zero" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:537 msgid "🡇" msgstr "" diff --git a/luci-app-fchomo/po/zh_Hans/fchomo.po b/luci-app-fchomo/po/zh_Hans/fchomo.po index d95a9d111..f80c019fe 100644 --- a/luci-app-fchomo/po/zh_Hans/fchomo.po +++ b/luci-app-fchomo/po/zh_Hans/fchomo.po @@ -12,18 +12,19 @@ msgstr "" msgid "%s log" msgstr "%s 日志" -#: htdocs/luci-static/resources/fchomo.js:414 -#: htdocs/luci-static/resources/fchomo.js:427 -#: htdocs/luci-static/resources/fchomo.js:440 -#: htdocs/luci-static/resources/view/fchomo/client.js:256 -#: htdocs/luci-static/resources/view/fchomo/client.js:358 -#: htdocs/luci-static/resources/view/fchomo/client.js:372 -#: htdocs/luci-static/resources/view/fchomo/client.js:867 -#: htdocs/luci-static/resources/view/fchomo/global.js:456 +#: htdocs/luci-static/resources/fchomo.js:417 +#: htdocs/luci-static/resources/fchomo.js:430 +#: htdocs/luci-static/resources/fchomo.js:443 +#: htdocs/luci-static/resources/fchomo.js:457 +#: htdocs/luci-static/resources/view/fchomo/client.js:282 +#: htdocs/luci-static/resources/view/fchomo/client.js:496 +#: htdocs/luci-static/resources/view/fchomo/client.js:510 +#: htdocs/luci-static/resources/view/fchomo/client.js:978 +#: htdocs/luci-static/resources/view/fchomo/global.js:459 msgid "-- Please choose --" msgstr "-- 请选择 --" -#: htdocs/luci-static/resources/fchomo.js:692 +#: htdocs/luci-static/resources/fchomo.js:733 msgid "/^(\\d+)(s|m|h|d)?$/" msgstr "" @@ -31,48 +32,48 @@ msgstr "" msgid "163Music" msgstr "网抑云" -#: htdocs/luci-static/resources/fchomo.js:187 +#: htdocs/luci-static/resources/fchomo.js:190 msgid "2022-blake3-aes-128-gcm" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:188 +#: htdocs/luci-static/resources/fchomo.js:191 msgid "2022-blake3-aes-256-gcm" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:189 +#: htdocs/luci-static/resources/fchomo.js:192 msgid "2022-blake3-chacha20-poly1305" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:358 -#: htdocs/luci-static/resources/view/fchomo/server.js:373 +#: htdocs/luci-static/resources/view/fchomo/server.js:344 +#: htdocs/luci-static/resources/view/fchomo/server.js:359 msgid "Save your configuration before uploading files!" msgstr "上传文件前请先保存配置!" -#: htdocs/luci-static/resources/view/fchomo/global.js:444 +#: htdocs/luci-static/resources/view/fchomo/global.js:447 msgid "API" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:485 +#: htdocs/luci-static/resources/view/fchomo/global.js:488 msgid "API DoH service" msgstr "API DoH 服务器" -#: htdocs/luci-static/resources/view/fchomo/global.js:476 +#: htdocs/luci-static/resources/view/fchomo/global.js:479 msgid "API HTTP port" msgstr "API HTTP 端口" -#: htdocs/luci-static/resources/view/fchomo/global.js:480 +#: htdocs/luci-static/resources/view/fchomo/global.js:483 msgid "API HTTPS port" msgstr "API HTTPS 端口" -#: htdocs/luci-static/resources/view/fchomo/global.js:434 +#: htdocs/luci-static/resources/view/fchomo/global.js:437 msgid "API TLS certificate path" msgstr "API TLS 证书路径" -#: htdocs/luci-static/resources/view/fchomo/global.js:438 +#: htdocs/luci-static/resources/view/fchomo/global.js:441 msgid "API TLS private key path" msgstr "API TLS 私钥" -#: htdocs/luci-static/resources/view/fchomo/global.js:489 +#: htdocs/luci-static/resources/view/fchomo/global.js:492 msgid "API secret" msgstr "API 令牌" @@ -80,16 +81,16 @@ msgstr "API 令牌" msgid "ASN version" msgstr "ASN 版本" -#: htdocs/luci-static/resources/view/fchomo/global.js:562 -#: htdocs/luci-static/resources/view/fchomo/global.js:612 +#: htdocs/luci-static/resources/view/fchomo/global.js:565 +#: htdocs/luci-static/resources/view/fchomo/global.js:615 msgid "Access Control" msgstr "访问控制" -#: htdocs/luci-static/resources/view/fchomo/client.js:835 +#: htdocs/luci-static/resources/view/fchomo/client.js:946 msgid "Add a DNS policy" msgstr "新增 DNS 策略" -#: htdocs/luci-static/resources/view/fchomo/client.js:694 +#: htdocs/luci-static/resources/view/fchomo/client.js:805 msgid "Add a DNS server" msgstr "新增 DNS 服务器" @@ -97,19 +98,15 @@ msgstr "新增 DNS 服务器" msgid "Add a Node" msgstr "新增 节点" -#: htdocs/luci-static/resources/view/fchomo/client.js:717 -msgid "Add a sub rule" -msgstr "新增 子规则" - -#: htdocs/luci-static/resources/view/fchomo/node.js:67 +#: htdocs/luci-static/resources/view/fchomo/node.js:719 msgid "Add a provider" msgstr "新增 供应商" -#: htdocs/luci-static/resources/view/fchomo/client.js:320 +#: htdocs/luci-static/resources/view/fchomo/client.js:458 msgid "Add a proxy group" msgstr "新增 策略组" -#: htdocs/luci-static/resources/view/fchomo/client.js:510 +#: htdocs/luci-static/resources/view/fchomo/client.js:648 msgid "Add a routing rule" msgstr "新增 路由规则" @@ -117,34 +114,38 @@ msgstr "新增 路由规则" msgid "Add a rule set" msgstr "新增 规则集" -#: htdocs/luci-static/resources/view/fchomo/server.js:96 +#: htdocs/luci-static/resources/view/fchomo/server.js:97 msgid "Add a server" msgstr "新增 服务器" -#: htdocs/luci-static/resources/view/fchomo/node.js:179 +#: htdocs/luci-static/resources/view/fchomo/client.js:718 +msgid "Add a sub rule" +msgstr "新增 子规则" + +#: htdocs/luci-static/resources/view/fchomo/node.js:831 msgid "Add prefix" msgstr "添加前缀" -#: htdocs/luci-static/resources/view/fchomo/node.js:182 +#: htdocs/luci-static/resources/view/fchomo/node.js:834 msgid "Add suffix" msgstr "添加后缀" -#: htdocs/luci-static/resources/view/fchomo/client.js:708 -#: htdocs/luci-static/resources/view/fchomo/client.js:713 +#: htdocs/luci-static/resources/view/fchomo/client.js:819 +#: htdocs/luci-static/resources/view/fchomo/client.js:824 msgid "Address" msgstr "地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:615 -#: htdocs/luci-static/resources/view/fchomo/global.js:659 +#: htdocs/luci-static/resources/view/fchomo/global.js:618 +#: htdocs/luci-static/resources/view/fchomo/global.js:662 msgid "All allowed" msgstr "允许所有" -#: htdocs/luci-static/resources/view/fchomo/global.js:645 -#: htdocs/luci-static/resources/view/fchomo/global.js:652 +#: htdocs/luci-static/resources/view/fchomo/global.js:648 +#: htdocs/luci-static/resources/view/fchomo/global.js:655 msgid "All ports" msgstr "所有端口" -#: htdocs/luci-static/resources/view/fchomo/global.js:472 +#: htdocs/luci-static/resources/view/fchomo/global.js:475 msgid "" "Allow access from private network.
To access the API on a private " "network from a public website, it must be enabled." @@ -159,7 +160,8 @@ msgstr "已是最新版本。" msgid "Already in updating." msgstr "已在更新中。" -#: htdocs/luci-static/resources/view/fchomo/server.js:315 +#: htdocs/luci-static/resources/view/fchomo/node.js:286 +#: htdocs/luci-static/resources/view/fchomo/server.js:301 msgid "Alter ID" msgstr "额外 ID" @@ -167,15 +169,19 @@ msgstr "额外 ID" msgid "Application version" msgstr "应用版本" -#: htdocs/luci-static/resources/view/fchomo/server.js:284 +#: htdocs/luci-static/resources/view/fchomo/server.js:276 msgid "Auth timeout" msgstr "认证超时" -#: htdocs/luci-static/resources/view/fchomo/global.js:290 +#: htdocs/luci-static/resources/view/fchomo/node.js:308 +msgid "Authenticated length" +msgstr "认证长度" + +#: htdocs/luci-static/resources/view/fchomo/global.js:293 msgid "Auto" msgstr "自动" -#: htdocs/luci-static/resources/view/fchomo/server.js:86 +#: htdocs/luci-static/resources/view/fchomo/server.js:87 msgid "Auto configure firewall" msgstr "自动配置防火墙" @@ -191,7 +197,7 @@ msgstr "自动更新资源文件。" msgid "Baidu" msgstr "百度" -#: htdocs/luci-static/resources/view/fchomo/global.js:395 +#: htdocs/luci-static/resources/view/fchomo/global.js:398 msgid "Based on google/gvisor." msgstr "基于 google/gvisor。" @@ -208,23 +214,25 @@ msgstr "二进制文件" msgid "Binary format only supports domain / ipcidr" msgstr "二进制格式仅支持 domain/ipcidr" -#: htdocs/luci-static/resources/view/fchomo/client.js:405 -#: htdocs/luci-static/resources/view/fchomo/global.js:576 -#: htdocs/luci-static/resources/view/fchomo/node.js:236 +#: htdocs/luci-static/resources/view/fchomo/client.js:543 +#: htdocs/luci-static/resources/view/fchomo/global.js:579 +#: htdocs/luci-static/resources/view/fchomo/node.js:688 +#: htdocs/luci-static/resources/view/fchomo/node.js:892 msgid "Bind interface" msgstr "绑定接口" -#: htdocs/luci-static/resources/view/fchomo/client.js:406 -#: htdocs/luci-static/resources/view/fchomo/node.js:237 +#: htdocs/luci-static/resources/view/fchomo/client.js:544 +#: htdocs/luci-static/resources/view/fchomo/node.js:689 +#: htdocs/luci-static/resources/view/fchomo/node.js:893 msgid "Bind outbound interface.
" msgstr "绑定出站接口。
" -#: htdocs/luci-static/resources/view/fchomo/global.js:577 +#: htdocs/luci-static/resources/view/fchomo/global.js:580 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect.
" msgstr "绑定出站流量至指定接口。留空自动检测。
" -#: htdocs/luci-static/resources/view/fchomo/global.js:617 +#: htdocs/luci-static/resources/view/fchomo/global.js:620 msgid "Black list" msgstr "黑名单" @@ -232,27 +240,27 @@ msgstr "黑名单" msgid "Block DNS queries" msgstr "封锁 DNS 请求" -#: htdocs/luci-static/resources/view/fchomo/client.js:645 +#: htdocs/luci-static/resources/view/fchomo/client.js:756 msgid "Boot DNS server" msgstr "启动 DNS 服务器" -#: htdocs/luci-static/resources/view/fchomo/client.js:652 +#: htdocs/luci-static/resources/view/fchomo/client.js:763 msgid "Boot DNS server (Node)" msgstr "启动 DNS 服务器 (节点)" -#: htdocs/luci-static/resources/view/fchomo/global.js:660 +#: htdocs/luci-static/resources/view/fchomo/global.js:663 msgid "Bypass CN" msgstr "绕过 CN 流量" -#: htdocs/luci-static/resources/view/fchomo/global.js:467 +#: htdocs/luci-static/resources/view/fchomo/global.js:470 msgid "CORS Allow origins" msgstr "CORS 允许的来源" -#: htdocs/luci-static/resources/view/fchomo/global.js:471 +#: htdocs/luci-static/resources/view/fchomo/global.js:474 msgid "CORS Allow private network" msgstr "CORS 允许私有网络" -#: htdocs/luci-static/resources/view/fchomo/global.js:468 +#: htdocs/luci-static/resources/view/fchomo/global.js:471 msgid "CORS allowed origins, * will be used if empty." msgstr "CORS 允许的来源,留空则使用 *。" @@ -260,7 +268,16 @@ msgstr "CORS 允许的来源,留空则使用 *。" msgid "Cancel" msgstr "取消" -#: htdocs/luci-static/resources/view/fchomo/server.js:350 +#: htdocs/luci-static/resources/view/fchomo/node.js:450 +msgid "Cert fingerprint" +msgstr "证书指纹" + +#: htdocs/luci-static/resources/view/fchomo/node.js:451 +msgid "" +"Certificate fingerprint. Used to implement SSL Pinning and prevent MitM." +msgstr "证书指纹。用于实现 SSL证书固定 并防止 MitM。" + +#: htdocs/luci-static/resources/view/fchomo/server.js:336 msgid "Certificate path" msgstr "证书路径" @@ -272,19 +289,21 @@ msgstr "检查" msgid "Check update" msgstr "检查更新" -#: htdocs/luci-static/resources/view/fchomo/global.js:262 +#: htdocs/luci-static/resources/view/fchomo/global.js:265 msgid "China IPv4 list version" msgstr "大陆 IPv4 库版本" -#: htdocs/luci-static/resources/view/fchomo/global.js:265 +#: htdocs/luci-static/resources/view/fchomo/global.js:268 msgid "China IPv6 list version" msgstr "大陆 IPv6 库版本" -#: htdocs/luci-static/resources/view/fchomo/global.js:271 +#: htdocs/luci-static/resources/view/fchomo/global.js:274 msgid "China list version" msgstr "大陆域名列表版本" -#: htdocs/luci-static/resources/view/fchomo/server.js:209 +#: htdocs/luci-static/resources/view/fchomo/node.js:150 +#: htdocs/luci-static/resources/view/fchomo/node.js:292 +#: htdocs/luci-static/resources/view/fchomo/server.js:208 msgid "Chipher" msgstr "加密方法" @@ -296,6 +315,10 @@ msgstr "清空日志" msgid "Client" msgstr "客户端" +#: htdocs/luci-static/resources/view/fchomo/node.js:472 +msgid "Client fingerprint" +msgstr "客户端指纹" + #: htdocs/luci-static/resources/view/fchomo/global.js:145 msgid "Client status" msgstr "客户端状态" @@ -304,25 +327,26 @@ msgstr "客户端状态" msgid "Collecting data..." msgstr "收集数据中..." -#: htdocs/luci-static/resources/view/fchomo/global.js:647 -#: htdocs/luci-static/resources/view/fchomo/global.js:654 +#: htdocs/luci-static/resources/view/fchomo/global.js:650 +#: htdocs/luci-static/resources/view/fchomo/global.js:657 msgid "Common and STUN ports" msgstr "常用端口和 STUN 端口" -#: htdocs/luci-static/resources/view/fchomo/global.js:646 -#: htdocs/luci-static/resources/view/fchomo/global.js:653 +#: htdocs/luci-static/resources/view/fchomo/global.js:649 +#: htdocs/luci-static/resources/view/fchomo/global.js:656 msgid "Common ports only (bypass P2P traffic)" msgstr "仅常用端口(绕过 P2P 流量)" -#: htdocs/luci-static/resources/fchomo.js:606 +#: htdocs/luci-static/resources/fchomo.js:626 msgid "Complete" msgstr "完成" -#: htdocs/luci-static/resources/view/fchomo/node.js:196 +#: htdocs/luci-static/resources/view/fchomo/node.js:848 msgid "Configuration Items" msgstr "配置项" -#: htdocs/luci-static/resources/view/fchomo/server.js:268 +#: htdocs/luci-static/resources/view/fchomo/node.js:196 +#: htdocs/luci-static/resources/view/fchomo/server.js:254 msgid "Congestion controller" msgstr "拥塞控制器" @@ -330,12 +354,12 @@ msgstr "拥塞控制器" msgid "Connection check" msgstr "连接检查" -#: htdocs/luci-static/resources/view/fchomo/node.js:128 +#: htdocs/luci-static/resources/view/fchomo/node.js:780 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:243 msgid "Content will not be verified, Please make sure you enter it correctly." msgstr "内容将不会被验证,请确保输入正确。" -#: htdocs/luci-static/resources/view/fchomo/node.js:120 +#: htdocs/luci-static/resources/view/fchomo/node.js:772 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:235 msgid "Contents" msgstr "内容" @@ -352,15 +376,15 @@ msgstr "核心版本" msgid "Cron expression" msgstr "Cron 表达式" -#: htdocs/luci-static/resources/view/fchomo/global.js:676 +#: htdocs/luci-static/resources/view/fchomo/global.js:679 msgid "Custom Direct List" msgstr "自定义直连列表" -#: htdocs/luci-static/resources/view/fchomo/node.js:163 +#: htdocs/luci-static/resources/view/fchomo/node.js:815 msgid "Custom HTTP header." msgstr "自定义 HTTP header。" -#: htdocs/luci-static/resources/view/fchomo/global.js:701 +#: htdocs/luci-static/resources/view/fchomo/global.js:704 msgid "Custom Proxy List" msgstr "自定义代理列表" @@ -369,22 +393,26 @@ msgid "" "Custom internal hosts. Support yaml or json format." msgstr "自定义内部 hosts。支持 yamljson 格式。" -#: htdocs/luci-static/resources/view/fchomo/client.js:825 -#: htdocs/luci-static/resources/view/fchomo/client.js:835 +#: htdocs/luci-static/resources/fchomo.js:84 +msgid "DIRECT" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:936 +#: htdocs/luci-static/resources/view/fchomo/client.js:946 msgid "DNS policy" msgstr "DNS 策略" -#: htdocs/luci-static/resources/view/fchomo/global.js:360 +#: htdocs/luci-static/resources/view/fchomo/global.js:363 msgid "DNS port" msgstr " DNS 端口" -#: htdocs/luci-static/resources/view/fchomo/client.js:684 -#: htdocs/luci-static/resources/view/fchomo/client.js:694 -#: htdocs/luci-static/resources/view/fchomo/client.js:880 +#: htdocs/luci-static/resources/view/fchomo/client.js:795 +#: htdocs/luci-static/resources/view/fchomo/client.js:805 +#: htdocs/luci-static/resources/view/fchomo/client.js:991 msgid "DNS server" msgstr "DNS 服务器" -#: htdocs/luci-static/resources/view/fchomo/client.js:631 +#: htdocs/luci-static/resources/view/fchomo/client.js:742 msgid "DNS settings" msgstr "DNS 设置" @@ -392,60 +420,86 @@ msgstr "DNS 设置" msgid "Dashboard version" msgstr "面板版本" -#: htdocs/luci-static/resources/view/fchomo/global.js:299 +#: htdocs/luci-static/resources/view/fchomo/global.js:302 msgid "Debug" msgstr "调试" +#: htdocs/luci-static/resources/view/fchomo/node.js:207 +msgid "Default" +msgstr "默认" + #: htdocs/luci-static/resources/view/fchomo/client.js:14 msgid "Default DNS (issued by WAN)" msgstr "默认 DNS(由 WAN 下发)" -#: htdocs/luci-static/resources/view/fchomo/client.js:659 +#: htdocs/luci-static/resources/view/fchomo/client.js:770 msgid "Default DNS server" msgstr "默认 DNS 服务器" -#: htdocs/luci-static/resources/view/fchomo/client.js:309 -msgid "Default outbound" -msgstr "默认出站" +#: htdocs/luci-static/resources/view/fchomo/node.js:44 +msgid "Dial fields" +msgstr "拨号字段" -#: htdocs/luci-static/resources/view/fchomo/global.js:283 +#: htdocs/luci-static/resources/view/fchomo/global.js:286 msgid "Direct" msgstr "直连" -#: htdocs/luci-static/resources/view/fchomo/global.js:619 +#: htdocs/luci-static/resources/view/fchomo/global.js:622 msgid "Direct IPv4 IP-s" msgstr "直连 IPv4 地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:622 +#: htdocs/luci-static/resources/view/fchomo/global.js:625 msgid "Direct IPv6 IP-s" msgstr "直连 IPv6 地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:625 +#: htdocs/luci-static/resources/view/fchomo/global.js:628 msgid "Direct MAC-s" msgstr "直连 MAC 地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:291 -#: htdocs/luci-static/resources/view/fchomo/server.js:178 +#: htdocs/luci-static/resources/view/fchomo/global.js:294 +#: htdocs/luci-static/resources/view/fchomo/node.js:116 +#: htdocs/luci-static/resources/view/fchomo/server.js:177 msgid "Disable" msgstr "禁用" -#: htdocs/luci-static/resources/view/fchomo/client.js:401 +#: htdocs/luci-static/resources/view/fchomo/node.js:433 +msgid "Disable SNI" +msgstr "禁用 SNI" + +#: htdocs/luci-static/resources/view/fchomo/client.js:539 msgid "Disable UDP" msgstr "禁用 UDP" -#: htdocs/luci-static/resources/view/fchomo/client.js:850 -#: htdocs/luci-static/resources/view/fchomo/client.js:855 -#: htdocs/luci-static/resources/view/fchomo/client.js:920 -#: htdocs/luci-static/resources/view/fchomo/client.js:927 -#: htdocs/luci-static/resources/view/fchomo/client.js:929 +#: htdocs/luci-static/resources/view/fchomo/client.js:961 +#: htdocs/luci-static/resources/view/fchomo/client.js:966 +#: htdocs/luci-static/resources/view/fchomo/client.js:1031 +#: htdocs/luci-static/resources/view/fchomo/client.js:1038 +#: htdocs/luci-static/resources/view/fchomo/client.js:1040 msgid "Domain" msgstr "域名" -#: htdocs/luci-static/resources/fchomo.js:512 +#: htdocs/luci-static/resources/view/fchomo/node.js:434 +msgid "Donot send server name in ClientHello." +msgstr "不要在 ClientHello 中发送服务器名称。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:464 +#: htdocs/luci-static/resources/view/fchomo/node.js:881 +msgid "Donot verifying server certificate." +msgstr "不验证服务器证书。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:668 +msgid "Download bandwidth" +msgstr "下载带宽" + +#: htdocs/luci-static/resources/view/fchomo/node.js:669 +msgid "Download bandwidth in Mbps." +msgstr "下载带宽(单位:Mbps)。" + +#: htdocs/luci-static/resources/fchomo.js:532 msgid "Download failed: %s" msgstr "下载失败: %s" -#: htdocs/luci-static/resources/fchomo.js:510 +#: htdocs/luci-static/resources/fchomo.js:530 msgid "Download successful." msgstr "下载成功。" @@ -453,18 +507,26 @@ msgstr "下载成功。" msgid "Dual stack" msgstr "双栈" -#: htdocs/luci-static/resources/view/fchomo/client.js:805 +#: htdocs/luci-static/resources/view/fchomo/client.js:916 msgid "ECS override" msgstr "强制覆盖 ECS" -#: htdocs/luci-static/resources/view/fchomo/client.js:789 +#: htdocs/luci-static/resources/view/fchomo/client.js:900 msgid "EDNS Client Subnet" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:302 +#: htdocs/luci-static/resources/view/fchomo/global.js:305 msgid "ETag support" msgstr "ETag 支持" +#: htdocs/luci-static/resources/view/fchomo/node.js:581 +msgid "Early Data first packet length limit." +msgstr "前置数据长度阈值" + +#: htdocs/luci-static/resources/view/fchomo/node.js:587 +msgid "Early Data header name" +msgstr "前置数据标头" + #: htdocs/luci-static/resources/view/fchomo/node.js:20 msgid "Edit node" msgstr "编辑节点" @@ -473,151 +535,204 @@ msgstr "编辑节点" msgid "Edit ruleset" msgstr "编辑规则集" -#: htdocs/luci-static/resources/view/fchomo/node.js:118 +#: htdocs/luci-static/resources/view/fchomo/node.js:770 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:233 msgid "Editer" msgstr "编辑器" -#: htdocs/luci-static/resources/view/fchomo/client.js:340 -#: htdocs/luci-static/resources/view/fchomo/client.js:520 -#: htdocs/luci-static/resources/view/fchomo/client.js:704 -#: htdocs/luci-static/resources/view/fchomo/client.js:845 -#: htdocs/luci-static/resources/view/fchomo/global.js:289 -#: htdocs/luci-static/resources/view/fchomo/global.js:526 -#: htdocs/luci-static/resources/view/fchomo/node.js:45 -#: htdocs/luci-static/resources/view/fchomo/node.js:94 -#: htdocs/luci-static/resources/view/fchomo/node.js:256 +#: htdocs/luci-static/resources/view/fchomo/client.js:447 +#: htdocs/luci-static/resources/view/fchomo/client.js:478 +#: htdocs/luci-static/resources/view/fchomo/client.js:658 +#: htdocs/luci-static/resources/view/fchomo/client.js:728 +#: htdocs/luci-static/resources/view/fchomo/client.js:815 +#: htdocs/luci-static/resources/view/fchomo/client.js:956 +#: htdocs/luci-static/resources/view/fchomo/global.js:292 +#: htdocs/luci-static/resources/view/fchomo/global.js:529 +#: htdocs/luci-static/resources/view/fchomo/node.js:51 +#: htdocs/luci-static/resources/view/fchomo/node.js:746 +#: htdocs/luci-static/resources/view/fchomo/node.js:912 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:181 -#: htdocs/luci-static/resources/view/fchomo/server.js:83 -#: htdocs/luci-static/resources/view/fchomo/server.js:107 +#: htdocs/luci-static/resources/view/fchomo/server.js:84 +#: htdocs/luci-static/resources/view/fchomo/server.js:108 msgid "Enable" msgstr "启用" -#: htdocs/luci-static/resources/view/fchomo/server.js:184 +#: htdocs/luci-static/resources/view/fchomo/node.js:231 +msgid "" +"Enable 0-RTT QUIC connection handshake on the client side. This is not " +"impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks." +msgstr "" +"在客户端启用 0-RTT QUIC 连接握手。由于协议是完全复用的,这对性能影响不大。" +"
强烈建议禁用此功能,因为它容易受到重放攻击。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:230 +msgid "Enable 0-RTT handshake" +msgstr "启用 0-RTT 握手" + +#: htdocs/luci-static/resources/view/fchomo/node.js:656 +msgid "Enable TCP Brutal" +msgstr "启用 TCP Brutal" + +#: htdocs/luci-static/resources/view/fchomo/node.js:657 +msgid "Enable TCP Brutal congestion control algorithm" +msgstr "启用 TCP Brutal 拥塞控制算法。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:645 +msgid "Enable multiplexing only for TCP." +msgstr "仅为 TCP 启用多路复用。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:639 +msgid "Enable padding" +msgstr "启用填充" + +#: htdocs/luci-static/resources/view/fchomo/node.js:650 +msgid "Enable statistic" +msgstr "启用统计" + +#: htdocs/luci-static/resources/view/fchomo/node.js:378 +#: htdocs/luci-static/resources/view/fchomo/node.js:866 +msgid "" +"Enable the SUoT protocol, requires server support. Conflict with Multiplex." +msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:122 +#: htdocs/luci-static/resources/view/fchomo/server.js:183 msgid "" "Enabling obfuscation will make the server incompatible with standard QUIC " "connections, losing the ability to masquerade with HTTP/3." msgstr "启用混淆将使服务器与标准的 QUIC 连接不兼容,失去 HTTP/3 伪装的能力。" -#: htdocs/luci-static/resources/view/fchomo/global.js:416 +#: htdocs/luci-static/resources/view/fchomo/global.js:419 msgid "Endpoint-Independent NAT" msgstr "端点独立 NAT" -#: htdocs/luci-static/resources/view/fchomo/client.js:524 -#: htdocs/luci-static/resources/view/fchomo/client.js:872 +#: htdocs/luci-static/resources/view/fchomo/client.js:298 +#: htdocs/luci-static/resources/view/fchomo/client.js:983 msgid "Entry" msgstr "条目" -#: htdocs/luci-static/resources/view/fchomo/global.js:296 +#: htdocs/luci-static/resources/view/fchomo/global.js:299 msgid "Error" msgstr "错误" -#: htdocs/luci-static/resources/view/fchomo/client.js:457 +#: htdocs/luci-static/resources/view/fchomo/client.js:595 msgid "" "Exceeding this triggers a forced health check. 5 will be used " "if empty." msgstr "超过此限制将会触发强制健康检查。留空则使用 5。" -#: htdocs/luci-static/resources/view/fchomo/client.js:494 -#: htdocs/luci-static/resources/view/fchomo/node.js:306 +#: htdocs/luci-static/resources/view/fchomo/client.js:632 +#: htdocs/luci-static/resources/view/fchomo/node.js:962 msgid "Exclude matched node types." msgstr "排除匹配的节点类型。" -#: htdocs/luci-static/resources/view/fchomo/client.js:489 -#: htdocs/luci-static/resources/view/fchomo/node.js:300 +#: htdocs/luci-static/resources/view/fchomo/client.js:627 +#: htdocs/luci-static/resources/view/fchomo/node.js:956 msgid "Exclude nodes that meet keywords or regexps." msgstr "排除匹配关键词或表达式的节点。" -#: htdocs/luci-static/resources/view/fchomo/client.js:449 -#: htdocs/luci-static/resources/view/fchomo/node.js:287 +#: htdocs/luci-static/resources/view/fchomo/client.js:587 +#: htdocs/luci-static/resources/view/fchomo/node.js:943 msgid "Expected HTTP code. 204 will be used if empty." msgstr "预期的 HTTP code。留空则使用 204。" -#: htdocs/luci-static/resources/view/fchomo/client.js:451 -#: htdocs/luci-static/resources/view/fchomo/node.js:289 +#: htdocs/luci-static/resources/view/fchomo/client.js:589 +#: htdocs/luci-static/resources/view/fchomo/node.js:945 msgid "Expected status" msgstr "预期状态" -#: htdocs/luci-static/resources/fchomo.js:536 -#: htdocs/luci-static/resources/fchomo.js:539 -#: htdocs/luci-static/resources/fchomo.js:542 -#: htdocs/luci-static/resources/fchomo.js:623 -#: htdocs/luci-static/resources/fchomo.js:631 -#: htdocs/luci-static/resources/fchomo.js:637 -#: htdocs/luci-static/resources/fchomo.js:661 -#: htdocs/luci-static/resources/fchomo.js:678 -#: htdocs/luci-static/resources/fchomo.js:681 -#: htdocs/luci-static/resources/fchomo.js:692 -#: htdocs/luci-static/resources/fchomo.js:699 -#: htdocs/luci-static/resources/fchomo.js:708 +#: htdocs/luci-static/resources/fchomo.js:556 +#: htdocs/luci-static/resources/fchomo.js:559 +#: htdocs/luci-static/resources/fchomo.js:562 +#: htdocs/luci-static/resources/fchomo.js:643 +#: htdocs/luci-static/resources/fchomo.js:651 +#: htdocs/luci-static/resources/fchomo.js:659 +#: htdocs/luci-static/resources/fchomo.js:683 +#: htdocs/luci-static/resources/fchomo.js:700 +#: htdocs/luci-static/resources/fchomo.js:703 +#: htdocs/luci-static/resources/fchomo.js:715 +#: htdocs/luci-static/resources/fchomo.js:718 #: htdocs/luci-static/resources/fchomo.js:720 -#: htdocs/luci-static/resources/fchomo.js:723 #: htdocs/luci-static/resources/fchomo.js:733 +#: htdocs/luci-static/resources/fchomo.js:740 +#: htdocs/luci-static/resources/fchomo.js:749 +#: htdocs/luci-static/resources/fchomo.js:761 +#: htdocs/luci-static/resources/fchomo.js:764 +#: htdocs/luci-static/resources/fchomo.js:774 #: htdocs/luci-static/resources/view/fchomo/client.js:27 -#: htdocs/luci-static/resources/view/fchomo/client.js:334 -#: htdocs/luci-static/resources/view/fchomo/client.js:719 +#: htdocs/luci-static/resources/view/fchomo/client.js:472 +#: htdocs/luci-static/resources/view/fchomo/client.js:830 +#: htdocs/luci-static/resources/view/fchomo/node.js:456 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:199 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:213 -#: htdocs/luci-static/resources/view/fchomo/server.js:237 -#: htdocs/luci-static/resources/view/fchomo/server.js:240 msgid "Expecting: %s" msgstr "请输入:%s" -#: htdocs/luci-static/resources/view/fchomo/global.js:545 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 +#: htdocs/luci-static/resources/view/fchomo/node.js:522 +msgid "Expecting: only support %s." +msgstr "请输入:仅支援 %s." + +#: htdocs/luci-static/resources/view/fchomo/global.js:548 msgid "Experimental" msgstr "实验性" -#: htdocs/luci-static/resources/view/fchomo/client.js:222 -#: htdocs/luci-static/resources/view/fchomo/client.js:233 -#: htdocs/luci-static/resources/view/fchomo/client.js:240 -#: htdocs/luci-static/resources/view/fchomo/client.js:247 -#: htdocs/luci-static/resources/view/fchomo/client.js:255 +#: htdocs/luci-static/resources/view/fchomo/client.js:243 +#: htdocs/luci-static/resources/view/fchomo/client.js:256 +#: htdocs/luci-static/resources/view/fchomo/client.js:266 +#: htdocs/luci-static/resources/view/fchomo/client.js:273 +#: htdocs/luci-static/resources/view/fchomo/client.js:281 msgid "Factor" msgstr "条件" -#: htdocs/luci-static/resources/fchomo.js:564 +#: htdocs/luci-static/resources/fchomo.js:584 msgid "Failed to execute \"/etc/init.d/fchomo %s %s\" reason: %s" msgstr "无法执行 \"/etc/init.d/fchomo %s %s\" 原因: %s" -#: htdocs/luci-static/resources/fchomo.js:833 +#: htdocs/luci-static/resources/fchomo.js:874 msgid "Failed to upload %s, error: %s." msgstr "上传 %s 失败,错误:%s。" -#: htdocs/luci-static/resources/fchomo.js:119 +#: htdocs/luci-static/resources/fchomo.js:120 msgid "Fallback" msgstr "自动回退" -#: htdocs/luci-static/resources/view/fchomo/client.js:666 -#: htdocs/luci-static/resources/view/fchomo/client.js:667 -#: htdocs/luci-static/resources/view/fchomo/client.js:678 +#: htdocs/luci-static/resources/view/fchomo/client.js:777 +#: htdocs/luci-static/resources/view/fchomo/client.js:778 +#: htdocs/luci-static/resources/view/fchomo/client.js:789 msgid "Fallback DNS server" msgstr "後備 DNS 服务器" -#: htdocs/luci-static/resources/view/fchomo/client.js:899 +#: htdocs/luci-static/resources/view/fchomo/client.js:1010 msgid "Fallback filter" msgstr "後備过滤器" -#: htdocs/luci-static/resources/view/fchomo/client.js:484 -#: htdocs/luci-static/resources/view/fchomo/node.js:295 +#: htdocs/luci-static/resources/view/fchomo/client.js:622 +#: htdocs/luci-static/resources/view/fchomo/node.js:951 msgid "Filter nodes that meet keywords or regexps." msgstr "过滤匹配关键字或表达式的节点。" -#: htdocs/luci-static/resources/view/fchomo/client.js:660 -#: htdocs/luci-static/resources/view/fchomo/client.js:677 +#: htdocs/luci-static/resources/view/fchomo/client.js:771 +#: htdocs/luci-static/resources/view/fchomo/client.js:788 msgid "Final DNS server" msgstr "兜底 DNS 服务器" -#: htdocs/luci-static/resources/view/fchomo/client.js:660 -#: htdocs/luci-static/resources/view/fchomo/client.js:674 +#: htdocs/luci-static/resources/view/fchomo/client.js:771 +#: htdocs/luci-static/resources/view/fchomo/client.js:785 msgid "Final DNS server (Used to Domestic-IP response)" msgstr "兜底 DNS 服务器 (用于 境内-IP 响应)" -#: htdocs/luci-static/resources/view/fchomo/client.js:667 -#: htdocs/luci-static/resources/view/fchomo/client.js:675 +#: htdocs/luci-static/resources/view/fchomo/client.js:778 +#: htdocs/luci-static/resources/view/fchomo/client.js:786 msgid "Final DNS server (Used to Overseas-IP response)" msgstr "兜底 DNS 服务器 (用于 境外-IP 响应)" -#: htdocs/luci-static/resources/view/fchomo/client.js:473 +#: htdocs/luci-static/resources/view/fchomo/node.js:280 +msgid "Flow" +msgstr "流控" + +#: htdocs/luci-static/resources/view/fchomo/client.js:611 msgid "" "For details, see
%s." @@ -625,9 +740,9 @@ msgstr "" "实现细节请参阅 %s." -#: htdocs/luci-static/resources/view/fchomo/client.js:450 -#: htdocs/luci-static/resources/view/fchomo/node.js:187 -#: htdocs/luci-static/resources/view/fchomo/node.js:288 +#: htdocs/luci-static/resources/view/fchomo/client.js:588 +#: htdocs/luci-static/resources/view/fchomo/node.js:839 +#: htdocs/luci-static/resources/view/fchomo/node.js:944 msgid "" "For format see %s." @@ -635,7 +750,7 @@ msgstr "" "格式请参阅 %s." -#: htdocs/luci-static/resources/view/fchomo/global.js:505 +#: htdocs/luci-static/resources/view/fchomo/global.js:508 msgid "Forced sniffing domain" msgstr "强制嗅探域名" @@ -649,37 +764,42 @@ msgstr "格式" msgid "FullCombo Mihomo" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:268 +#: htdocs/luci-static/resources/view/fchomo/node.js:541 +msgid "GET" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:271 msgid "GFW list version" msgstr "GFW 域名列表版本" -#: htdocs/luci-static/resources/view/fchomo/global.js:276 +#: htdocs/luci-static/resources/view/fchomo/global.js:279 msgid "General" msgstr "常规" -#: htdocs/luci-static/resources/view/fchomo/client.js:325 -#: htdocs/luci-static/resources/view/fchomo/node.js:84 +#: htdocs/luci-static/resources/view/fchomo/client.js:463 +#: htdocs/luci-static/resources/view/fchomo/node.js:40 +#: htdocs/luci-static/resources/view/fchomo/node.js:736 msgid "General fields" msgstr "常规字段" -#: htdocs/luci-static/resources/view/fchomo/global.js:279 +#: htdocs/luci-static/resources/view/fchomo/global.js:282 msgid "General settings" msgstr "常规设置" -#: htdocs/luci-static/resources/view/fchomo/server.js:144 -#: htdocs/luci-static/resources/view/fchomo/server.js:146 -#: htdocs/luci-static/resources/view/fchomo/server.js:191 -#: htdocs/luci-static/resources/view/fchomo/server.js:193 -#: htdocs/luci-static/resources/view/fchomo/server.js:224 -#: htdocs/luci-static/resources/view/fchomo/server.js:226 -#: htdocs/luci-static/resources/view/fchomo/server.js:257 -#: htdocs/luci-static/resources/view/fchomo/server.js:259 -#: htdocs/luci-static/resources/view/fchomo/server.js:304 -#: htdocs/luci-static/resources/view/fchomo/server.js:306 +#: htdocs/luci-static/resources/view/fchomo/server.js:145 +#: htdocs/luci-static/resources/view/fchomo/server.js:147 +#: htdocs/luci-static/resources/view/fchomo/server.js:190 +#: htdocs/luci-static/resources/view/fchomo/server.js:192 +#: htdocs/luci-static/resources/view/fchomo/server.js:223 +#: htdocs/luci-static/resources/view/fchomo/server.js:225 +#: htdocs/luci-static/resources/view/fchomo/server.js:243 +#: htdocs/luci-static/resources/view/fchomo/server.js:245 +#: htdocs/luci-static/resources/view/fchomo/server.js:290 +#: htdocs/luci-static/resources/view/fchomo/server.js:292 msgid "Generate" msgstr "生成" -#: htdocs/luci-static/resources/view/fchomo/global.js:404 +#: htdocs/luci-static/resources/view/fchomo/global.js:407 msgid "Generic segmentation offload" msgstr "通用分段卸载(GSO)" @@ -691,17 +811,17 @@ msgstr "GeoIP 版本" msgid "GeoSite version" msgstr "GeoSite 版本" -#: htdocs/luci-static/resources/view/fchomo/client.js:909 +#: htdocs/luci-static/resources/view/fchomo/client.js:1020 msgid "Geoip code" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:906 +#: htdocs/luci-static/resources/view/fchomo/client.js:1017 msgid "Geoip enable" msgstr "Geoip 启用" -#: htdocs/luci-static/resources/view/fchomo/client.js:851 -#: htdocs/luci-static/resources/view/fchomo/client.js:860 -#: htdocs/luci-static/resources/view/fchomo/client.js:918 +#: htdocs/luci-static/resources/view/fchomo/client.js:962 +#: htdocs/luci-static/resources/view/fchomo/client.js:971 +#: htdocs/luci-static/resources/view/fchomo/client.js:1029 msgid "Geosite" msgstr "" @@ -709,19 +829,23 @@ msgstr "" msgid "GitHub" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:285 +#: htdocs/luci-static/resources/view/fchomo/global.js:288 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:14 msgid "Global" msgstr "全局" -#: htdocs/luci-static/resources/view/fchomo/global.js:325 +#: htdocs/luci-static/resources/view/fchomo/global.js:328 msgid "Global Authentication" msgstr "全局认证" -#: htdocs/luci-static/resources/view/fchomo/global.js:428 +#: htdocs/luci-static/resources/view/fchomo/global.js:431 msgid "Global client fingerprint" msgstr "全局客户端指纹" +#: htdocs/luci-static/resources/view/fchomo/node.js:302 +msgid "Global padding" +msgstr "全局填充" + #: htdocs/luci-static/resources/fchomo.js:47 msgid "Google" msgstr "谷歌" @@ -730,81 +854,116 @@ msgstr "谷歌" msgid "Grant access to fchomo configuration" msgstr "授予 fchomo 访问 UCI 配置的权限" -#: htdocs/luci-static/resources/view/fchomo/client.js:350 +#: htdocs/luci-static/resources/view/fchomo/client.js:488 msgid "Group" msgstr "组" #: htdocs/luci-static/resources/fchomo.js:58 -#: htdocs/luci-static/resources/fchomo.js:84 +#: htdocs/luci-static/resources/fchomo.js:85 +#: htdocs/luci-static/resources/view/fchomo/node.js:332 +#: htdocs/luci-static/resources/view/fchomo/node.js:504 +#: htdocs/luci-static/resources/view/fchomo/node.js:515 msgid "HTTP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:162 +#: htdocs/luci-static/resources/view/fchomo/node.js:84 +#: htdocs/luci-static/resources/view/fchomo/node.js:563 +#: htdocs/luci-static/resources/view/fchomo/node.js:814 msgid "HTTP header" -msgstr "" +msgstr "HTTP header" -#: htdocs/luci-static/resources/view/fchomo/client.js:773 +#: htdocs/luci-static/resources/view/fchomo/node.js:540 +msgid "HTTP request method" +msgstr "HTTP 请求方法" + +#: htdocs/luci-static/resources/view/fchomo/client.js:884 msgid "HTTP/3" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:203 +#: htdocs/luci-static/resources/view/fchomo/server.js:202 msgid "" "HTTP3 server behavior when authentication fails.
A 404 page will be " "returned if empty." msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。" -#: htdocs/luci-static/resources/view/fchomo/global.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:505 +#: htdocs/luci-static/resources/view/fchomo/node.js:516 +msgid "HTTPUpgrade" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:666 msgid "Handle domain" msgstr "处理域名" -#: htdocs/luci-static/resources/view/fchomo/client.js:419 -#: htdocs/luci-static/resources/view/fchomo/node.js:260 +#: htdocs/luci-static/resources/view/fchomo/client.js:557 +#: htdocs/luci-static/resources/view/fchomo/node.js:916 msgid "Health check URL" msgstr "健康检查 URL" -#: htdocs/luci-static/resources/view/fchomo/client.js:448 -#: htdocs/luci-static/resources/view/fchomo/node.js:286 +#: htdocs/luci-static/resources/view/fchomo/client.js:586 +#: htdocs/luci-static/resources/view/fchomo/node.js:942 msgid "Health check expected status" msgstr "健康检查预期状态" -#: htdocs/luci-static/resources/view/fchomo/client.js:428 -#: htdocs/luci-static/resources/view/fchomo/node.js:269 +#: htdocs/luci-static/resources/view/fchomo/client.js:566 +#: htdocs/luci-static/resources/view/fchomo/node.js:925 msgid "Health check interval" msgstr "健康检查间隔" -#: htdocs/luci-static/resources/view/fchomo/client.js:435 -#: htdocs/luci-static/resources/view/fchomo/node.js:275 +#: htdocs/luci-static/resources/view/fchomo/client.js:573 +#: htdocs/luci-static/resources/view/fchomo/node.js:931 msgid "Health check timeout" msgstr "健康检查超时" -#: htdocs/luci-static/resources/view/fchomo/client.js:327 -#: htdocs/luci-static/resources/view/fchomo/node.js:86 +#: htdocs/luci-static/resources/view/fchomo/client.js:465 +#: htdocs/luci-static/resources/view/fchomo/node.js:738 msgid "Health fields" msgstr "健康字段" +#: htdocs/luci-static/resources/view/fchomo/node.js:237 +msgid "Heartbeat interval" +msgstr "心跳间隔" + +#: htdocs/luci-static/resources/view/fchomo/node.js:338 +msgid "Host that supports TLS 1.3" +msgstr "主机名称 (支援 TLS 1.3)" + +#: htdocs/luci-static/resources/view/fchomo/node.js:144 +msgid "Host-key" +msgstr "主机密钥" + +#: htdocs/luci-static/resources/view/fchomo/node.js:139 +msgid "Host-key algorithms" +msgstr "主机密钥算法" + #: htdocs/luci-static/resources/view/fchomo/hosts.js:27 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:30 msgid "Hosts" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:92 -msgid "Hysteria" -msgstr "" - #: htdocs/luci-static/resources/fchomo.js:64 -#: htdocs/luci-static/resources/fchomo.js:93 +#: htdocs/luci-static/resources/fchomo.js:94 msgid "Hysteria2" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:911 -#: htdocs/luci-static/resources/view/fchomo/client.js:924 +#: htdocs/luci-static/resources/view/fchomo/client.js:1022 +#: htdocs/luci-static/resources/view/fchomo/client.js:1035 msgid "IP" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:922 +#: htdocs/luci-static/resources/view/fchomo/client.js:1033 msgid "IP CIDR" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:190 +msgid "IP override" +msgstr "IP 覆写" + +#: htdocs/luci-static/resources/view/fchomo/node.js:700 +#: htdocs/luci-static/resources/view/fchomo/node.js:904 +msgid "IP version" +msgstr "IP 版本" + #: htdocs/luci-static/resources/fchomo.js:71 msgid "IPv4 only" msgstr "仅 IPv4" @@ -813,12 +972,12 @@ msgstr "仅 IPv4" msgid "IPv6 only" msgstr "仅 IPv6" -#: htdocs/luci-static/resources/view/fchomo/client.js:642 -#: htdocs/luci-static/resources/view/fchomo/global.js:305 +#: htdocs/luci-static/resources/view/fchomo/client.js:753 +#: htdocs/luci-static/resources/view/fchomo/global.js:308 msgid "IPv6 support" msgstr "IPv6 支持" -#: htdocs/luci-static/resources/view/fchomo/server.js:277 +#: htdocs/luci-static/resources/view/fchomo/server.js:269 msgid "Idle timeout" msgstr "空闲超时" @@ -826,7 +985,7 @@ msgstr "空闲超时" msgid "If Block is selected, uncheck others" msgstr "如果选择了“阻止”,则取消选中“其他”" -#: htdocs/luci-static/resources/view/fchomo/server.js:171 +#: htdocs/luci-static/resources/view/fchomo/server.js:170 msgid "Ignore client bandwidth" msgstr "忽略客户端带宽" @@ -840,67 +999,74 @@ msgstr "导入" msgid "Import rule-set links" msgstr "导入 rule-set 链接" -#: htdocs/luci-static/resources/view/fchomo/node.js:218 -#: htdocs/luci-static/resources/view/fchomo/node.js:223 -#: htdocs/luci-static/resources/view/fchomo/server.js:160 -#: htdocs/luci-static/resources/view/fchomo/server.js:166 +#: htdocs/luci-static/resources/view/fchomo/node.js:104 +#: htdocs/luci-static/resources/view/fchomo/node.js:110 +#: htdocs/luci-static/resources/view/fchomo/node.js:871 +#: htdocs/luci-static/resources/view/fchomo/node.js:876 +#: htdocs/luci-static/resources/view/fchomo/server.js:159 +#: htdocs/luci-static/resources/view/fchomo/server.js:165 msgid "In Mbps." msgstr "单位为 Mbps。" -#: htdocs/luci-static/resources/view/fchomo/client.js:436 -#: htdocs/luci-static/resources/view/fchomo/client.js:465 -#: htdocs/luci-static/resources/view/fchomo/node.js:276 +#: htdocs/luci-static/resources/view/fchomo/node.js:238 +#: htdocs/luci-static/resources/view/fchomo/node.js:245 +msgid "In millisecond." +msgstr "单位为毫秒。" + +#: htdocs/luci-static/resources/view/fchomo/client.js:574 +#: htdocs/luci-static/resources/view/fchomo/client.js:603 +#: htdocs/luci-static/resources/view/fchomo/node.js:932 msgid "In millisecond. %s will be used if empty." msgstr "单位为毫秒。留空则使用 %s。" -#: htdocs/luci-static/resources/view/fchomo/server.js:278 -#: htdocs/luci-static/resources/view/fchomo/server.js:285 +#: htdocs/luci-static/resources/view/fchomo/server.js:270 +#: htdocs/luci-static/resources/view/fchomo/server.js:277 msgid "In seconds." msgstr "单位为秒。" -#: htdocs/luci-static/resources/view/fchomo/client.js:429 -#: htdocs/luci-static/resources/view/fchomo/global.js:315 -#: htdocs/luci-static/resources/view/fchomo/global.js:320 -#: htdocs/luci-static/resources/view/fchomo/global.js:412 -#: htdocs/luci-static/resources/view/fchomo/node.js:146 -#: htdocs/luci-static/resources/view/fchomo/node.js:270 +#: htdocs/luci-static/resources/view/fchomo/client.js:567 +#: htdocs/luci-static/resources/view/fchomo/global.js:318 +#: htdocs/luci-static/resources/view/fchomo/global.js:323 +#: htdocs/luci-static/resources/view/fchomo/global.js:415 +#: htdocs/luci-static/resources/view/fchomo/node.js:798 +#: htdocs/luci-static/resources/view/fchomo/node.js:926 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:261 msgid "In seconds. %s will be used if empty." msgstr "单位为秒。留空则使用 %s。" -#: htdocs/luci-static/resources/view/fchomo/global.js:339 +#: htdocs/luci-static/resources/view/fchomo/global.js:342 msgid "Inbound" msgstr "入站" -#: htdocs/luci-static/resources/view/fchomo/client.js:385 +#: htdocs/luci-static/resources/view/fchomo/client.js:523 msgid "Include all" msgstr "引入所有" -#: htdocs/luci-static/resources/view/fchomo/client.js:390 +#: htdocs/luci-static/resources/view/fchomo/client.js:528 msgid "Include all node" msgstr "引入所有节点" -#: htdocs/luci-static/resources/view/fchomo/client.js:395 +#: htdocs/luci-static/resources/view/fchomo/client.js:533 msgid "Include all provider" msgstr "引入所有供应商" -#: htdocs/luci-static/resources/view/fchomo/client.js:396 +#: htdocs/luci-static/resources/view/fchomo/client.js:534 msgid "Includes all Provider." msgstr "引入所有供应商。" -#: htdocs/luci-static/resources/view/fchomo/client.js:386 +#: htdocs/luci-static/resources/view/fchomo/client.js:524 msgid "Includes all Proxy Node and Provider." msgstr "引入所有代理节点及供应商。" -#: htdocs/luci-static/resources/view/fchomo/client.js:391 +#: htdocs/luci-static/resources/view/fchomo/client.js:529 msgid "Includes all Proxy Node." msgstr "引入所有代理节点。" -#: htdocs/luci-static/resources/view/fchomo/global.js:298 +#: htdocs/luci-static/resources/view/fchomo/global.js:301 msgid "Info" msgstr "信息" -#: htdocs/luci-static/resources/view/fchomo/global.js:569 +#: htdocs/luci-static/resources/view/fchomo/global.js:572 msgid "Interface Control" msgstr "接口控制" @@ -908,27 +1074,28 @@ msgstr "接口控制" msgid "Keep default" msgstr "保持缺省" -#: htdocs/luci-static/resources/view/fchomo/server.js:365 +#: htdocs/luci-static/resources/view/fchomo/server.js:351 msgid "Key path" msgstr "证书路径" -#: htdocs/luci-static/resources/view/fchomo/client.js:330 -#: htdocs/luci-static/resources/view/fchomo/client.js:515 -#: htdocs/luci-static/resources/view/fchomo/client.js:699 -#: htdocs/luci-static/resources/view/fchomo/client.js:840 -#: htdocs/luci-static/resources/view/fchomo/node.js:40 -#: htdocs/luci-static/resources/view/fchomo/node.js:89 +#: htdocs/luci-static/resources/view/fchomo/client.js:468 +#: htdocs/luci-static/resources/view/fchomo/client.js:653 +#: htdocs/luci-static/resources/view/fchomo/client.js:723 +#: htdocs/luci-static/resources/view/fchomo/client.js:810 +#: htdocs/luci-static/resources/view/fchomo/client.js:951 +#: htdocs/luci-static/resources/view/fchomo/node.js:46 +#: htdocs/luci-static/resources/view/fchomo/node.js:741 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:176 -#: htdocs/luci-static/resources/view/fchomo/server.js:102 +#: htdocs/luci-static/resources/view/fchomo/server.js:103 msgid "Label" msgstr "标签" -#: htdocs/luci-static/resources/view/fchomo/client.js:442 -#: htdocs/luci-static/resources/view/fchomo/node.js:281 +#: htdocs/luci-static/resources/view/fchomo/client.js:580 +#: htdocs/luci-static/resources/view/fchomo/node.js:937 msgid "Lazy" msgstr "懒惰状态" -#: htdocs/luci-static/resources/view/fchomo/server.js:316 +#: htdocs/luci-static/resources/view/fchomo/server.js:302 msgid "" "Legacy protocol support (VMess MD5 Authentication) is provided for " "compatibility purposes only, use of alterId > 1 is not recommended." @@ -936,36 +1103,37 @@ msgstr "" "提供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > " "1。" -#: htdocs/luci-static/resources/view/fchomo/global.js:397 +#: htdocs/luci-static/resources/view/fchomo/global.js:400 msgid "Less compatibility and sometimes better performance." msgstr "有时性能更好。" -#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/node.js:446 +#: htdocs/luci-static/resources/view/fchomo/server.js:332 msgid "List of supported application level protocols, in order of preference." msgstr "支持的应用层协议协商列表,按顺序排列。" -#: htdocs/luci-static/resources/view/fchomo/server.js:117 +#: htdocs/luci-static/resources/view/fchomo/server.js:118 msgid "Listen address" msgstr "监听地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:571 +#: htdocs/luci-static/resources/view/fchomo/global.js:574 msgid "Listen interfaces" msgstr "监听接口" -#: htdocs/luci-static/resources/view/fchomo/client.js:637 -#: htdocs/luci-static/resources/view/fchomo/server.js:122 +#: htdocs/luci-static/resources/view/fchomo/client.js:748 +#: htdocs/luci-static/resources/view/fchomo/server.js:123 msgid "Listen port" msgstr "监听端口" -#: htdocs/luci-static/resources/view/fchomo/global.js:342 +#: htdocs/luci-static/resources/view/fchomo/global.js:345 msgid "Listen ports" msgstr "监听端口" -#: htdocs/luci-static/resources/fchomo.js:121 +#: htdocs/luci-static/resources/fchomo.js:122 msgid "Load balance" msgstr "负载均衡" -#: htdocs/luci-static/resources/view/fchomo/node.js:99 +#: htdocs/luci-static/resources/view/fchomo/node.js:751 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:186 msgid "Local" msgstr "本地" @@ -982,67 +1150,91 @@ msgstr "日志文件不存在。" msgid "Log is empty." msgstr "日志为空。" -#: htdocs/luci-static/resources/view/fchomo/global.js:294 +#: htdocs/luci-static/resources/view/fchomo/global.js:297 msgid "Log level" msgstr "日志等级" -#: htdocs/luci-static/resources/fchomo.js:536 +#: htdocs/luci-static/resources/fchomo.js:556 msgid "Lowercase only" msgstr "仅限小写" -#: htdocs/luci-static/resources/view/fchomo/global.js:400 +#: htdocs/luci-static/resources/view/fchomo/global.js:403 msgid "MTU" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:202 +#: htdocs/luci-static/resources/view/fchomo/server.js:201 msgid "Masquerade" msgstr "伪装" -#: htdocs/luci-static/resources/view/fchomo/client.js:856 +#: htdocs/luci-static/resources/view/fchomo/client.js:967 msgid "Match domain. Support wildcards." msgstr "匹配域名。支持通配符。" -#: htdocs/luci-static/resources/view/fchomo/client.js:928 +#: htdocs/luci-static/resources/view/fchomo/client.js:1039 msgid "Match domain. Support wildcards.
" msgstr "匹配域名。支持通配符。
" -#: htdocs/luci-static/resources/view/fchomo/client.js:861 +#: htdocs/luci-static/resources/view/fchomo/client.js:972 msgid "Match geosite." msgstr "匹配 geosite。" -#: htdocs/luci-static/resources/view/fchomo/client.js:919 +#: htdocs/luci-static/resources/view/fchomo/client.js:1030 msgid "Match geosite.
" msgstr "匹配 geosite。
" -#: htdocs/luci-static/resources/view/fchomo/client.js:910 +#: htdocs/luci-static/resources/view/fchomo/client.js:1021 msgid "Match response with geoip.
" msgstr "匹配响应通过 geoip。
" -#: htdocs/luci-static/resources/view/fchomo/client.js:923 +#: htdocs/luci-static/resources/view/fchomo/client.js:1034 msgid "Match response with ipcidr.
" msgstr "匹配响应通过 ipcidr
" -#: htdocs/luci-static/resources/view/fchomo/client.js:866 +#: htdocs/luci-static/resources/view/fchomo/client.js:977 msgid "Match rule set." msgstr "匹配规则集。" -#: htdocs/luci-static/resources/view/fchomo/server.js:291 +#: htdocs/luci-static/resources/view/fchomo/node.js:580 +msgid "Max Early Data" +msgstr "前置数据最大值" + +#: htdocs/luci-static/resources/view/fchomo/node.js:224 +#: htdocs/luci-static/resources/view/fchomo/server.js:263 msgid "Max UDP relay packet size" msgstr "UDP 中继数据包最大尺寸" -#: htdocs/luci-static/resources/view/fchomo/client.js:456 +#: htdocs/luci-static/resources/view/fchomo/client.js:594 msgid "Max count of failures" msgstr "最大失败次数" -#: htdocs/luci-static/resources/view/fchomo/server.js:165 +#: htdocs/luci-static/resources/view/fchomo/node.js:109 +#: htdocs/luci-static/resources/view/fchomo/server.js:164 msgid "Max download speed" msgstr "最大下载速度" -#: htdocs/luci-static/resources/view/fchomo/server.js:159 +#: htdocs/luci-static/resources/view/fchomo/node.js:103 +#: htdocs/luci-static/resources/view/fchomo/server.js:158 msgid "Max upload speed" msgstr "最大上传速度" -#: htdocs/luci-static/resources/view/fchomo/client.js:281 +#: htdocs/luci-static/resources/view/fchomo/node.js:617 +#: htdocs/luci-static/resources/view/fchomo/node.js:633 +msgid "Maximum connections" +msgstr "最大连接数" + +#: htdocs/luci-static/resources/view/fchomo/node.js:631 +msgid "" +"Maximum multiplexed streams in a connection before opening a new connection." +"
Conflict with %s and %s." +msgstr "" +"在打开新连接之前,连接中的最大多路复用流数量。
%s 和 " +"%s 冲突。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:630 +msgid "Maximum streams" +msgstr "最大流数量" + +#: htdocs/luci-static/resources/view/fchomo/client.js:419 #: htdocs/luci-static/resources/view/fchomo/log.js:100 msgid "Mihomo client" msgstr "Mihomo 客户端" @@ -1052,20 +1244,38 @@ msgstr "Mihomo 客户端" msgid "Mihomo server" msgstr "Mihomo 服务端" +#: htdocs/luci-static/resources/view/fchomo/node.js:624 +msgid "" +"Minimum multiplexed streams in a connection before opening a new connection." +msgstr "在打开新连接之前,连接中的最小多路复用流数量。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:623 +#: htdocs/luci-static/resources/view/fchomo/node.js:633 +msgid "Minimum streams" +msgstr "最小流数量" + #: htdocs/luci-static/resources/fchomo.js:60 -#: htdocs/luci-static/resources/view/fchomo/global.js:386 +#: htdocs/luci-static/resources/view/fchomo/global.js:389 msgid "Mixed" msgstr "混合" -#: htdocs/luci-static/resources/view/fchomo/global.js:393 +#: htdocs/luci-static/resources/view/fchomo/global.js:396 msgid "Mixed system TCP stack and gVisor UDP stack." msgstr "混合 系统 TCP 栈和 gVisor UDP 栈。" -#: htdocs/luci-static/resources/view/fchomo/global.js:345 +#: htdocs/luci-static/resources/view/fchomo/global.js:348 msgid "Mixed port" msgstr "混合端口" -#: htdocs/luci-static/resources/view/fchomo/node.js:152 +#: htdocs/luci-static/resources/view/fchomo/node.js:603 +msgid "Multiplex" +msgstr "多路复用" + +#: htdocs/luci-static/resources/view/fchomo/node.js:43 +msgid "Multiplex fields" +msgstr "多路复用字段" + +#: htdocs/luci-static/resources/view/fchomo/node.js:804 msgid "Name of the Proxy group to download provider." msgstr "用于下载供应商订阅的策略组名称。" @@ -1073,16 +1283,20 @@ msgstr "用于下载供应商订阅的策略组名称。" msgid "Name of the Proxy group to download rule set." msgstr "用于下载规则集订阅的策略组名称。" -#: htdocs/luci-static/resources/view/fchomo/global.js:333 +#: htdocs/luci-static/resources/view/fchomo/node.js:208 +msgid "Native" +msgstr "原生" + +#: htdocs/luci-static/resources/view/fchomo/global.js:336 msgid "No Authentication IP ranges" msgstr "无需认证的 IP 范围" -#: htdocs/luci-static/resources/view/fchomo/client.js:719 +#: htdocs/luci-static/resources/view/fchomo/client.js:830 msgid "No add'l params" msgstr "无附加参数" -#: htdocs/luci-static/resources/view/fchomo/client.js:443 -#: htdocs/luci-static/resources/view/fchomo/node.js:282 +#: htdocs/luci-static/resources/view/fchomo/client.js:581 +#: htdocs/luci-static/resources/view/fchomo/node.js:938 msgid "No testing is performed when this provider node is not in use." msgstr "当此供应商的节点未使用时,不执行任何测试。" @@ -1090,78 +1304,92 @@ msgstr "当此供应商的节点未使用时,不执行任何测试。" msgid "No valid rule-set link found." msgstr "未找到有效的规则集链接。" -#: htdocs/luci-static/resources/view/fchomo/client.js:357 +#: htdocs/luci-static/resources/view/fchomo/client.js:495 #: htdocs/luci-static/resources/view/fchomo/node.js:35 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:38 msgid "Node" msgstr "节点" -#: htdocs/luci-static/resources/view/fchomo/client.js:488 -#: htdocs/luci-static/resources/view/fchomo/node.js:299 +#: htdocs/luci-static/resources/view/fchomo/client.js:626 +#: htdocs/luci-static/resources/view/fchomo/node.js:955 msgid "Node exclude filter" msgstr "排除节点" -#: htdocs/luci-static/resources/view/fchomo/client.js:493 -#: htdocs/luci-static/resources/view/fchomo/node.js:305 +#: htdocs/luci-static/resources/view/fchomo/client.js:631 +#: htdocs/luci-static/resources/view/fchomo/node.js:961 msgid "Node exclude type" msgstr "排除节点类型" -#: htdocs/luci-static/resources/view/fchomo/client.js:483 -#: htdocs/luci-static/resources/view/fchomo/node.js:294 +#: htdocs/luci-static/resources/view/fchomo/client.js:621 +#: htdocs/luci-static/resources/view/fchomo/node.js:950 msgid "Node filter" msgstr "过滤节点" -#: htdocs/luci-static/resources/view/fchomo/client.js:464 +#: htdocs/luci-static/resources/view/fchomo/client.js:602 msgid "Node switch tolerance" msgstr "节点切换容差" -#: htdocs/luci-static/resources/view/fchomo/global.js:459 +#: htdocs/luci-static/resources/view/fchomo/node.js:281 +msgid "None" +msgstr "无" + +#: htdocs/luci-static/resources/view/fchomo/global.js:462 msgid "Not Installed" msgstr "未安装" -#: htdocs/luci-static/resources/fchomo.js:470 +#: htdocs/luci-static/resources/fchomo.js:490 msgid "Not Running" msgstr "未在运行" -#: htdocs/luci-static/resources/view/fchomo/server.js:183 +#: htdocs/luci-static/resources/view/fchomo/node.js:331 +msgid "Obfs Mode" +msgstr "Obfs 模式" + +#: htdocs/luci-static/resources/view/fchomo/node.js:121 +#: htdocs/luci-static/resources/view/fchomo/server.js:182 msgid "Obfuscate password" msgstr "混淆密码" -#: htdocs/luci-static/resources/view/fchomo/server.js:177 +#: htdocs/luci-static/resources/view/fchomo/node.js:115 +#: htdocs/luci-static/resources/view/fchomo/server.js:176 msgid "Obfuscate type" msgstr "混淆类型" -#: htdocs/luci-static/resources/view/fchomo/global.js:572 +#: htdocs/luci-static/resources/view/fchomo/global.js:575 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "只处理来自指定接口的流量。留空表示全部。" -#: htdocs/luci-static/resources/fchomo.js:464 +#: htdocs/luci-static/resources/fchomo.js:484 msgid "Open Dashboard" msgstr "打开面板" -#: htdocs/luci-static/resources/view/fchomo/global.js:282 +#: htdocs/luci-static/resources/view/fchomo/global.js:285 msgid "Operation mode" msgstr "运行模式" -#: htdocs/luci-static/resources/view/fchomo/client.js:806 +#: htdocs/luci-static/resources/view/fchomo/client.js:917 msgid "Override ECS in original request." msgstr "覆盖原始请求中的 ECS。" -#: htdocs/luci-static/resources/view/fchomo/global.js:501 -#: htdocs/luci-static/resources/view/fchomo/global.js:539 +#: htdocs/luci-static/resources/view/fchomo/global.js:504 +#: htdocs/luci-static/resources/view/fchomo/global.js:542 msgid "Override destination" msgstr "覆盖目标地址" -#: htdocs/luci-static/resources/view/fchomo/client.js:326 -#: htdocs/luci-static/resources/view/fchomo/node.js:85 +#: htdocs/luci-static/resources/view/fchomo/client.js:464 +#: htdocs/luci-static/resources/view/fchomo/node.js:737 msgid "Override fields" msgstr "覆盖字段" -#: htdocs/luci-static/resources/view/fchomo/client.js:889 +#: htdocs/luci-static/resources/view/fchomo/node.js:191 +msgid "Override the IP address of the server that DNS response." +msgstr "覆盖 DNS 回应的服务器的 IP 地址。" + +#: htdocs/luci-static/resources/view/fchomo/client.js:1000 msgid "Override the Proxy group of DNS server." msgstr "覆盖 DNS 服务器所使用的策略组。" -#: htdocs/luci-static/resources/view/fchomo/global.js:502 +#: htdocs/luci-static/resources/view/fchomo/global.js:505 msgid "Override the connection destination address with the sniffed domain." msgstr "使用嗅探到的域名覆盖连接目标。" @@ -1169,12 +1397,27 @@ msgstr "使用嗅探到的域名覆盖连接目标。" msgid "Overview" msgstr "概览" -#: htdocs/luci-static/resources/view/fchomo/server.js:137 -#: htdocs/luci-static/resources/view/fchomo/server.js:217 +#: htdocs/luci-static/resources/view/fchomo/node.js:542 +msgid "POST" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:543 +msgid "PUT" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:314 +msgid "Packet encoding" +msgstr "数据包编码" + +#: htdocs/luci-static/resources/view/fchomo/node.js:78 +#: htdocs/luci-static/resources/view/fchomo/node.js:158 +#: htdocs/luci-static/resources/view/fchomo/node.js:345 +#: htdocs/luci-static/resources/view/fchomo/server.js:138 +#: htdocs/luci-static/resources/view/fchomo/server.js:216 msgid "Password" msgstr "密码" -#: htdocs/luci-static/resources/view/fchomo/global.js:417 +#: htdocs/luci-static/resources/view/fchomo/global.js:420 msgid "" "Performance may degrade slightly, so it is not recommended to enable on when " "it is not needed." @@ -1190,7 +1433,7 @@ msgid "" "standards." msgstr "链接格式标准请参考
%s。" -#: htdocs/luci-static/resources/view/fchomo/node.js:119 +#: htdocs/luci-static/resources/view/fchomo/node.js:771 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:234 msgid "" "Please type %s%s。" -#: htdocs/luci-static/resources/fchomo.js:663 +#: htdocs/luci-static/resources/view/fchomo/node.js:322 +msgid "Plugin" +msgstr "插件" + +#: htdocs/luci-static/resources/view/fchomo/node.js:331 +#: htdocs/luci-static/resources/view/fchomo/node.js:338 +#: htdocs/luci-static/resources/view/fchomo/node.js:345 +#: htdocs/luci-static/resources/view/fchomo/node.js:351 +#: htdocs/luci-static/resources/view/fchomo/node.js:359 +#: htdocs/luci-static/resources/view/fchomo/node.js:365 +msgid "Plugin:" +msgstr "插件:" + +#: htdocs/luci-static/resources/view/fchomo/node.js:66 +msgid "Port" +msgstr "端口" + +#: htdocs/luci-static/resources/fchomo.js:685 msgid "Port %s alrealy exists!" msgstr "端口 %s 已存在!" -#: htdocs/luci-static/resources/view/fchomo/global.js:536 +#: htdocs/luci-static/resources/view/fchomo/global.js:539 msgid "Ports" msgstr "端口" +#: htdocs/luci-static/resources/view/fchomo/node.js:98 +msgid "Ports pool" +msgstr "端口池" + +#: htdocs/luci-static/resources/view/fchomo/node.js:168 +msgid "Pre-shared key" +msgstr "预共享密钥" + #: htdocs/luci-static/resources/fchomo.js:73 msgid "Prefer IPv4" msgstr "优先 IPv4" @@ -1214,47 +1482,68 @@ msgstr "优先 IPv4" msgid "Prefer IPv6" msgstr "优先 IPv6" -#: htdocs/luci-static/resources/view/fchomo/client.js:407 -#: htdocs/luci-static/resources/view/fchomo/client.js:413 -#: htdocs/luci-static/resources/view/fchomo/global.js:578 -#: htdocs/luci-static/resources/view/fchomo/global.js:595 -#: htdocs/luci-static/resources/view/fchomo/node.js:238 -#: htdocs/luci-static/resources/view/fchomo/node.js:244 +#: htdocs/luci-static/resources/view/fchomo/client.js:545 +#: htdocs/luci-static/resources/view/fchomo/client.js:551 +#: htdocs/luci-static/resources/view/fchomo/global.js:581 +#: htdocs/luci-static/resources/view/fchomo/global.js:598 +#: htdocs/luci-static/resources/view/fchomo/node.js:690 +#: htdocs/luci-static/resources/view/fchomo/node.js:696 +#: htdocs/luci-static/resources/view/fchomo/node.js:894 +#: htdocs/luci-static/resources/view/fchomo/node.js:900 msgid "Priority: Proxy Node > Proxy Group > Global." msgstr "优先级: 代理节点 > 策略组 > 全局。" -#: htdocs/luci-static/resources/view/fchomo/global.js:288 +#: htdocs/luci-static/resources/view/fchomo/node.js:130 +msgid "Priv-key" +msgstr "密钥" + +#: htdocs/luci-static/resources/view/fchomo/node.js:134 +msgid "Priv-key passphrase" +msgstr "密钥密码" + +#: htdocs/luci-static/resources/view/fchomo/global.js:291 msgid "Process matching mode" msgstr "进程匹配模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:530 +#: htdocs/luci-static/resources/view/fchomo/global.js:533 +#: htdocs/luci-static/resources/view/fchomo/node.js:609 msgid "Protocol" msgstr "协议" -#: htdocs/luci-static/resources/view/fchomo/client.js:371 -#: htdocs/luci-static/resources/view/fchomo/node.js:57 -#: htdocs/luci-static/resources/view/fchomo/node.js:67 +#: htdocs/luci-static/resources/view/fchomo/node.js:309 +msgid "Protocol parameter. Enable length block encryption." +msgstr "协议参数。启用长度块加密。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:303 +msgid "" +"Protocol parameter. Will waste traffic randomly if enabled (enabled by " +"default in v2ray and cannot be disabled)." +msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。" + +#: htdocs/luci-static/resources/view/fchomo/client.js:509 +#: htdocs/luci-static/resources/view/fchomo/node.js:709 +#: htdocs/luci-static/resources/view/fchomo/node.js:719 msgid "Provider" msgstr "供应商" -#: htdocs/luci-static/resources/view/fchomo/node.js:139 +#: htdocs/luci-static/resources/view/fchomo/node.js:791 msgid "Provider URL" msgstr "供应商订阅 URL" -#: htdocs/luci-static/resources/view/fchomo/client.js:301 -#: htdocs/luci-static/resources/view/fchomo/client.js:320 +#: htdocs/luci-static/resources/view/fchomo/client.js:439 +#: htdocs/luci-static/resources/view/fchomo/client.js:458 msgid "Proxy Group" msgstr "策略组" -#: htdocs/luci-static/resources/view/fchomo/global.js:628 +#: htdocs/luci-static/resources/view/fchomo/global.js:631 msgid "Proxy IPv4 IP-s" msgstr "代理 IPv4 地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:631 +#: htdocs/luci-static/resources/view/fchomo/global.js:634 msgid "Proxy IPv6 IP-s" msgstr "代理 IPv6 地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:634 +#: htdocs/luci-static/resources/view/fchomo/global.js:637 msgid "Proxy MAC-s" msgstr "代理 MAC 地址" @@ -1262,48 +1551,65 @@ msgstr "代理 MAC 地址" msgid "Proxy Node" msgstr "代理节点" -#: htdocs/luci-static/resources/view/fchomo/client.js:580 -#: htdocs/luci-static/resources/view/fchomo/client.js:756 -#: htdocs/luci-static/resources/view/fchomo/client.js:888 -#: htdocs/luci-static/resources/view/fchomo/node.js:151 +#: htdocs/luci-static/resources/view/fchomo/client.js:354 +#: htdocs/luci-static/resources/view/fchomo/client.js:867 +#: htdocs/luci-static/resources/view/fchomo/client.js:999 +#: htdocs/luci-static/resources/view/fchomo/node.js:803 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:266 msgid "Proxy group" msgstr "策略组" -#: htdocs/luci-static/resources/view/fchomo/global.js:365 +#: htdocs/luci-static/resources/view/fchomo/global.js:368 msgid "Proxy mode" msgstr "代理模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:637 +#: htdocs/luci-static/resources/view/fchomo/global.js:640 msgid "Proxy routerself" msgstr "代理路由器自身" -#: htdocs/luci-static/resources/view/fchomo/server.js:269 +#: htdocs/luci-static/resources/view/fchomo/node.js:209 +msgid "QUIC" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:197 +#: htdocs/luci-static/resources/view/fchomo/server.js:255 msgid "QUIC congestion controller." msgstr "QUIC 拥塞控制器。" -#: htdocs/luci-static/resources/view/fchomo/client.js:304 -#: htdocs/luci-static/resources/view/fchomo/server.js:78 +#: htdocs/luci-static/resources/view/fchomo/client.js:442 +#: htdocs/luci-static/resources/view/fchomo/server.js:79 msgid "Quick Reload" msgstr "快速重载" -#: htdocs/luci-static/resources/view/fchomo/global.js:490 +#: htdocs/luci-static/resources/view/fchomo/node.js:481 +msgid "REALITY" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:486 +msgid "REALITY public key" +msgstr "REALITY 公钥" + +#: htdocs/luci-static/resources/view/fchomo/node.js:491 +msgid "REALITY short ID" +msgstr "REALITY 标识符" + +#: htdocs/luci-static/resources/view/fchomo/global.js:493 msgid "Random will be used if empty." msgstr "留空将使用随机令牌。" -#: htdocs/luci-static/resources/view/fchomo/global.js:350 +#: htdocs/luci-static/resources/view/fchomo/global.js:353 msgid "Redir port" msgstr "Redir 端口" -#: htdocs/luci-static/resources/view/fchomo/global.js:366 +#: htdocs/luci-static/resources/view/fchomo/global.js:369 msgid "Redirect TCP" msgstr "Redirect TCP" -#: htdocs/luci-static/resources/view/fchomo/global.js:368 +#: htdocs/luci-static/resources/view/fchomo/global.js:371 msgid "Redirect TCP + TProxy UDP" msgstr "Redirect TCP + TProxy UDP" -#: htdocs/luci-static/resources/view/fchomo/global.js:370 +#: htdocs/luci-static/resources/view/fchomo/global.js:373 msgid "Redirect TCP + Tun UDP" msgstr "Redirect TCP + Tun UDP" @@ -1311,10 +1617,10 @@ msgstr "Redirect TCP + Tun UDP" msgid "Refresh every %s seconds." msgstr "每 %s 秒刷新。" -#: htdocs/luci-static/resources/fchomo.js:457 -#: htdocs/luci-static/resources/view/fchomo/client.js:305 +#: htdocs/luci-static/resources/fchomo.js:477 +#: htdocs/luci-static/resources/view/fchomo/client.js:443 #: htdocs/luci-static/resources/view/fchomo/global.js:162 -#: htdocs/luci-static/resources/view/fchomo/server.js:79 +#: htdocs/luci-static/resources/view/fchomo/server.js:80 msgid "Reload" msgstr "重载" @@ -1322,85 +1628,99 @@ msgstr "重载" msgid "Reload All" msgstr "重载所有" -#: htdocs/luci-static/resources/view/fchomo/node.js:100 +#: htdocs/luci-static/resources/view/fchomo/node.js:752 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:187 msgid "Remote" msgstr "远程" -#: htdocs/luci-static/resources/fchomo.js:595 +#: htdocs/luci-static/resources/fchomo.js:615 msgid "Remove" msgstr "移除" -#: htdocs/luci-static/resources/fchomo.js:600 -#: htdocs/luci-static/resources/view/fchomo/node.js:75 -#: htdocs/luci-static/resources/view/fchomo/node.js:77 +#: htdocs/luci-static/resources/fchomo.js:620 +#: htdocs/luci-static/resources/view/fchomo/node.js:727 +#: htdocs/luci-static/resources/view/fchomo/node.js:729 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:167 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:169 msgid "Remove idles" msgstr "移除闲置" -#: htdocs/luci-static/resources/view/fchomo/node.js:185 +#: htdocs/luci-static/resources/view/fchomo/node.js:837 msgid "Replace name" msgstr "名称替换" -#: htdocs/luci-static/resources/view/fchomo/node.js:186 +#: htdocs/luci-static/resources/view/fchomo/node.js:838 msgid "Replace node name." msgstr "替换节点名称" +#: htdocs/luci-static/resources/view/fchomo/node.js:549 +#: htdocs/luci-static/resources/view/fchomo/node.js:556 +msgid "Request path" +msgstr "请求路径" + +#: htdocs/luci-static/resources/view/fchomo/node.js:244 +msgid "Request timeout" +msgstr "请求超时" + #: htdocs/luci-static/resources/view/fchomo/global.js:198 msgid "Resources management" msgstr "资源管理" -#: htdocs/luci-static/resources/view/fchomo/global.js:641 +#: htdocs/luci-static/resources/view/fchomo/node.js:365 +msgid "Restls script" +msgstr "Restls 剧本" + +#: htdocs/luci-static/resources/view/fchomo/global.js:644 msgid "Routing Control" msgstr "路由控制" -#: htdocs/luci-static/resources/view/fchomo/global.js:661 +#: htdocs/luci-static/resources/view/fchomo/global.js:664 msgid "Routing GFW" msgstr "路由 GFW 流量" -#: htdocs/luci-static/resources/view/fchomo/client.js:412 -#: htdocs/luci-static/resources/view/fchomo/global.js:594 -#: htdocs/luci-static/resources/view/fchomo/node.js:243 +#: htdocs/luci-static/resources/view/fchomo/client.js:550 +#: htdocs/luci-static/resources/view/fchomo/global.js:597 +#: htdocs/luci-static/resources/view/fchomo/node.js:695 +#: htdocs/luci-static/resources/view/fchomo/node.js:899 msgid "Routing mark" msgstr "路由标记" -#: htdocs/luci-static/resources/view/fchomo/global.js:657 +#: htdocs/luci-static/resources/view/fchomo/global.js:660 msgid "Routing mode" msgstr "路由模式" -#: htdocs/luci-static/resources/view/fchomo/global.js:658 +#: htdocs/luci-static/resources/view/fchomo/global.js:661 msgid "Routing mode of the traffic enters mihomo via firewall rules." msgstr "流量通过防火墙规则进入 mihomo 的路由模式。" -#: htdocs/luci-static/resources/view/fchomo/global.js:664 +#: htdocs/luci-static/resources/view/fchomo/global.js:667 msgid "Routing mode will be handle domain." msgstr "路由模式将处理域名。" -#: htdocs/luci-static/resources/view/fchomo/global.js:643 -#: htdocs/luci-static/resources/view/fchomo/global.js:650 +#: htdocs/luci-static/resources/view/fchomo/global.js:646 +#: htdocs/luci-static/resources/view/fchomo/global.js:653 msgid "Routing ports" msgstr "路由端口" -#: htdocs/luci-static/resources/view/fchomo/client.js:500 -#: htdocs/luci-static/resources/view/fchomo/client.js:510 +#: htdocs/luci-static/resources/view/fchomo/client.js:638 +#: htdocs/luci-static/resources/view/fchomo/client.js:648 msgid "Routing rule" msgstr "路由规则" -#: htdocs/luci-static/resources/view/fchomo/global.js:588 +#: htdocs/luci-static/resources/view/fchomo/global.js:591 msgid "Routing rule priority" msgstr "路由规则优先权" -#: htdocs/luci-static/resources/view/fchomo/global.js:582 +#: htdocs/luci-static/resources/view/fchomo/global.js:585 msgid "Routing table ID" msgstr "路由表 ID" -#: htdocs/luci-static/resources/view/fchomo/global.js:284 +#: htdocs/luci-static/resources/view/fchomo/global.js:287 msgid "Rule" msgstr "规则" -#: htdocs/luci-static/resources/view/fchomo/client.js:852 -#: htdocs/luci-static/resources/view/fchomo/client.js:865 +#: htdocs/luci-static/resources/view/fchomo/client.js:963 +#: htdocs/luci-static/resources/view/fchomo/client.js:976 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:96 msgid "Rule set" msgstr "规则集" @@ -1417,7 +1737,7 @@ msgstr "规则集" msgid "Ruleset-URI-Scheme" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:470 +#: htdocs/luci-static/resources/fchomo.js:490 msgid "Running" msgstr "正在运行" @@ -1425,15 +1745,24 @@ msgstr "正在运行" msgid "SOCKS" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:85 +#: htdocs/luci-static/resources/fchomo.js:86 msgid "SOCKS5" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:96 +#: htdocs/luci-static/resources/fchomo.js:97 msgid "SSH" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:179 +#: htdocs/luci-static/resources/view/fchomo/client.js:664 +msgid "SUB-RULE" +msgstr "SUB-RULE" + +#: htdocs/luci-static/resources/view/fchomo/node.js:383 +msgid "SUoT version" +msgstr "SUoT 版本" + +#: htdocs/luci-static/resources/view/fchomo/node.js:117 +#: htdocs/luci-static/resources/view/fchomo/server.js:178 msgid "Salamander" msgstr "Salamander" @@ -1445,23 +1774,31 @@ msgstr "相同 目标地址 请求。相同节点" msgid "Same srcaddr and dstaddr requests. Same node" msgstr "相同 来源地址 和 目标地址 请求。相同节点" -#: htdocs/luci-static/resources/view/fchomo/global.js:407 +#: htdocs/luci-static/resources/view/fchomo/global.js:410 msgid "Segment maximum size" msgstr "分段最大尺寸" -#: htdocs/luci-static/resources/fchomo.js:118 +#: htdocs/luci-static/resources/fchomo.js:119 msgid "Select" msgstr "手动选择" -#: htdocs/luci-static/resources/view/fchomo/global.js:450 +#: htdocs/luci-static/resources/view/fchomo/global.js:453 msgid "Select Dashboard" msgstr "选择面板" -#: htdocs/luci-static/resources/view/fchomo/server.js:96 +#: htdocs/luci-static/resources/view/fchomo/server.js:97 #: root/usr/share/luci/menu.d/luci-app-fchomo.json:54 msgid "Server" msgstr "服务端" +#: htdocs/luci-static/resources/view/fchomo/node.js:61 +msgid "Server address" +msgstr "服务器地址" + +#: htdocs/luci-static/resources/view/fchomo/node.js:534 +msgid "Server hostname" +msgstr "服务器主机名称" + #: htdocs/luci-static/resources/view/fchomo/global.js:153 msgid "Server status" msgstr "服务端状态" @@ -1471,11 +1808,27 @@ msgid "Service status" msgstr "服务状态" #: htdocs/luci-static/resources/fchomo.js:61 -#: htdocs/luci-static/resources/fchomo.js:86 +#: htdocs/luci-static/resources/fchomo.js:87 msgid "Shadowsocks" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:295 +#: htdocs/luci-static/resources/view/fchomo/node.js:257 +msgid "Shadowsocks chipher" +msgstr "Shadowsocks 加密方法" + +#: htdocs/luci-static/resources/view/fchomo/node.js:252 +msgid "Shadowsocks encrypt" +msgstr "Shadowsocks 加密" + +#: htdocs/luci-static/resources/view/fchomo/node.js:264 +msgid "Shadowsocks password" +msgstr "Shadowsocks 密码" + +#: htdocs/luci-static/resources/view/fchomo/node.js:651 +msgid "Show connections in the dashboard for breaking connections easier." +msgstr "在面板中显示连接以便于打断连接。" + +#: htdocs/luci-static/resources/view/fchomo/global.js:298 msgid "Silent" msgstr "静音" @@ -1483,59 +1836,62 @@ msgstr "静音" msgid "Simple round-robin all nodes" msgstr "简单轮替所有节点" -#: htdocs/luci-static/resources/view/fchomo/global.js:508 +#: htdocs/luci-static/resources/view/fchomo/node.js:463 +#: htdocs/luci-static/resources/view/fchomo/node.js:880 +msgid "Skip cert verify" +msgstr "跳过证书验证" + +#: htdocs/luci-static/resources/view/fchomo/global.js:511 msgid "Skiped sniffing domain" msgstr "跳过嗅探域名" -#: htdocs/luci-static/resources/view/fchomo/global.js:514 +#: htdocs/luci-static/resources/view/fchomo/global.js:517 msgid "Skiped sniffing dst address" msgstr "跳过嗅探目标地址" -#: htdocs/luci-static/resources/view/fchomo/global.js:511 +#: htdocs/luci-static/resources/view/fchomo/global.js:514 msgid "Skiped sniffing src address" msgstr "跳过嗅探来源地址" -#: htdocs/luci-static/resources/fchomo.js:88 +#: htdocs/luci-static/resources/fchomo.js:89 msgid "Snell" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:518 +#: htdocs/luci-static/resources/view/fchomo/global.js:521 msgid "Sniff protocol" msgstr "嗅探协议" -#: htdocs/luci-static/resources/view/fchomo/global.js:495 +#: htdocs/luci-static/resources/view/fchomo/global.js:498 msgid "Sniffer" msgstr "嗅探器" -#: htdocs/luci-static/resources/view/fchomo/global.js:498 +#: htdocs/luci-static/resources/view/fchomo/global.js:501 msgid "Sniffer settings" msgstr "嗅探器设置" -#: htdocs/luci-static/resources/view/fchomo/global.js:644 -#: htdocs/luci-static/resources/view/fchomo/global.js:651 +#: htdocs/luci-static/resources/view/fchomo/global.js:647 +#: htdocs/luci-static/resources/view/fchomo/global.js:654 msgid "" "Specify target ports to be proxied. Multiple ports must be separated by " "commas." msgstr "指定需要被代理的目标端口。多个端口必须用逗号隔开。" -#: htdocs/luci-static/resources/view/fchomo/global.js:381 +#: htdocs/luci-static/resources/view/fchomo/global.js:384 msgid "Stack" msgstr "堆栈" -#: htdocs/luci-static/resources/view/fchomo/client.js:472 -#: htdocs/luci-static/resources/view/fchomo/client.js:474 +#: htdocs/luci-static/resources/view/fchomo/client.js:610 +#: htdocs/luci-static/resources/view/fchomo/client.js:612 msgid "Strategy" msgstr "策略" -#: htdocs/luci-static/resources/view/fchomo/client.js:646 -msgid "SUB-RULE" -msgstr "" - -#: htdocs/luci-static/resources/view/fchomo/client.js:664 +#: htdocs/luci-static/resources/view/fchomo/client.js:687 +#: htdocs/luci-static/resources/view/fchomo/client.js:708 +#: htdocs/luci-static/resources/view/fchomo/client.js:718 msgid "Sub rule" msgstr "子规则" -#: htdocs/luci-static/resources/view/fchomo/client.js:731 +#: htdocs/luci-static/resources/view/fchomo/client.js:732 msgid "Sub rule group" msgstr "子规则组" @@ -1555,7 +1911,7 @@ msgstr "" "支持规则集类型为: file, http 并且格式为: text, yaml, mrs 的规则集链接。
" -#: htdocs/luci-static/resources/view/fchomo/global.js:383 +#: htdocs/luci-static/resources/view/fchomo/global.js:386 msgid "System" msgstr "系统" @@ -1563,41 +1919,57 @@ msgstr "系统" msgid "System DNS" msgstr "系统 DNS" -#: htdocs/luci-static/resources/view/fchomo/client.js:249 +#: htdocs/luci-static/resources/view/fchomo/client.js:275 msgid "TCP" msgstr "TCP" -#: htdocs/luci-static/resources/view/fchomo/global.js:311 +#: htdocs/luci-static/resources/view/fchomo/global.js:314 msgid "TCP concurrency" msgstr "TCP 并发" -#: htdocs/luci-static/resources/view/fchomo/global.js:319 +#: htdocs/luci-static/resources/view/fchomo/node.js:644 +msgid "TCP only" +msgstr "仅 TCP" + +#: htdocs/luci-static/resources/view/fchomo/global.js:322 msgid "TCP-Keep-Alive idle timeout" msgstr "TCP-Keep-Alive 闲置超时" -#: htdocs/luci-static/resources/view/fchomo/global.js:314 +#: htdocs/luci-static/resources/view/fchomo/global.js:317 msgid "TCP-Keep-Alive interval" msgstr "TCP-Keep-Alive 间隔" -#: htdocs/luci-static/resources/view/fchomo/node.js:201 +#: htdocs/luci-static/resources/view/fchomo/node.js:675 +#: htdocs/luci-static/resources/view/fchomo/node.js:853 msgid "TFO" msgstr "TCP 快速打开 (TFO)" -#: htdocs/luci-static/resources/view/fchomo/global.js:422 -#: htdocs/luci-static/resources/view/fchomo/server.js:323 +#: htdocs/luci-static/resources/view/fchomo/global.js:425 +#: htdocs/luci-static/resources/view/fchomo/node.js:333 +#: htdocs/luci-static/resources/view/fchomo/node.js:391 +#: htdocs/luci-static/resources/view/fchomo/server.js:309 msgid "TLS" msgstr "TLS" -#: htdocs/luci-static/resources/view/fchomo/server.js:345 +#: htdocs/luci-static/resources/view/fchomo/node.js:445 +#: htdocs/luci-static/resources/view/fchomo/server.js:331 msgid "TLS ALPN" msgstr "TLS ALPN" +#: htdocs/luci-static/resources/view/fchomo/node.js:439 +msgid "TLS SNI" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:41 +msgid "TLS fields" +msgstr "TLS字段" + #: htdocs/luci-static/resources/fchomo.js:63 -#: htdocs/luci-static/resources/fchomo.js:94 +#: htdocs/luci-static/resources/fchomo.js:95 msgid "TUIC" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:172 +#: htdocs/luci-static/resources/view/fchomo/server.js:171 msgid "" "Tell the client to use the BBR flow control algorithm instead of Hysteria CC." msgstr "让客户端使用 BBR 流控算法。" @@ -1606,94 +1978,141 @@ msgstr "让客户端使用 BBR 流控算法。" msgid "The default value is 2:00 every day." msgstr "默认值为每天 2:00。" -#: htdocs/luci-static/resources/view/fchomo/client.js:911 +#: htdocs/luci-static/resources/view/fchomo/client.js:1022 msgid "The matching %s will be deemed as not-poisoned." msgstr "匹配的 %s 将被视为未被污染。" -#: htdocs/luci-static/resources/view/fchomo/client.js:920 -#: htdocs/luci-static/resources/view/fchomo/client.js:924 -#: htdocs/luci-static/resources/view/fchomo/client.js:929 +#: htdocs/luci-static/resources/view/fchomo/client.js:1031 +#: htdocs/luci-static/resources/view/fchomo/client.js:1035 +#: htdocs/luci-static/resources/view/fchomo/client.js:1040 msgid "The matching %s will be deemed as poisoned." msgstr "匹配的 %s 将被视为已被污染。" -#: htdocs/luci-static/resources/view/fchomo/server.js:366 +#: htdocs/luci-static/resources/view/fchomo/server.js:352 msgid "The server private key, in PEM format." msgstr "服务端私钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/fchomo/server.js:351 +#: htdocs/luci-static/resources/view/fchomo/server.js:337 msgid "The server public key, in PEM format." msgstr "服务端公钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/fchomo/global.js:373 +#: htdocs/luci-static/resources/view/fchomo/node.js:466 +#: htdocs/luci-static/resources/view/fchomo/node.js:883 +msgid "" +"This is DANGEROUS, your traffic is almost like " +"PLAIN TEXT! Use at your own risk!" +msgstr "" +"这是危险行为,您的流量将几乎等同于明文!使用风险自负!" + +#: htdocs/luci-static/resources/view/fchomo/node.js:214 +msgid "" +"This is the TUIC port of the SUoT protocol, designed to provide a QUIC " +"stream based UDP relay mode that TUIC does not provide." +msgstr "" +"这是 TUIC 的 SUoT 协议移植, 旨在提供 TUIC 不提供的基于 QUIC 流的 UDP 中继模" +"式。" + +#: htdocs/luci-static/resources/view/fchomo/global.js:376 msgid "" "To enable Tun support, you need to install ip-full and " "kmod-tun" msgstr "" "要启用 Tun 支持,您需要安装 ip-fullkmod-tun。" -#: htdocs/luci-static/resources/view/fchomo/global.js:667 +#: htdocs/luci-static/resources/view/fchomo/global.js:670 msgid "To enable, you need to install dnsmasq-full." msgstr "要启用,您需要安装 dnsmasq-full。" -#: htdocs/luci-static/resources/view/fchomo/global.js:601 +#: htdocs/luci-static/resources/view/fchomo/global.js:604 msgid "Tproxy Fwmark" msgstr "Tproxy 标记" -#: htdocs/luci-static/resources/view/fchomo/global.js:355 +#: htdocs/luci-static/resources/view/fchomo/global.js:358 msgid "Tproxy port" msgstr "Tproxy 端口" -#: htdocs/luci-static/resources/fchomo.js:91 +#: htdocs/luci-static/resources/view/fchomo/node.js:497 +msgid "Transport" +msgstr "传输层" + +#: htdocs/luci-static/resources/view/fchomo/node.js:42 +msgid "Transport fields" +msgstr "传输层字段" + +#: htdocs/luci-static/resources/view/fchomo/node.js:502 +msgid "Transport type" +msgstr "传输层类型" + +#: htdocs/luci-static/resources/fchomo.js:92 msgid "Trojan" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:606 +#: htdocs/luci-static/resources/view/fchomo/global.js:609 msgid "Tun Fwmark" msgstr "Tun 标记" -#: htdocs/luci-static/resources/view/fchomo/global.js:371 +#: htdocs/luci-static/resources/view/fchomo/global.js:374 msgid "Tun TCP/UDP" msgstr "Tun TCP/UDP" -#: htdocs/luci-static/resources/view/fchomo/global.js:378 +#: htdocs/luci-static/resources/view/fchomo/global.js:381 msgid "Tun settings" msgstr "Tun 设置" -#: htdocs/luci-static/resources/view/fchomo/global.js:382 +#: htdocs/luci-static/resources/view/fchomo/global.js:385 msgid "Tun stack." msgstr "Tun 堆栈" -#: htdocs/luci-static/resources/view/fchomo/client.js:202 -#: htdocs/luci-static/resources/view/fchomo/client.js:344 -#: htdocs/luci-static/resources/view/fchomo/client.js:532 -#: htdocs/luci-static/resources/view/fchomo/client.js:849 -#: htdocs/luci-static/resources/view/fchomo/node.js:49 -#: htdocs/luci-static/resources/view/fchomo/node.js:98 +#: htdocs/luci-static/resources/view/fchomo/client.js:223 +#: htdocs/luci-static/resources/view/fchomo/client.js:306 +#: htdocs/luci-static/resources/view/fchomo/client.js:482 +#: htdocs/luci-static/resources/view/fchomo/client.js:960 +#: htdocs/luci-static/resources/view/fchomo/node.js:55 +#: htdocs/luci-static/resources/view/fchomo/node.js:750 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:185 -#: htdocs/luci-static/resources/view/fchomo/server.js:111 +#: htdocs/luci-static/resources/view/fchomo/server.js:112 msgid "Type" msgstr "类型" -#: htdocs/luci-static/resources/view/fchomo/client.js:248 -#: htdocs/luci-static/resources/view/fchomo/node.js:209 -#: htdocs/luci-static/resources/view/fchomo/server.js:381 +#: htdocs/luci-static/resources/view/fchomo/client.js:274 +#: htdocs/luci-static/resources/view/fchomo/node.js:372 +#: htdocs/luci-static/resources/view/fchomo/node.js:861 +#: htdocs/luci-static/resources/view/fchomo/server.js:367 msgid "UDP" msgstr "UDP" -#: htdocs/luci-static/resources/view/fchomo/global.js:411 +#: htdocs/luci-static/resources/view/fchomo/global.js:414 msgid "UDP NAT expiration time" msgstr "UDP NAT 过期时间" -#: htdocs/luci-static/resources/fchomo.js:120 +#: htdocs/luci-static/resources/view/fchomo/node.js:213 +msgid "UDP over stream" +msgstr "UDP over stream" + +#: htdocs/luci-static/resources/view/fchomo/node.js:219 +msgid "UDP over stream version" +msgstr "UDP over stream 版本" + +#: htdocs/luci-static/resources/view/fchomo/node.js:206 +msgid "UDP packet relay mode." +msgstr "UDP 包中继模式。" + +#: htdocs/luci-static/resources/view/fchomo/node.js:205 +msgid "UDP relay mode" +msgstr "UDP 中继模式" + +#: htdocs/luci-static/resources/fchomo.js:121 msgid "URL test" msgstr "自动选择" -#: htdocs/luci-static/resources/view/fchomo/server.js:251 -#: htdocs/luci-static/resources/view/fchomo/server.js:298 +#: htdocs/luci-static/resources/view/fchomo/node.js:184 +#: htdocs/luci-static/resources/view/fchomo/node.js:274 +#: htdocs/luci-static/resources/view/fchomo/server.js:237 +#: htdocs/luci-static/resources/view/fchomo/server.js:284 msgid "UUID" msgstr "UUID" -#: htdocs/luci-static/resources/fchomo.js:515 +#: htdocs/luci-static/resources/fchomo.js:535 msgid "Unable to download unsupported type: %s" msgstr "无法下载不支持的类型: %s" @@ -1701,7 +2120,7 @@ msgstr "无法下载不支持的类型: %s" msgid "Unable to save contents: %s" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:308 +#: htdocs/luci-static/resources/view/fchomo/global.js:311 msgid "Unified delay" msgstr "统一延迟" @@ -1718,7 +2137,8 @@ msgstr "未知错误。" msgid "Unknown error: %s" msgstr "未知错误:%s" -#: htdocs/luci-static/resources/view/fchomo/node.js:213 +#: htdocs/luci-static/resources/view/fchomo/node.js:377 +#: htdocs/luci-static/resources/view/fchomo/node.js:865 msgid "UoT" msgstr "UDP over TCP (UoT)" @@ -1726,74 +2146,114 @@ msgstr "UDP over TCP (UoT)" msgid "Update failed." msgstr "更新失败。" -#: htdocs/luci-static/resources/view/fchomo/node.js:145 +#: htdocs/luci-static/resources/view/fchomo/node.js:797 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:260 msgid "Update interval" msgstr "更新间隔" -#: htdocs/luci-static/resources/view/fchomo/server.js:357 +#: htdocs/luci-static/resources/view/fchomo/node.js:662 +msgid "Upload bandwidth" +msgstr "上传带宽" + +#: htdocs/luci-static/resources/view/fchomo/node.js:663 +msgid "Upload bandwidth in Mbps." +msgstr "上传带宽(单位:Mbps)。" + +#: htdocs/luci-static/resources/view/fchomo/server.js:343 msgid "Upload certificate" msgstr "上传证书" -#: htdocs/luci-static/resources/view/fchomo/server.js:372 +#: htdocs/luci-static/resources/view/fchomo/server.js:358 msgid "Upload key" msgstr "上传密钥" -#: htdocs/luci-static/resources/view/fchomo/server.js:360 -#: htdocs/luci-static/resources/view/fchomo/server.js:375 +#: htdocs/luci-static/resources/view/fchomo/server.js:346 +#: htdocs/luci-static/resources/view/fchomo/server.js:361 msgid "Upload..." msgstr "上传..." -#: htdocs/luci-static/resources/view/fchomo/client.js:646 +#: htdocs/luci-static/resources/view/fchomo/client.js:757 msgid "Used to resolve the domain of the DNS server. Must be IP." msgstr "用于解析 DNS 服务器的域名。必须是 IP。" -#: htdocs/luci-static/resources/view/fchomo/client.js:653 +#: htdocs/luci-static/resources/view/fchomo/client.js:764 msgid "Used to resolve the domain of the Proxy node." msgstr "用于解析代理节点的域名。" -#: htdocs/luci-static/resources/view/fchomo/global.js:328 +#: htdocs/luci-static/resources/view/fchomo/node.js:440 +msgid "Used to verify the hostname on the returned certificates." +msgstr "用于验证返回的证书上的主机名。" + +#: htdocs/luci-static/resources/view/fchomo/global.js:331 msgid "User Authentication" msgstr "用户认证" -#: htdocs/luci-static/resources/view/fchomo/server.js:132 +#: htdocs/luci-static/resources/view/fchomo/node.js:73 +#: htdocs/luci-static/resources/view/fchomo/server.js:133 msgid "Username" msgstr "用户名" -#: htdocs/luci-static/resources/view/fchomo/global.js:614 +#: htdocs/luci-static/resources/view/fchomo/global.js:617 msgid "Users filter mode" msgstr "使用者过滤模式" -#: htdocs/luci-static/resources/fchomo.js:90 +#: htdocs/luci-static/resources/view/fchomo/node.js:592 +msgid "V2ray HTTPUpgrade" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:597 +msgid "V2ray HTTPUpgrade fast open" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:91 msgid "VLESS" msgstr "" #: htdocs/luci-static/resources/fchomo.js:62 -#: htdocs/luci-static/resources/fchomo.js:89 +#: htdocs/luci-static/resources/fchomo.js:90 msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:103 +#: htdocs/luci-static/resources/view/fchomo/node.js:755 #: htdocs/luci-static/resources/view/fchomo/ruleset.js:218 msgid "Value" msgstr "可视化值" -#: htdocs/luci-static/resources/view/fchomo/global.js:297 +#: htdocs/luci-static/resources/view/fchomo/node.js:175 +#: htdocs/luci-static/resources/view/fchomo/node.js:351 +msgid "Version" +msgstr "版本" + +#: htdocs/luci-static/resources/view/fchomo/node.js:359 +msgid "Version hint" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/global.js:300 msgid "Warning" msgstr "警告" +#: htdocs/luci-static/resources/view/fchomo/node.js:507 +#: htdocs/luci-static/resources/view/fchomo/node.js:518 +#: htdocs/luci-static/resources/view/fchomo/node.js:523 +msgid "WebSocket" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/server.js:59 msgid "When used as a server, HomeProxy is a better choice." msgstr "用作服务端时,HomeProxy 是更好的选择。" -#: htdocs/luci-static/resources/view/fchomo/global.js:616 +#: htdocs/luci-static/resources/view/fchomo/global.js:619 msgid "White list" msgstr "白名单" -#: htdocs/luci-static/resources/fchomo.js:95 +#: htdocs/luci-static/resources/fchomo.js:96 msgid "WireGuard" msgstr "" +#: htdocs/luci-static/resources/view/fchomo/node.js:317 +msgid "Xudp (Xray-core)" +msgstr "" + #: htdocs/luci-static/resources/view/fchomo/ruleset.js:192 msgid "Yaml text" msgstr "Yaml 格式文本" @@ -1802,79 +2262,110 @@ msgstr "Yaml 格式文本" msgid "YouTube" msgstr "油管" -#: htdocs/luci-static/resources/fchomo.js:831 +#: htdocs/luci-static/resources/fchomo.js:872 msgid "Your %s was successfully uploaded. Size: %sB." msgstr "您的 %s 已成功上传。大小:%sB。" -#: htdocs/luci-static/resources/fchomo.js:181 +#: htdocs/luci-static/resources/fchomo.js:184 +#: htdocs/luci-static/resources/view/fchomo/node.js:258 +#: htdocs/luci-static/resources/view/fchomo/node.js:297 msgid "aes-128-gcm" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:182 +#: htdocs/luci-static/resources/fchomo.js:185 msgid "aes-192-gcm" msgstr "" -#: htdocs/luci-static/resources/fchomo.js:183 +#: htdocs/luci-static/resources/fchomo.js:186 +#: htdocs/luci-static/resources/view/fchomo/node.js:259 msgid "aes-256-gcm" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:273 +#: htdocs/luci-static/resources/view/fchomo/node.js:294 +msgid "auto" +msgstr "自动" + +#: htdocs/luci-static/resources/view/fchomo/node.js:201 +#: htdocs/luci-static/resources/view/fchomo/server.js:259 msgid "bbr" msgstr "bbr" -#: htdocs/luci-static/resources/view/fchomo/server.js:362 +#: htdocs/luci-static/resources/view/fchomo/server.js:348 msgid "certificate" msgstr "证书" -#: htdocs/luci-static/resources/fchomo.js:184 +#: htdocs/luci-static/resources/fchomo.js:187 +#: htdocs/luci-static/resources/view/fchomo/node.js:260 msgid "chacha20-ietf-poly1305" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:271 +#: htdocs/luci-static/resources/view/fchomo/node.js:298 +msgid "chacha20-poly1305" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:199 +#: htdocs/luci-static/resources/view/fchomo/server.js:257 msgid "cubic" msgstr "cubic" -#: htdocs/luci-static/resources/view/fchomo/global.js:557 +#: htdocs/luci-static/resources/view/fchomo/global.js:560 msgid "dialer-ip4p-convert" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:232 +#: htdocs/luci-static/resources/view/fchomo/node.js:684 +#: htdocs/luci-static/resources/view/fchomo/node.js:888 msgid "dialer-proxy" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:222 +#: htdocs/luci-static/resources/view/fchomo/node.js:875 msgid "down" msgstr "Hysteria 下载速率" -#: htdocs/luci-static/resources/view/fchomo/global.js:385 +#: htdocs/luci-static/resources/view/fchomo/node.js:506 +#: htdocs/luci-static/resources/view/fchomo/node.js:517 +#: htdocs/luci-static/resources/view/fchomo/node.js:522 +msgid "gRPC" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:576 +msgid "gRPC service name" +msgstr "gRPC 服务名称" + +#: htdocs/luci-static/resources/view/fchomo/global.js:388 msgid "gVisor" msgstr "gVisor" -#: htdocs/luci-static/resources/view/fchomo/node.js:248 -msgid "ip-version" +#: htdocs/luci-static/resources/view/fchomo/node.js:613 +msgid "h2mux" msgstr "" #: htdocs/luci-static/resources/fchomo.js:33 msgid "metacubexd" msgstr "metacubexd" -#: htdocs/luci-static/resources/view/fchomo/node.js:205 +#: htdocs/luci-static/resources/view/fchomo/node.js:679 +#: htdocs/luci-static/resources/view/fchomo/node.js:857 msgid "mpTCP" msgstr "多路径 TCP (mpTCP)" -#: htdocs/luci-static/resources/view/fchomo/server.js:272 +#: htdocs/luci-static/resources/view/fchomo/node.js:200 +#: htdocs/luci-static/resources/view/fchomo/server.js:258 msgid "new_reno" msgstr "new_reno" -#: htdocs/luci-static/resources/view/fchomo/client.js:613 +#: htdocs/luci-static/resources/view/fchomo/client.js:389 msgid "no-resolve" msgstr "no-resolve" -#: htdocs/luci-static/resources/fchomo.js:699 +#: htdocs/luci-static/resources/fchomo.js:718 +#: htdocs/luci-static/resources/fchomo.js:740 msgid "non-empty value" msgstr "非空值" -#: htdocs/luci-static/resources/fchomo.js:179 +#: htdocs/luci-static/resources/fchomo.js:182 +#: htdocs/luci-static/resources/view/fchomo/node.js:295 +#: htdocs/luci-static/resources/view/fchomo/node.js:315 +#: htdocs/luci-static/resources/view/fchomo/node.js:323 msgid "none" msgstr "无" @@ -1882,27 +2373,35 @@ msgstr "无" msgid "not found" msgstr "未找到" -#: htdocs/luci-static/resources/view/fchomo/client.js:334 +#: htdocs/luci-static/resources/view/fchomo/client.js:472 msgid "not included \",\"" msgstr "不包含 \",\"" -#: htdocs/luci-static/resources/fchomo.js:108 +#: htdocs/luci-static/resources/fchomo.js:109 msgid "null" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/node.js:188 +#: htdocs/luci-static/resources/view/fchomo/node.js:324 +msgid "obfs-simple" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:840 msgid "override.proxy-name" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/server.js:377 +#: htdocs/luci-static/resources/view/fchomo/node.js:316 +msgid "packet addr (v2ray-core v5+)" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/server.js:363 msgid "private key" msgstr "私钥" -#: htdocs/luci-static/resources/view/fchomo/global.js:554 +#: htdocs/luci-static/resources/view/fchomo/global.js:557 msgid "quic-go-disable-ecn" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/global.js:551 +#: htdocs/luci-static/resources/view/fchomo/global.js:554 msgid "quic-go-disable-gso" msgstr "" @@ -1910,11 +2409,19 @@ msgstr "" msgid "razord-meta" msgstr "razord-meta" -#: htdocs/luci-static/resources/view/fchomo/node.js:227 -msgid "skip-cert-verify" +#: htdocs/luci-static/resources/view/fchomo/node.js:327 +msgid "restls" msgstr "" -#: htdocs/luci-static/resources/view/fchomo/client.js:597 +#: htdocs/luci-static/resources/view/fchomo/node.js:326 +msgid "shadow-tls" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:611 +msgid "smux" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/client.js:372 msgid "src" msgstr "src" @@ -1922,49 +2429,71 @@ msgstr "src" msgid "unchecked" msgstr "未检查" -#: htdocs/luci-static/resources/fchomo.js:539 +#: htdocs/luci-static/resources/fchomo.js:559 msgid "unique UCI identifier" msgstr "独立 UCI 标识" -#: htdocs/luci-static/resources/fchomo.js:542 +#: htdocs/luci-static/resources/fchomo.js:562 msgid "unique identifier" msgstr "独立标识" -#: htdocs/luci-static/resources/fchomo.js:708 +#: htdocs/luci-static/resources/fchomo.js:749 msgid "unique value" msgstr "独立值" -#: htdocs/luci-static/resources/view/fchomo/node.js:217 +#: htdocs/luci-static/resources/view/fchomo/node.js:870 msgid "up" msgstr "Hysteria 上传速率" -#: htdocs/luci-static/resources/fchomo.js:678 -#: htdocs/luci-static/resources/fchomo.js:681 +#: htdocs/luci-static/resources/view/fchomo/node.js:176 +#: htdocs/luci-static/resources/view/fchomo/node.js:220 +#: htdocs/luci-static/resources/view/fchomo/node.js:352 +#: htdocs/luci-static/resources/view/fchomo/node.js:384 +msgid "v1" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:177 +#: htdocs/luci-static/resources/view/fchomo/node.js:353 +#: htdocs/luci-static/resources/view/fchomo/node.js:385 +msgid "v2" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:178 +#: htdocs/luci-static/resources/view/fchomo/node.js:354 +msgid "v3" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:700 +#: htdocs/luci-static/resources/fchomo.js:703 msgid "valid JSON format" msgstr "有效的 JSON 格式" -#: htdocs/luci-static/resources/fchomo.js:720 -#: htdocs/luci-static/resources/fchomo.js:723 +#: htdocs/luci-static/resources/view/fchomo/node.js:456 +msgid "valid SHA256 string with %d characters" +msgstr "包含 %d 个字符的有效 SHA256 字符串" + +#: htdocs/luci-static/resources/fchomo.js:761 +#: htdocs/luci-static/resources/fchomo.js:764 msgid "valid URL" msgstr "有效网址" -#: htdocs/luci-static/resources/view/fchomo/server.js:237 +#: htdocs/luci-static/resources/fchomo.js:715 msgid "valid base64 key with %d characters" msgstr "包含 %d 个字符的有效 base64 密钥" -#: htdocs/luci-static/resources/view/fchomo/server.js:240 +#: htdocs/luci-static/resources/fchomo.js:720 msgid "valid key length with %d characters" msgstr "包含 %d 个字符的有效密钥" -#: htdocs/luci-static/resources/fchomo.js:661 +#: htdocs/luci-static/resources/fchomo.js:683 msgid "valid port value" msgstr "有效端口值" -#: htdocs/luci-static/resources/fchomo.js:733 +#: htdocs/luci-static/resources/fchomo.js:774 msgid "valid uuid" msgstr "有效 uuid" -#: htdocs/luci-static/resources/fchomo.js:185 +#: htdocs/luci-static/resources/fchomo.js:188 msgid "xchacha20-ietf-poly1305" msgstr "" @@ -1972,6 +2501,14 @@ msgstr "" msgid "yacd-meta" msgstr "yacd-meta" -#: htdocs/luci-static/resources/fchomo.js:517 +#: htdocs/luci-static/resources/view/fchomo/node.js:612 +msgid "yamux" +msgstr "" + +#: htdocs/luci-static/resources/view/fchomo/node.js:296 +msgid "zero" +msgstr "" + +#: htdocs/luci-static/resources/fchomo.js:537 msgid "🡇" msgstr "" diff --git a/luci-app-fchomo/root/etc/fchomo/scripts/generate_client.uc b/luci-app-fchomo/root/etc/fchomo/scripts/generate_client.uc index 8aba8ffda..c2aaefcf8 100755 --- a/luci-app-fchomo/root/etc/fchomo/scripts/generate_client.uc +++ b/luci-app-fchomo/root/etc/fchomo/scripts/generate_client.uc @@ -10,7 +10,7 @@ import { urldecode, urlencode } from 'luci.http'; import { isEmpty, strToBool, strToInt, durationToSecond, - removeBlankAttrs, + arrToObj, removeBlankAttrs, HM_DIR, RUN_DIR, PRESET_OUTBOUND } from 'fchomo'; @@ -38,6 +38,7 @@ const ucisniff = 'sniff', ucidnser = 'dns_server', ucidnspoli = 'dns_policy', ucipgrp = 'proxy_group', + ucinode = 'node', uciprov = 'provider', ucirule = 'ruleset', ucirout = 'rules', @@ -419,6 +420,156 @@ config.proxies = [ type: 'dns' } ]; +uci.foreach(uciconf, ucinode, (cfg) => { + if (cfg.enabled === '0') + return null; + + push(config.proxies, { + name: cfg.label, + type: cfg.type, + + server: cfg.server, + port: strToInt(cfg.port), + + /* Dial fields */ + tfo: strToBool(cfg.tfo), + mptcp: strToBool(cfg.mptcp), + // dev: Features under development + ["dialer-proxy"]: null, //cfg.dialer_proxy, + ["interface-name"]: cfg.interface_name, + ["routing-mark"]: strToInt(cfg.routing_mark), + ["ip-version"]: cfg.ip_version, + + /* HTTP / SOCKS / Shadowsocks / VMess / VLESS / Trojan / hysteria2 / TUIC / SSH */ + username: cfg.username, + uuid: cfg.vmess_uuid || cfg.uuid, + cipher: cfg.vmess_chipher || cfg.shadowsocks_chipher, + password: cfg.shadowsocks_password || cfg.password, + headers: cfg.headers ? json(cfg.headers) : null, + + /* Hysteria / Hysteria2 */ + ports: isEmpty(cfg.hysteria_ports) ? null : join(',', cfg.hysteria_ports), + 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, + + /* SSH */ + ["private-key"]: cfg.ssh_priv_key, + ["private-key-passphrase"]: cfg.ssh_priv_key_passphrase, + ["host-key-algorithms"]: cfg.ssh_host_key_algorithms, + ["host-key"]: cfg.ssh_host_key, + + /* Shadowsocks */ + + /* Snell */ + psk: cfg.snell_psk, + version: cfg.snell_version, + ["obfs-opts"]: cfg.type === 'snell' ? { + mode: cfg.plugin_opts_obfsmode, + host: cfg.plugin_opts_host, + } : null, + + /* TUIC */ + ip: cfg.tuic_ip, + ["congestion-controller"]: cfg.tuic_congestion_controller, + ["udp-relay-mode"]: cfg.tuic_udp_relay_mode, + ["udp-over-stream"]: strToBool(cfg.tuic_udp_over_stream), + ["udp-over-stream-version"]: cfg.tuic_udp_over_stream_version, + ["max-udp-relay-packet-size"]: strToInt(cfg.tuic_max_udp_relay_packet_size), + ["reduce-rtt"]: strToBool(cfg.tuic_reduce_rtt), + ["heartbeat-interval"]: strToInt(cfg.tuic_heartbeat), + ["request-timeout"]: strToInt(cfg.tuic_request_timeout), + // fast-open: true + // max-open-streams: 20 + + /* Trojan */ + ["ss-opts"]: cfg.trojan_ss_enabled === '1' ? { + enabled: true, + method: cfg.trojan_ss_chipher, + password: cfg.trojan_ss_password + }: null, + + /* VMess / VLESS */ + flow: cfg.vless_flow, + alterId: strToInt(cfg.vmess_alterid), + ["global-padding"]: cfg.type === 'vmess' ? (cfg.vmess_global_padding === '0' ? false : true) : null, + ["authenticated-length"]: strToBool(cfg.vmess_authenticated_length), + ["packet-encoding"]: cfg.vmess_packet_encoding, + + /* Plugin fields */ + plugin: cfg.plugin, + ["plugin-opts"]: cfg.plugin ? { + mode: cfg.plugin_opts_obfsmode, + host: cfg.plugin_opts_host, + password: cfg.plugin_opts_thetlspassword, + version: cfg.plugin_opts_shadowtls_version, + ["version-hint"]: cfg.plugin_opts_restls_versionhint, + ["restls-script"]: cfg.plugin_opts_restls_script + } : null, + + /* Extra fields */ + udp: strToBool(cfg.udp), + ["udp-over-tcp"]: strToBool(cfg.uot), + ["udp-over-tcp-version"]: cfg.uot_version, + + /* TLS fields */ + tls: (cfg.type in ['trojan', 'hysteria', 'hysteria2', 'tuic']) ? null : strToBool(cfg.tls), + ["disable-sni"]: strToBool(cfg.tls_disable_sni), + ...arrToObj([[(cfg.type in ['vmess', 'vless']) ? 'servername' : 'sni', cfg.tls_sni]]), + fingerprint: cfg.tls_fingerprint, + alpn: cfg.tls_alpn, // Array + ["skip-cert-verify"]: strToBool(cfg.tls_skip_cert_verify), + ["client-fingerprint"]: cfg.tls_client_fingerprint, + ["reality-opts"]: cfg.tls_reality === '1' ? { + ["public-key"]: cfg.tls_reality_public_key, + ["short-id"]: cfg.tls_reality_short_id + } : null, + + /* Transport fields */ + // https://github.com/muink/mihomo/blob/3e966e82c793ca99e3badc84bf3f2907b100edae/adapter/outbound/vmess.go#L74 + ...(cfg.transport_enabled === '1' ? { + network: cfg.transport_type, + ["http-opts"]: cfg.transport_type === 'http' ? { + method: cfg.transport_http_method, + path: isEmpty(cfg.transport_paths) ? ['/'] : cfg.transport_paths, // Array + headers: cfg.transport_http_headers ? json(cfg.transport_http_headers) : null, + } : null, + ["h2-opts"]: cfg.transport_type === 'h2' ? { + host: cfg.transport_hosts, // Array + path: cfg.transport_path || '/', + } : null, + ["grpc-opts"]: cfg.transport_type === 'grpc' ? { + ["grpc-service-name"]: cfg.transport_grpc_servicename + } : null, + ["ws-opts"]: cfg.transport_type === 'ws' ? { + path: cfg.transport_path || '/', + headers: cfg.transport_http_headers ? json(cfg.transport_http_headers) : null, + ["max-early-data"]: strToInt(cfg.transport_ws_max_early_data), + ["early-data-header-name"]: cfg.transport_ws_early_data_header, + ["v2ray-http-upgrade"]: strToBool(cfg.transport_ws_v2ray_http_upgrade), + ["v2ray-http-upgrade-fast-open"]: strToBool(cfg.transport_ws_v2ray_http_upgrade_fast_open) + } : null + } : {}), + + /* Multiplex fields */ + smux: cfg.smux_enabled === '1' ? { + enabled: true, + protocol: cfg.smux_protocol, + ["max-connections"]: strToInt(cfg.smux_max_connections), + ["min-streams"]: strToInt(cfg.smux_min_streams), + ["max-streams"]: strToInt(cfg.smux_max_streams), + statistic: strToBool(cfg.smux_statistic), + ["only-tcp"]: strToBool(cfg.smux_only_tcp), + padding: strToBool(cfg.smux_padding), + ["brutal-opts"]: cfg.smux_brutal === '1' ? { + enabled: true, + up: strToInt(cfg.smux_brutal_up), // Mbps + down: strToInt(cfg.smux_brutal_down) // Mbps + } : null + } : null + }); +}); /* Proxy Node END */ /* Proxy Group START */ diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua index 4ae77e5a3..2367441b3 100644 --- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua +++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua @@ -22,30 +22,23 @@ function gen_outbound(flag, node, tag, proxy_table) local result = nil if node and node ~= "nil" then local node_id = node[".name"] - if tag == nil then - tag = node_id - end + local node_remarks = node.remarks - local proxy = 0 - local proxy_tag = "nil" + local proxy_tag = nil if proxy_table ~= nil and type(proxy_table) == "table" then - proxy = proxy_table.proxy or 0 - proxy_tag = proxy_table.tag or "nil" - end - - if node.type == "sing-box" then - proxy = 0 - if proxy_tag ~= "nil" then - node.detour = proxy_tag - end + proxy_tag = proxy_table.tag or nil end if node.type ~= "sing-box" then + local config_tag = tag + if config_tag == nil then + config_tag = node_id + end local relay_port = node.port new_port = get_new_port() - local config_file = string.format("%s_%s_%s.json", flag, tag, new_port) - if tag and node_id and tag ~= node_id then - config_file = string.format("%s_%s_%s_%s.json", flag, tag, node_id, new_port) + local config_file = string.format("%s_%s_%s.json", flag, config_tag, new_port) + if config_tag and node_id and config_tag ~= node_id then + config_file = string.format("%s_%s_%s_%s.json", flag, config_tag, node_id, new_port) end sys.call(string.format('/usr/share/%s/app.sh run_socks "%s"> /dev/null', appname, @@ -55,7 +48,7 @@ function gen_outbound(flag, node, tag, proxy_table) "127.0.0.1", --bind new_port, --socks port config_file, --config file - (proxy == 1 and relay_port) and tostring(relay_port) or "" --relay port + (proxy_tag and proxy_tag ~= "nil" and relay_port) and tostring(relay_port) or "" --relay port ) ) ) @@ -64,11 +57,19 @@ function gen_outbound(flag, node, tag, proxy_table) address = "127.0.0.1", port = new_port } + else + if proxy_tag and proxy_tag ~= "nil" then + node.detour = proxy_tag + end + end + + if tag == nil then + tag = node_id .. "_" .. node_remarks end result = { - _flag_tag = node_id, - _flag_proxy = proxy, + _id = node_id, + _flag = flag, _flag_proxy_tag = proxy_tag, tag = tag, type = node.protocol, @@ -778,6 +779,7 @@ function gen_config(var) local dns = nil local inbounds = {} local outbounds = {} + local COMMON = {} local singbox_settings = uci:get_all(appname, "@global_singbox[0]") or {} @@ -797,7 +799,6 @@ function gen_config(var) local experimental = nil - local default_outTag = nil if node_id then local node = uci:get_all(appname, node_id) if node then @@ -1000,7 +1001,7 @@ function gen_config(var) local proxy = preproxy_enabled and node[rule_name .. "_proxy_tag"] == preproxy_tag and _node_id ~= preproxy_node_id local copied_outbound for index, value in ipairs(outbounds) do - if value["_flag_tag"] == _node_id and value["_flag_proxy_tag"] == preproxy_tag then + if value["_id"] == _node_id and value["_flag_proxy_tag"] == preproxy_tag then copied_outbound = api.clone(value) break end @@ -1036,23 +1037,23 @@ function gen_config(var) }) end end - local _outbound = gen_outbound(flag, _node, rule_name, { proxy = proxy and 1 or 0, tag = proxy and preproxy_tag or nil }) + local outbound_tag = rule_name .. ":" .. _node.remarks + local _outbound = gen_outbound(flag, _node, outbound_tag, { tag = proxy and preproxy_tag or nil }) if _outbound then - set_outbound_detour(_node, _outbound, outbounds, rule_name) + rule_outboundTag = set_outbound_detour(_node, _outbound, outbounds, outbound_tag) table.insert(outbounds, _outbound) - rule_outboundTag = rule_name end end elseif _node.protocol == "_iface" then if _node.iface then local _outbound = { type = "direct", - tag = rule_name, + tag = rule_name .. ":" .. _node.remarks, bind_interface = _node.iface, routing_mark = 255, } table.insert(outbounds, _outbound) - rule_outboundTag = rule_name + rule_outboundTag = _outbound.tag sys.call("touch /tmp/etc/passwall/iface/" .. _node.iface) end end @@ -1211,8 +1212,7 @@ function gen_config(var) end) if default_outboundTag then - route.final = default_outboundTag - default_outTag = default_outboundTag + COMMON.default_outbound_tag = default_outboundTag end for index, value in ipairs(rules) do @@ -1222,25 +1222,27 @@ function gen_config(var) if node.iface then local outbound = { type = "direct", - tag = node_id, + tag = node.remarks or node_id, bind_interface = node.iface, routing_mark = 255, } table.insert(outbounds, outbound) - default_outTag = outbound.tag - route.final = default_outTag + COMMON.default_outbound_tag = outbound.tag sys.call("touch /tmp/etc/passwall/iface/" .. node.iface) end else local outbound = gen_outbound(flag, node) if outbound then - default_outTag = set_outbound_detour(node, outbound, outbounds) + COMMON.default_outbound_tag = set_outbound_detour(node, outbound, outbounds) table.insert(outbounds, outbound) - route.final = default_outTag end end end + if COMMON.default_outbound_tag then + route.final = COMMON.default_outbound_tag + end + if dns_listen_port then dns = { servers = {}, @@ -1265,6 +1267,8 @@ function gen_config(var) server = dns_socks_address, server_port = tonumber(dns_socks_port) }) + else + default_outTag = COMMON.default_outbound_tag end local remote_strategy = "prefer_ipv6" @@ -1406,7 +1410,7 @@ function gen_config(var) } if value.outboundTag ~= "block" and value.outboundTag ~= "direct" then dns_rule.server = "remote" - if value.outboundTag ~= "default" and remote_server.address then + if value.outboundTag ~= COMMON.default_outbound_tag and remote_server.address then local remote_dns_server = api.clone(remote_server) remote_dns_server.tag = value.outboundTag remote_dns_server.detour = value.outboundTag diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index e14b80a20..3bc787259 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -50,44 +50,31 @@ function gen_outbound(flag, node, tag, proxy_table) local result = nil if node and node ~= "nil" then local node_id = node[".name"] - if tag == nil then - tag = node_id - end + local node_remarks = node.remarks - local proxy = 0 - local proxy_tag = "nil" + local proxy_tag = nil local fragment = nil local noise = nil if proxy_table ~= nil and type(proxy_table) == "table" then - proxy = proxy_table.proxy or 0 - proxy_tag = proxy_table.tag or "nil" + proxy_tag = proxy_table.tag or nil fragment = proxy_table.fragment or nil noise = proxy_table.noise or nil end - if node.type == "Xray" then - if node.flow == "xtls-rprx-vision" then - else - proxy = 0 - if proxy_tag ~= "nil" then - node.proxySettings = { - tag = proxy_tag, - transportLayer = true - } - end - end - end - if node.type ~= "Xray" then if node.type == "Socks" then node.protocol = "socks" node.transport = "tcp" else + local config_tag = tag + if config_tag == nil then + config_tag = node_id + end local relay_port = node.port new_port = get_new_port() - local config_file = string.format("%s_%s_%s.json", flag, tag, new_port) - if tag and node_id and tag ~= node_id then - config_file = string.format("%s_%s_%s_%s.json", flag, tag, node_id, new_port) + local config_file = string.format("%s_%s_%s.json", flag, config_tag, new_port) + if config_tag and node_id and config_tag ~= node_id then + config_file = string.format("%s_%s_%s_%s.json", flag, config_tag, node_id, new_port) end sys.call(string.format('/usr/share/%s/app.sh run_socks "%s"> /dev/null', appname, @@ -97,7 +84,7 @@ function gen_outbound(flag, node, tag, proxy_table) "127.0.0.1", --bind new_port, --socks port config_file, --config file - (proxy == 1 and relay_port) and tostring(relay_port) or "" --relay port + (proxy_tag and proxy_tag ~= "nil" and relay_port) and tostring(relay_port) or "" --relay port ) )) node = {} @@ -107,6 +94,16 @@ function gen_outbound(flag, node, tag, proxy_table) node.port = new_port end node.stream_security = "none" + else + if node.flow == "xtls-rprx-vision" then + else + if proxy_tag and proxy_tag ~= "nil" then + node.proxySettings = { + tag = proxy_tag, + transportLayer = true + } + end + end end if node.type == "Xray" then @@ -142,9 +139,13 @@ function gen_outbound(flag, node, tag, proxy_table) node.wireguard_reserved = #bytes > 0 and bytes or nil end + if tag == nil then + tag = node_id .. "_" .. node_remarks + end + result = { - _flag_tag = node_id, - _flag_proxy = proxy, + _id = node_id, + _flag = flag, _flag_proxy_tag = proxy_tag, tag = tag, proxySettings = node.proxySettings or nil, @@ -450,7 +451,6 @@ function gen_config_server(node) domainStrategy = "IPOnDemand", rules = { { - type = "field", ip = {"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"}, outboundTag = (node.accept_lan == nil or node.accept_lan == "0") and "blocked" or "direct" } @@ -641,6 +641,7 @@ function gen_config(var) local observatory = nil local inbounds = {} local outbounds = {} + local COMMON = {} local xray_settings = uci:get_all(appname, "@global_xray[0]") or {} @@ -817,7 +818,7 @@ function gen_config(var) end end local inbound_tag = gen_loopback(loopback_tag, loopback_dst) - table.insert(rules, { type = "field", inboundTag = { inbound_tag }, balancerTag = balancer_tag }) + table.insert(rules, { inboundTag = { inbound_tag }, balancerTag = balancer_tag }) return balancer_tag end @@ -897,7 +898,7 @@ function gen_config(var) if use_proxy and proxy_balancer_tag and proxy_nodes[_node_id] then use_proxy = false end local copied_outbound for index, value in ipairs(outbounds) do - if value["_flag_tag"] == _node_id and value["_flag_proxy_tag"] == (use_proxy and proxy_tag or "nil") then + if value["_id"] == _node_id and value["_flag_proxy_tag"] == (use_proxy and proxy_tag or nil) then copied_outbound = api.clone(value) break end @@ -923,23 +924,23 @@ function gen_config(var) _node.address = "127.0.0.1" _node.port = new_port table.insert(rules, 1, { - type = "field", inboundTag = {"proxy_" .. rule_name}, outboundTag = not proxy_balancer_tag and proxy_tag or nil, balancerTag = proxy_balancer_tag }) end local proxy_table = { - proxy = use_proxy and 1 or 0, tag = use_proxy and proxy_tag or nil } - if xray_settings.fragment == "1" and not proxy_table.tag then - proxy_table.fragment = true + if not proxy_table.tag then + if xray_settings.fragment == "1" then + proxy_table.fragment = true + end + if xray_settings.noise == "1" then + proxy_table.noise = true + end end - if xray_settings.noise == "1" and not proxy_table.tag then - proxy_table.noise = true - end - local outbound = gen_outbound(flag, _node, rule_name, proxy_table) + local outbound = gen_outbound(flag, _node, rule_name .. ":" .. _node.remarks, proxy_table) local outbound_tag if outbound then set_outbound_detour(_node, outbound, outbounds, rule_name) @@ -997,6 +998,8 @@ function gen_config(var) --default_node local default_node_id = node.default_node or "_direct" local default_outbound_tag, default_balancer_tag = gen_shunt_node("default", default_node_id) + COMMON.default_outbound_tag = default_outbound_tag + COMMON.default_balancer_tag = default_balancer_tag --shunt rule uci:foreach(appname, "shunt_rules", function(e) local outbound_tag, balancer_tag = gen_shunt_node(e[".name"]) @@ -1055,8 +1058,7 @@ function gen_config(var) end) end local rule = { - _flag = e.remarks, - type = "field", + ruleTag = e.remarks, inboundTag = inbound_tag, outboundTag = outbound_tag, balancerTag = balancer_tag, @@ -1068,13 +1070,13 @@ function gen_config(var) } if domains then local _rule = api.clone(rule) - _rule["_flag"] = _rule["_flag"] .. "_domains" + _rule.ruleTag = _rule.ruleTag .. " Domains" _rule.domains = domains table.insert(rules, _rule) end if ip then local _rule = api.clone(rule) - _rule["_flag"] = _rule["_flag"] .. "_ip" + _rule.ruleTag = _rule.ruleTag .. " IP" _rule.ip = ip table.insert(rules, _rule) end @@ -1087,7 +1089,6 @@ function gen_config(var) --[[ if default_outbound_tag or default_balancer_tag then table.insert(rules, { - type = "field", outboundTag = default_outbound_tag, balancerTag = default_balancer_tag, network = "tcp,udp" @@ -1105,18 +1106,19 @@ function gen_config(var) if node.balancing_node then local balancer_tag = gen_balancer(node) if balancer_tag then - table.insert(rules, { type = "field", network = "tcp,udp", balancerTag = balancer_tag }) + table.insert(rules, { network = "tcp,udp", balancerTag = balancer_tag }) end routing = { balancers = balancers, rules = rules } + COMMON.default_balancer_tag = balancer_tag end elseif node.protocol == "_iface" then if node.iface then local outbound = { protocol = "freedom", - tag = "outbound", + tag = node.remarks or node_id, streamSettings = { sockopt = { mark = 255, @@ -1125,12 +1127,13 @@ function gen_config(var) } } table.insert(outbounds, outbound) + COMMON.default_outbound_tag = outbound.tag sys.call("touch /tmp/etc/passwall/iface/" .. node.iface) end else local outbound = gen_outbound(flag, node, nil, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.fragment == "1" or nil }) if outbound then - set_outbound_detour(node, outbound, outbounds) + COMMON.default_outbound_tag = set_outbound_detour(node, outbound, outbounds) table.insert(outbounds, outbound) end routing = { @@ -1231,12 +1234,8 @@ function gen_config(var) } }) else - if node_id and tcp_redir_port then - dns_outbound_tag = node_id - local node = uci:get_all(appname, node_id) - if node.protocol == "_shunt" then - dns_outbound_tag = "default" - end + if COMMON.default_outbound_tag then + dns_outbound_tag = COMMON.default_outbound_tag end end @@ -1268,7 +1267,6 @@ function gen_config(var) }) table.insert(routing.rules, 1, { - type = "field", inboundTag = { "dns-in" }, @@ -1276,7 +1274,6 @@ function gen_config(var) }) end table.insert(rules, { - type = "field", inboundTag = { "dns-in1" }, @@ -1288,7 +1285,6 @@ function gen_config(var) }) if _remote_dns_host then table.insert(rules, { - type = "field", inboundTag = { "dns-in1" }, @@ -1301,7 +1297,6 @@ function gen_config(var) end if remote_dns_doh_ip then table.insert(rules, { - type = "field", inboundTag = { "dns-in1" }, @@ -1409,6 +1404,13 @@ function gen_config(var) protocol = "blackhole", tag = "blackhole" }) + for index, value in ipairs(config.outbounds) do + for k, v in pairs(config.outbounds[index]) do + if k:find("_") == 1 then + config.outbounds[index][k] = nil + end + end + end return jsonc.stringify(config, 1) end end diff --git a/njitclient/Makefile b/njitclient/Makefile index 9c00285ae..a7ad10c1f 100644 --- a/njitclient/Makefile +++ b/njitclient/Makefile @@ -1,16 +1,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=njit8021xclient -PKG_BASE_VERSION:=2.0 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/bitdust/njit8021xclient.git PKG_SOURCE_DATE:=2018-11-24 PKG_SOURCE_VERSION:=dd28c17f24275bbbf4c44504b832c0f1e6b9ae40 -PKG_MIRROR_HASH:=ceab49b57f397ec608788ae92d25f13651e808aa4156c4c4049698dac405cb0a - -PKG_VERSION:=$(PKG_BASE_VERSION)-$(PKG_SOURCE_DATE)-$(call version_abbrev,$(PKG_SOURCE_VERSION)) +PKG_MIRROR_HASH:=f82c2e4459fadb36466af24b0edd6c96f3cb6f3f2f425ea170a5cc91749dd8a6 PKG_FIXUP:=autoreconf PKG_BUILD_PARALLEL:=1 diff --git a/scutclient/Makefile b/scutclient/Makefile index 515c21abd..7d6e1bc02 100644 --- a/scutclient/Makefile +++ b/scutclient/Makefile @@ -8,24 +8,18 @@ include $(TOPDIR)/rules.mk PKG_NAME:=scutclient -PKG_BASE_VERSION:=3.1.3 +PKG_VERSION:=3.1.3 PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/scutclient/scutclient.git -PKG_SOURCE_DATE:=2021-11-26 -PKG_SOURCE_VERSION:=b265ca8ffea204bd1788b0addd42184496b8a118 -PKG_MIRROR_HASH:=10da818f0a8a892d98d5ab5ca1f9ecbb3022bf2cd4ee04132ee5f1f0e52a740e - -PKG_VERSION:=$(PKG_BASE_VERSION)-$(PKG_SOURCE_DATE)-$(call version_abbrev,$(PKG_SOURCE_VERSION)) +PKG_SOURCE_VERSION:=v$(PKG_VERSION) +PKG_MIRROR_HASH:=3b98fb51956c0de8c25432c22c56477b245c5949be2b5ec7574ad10c83274668 PKG_MAINTAINER:=Scutclient Project PKG_LICENSE:=AGPL-3.0 PKG_LICENSE_FILES:=COPYING -PKG_BUILD_PARALLEL:=1 -CMAKE_INSTALL:=1 - include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk