From 638ee2bb0260a2f156ae20831d4d8ea33a95da10 Mon Sep 17 00:00:00 2001 From: action Date: Sun, 12 Jul 2026 00:50:47 +0800 Subject: [PATCH] update 2026-07-12 00:50:47 --- homeproxy/Makefile | 6 + .../resources/view/homeproxy/client.js | 19 +- .../resources/view/homeproxy/node.js | 9 - .../resources/view/homeproxy/status.js | 146 +- homeproxy/po/templates/homeproxy.pot | 1545 ++++++++-------- homeproxy/po/zh_Hans/homeproxy.po | 1553 ++++++++--------- .../etc/homeproxy/scripts/generate_client.uc | 185 +- .../etc/homeproxy/scripts/generate_server.uc | 5 +- .../root/etc/homeproxy/scripts/homeproxy.uc | 155 ++ .../etc/homeproxy/scripts/migrate_config.uc | 27 +- .../etc/homeproxy/scripts/update_crond.sh | 4 +- .../etc/homeproxy/scripts/update_resources.sh | 157 +- .../homeproxy/scripts/update_subscriptions.uc | 74 +- homeproxy/root/etc/init.d/homeproxy | 115 +- .../etc/uci-defaults/luci-homeproxy-migration | 4 +- .../share/rpcd/acl.d/luci-app-homeproxy.json | 13 +- .../root/usr/share/rpcd/ucode/luci.homeproxy | 254 +-- .../model/cbi/shadowsocksr/client-config.lua | 1 + rblibtorrent/Makefile | 4 +- v2ray-geodata/Makefile | 4 +- 20 files changed, 2117 insertions(+), 2163 deletions(-) diff --git a/homeproxy/Makefile b/homeproxy/Makefile index 14166586..4cad2f72 100644 --- a/homeproxy/Makefile +++ b/homeproxy/Makefile @@ -10,12 +10,18 @@ LUCI_DEPENDS:= \ +sing-box \ +firewall4 \ +kmod-nft-tproxy \ + +curl \ + +jsonfilter \ +ucode-mod-digest PKG_NAME:=luci-app-homeproxy +PKG_VERSION=$(PKG_SRC_VERSION) +PKG_RELEASE:=5 +PKG_PO_VERSION=$(PKG_SRC_VERSION)-r$(PKG_RELEASE) define Package/luci-app-homeproxy/conffiles /etc/config/homeproxy +/etc/homeproxy/cache/ /etc/homeproxy/certs/ /etc/homeproxy/ruleset/ /etc/homeproxy/resources/direct_list.txt diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js index a85f8ffa..843ddb89 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js @@ -65,7 +65,7 @@ function renderStatus(isRunning, version, currentNode) { renderHTML = spanTemp.format(statusColor, _('HomeProxy'), version, _('NOT RUNNING')); if (currentNode) - renderHTML += '
%s
'.format(nodeColor, currentNode); + renderHTML += '
%s
'.format(nodeColor, '%h'.format(currentNode)); return renderHTML; } @@ -101,12 +101,13 @@ return view.extend({ /* Cache all configured proxy nodes, they will be called multiple times */ let proxy_nodes = {}; uci.sections(data[0], 'node', (res) => { - let nodeaddr = ((res.type === 'direct') ? res.override_address : res.address) || '', - nodeport = ((res.type === 'direct') ? res.override_port : res.port) || ''; + let nodeaddr = res.address || '', + nodeport = res.port || '', + endpoint = nodeaddr && nodeport ? ((stubValidator.apply('ip6addr', nodeaddr) ? + String.format('[%s]', nodeaddr) : nodeaddr) + ':' + nodeport) : res['.name']; proxy_nodes[res['.name']] = - String.format('[%s] %s', res.type, res.label || ((stubValidator.apply('ip6addr', nodeaddr) ? - String.format('[%s]', nodeaddr) : nodeaddr) + ':' + nodeport)); + String.format('[%s] %s', res.type, res.label || endpoint); }); m = new form.Map('homeproxy', _('HomeProxy'), @@ -348,13 +349,6 @@ return view.extend({ desc.innerHTML = _('Less compatibility and sometimes better performance.'); } - so = ss.option(form.Flag, 'endpoint_independent_nat', _('Enable endpoint-independent NAT'), - _('Performance may degrade slightly, so it is not recommended to enable on when it is not needed.')); - so.default = so.enabled; - so.depends('tcpip_stack', 'mixed'); - so.depends('tcpip_stack', 'gvisor'); - so.rmempty = false; - so = ss.option(form.Value, 'udp_timeout', _('UDP NAT expiration time'), _('In seconds.')); so.datatype = 'uinteger'; @@ -1410,6 +1404,7 @@ return view.extend({ return this.super('load', section_id); } + so.default = 'direct-out'; so.depends('type', 'remote'); so = ss.option(form.Value, 'update_interval', _('Update interval'), diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js index 277bd9f1..69a780b0 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js @@ -923,15 +923,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no } o.modalonly = true; - /* Direct config */ - o = s.option(form.ListValue, 'proxy_protocol', _('Proxy protocol'), - _('Write proxy protocol in the connection header.')); - o.value('', _('Disable')); - o.value('1', _('v1')); - o.value('2', _('v2')); - o.depends('type', 'direct'); - o.modalonly = true; - /* AnyTLS config start */ o = s.option(form.Value, 'anytls_idle_session_check_interval', _('Idle session check interval'), _('Interval checking for idle sessions, in seconds.')); diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js index bc70218b..db8963b0 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js @@ -60,56 +60,107 @@ function getConnStat(o, site) { ]); } -function getResVersion(o, type) { - const callResVersion = rpc.declare({ +const resources = [ + { + type: 'china_ip4', + name: _('China IPv4 list') + }, + { + type: 'china_ip6', + name: _('China IPv6 list') + }, + { + type: 'china_list', + name: _('China domain list') + }, + { + type: 'gfw_list', + name: _('GFW domain list') + } +]; + +function getResources(o) { + const callResStatus = rpc.declare({ object: 'luci.homeproxy', - method: 'resources_get_version', - params: ['type'], + method: 'resources_get', expect: { '': {} } }); const callResUpdate = rpc.declare({ object: 'luci.homeproxy', method: 'resources_update', - params: ['type'], expect: { '': {} } }); - return L.resolveDefault(callResVersion(type), {}).then((res) => { - let spanTemp = E('div', { 'style': 'cbi-value-field' }, [ - E('button', { - 'class': 'btn cbi-button cbi-button-action', - 'click': ui.createHandlerFn(this, () => { - return L.resolveDefault(callResUpdate(type), {}).then((res) => { - switch (res.status) { - case 0: - o.description = _('Successfully updated.'); - break; - case 1: - o.description = _('Update failed.'); - break; - case 2: - o.description = _('Already in updating.'); - break; - case 3: - o.description = _('Already at the latest version.'); - break; - default: - o.description = _('Unknown error.'); - break; - } - - return o.map.reset(); - }); - }) - }, [ _('Check update') ]), - ' ', - E('strong', { 'style': (res.error ? 'color:red' : 'color:green') }, - [ res.error ? 'not found' : res.version ] - ), + return L.resolveDefault(callResStatus(), { resources: [] }).then((result) => { + const status = {}; + (result.resources || []).forEach((resource) => { + status[resource.type] = resource; + }); + const table = E('table', { 'class': 'table' }, [ + E('tr', { 'class': 'tr table-titles' }, [ + E('th', { 'class': 'th' }, _('Name')), + E('th', { 'class': 'th' }, _('Version')), + E('th', { 'class': 'th' }, _('Source')) + ]) ]); + const rows = resources.map((resource) => { + const resourceStatus = status[resource.type] || {}; + const available = resourceStatus.version; + const source = resourceStatus.source; - o.default = spanTemp; + return [ + resource.name, + E('span', { 'style': available ? 'color:green' : 'color:red' }, + available || '-'), + source ? E('a', { + 'href': source, + 'target': '_blank', + 'rel': 'noreferrer noopener', + 'style': 'word-break:break-all' + }, source) : '-' + ]; + }); + cbi_update_table(table, rows); + + return E('div', { 'class': 'cbi-map' }, [ + E('h3', { 'name': 'content', 'style': 'align-items:center;display:flex' }, [ + _('Resources management'), + E('button', { + 'class': 'btn cbi-button cbi-button-action', + 'style': 'margin-left:4px', + 'click': ui.createHandlerFn(this, () => { + return L.resolveDefault(callResUpdate(), {}).then((res) => { + let message, severity = 'info'; + + switch (res.status) { + case 0: + message = _('Successfully updated.'); + break; + case 1: + message = _('Update failed.'); + severity = 'error'; + break; + case 2: + message = _('Already in updating.'); + break; + case 3: + message = _('Already at the latest version.'); + break; + default: + message = _('Unknown error.'); + severity = 'error'; + break; + } + + ui.addNotification(null, E('p', message), severity); + return o.map.reset(); + }); + }) + }, [ _('Update all') ]) + ]), + E('div', { 'class': 'cbi-section' }, [ table ]) + ]); }); } @@ -238,24 +289,11 @@ return view.extend({ o = s.option(form.DummyValue, '_check_google', _('Google')); o.cfgvalue = L.bind(getConnStat, this, o, 'google'); - s = m.section(form.NamedSection, 'config', 'homeproxy', _('Resources management')); + s = m.section(form.NamedSection, 'config', 'homeproxy'); s.anonymous = true; - o = s.option(form.DummyValue, '_china_ip4_version', _('China IPv4 list version')); - o.cfgvalue = L.bind(getResVersion, this, o, 'china_ip4'); - o.rawhtml = true; - - o = s.option(form.DummyValue, '_china_ip6_version', _('China IPv6 list version')); - o.cfgvalue = L.bind(getResVersion, this, o, 'china_ip6'); - o.rawhtml = true; - - o = s.option(form.DummyValue, '_china_list_version', _('China list version')); - o.cfgvalue = L.bind(getResVersion, this, o, 'china_list'); - o.rawhtml = true; - - o = s.option(form.DummyValue, '_gfw_list_version', _('GFW list version')); - o.cfgvalue = L.bind(getResVersion, this, o, 'gfw_list'); - o.rawhtml = true; + o = s.option(form.DummyValue, '_resources'); + o.render = L.bind(getResources, this, o); o = s.option(form.Value, 'github_token', _('GitHub token')); o.password = true; diff --git a/homeproxy/po/templates/homeproxy.pot b/homeproxy/po/templates/homeproxy.pot index 55ef6606..02786961 100644 --- a/homeproxy/po/templates/homeproxy.pot +++ b/homeproxy/po/templates/homeproxy.pot @@ -1,7 +1,7 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -#: htdocs/luci-static/resources/view/homeproxy/status.js:206 +#: htdocs/luci-static/resources/view/homeproxy/status.js:257 msgid "%s log" msgstr "" @@ -9,7 +9,7 @@ msgstr "" msgid "%s ms" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1896 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1887 msgid "%s nodes removed" msgstr "" @@ -17,19 +17,19 @@ msgstr "" msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:632 +#: htdocs/luci-static/resources/view/homeproxy/client.js:626 msgid "4 or 6. Not limited if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:798 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1233 +#: htdocs/luci-static/resources/view/homeproxy/client.js:792 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1227 msgid "" "%s will be temporarily overwritten to %s after 50 " "triggers in 30s if not enabled." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1516 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1535 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1507 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1526 #: htdocs/luci-static/resources/view/homeproxy/server.js:768 #: htdocs/luci-static/resources/view/homeproxy/server.js:787 msgid "Save your configuration before uploading files!" @@ -39,15 +39,15 @@ msgstr "" msgid "API token" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1100 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1091 msgid "Accept any if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1161 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1155 msgid "Accept empty query response" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1422 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1417 msgid "Access Control" msgstr "" @@ -59,20 +59,20 @@ msgstr "" msgid "Access key secret" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:692 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1169 +#: htdocs/luci-static/resources/view/homeproxy/client.js:686 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1163 msgid "Action" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:210 +#: htdocs/luci-static/resources/view/homeproxy/client.js:211 msgid "AdGuard Public DNS (DoH)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1079 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1073 msgid "Add a DNS rule" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:956 +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 msgid "Add a DNS server" msgstr "" @@ -80,15 +80,15 @@ msgstr "" msgid "Add a node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:428 +#: htdocs/luci-static/resources/view/homeproxy/client.js:422 msgid "Add a routing node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:599 +#: htdocs/luci-static/resources/view/homeproxy/client.js:593 msgid "Add a routing rule" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1343 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1337 msgid "Add a rule set" msgstr "" @@ -96,20 +96,20 @@ msgstr "" msgid "Add a server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:998 +#: htdocs/luci-static/resources/view/homeproxy/client.js:992 msgid "Additional headers to be sent to the DNS server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:980 +#: htdocs/luci-static/resources/view/homeproxy/client.js:974 #: htdocs/luci-static/resources/view/homeproxy/node.js:878 msgid "Address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1011 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1005 msgid "Address resolver" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1043 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1037 msgid "Address strategy" msgstr "" @@ -117,11 +117,11 @@ msgstr "" msgid "AliYun" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:246 +#: htdocs/luci-static/resources/view/homeproxy/client.js:247 msgid "AliYun Public DNS (DoH)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:289 +#: htdocs/luci-static/resources/view/homeproxy/client.js:290 msgid "All ports" msgstr "" @@ -129,33 +129,33 @@ msgstr "" msgid "Allow access from the Internet." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1470 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1822 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1461 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1813 msgid "Allow insecure" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1471 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1462 msgid "Allow insecure connection at TLS client." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1823 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1814 msgid "Allow insecure connection by default when add nodes from subscriptions." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1304 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1295 #: htdocs/luci-static/resources/view/homeproxy/server.js:482 msgid "Allowed payload size is in the request." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:95 +#: htdocs/luci-static/resources/view/homeproxy/status.js:148 msgid "Already at the latest version." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:92 +#: htdocs/luci-static/resources/view/homeproxy/status.js:145 msgid "Already in updating." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1172 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1163 #: htdocs/luci-static/resources/view/homeproxy/server.js:391 msgid "Alter ID" msgstr "" @@ -168,11 +168,11 @@ msgstr "" msgid "Alternative TLS port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1859 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1850 msgid "An error occurred during updating subscriptions: %s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1250 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1244 msgid "Answer" msgstr "" @@ -185,16 +185,16 @@ msgstr "" msgid "AnyTLS padding scheme in array." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:822 -#: htdocs/luci-static/resources/view/homeproxy/client.js:932 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1218 +#: htdocs/luci-static/resources/view/homeproxy/client.js:816 +#: htdocs/luci-static/resources/view/homeproxy/client.js:926 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1212 msgid "" "Append a edns0-subnet OPT extra record with the specified IP " "prefix to every query by default.
If value is an IP address instead of " "prefix, /32 or /128 will be appended automatically." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1502 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1493 msgid "Append self-signed certificate" msgstr "" @@ -215,29 +215,29 @@ msgstr "" msgid "Auth timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1196 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1187 msgid "Authenticated length" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:991 +#: htdocs/luci-static/resources/view/homeproxy/node.js:982 #: htdocs/luci-static/resources/view/homeproxy/server.js:282 msgid "Authentication payload" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:984 +#: htdocs/luci-static/resources/view/homeproxy/node.js:975 #: htdocs/luci-static/resources/view/homeproxy/server.js:275 msgid "Authentication type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1768 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1759 msgid "Auto update" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1769 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1760 msgid "Auto update subscriptions and geodata." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1132 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1123 msgid "BBR" msgstr "" @@ -245,64 +245,64 @@ msgstr "" msgid "Backend execution failed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:235 +#: htdocs/luci-static/resources/view/homeproxy/status.js:286 msgid "BaiDu" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:986 +#: htdocs/luci-static/resources/view/homeproxy/node.js:977 #: htdocs/luci-static/resources/view/homeproxy/server.js:277 msgid "Base64" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:346 +#: htdocs/luci-static/resources/view/homeproxy/client.js:347 msgid "Based on google/gvisor." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1364 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1358 msgid "Binary file" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:476 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1435 +#: htdocs/luci-static/resources/view/homeproxy/client.js:470 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1430 #: htdocs/luci-static/resources/view/homeproxy/server.js:874 msgid "Bind interface" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1436 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1431 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:640 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1129 +#: htdocs/luci-static/resources/view/homeproxy/client.js:634 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1123 msgid "BitTorrent" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1809 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1800 msgid "Blacklist mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:388 +#: htdocs/luci-static/resources/view/homeproxy/client.js:382 msgid "Block" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:635 -#: htdocs/luci-static/resources/view/homeproxy/client.js:663 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1115 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1125 +#: htdocs/luci-static/resources/view/homeproxy/client.js:629 +#: htdocs/luci-static/resources/view/homeproxy/client.js:657 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1109 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1119 #: htdocs/luci-static/resources/view/homeproxy/server.js:869 msgid "Both" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:366 +#: htdocs/luci-static/resources/view/homeproxy/client.js:360 msgid "Bypass CN traffic" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:276 +#: htdocs/luci-static/resources/view/homeproxy/client.js:277 msgid "Bypass mainland China" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:367 +#: htdocs/luci-static/resources/view/homeproxy/client.js:361 msgid "Bypass mainland China traffic via firewall rules by default." msgstr "" @@ -310,15 +310,15 @@ msgstr "" msgid "CA provider" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1130 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1121 msgid "CUBIC" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1672 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1663 msgid "Cancel" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1507 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1498 #: htdocs/luci-static/resources/view/homeproxy/server.js:756 msgid "Certificate path" msgstr "" @@ -327,48 +327,44 @@ msgstr "" msgid "Check" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:105 -msgid "Check update" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:241 +#: htdocs/luci-static/resources/view/homeproxy/client.js:242 msgid "China DNS server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:244 -msgid "China IPv4 list version" +#: htdocs/luci-static/resources/view/homeproxy/status.js:66 +msgid "China IPv4 list" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:248 -msgid "China IPv6 list version" +#: htdocs/luci-static/resources/view/homeproxy/status.js:70 +msgid "China IPv6 list" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:252 -msgid "China list version" +#: htdocs/luci-static/resources/view/homeproxy/status.js:74 +msgid "China domain list" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1783 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1774 msgid "Choose which method node latency tests use." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:652 +#: htdocs/luci-static/resources/view/homeproxy/client.js:646 msgid "Chromium / Cronet" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1494 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1485 #: htdocs/luci-static/resources/view/homeproxy/server.js:586 msgid "Cipher suites" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:212 +#: htdocs/luci-static/resources/view/homeproxy/client.js:213 msgid "Cisco Public DNS (DoH)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:214 +#: htdocs/luci-static/resources/view/homeproxy/status.js:265 msgid "Clean log" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:650 +#: htdocs/luci-static/resources/view/homeproxy/client.js:644 msgid "Client" msgstr "" @@ -376,7 +372,7 @@ msgstr "" msgid "Client Settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1094 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1085 msgid "Client version" msgstr "" @@ -384,50 +380,50 @@ msgstr "" msgid "CloudFlare" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:207 +#: htdocs/luci-static/resources/view/homeproxy/client.js:208 msgid "CloudFlare Public DNS (DoH)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:139 +#: htdocs/luci-static/resources/view/homeproxy/client.js:140 #: htdocs/luci-static/resources/view/homeproxy/server.js:142 -#: htdocs/luci-static/resources/view/homeproxy/status.js:176 +#: htdocs/luci-static/resources/view/homeproxy/status.js:227 msgid "Collecting data..." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:290 +#: htdocs/luci-static/resources/view/homeproxy/client.js:291 msgid "Common ports only (bypass P2P traffic)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1128 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1119 #: htdocs/luci-static/resources/view/homeproxy/server.js:354 msgid "Congestion control algorithm" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:232 +#: htdocs/luci-static/resources/view/homeproxy/status.js:283 msgid "Connection check" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1772 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1763 msgid "Cron expression" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:278 +#: htdocs/luci-static/resources/view/homeproxy/client.js:279 msgid "Custom routing" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:641 +#: htdocs/luci-static/resources/view/homeproxy/client.js:635 msgid "DNS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1070 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1064 msgid "DNS Rules" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:947 +#: htdocs/luci-static/resources/view/homeproxy/client.js:941 msgid "DNS Servers" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:895 +#: htdocs/luci-static/resources/view/homeproxy/client.js:889 msgid "DNS Settings" msgstr "" @@ -435,17 +431,17 @@ msgstr "" msgid "DNS provider" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1079 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1073 msgid "DNS rule" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:204 -#: htdocs/luci-static/resources/view/homeproxy/client.js:772 -#: htdocs/luci-static/resources/view/homeproxy/client.js:956 +#: htdocs/luci-static/resources/view/homeproxy/client.js:205 +#: htdocs/luci-static/resources/view/homeproxy/client.js:766 +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 msgid "DNS server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:211 +#: htdocs/luci-static/resources/view/homeproxy/client.js:212 msgid "DNS.SB Public DNS (DoH)" msgstr "" @@ -453,59 +449,59 @@ msgstr "" msgid "DNS01 challenge" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:642 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1130 +#: htdocs/luci-static/resources/view/homeproxy/client.js:636 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1124 msgid "DTLS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:136 +#: htdocs/luci-static/resources/view/homeproxy/status.js:187 msgid "Debug" msgstr "" #: htdocs/luci-static/resources/homeproxy.js:17 -#: htdocs/luci-static/resources/view/homeproxy/client.js:456 -#: htdocs/luci-static/resources/view/homeproxy/client.js:626 -#: htdocs/luci-static/resources/view/homeproxy/client.js:778 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1106 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1404 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1140 +#: htdocs/luci-static/resources/view/homeproxy/client.js:450 +#: htdocs/luci-static/resources/view/homeproxy/client.js:620 +#: htdocs/luci-static/resources/view/homeproxy/client.js:772 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1100 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1398 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1131 msgid "Default" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:405 -#: htdocs/luci-static/resources/view/homeproxy/client.js:457 -#: htdocs/luci-static/resources/view/homeproxy/client.js:779 -#: htdocs/luci-static/resources/view/homeproxy/client.js:910 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1018 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1184 +#: htdocs/luci-static/resources/view/homeproxy/client.js:399 +#: htdocs/luci-static/resources/view/homeproxy/client.js:451 +#: htdocs/luci-static/resources/view/homeproxy/client.js:773 +#: htdocs/luci-static/resources/view/homeproxy/client.js:904 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1012 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1178 msgid "Default DNS (issued by WAN)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:905 +#: htdocs/luci-static/resources/view/homeproxy/client.js:899 msgid "Default DNS server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:400 +#: htdocs/luci-static/resources/view/homeproxy/client.js:394 msgid "Default DNS server for resolving domain name in the server address." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:900 +#: htdocs/luci-static/resources/view/homeproxy/client.js:894 msgid "Default DNS strategy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:380 +#: htdocs/luci-static/resources/view/homeproxy/client.js:374 msgid "Default outbound" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:399 +#: htdocs/luci-static/resources/view/homeproxy/client.js:393 msgid "Default outbound DNS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:381 +#: htdocs/luci-static/resources/view/homeproxy/client.js:375 msgid "Default outbound for connections not matched by any routing rules." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1829 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1820 msgid "Default packet encoding" msgstr "" @@ -513,56 +509,55 @@ msgstr "" msgid "Default server name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:387 -#: htdocs/luci-static/resources/view/homeproxy/client.js:489 -#: htdocs/luci-static/resources/view/homeproxy/client.js:707 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1056 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1405 +#: htdocs/luci-static/resources/view/homeproxy/client.js:381 +#: htdocs/luci-static/resources/view/homeproxy/client.js:483 +#: htdocs/luci-static/resources/view/homeproxy/client.js:701 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1050 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1399 #: htdocs/luci-static/resources/view/homeproxy/node.js:858 msgid "Direct" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1537 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1532 msgid "Direct Domain List" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1451 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1496 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1446 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1491 msgid "Direct IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1454 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1499 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1449 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1494 msgid "Direct IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1457 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1452 msgid "Direct MAC-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:148 -#: htdocs/luci-static/resources/view/homeproxy/client.js:176 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1445 -#: htdocs/luci-static/resources/view/homeproxy/node.js:929 -#: htdocs/luci-static/resources/view/homeproxy/node.js:985 -#: htdocs/luci-static/resources/view/homeproxy/node.js:998 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1545 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1808 +#: htdocs/luci-static/resources/view/homeproxy/client.js:149 +#: htdocs/luci-static/resources/view/homeproxy/client.js:177 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1440 +#: htdocs/luci-static/resources/view/homeproxy/node.js:976 +#: htdocs/luci-static/resources/view/homeproxy/node.js:989 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1536 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1799 #: htdocs/luci-static/resources/view/homeproxy/server.js:276 #: htdocs/luci-static/resources/view/homeproxy/server.js:289 msgid "Disable" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:386 +#: htdocs/luci-static/resources/view/homeproxy/client.js:380 msgid "Disable (the service)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:810 -#: htdocs/luci-static/resources/view/homeproxy/client.js:922 +#: htdocs/luci-static/resources/view/homeproxy/client.js:804 +#: htdocs/luci-static/resources/view/homeproxy/client.js:916 msgid "Disable DNS cache" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:811 +#: htdocs/luci-static/resources/view/homeproxy/client.js:805 msgid "Disable DNS cache in this query." msgstr "" @@ -570,7 +565,7 @@ msgstr "" msgid "Disable HTTP challenge" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1035 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1026 #: htdocs/luci-static/resources/view/homeproxy/server.js:321 msgid "Disable Path MTU discovery" msgstr "" @@ -579,60 +574,60 @@ msgstr "" msgid "Disable TLS ALPN challenge" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:733 +#: htdocs/luci-static/resources/view/homeproxy/client.js:727 msgid "Disable UDP domain unmapping" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1205 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1199 msgid "Disable cache and save cache in this query." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:924 +#: htdocs/luci-static/resources/view/homeproxy/client.js:918 msgid "Disable cache expire" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1204 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1198 msgid "Disable dns cache" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1036 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1027 #: htdocs/luci-static/resources/view/homeproxy/server.js:322 msgid "" "Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 " "(IPv4) / 1232 (IPv6) bytes in size." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:837 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1274 +#: htdocs/luci-static/resources/view/homeproxy/client.js:831 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1268 msgid "Domain keyword" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:828 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1265 +#: htdocs/luci-static/resources/view/homeproxy/client.js:822 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1259 msgid "Domain name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:841 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1278 +#: htdocs/luci-static/resources/view/homeproxy/client.js:835 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1272 msgid "Domain regex" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:450 +#: htdocs/luci-static/resources/view/homeproxy/client.js:444 msgid "Domain resolver" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:370 -#: htdocs/luci-static/resources/view/homeproxy/client.js:469 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1197 +#: htdocs/luci-static/resources/view/homeproxy/client.js:364 +#: htdocs/luci-static/resources/view/homeproxy/client.js:463 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1191 msgid "Domain strategy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:804 +#: htdocs/luci-static/resources/view/homeproxy/client.js:798 msgid "Domain strategy for resolving the domain names." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:833 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1270 +#: htdocs/luci-static/resources/view/homeproxy/client.js:827 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1264 msgid "Domain suffix" msgstr "" @@ -640,42 +635,42 @@ msgstr "" msgid "Domains" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:797 +#: htdocs/luci-static/resources/view/homeproxy/client.js:791 msgid "Don't drop packets" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1232 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1226 msgid "Don't drop requests" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1419 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1410 #: htdocs/luci-static/resources/view/homeproxy/server.js:517 msgid "Download bandwidth" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1420 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1411 #: htdocs/luci-static/resources/view/homeproxy/server.js:518 msgid "Download bandwidth in Mbps." msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:787 #: htdocs/luci-static/resources/view/homeproxy/client.js:793 -#: htdocs/luci-static/resources/view/homeproxy/client.js:799 msgid "Drop packets" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1227 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1234 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1221 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1228 msgid "Drop requests" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1815 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1806 msgid "" "Drop/keep nodes that contain the specific keywords. Regex is supported." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1807 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1798 msgid "Drop/keep specific nodes from subscriptions." msgstr "" @@ -687,18 +682,18 @@ msgid "" "a non-ACME system, such as a CA customer database." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1524 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1515 msgid "" "ECH (Encrypted Client Hello) is a TLS extension that allows a client to " "encrypt the first part of its ClientHello message." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1539 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1530 #: htdocs/luci-static/resources/view/homeproxy/server.js:835 msgid "ECH config" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1528 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1519 msgid "ECH config path" msgstr "" @@ -706,18 +701,18 @@ msgstr "" msgid "ECH key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:821 -#: htdocs/luci-static/resources/view/homeproxy/client.js:931 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1217 +#: htdocs/luci-static/resources/view/homeproxy/client.js:815 +#: htdocs/luci-static/resources/view/homeproxy/client.js:925 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1211 msgid "EDNS Client subnet" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1303 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1294 #: htdocs/luci-static/resources/view/homeproxy/server.js:481 msgid "Early data" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1310 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1301 #: htdocs/luci-static/resources/view/homeproxy/server.js:488 msgid "Early data header name" msgstr "" @@ -726,7 +721,7 @@ msgstr "" msgid "Early data is sent in path instead of header by default." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1644 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1635 msgid "Edit nodes" msgstr "" @@ -734,17 +729,17 @@ msgstr "" msgid "Email" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:437 -#: htdocs/luci-static/resources/view/homeproxy/client.js:613 -#: htdocs/luci-static/resources/view/homeproxy/client.js:965 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1093 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1352 +#: htdocs/luci-static/resources/view/homeproxy/client.js:431 +#: htdocs/luci-static/resources/view/homeproxy/client.js:607 +#: htdocs/luci-static/resources/view/homeproxy/client.js:959 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1087 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1346 #: htdocs/luci-static/resources/view/homeproxy/server.js:148 #: htdocs/luci-static/resources/view/homeproxy/server.js:166 msgid "Enable" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1152 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1143 #: htdocs/luci-static/resources/view/homeproxy/server.js:371 msgid "" "Enable 0-RTT QUIC connection handshake on the client side. This is not " @@ -752,7 +747,7 @@ msgid "" ">Disabling this is highly recommended, as it is vulnerable to replay attacks." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1151 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1142 #: htdocs/luci-static/resources/view/homeproxy/server.js:370 msgid "Enable 0-RTT handshake" msgstr "" @@ -761,30 +756,26 @@ msgstr "" msgid "Enable ACME" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1523 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1514 msgid "Enable ECH" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1414 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1405 #: htdocs/luci-static/resources/view/homeproxy/server.js:512 msgid "Enable TCP Brutal" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1415 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1406 #: htdocs/luci-static/resources/view/homeproxy/server.js:513 msgid "Enable TCP Brutal congestion control algorithm" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1598 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1589 #: htdocs/luci-static/resources/view/homeproxy/server.js:855 msgid "Enable UDP fragmentation." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:351 -msgid "Enable endpoint-independent NAT" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:1410 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1401 #: htdocs/luci-static/resources/view/homeproxy/server.js:507 msgid "Enable padding" msgstr "" @@ -793,19 +784,19 @@ msgstr "" msgid "Enable tcp fast open for listener." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1602 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1593 msgid "" "Enable the SUoT protocol, requires server support. Conflict with multiplex." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1042 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1178 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1033 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1169 #: htdocs/luci-static/resources/view/homeproxy/server.js:338 msgid "Encrypt method" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:488 -#: htdocs/luci-static/resources/view/homeproxy/status.js:139 +#: htdocs/luci-static/resources/view/homeproxy/status.js:190 msgid "Error" msgstr "" @@ -817,26 +808,26 @@ msgstr "" #: htdocs/luci-static/resources/homeproxy.js:317 #: htdocs/luci-static/resources/homeproxy.js:326 #: htdocs/luci-static/resources/homeproxy.js:328 -#: htdocs/luci-static/resources/view/homeproxy/client.js:219 -#: htdocs/luci-static/resources/view/homeproxy/client.js:231 -#: htdocs/luci-static/resources/view/homeproxy/client.js:235 -#: htdocs/luci-static/resources/view/homeproxy/client.js:253 -#: htdocs/luci-static/resources/view/homeproxy/client.js:264 -#: htdocs/luci-static/resources/view/homeproxy/client.js:268 -#: htdocs/luci-static/resources/view/homeproxy/client.js:297 -#: htdocs/luci-static/resources/view/homeproxy/client.js:527 -#: htdocs/luci-static/resources/view/homeproxy/client.js:541 -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1380 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1385 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1388 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1530 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1562 +#: htdocs/luci-static/resources/view/homeproxy/client.js:220 +#: htdocs/luci-static/resources/view/homeproxy/client.js:232 +#: htdocs/luci-static/resources/view/homeproxy/client.js:236 +#: htdocs/luci-static/resources/view/homeproxy/client.js:254 +#: htdocs/luci-static/resources/view/homeproxy/client.js:265 +#: htdocs/luci-static/resources/view/homeproxy/client.js:269 +#: htdocs/luci-static/resources/view/homeproxy/client.js:298 +#: htdocs/luci-static/resources/view/homeproxy/client.js:521 +#: htdocs/luci-static/resources/view/homeproxy/client.js:535 +#: htdocs/luci-static/resources/view/homeproxy/client.js:538 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1374 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1379 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1382 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1525 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1557 #: htdocs/luci-static/resources/view/homeproxy/node.js:918 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1561 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1735 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1796 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1799 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1552 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1726 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1787 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1790 #: htdocs/luci-static/resources/view/homeproxy/server.js:235 #: htdocs/luci-static/resources/view/homeproxy/server.js:618 #: htdocs/luci-static/resources/view/homeproxy/server.js:620 @@ -855,7 +846,7 @@ msgstr "" msgid "External account key ID" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1260 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1254 msgid "Extra records" msgstr "" @@ -867,19 +858,19 @@ msgstr "" msgid "Failed to upload %s, error: %s." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:140 +#: htdocs/luci-static/resources/view/homeproxy/status.js:191 msgid "Fatal" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1814 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1805 msgid "Filter keywords" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1806 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1797 msgid "Filter nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:653 +#: htdocs/luci-static/resources/view/homeproxy/client.js:647 msgid "Firefox / uquic firefox" msgstr "" @@ -887,53 +878,53 @@ msgstr "" msgid "Firewall" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1166 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1157 #: htdocs/luci-static/resources/view/homeproxy/server.js:385 msgid "Flow" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:451 +#: htdocs/luci-static/resources/view/homeproxy/client.js:445 msgid "For resolving domain name in the server address." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1357 msgid "Format" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:753 +#: htdocs/luci-static/resources/view/homeproxy/client.js:747 msgid "Fragment TLS handshake into multiple TLS records." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:759 +#: htdocs/luci-static/resources/view/homeproxy/client.js:753 msgid "" "Fragment TLS handshakes. Due to poor performance, try %s first." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:765 +#: htdocs/luci-static/resources/view/homeproxy/client.js:759 msgid "Fragment fallback delay" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1272 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1263 msgid "GET" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:256 -msgid "GFW list version" +#: htdocs/luci-static/resources/view/homeproxy/status.js:78 +msgid "GFW domain list" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:275 +#: htdocs/luci-static/resources/view/homeproxy/client.js:276 msgid "GFWList" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1469 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1464 msgid "Gaming mode IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1471 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1466 msgid "Gaming mode IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1474 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1469 msgid "Gaming mode MAC-s" msgstr "" @@ -943,27 +934,27 @@ msgstr "" msgid "Generate" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:260 +#: htdocs/luci-static/resources/view/homeproxy/status.js:298 msgid "GitHub token" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:279 +#: htdocs/luci-static/resources/view/homeproxy/client.js:280 msgid "Global" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1189 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1180 msgid "Global padding" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1476 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1471 msgid "Global proxy IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1479 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1474 msgid "Global proxy IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1482 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1477 msgid "Global proxy MAC-s" msgstr "" @@ -971,11 +962,11 @@ msgstr "" msgid "Global settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:238 +#: htdocs/luci-static/resources/view/homeproxy/status.js:289 msgid "Google" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:208 +#: htdocs/luci-static/resources/view/homeproxy/client.js:209 msgid "Google Public DNS (DoH)" msgstr "" @@ -983,16 +974,16 @@ msgstr "" msgid "Grant access to homeproxy configuration" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:643 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1131 +#: htdocs/luci-static/resources/view/homeproxy/client.js:637 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1125 #: htdocs/luci-static/resources/view/homeproxy/node.js:860 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1207 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1198 #: htdocs/luci-static/resources/view/homeproxy/server.js:177 #: htdocs/luci-static/resources/view/homeproxy/server.js:403 msgid "HTTP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:975 +#: htdocs/luci-static/resources/view/homeproxy/client.js:969 msgid "HTTP/3" msgstr "" @@ -1002,11 +993,11 @@ msgid "" "returned if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:974 +#: htdocs/luci-static/resources/view/homeproxy/client.js:968 msgid "HTTPS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1208 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1199 #: htdocs/luci-static/resources/view/homeproxy/server.js:404 msgid "HTTPUpgrade" msgstr "" @@ -1019,19 +1010,19 @@ msgstr "" msgid "Handshake server port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:997 +#: htdocs/luci-static/resources/view/homeproxy/client.js:991 msgid "Headers" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1157 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1148 #: htdocs/luci-static/resources/view/homeproxy/server.js:376 msgid "Heartbeat interval" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:63 #: htdocs/luci-static/resources/view/homeproxy/client.js:65 -#: htdocs/luci-static/resources/view/homeproxy/client.js:112 -#: htdocs/luci-static/resources/view/homeproxy/status.js:282 +#: htdocs/luci-static/resources/view/homeproxy/client.js:113 +#: htdocs/luci-static/resources/view/homeproxy/status.js:320 #: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3 msgid "HomeProxy" msgstr "" @@ -1042,33 +1033,33 @@ msgstr "" msgid "HomeProxy Server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:965 +#: htdocs/luci-static/resources/view/homeproxy/node.js:956 msgid "Hop interval" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:959 +#: htdocs/luci-static/resources/view/homeproxy/node.js:950 msgid "Hopping port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1256 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1261 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1295 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1247 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1252 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1286 #: htdocs/luci-static/resources/view/homeproxy/server.js:437 #: htdocs/luci-static/resources/view/homeproxy/server.js:442 #: htdocs/luci-static/resources/view/homeproxy/server.js:473 msgid "Host" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1090 msgid "Host key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1104 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 msgid "Host key algorithms" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:604 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1084 +#: htdocs/luci-static/resources/view/homeproxy/client.js:598 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1078 msgid "Host/IP fields" msgstr "" @@ -1088,7 +1079,7 @@ msgstr "" msgid "Hysteria2" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1784 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1775 msgid "ICMP" msgstr "" @@ -1104,18 +1095,18 @@ msgstr "" msgid "ICMP Timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:853 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1290 +#: htdocs/luci-static/resources/view/homeproxy/client.js:847 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1284 msgid "IP CIDR" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:631 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1112 +#: htdocs/luci-static/resources/view/homeproxy/client.js:625 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1106 msgid "IP version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:633 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1113 +#: htdocs/luci-static/resources/view/homeproxy/client.js:627 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1107 msgid "IPv4" msgstr "" @@ -1123,8 +1114,8 @@ msgstr "" msgid "IPv4 only" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:634 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1114 +#: htdocs/luci-static/resources/view/homeproxy/client.js:628 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1108 msgid "IPv6" msgstr "" @@ -1132,55 +1123,55 @@ msgstr "" msgid "IPv6 only" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:320 +#: htdocs/luci-static/resources/view/homeproxy/client.js:321 msgid "IPv6 support" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:936 +#: htdocs/luci-static/resources/view/homeproxy/node.js:927 msgid "Idle session check interval" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:943 +#: htdocs/luci-static/resources/view/homeproxy/node.js:934 msgid "Idle session check timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:576 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1277 +#: htdocs/luci-static/resources/view/homeproxy/client.js:570 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1268 #: htdocs/luci-static/resources/view/homeproxy/server.js:456 msgid "Idle timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:740 +#: htdocs/luci-static/resources/view/homeproxy/client.js:734 msgid "" "If enabled, attempts to connect UDP connection to the destination instead of " "listen." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:734 +#: htdocs/luci-static/resources/view/homeproxy/client.js:728 msgid "" "If enabled, for UDP proxy requests addressed to a domain, the original " "packet address will be sent in the response instead of the mapped domain." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1249 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1240 msgid "" "If enabled, the client transport sends keepalive pings even with no active " "connections." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:371 +#: htdocs/luci-static/resources/view/homeproxy/client.js:365 msgid "" "If set, the requested domain name will be resolved to IP before routing." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1234 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1225 #: htdocs/luci-static/resources/view/homeproxy/server.js:425 msgid "" "If the transport doesn't see any activity after a duration of this time (in " "seconds), it pings the client to check if the connection is still active." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1503 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1494 msgid "" "If you have the root certificate, use this option instead of allowing " "insecure." @@ -1190,68 +1181,68 @@ msgstr "" msgid "Ignore client bandwidth" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1718 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1709 msgid "Import" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1665 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1744 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1746 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1656 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1735 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1737 msgid "Import share links" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:359 +#: htdocs/luci-static/resources/view/homeproxy/client.js:353 #: htdocs/luci-static/resources/view/homeproxy/server.js:860 msgid "In seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1367 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1358 msgid "In seconds. Disabled by default." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:951 +#: htdocs/luci-static/resources/view/homeproxy/node.js:942 msgid "" "In the check, at least the first n idle sessions are kept open." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:944 +#: htdocs/luci-static/resources/view/homeproxy/node.js:935 msgid "" "In the check, close sessions that have been idle for longer than this, in " "seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:927 +#: htdocs/luci-static/resources/view/homeproxy/client.js:921 msgid "Independent cache per server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:137 +#: htdocs/luci-static/resources/view/homeproxy/status.js:188 msgid "Info" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1428 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1423 msgid "Interface Control" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:583 +#: htdocs/luci-static/resources/view/homeproxy/client.js:577 msgid "Interrupt existing connections" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:584 +#: htdocs/luci-static/resources/view/homeproxy/client.js:578 msgid "Interrupt existing connections when the selected outbound has changed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:937 +#: htdocs/luci-static/resources/view/homeproxy/node.js:928 msgid "Interval checking for idle sessions, in seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1158 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1149 #: htdocs/luci-static/resources/view/homeproxy/server.js:377 msgid "" "Interval for sending heartbeat packets for keeping the connection alive (in " "seconds)." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:128 +#: htdocs/luci-static/resources/view/homeproxy/client.js:129 #: htdocs/luci-static/resources/view/homeproxy/node.js:480 msgid "Invalid node" msgstr "" @@ -1260,13 +1251,13 @@ msgstr "" msgid "Invalid response" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:688 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1165 +#: htdocs/luci-static/resources/view/homeproxy/client.js:682 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1159 msgid "Invert" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:689 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1166 +#: htdocs/luci-static/resources/view/homeproxy/client.js:683 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1160 msgid "Invert match result." msgstr "" @@ -1274,15 +1265,15 @@ msgstr "" msgid "Key path" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1442 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1437 msgid "LAN IP Policy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:432 -#: htdocs/luci-static/resources/view/homeproxy/client.js:608 -#: htdocs/luci-static/resources/view/homeproxy/client.js:960 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1088 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1347 +#: htdocs/luci-static/resources/view/homeproxy/client.js:426 +#: htdocs/luci-static/resources/view/homeproxy/client.js:602 +#: htdocs/luci-static/resources/view/homeproxy/client.js:954 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1082 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1341 #: htdocs/luci-static/resources/view/homeproxy/node.js:852 #: htdocs/luci-static/resources/view/homeproxy/server.js:160 msgid "Label" @@ -1292,18 +1283,18 @@ msgstr "" msgid "Latency" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1782 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1773 msgid "Latency test mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1173 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1164 #: htdocs/luci-static/resources/view/homeproxy/server.js:392 msgid "" "Legacy protocol support (VMess MD5 Authentication) is provided for " "compatibility purposes only, use of alterId > 1 is not recommended." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:348 +#: htdocs/luci-static/resources/view/homeproxy/client.js:349 msgid "Less compatibility and sometimes better performance." msgstr "" @@ -1311,31 +1302,31 @@ msgstr "" msgid "Let's Encrypt" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1327 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1318 msgid "" "List of IP (v4 or v6) addresses prefixes to be assigned to the interface." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:157 -#: htdocs/luci-static/resources/view/homeproxy/client.js:186 -#: htdocs/luci-static/resources/view/homeproxy/client.js:520 +#: htdocs/luci-static/resources/view/homeproxy/client.js:158 +#: htdocs/luci-static/resources/view/homeproxy/client.js:187 +#: htdocs/luci-static/resources/view/homeproxy/client.js:514 msgid "List of nodes to test." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1466 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1457 #: htdocs/luci-static/resources/view/homeproxy/server.js:566 msgid "List of supported application level protocols, in order of preference." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1251 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1245 msgid "List of text DNS record to respond as answers." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1261 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1255 msgid "List of text DNS record to respond as extra records." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1256 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1250 msgid "List of text DNS record to respond as name servers." msgstr "" @@ -1343,7 +1334,7 @@ msgstr "" msgid "Listen address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1430 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1425 msgid "Listen interfaces" msgstr "" @@ -1351,51 +1342,51 @@ msgstr "" msgid "Listen port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:174 +#: htdocs/luci-static/resources/view/homeproxy/status.js:225 msgid "Loading" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1358 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1352 msgid "Local" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1326 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1317 msgid "Local address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:191 +#: htdocs/luci-static/resources/view/homeproxy/status.js:242 msgid "Log file does not exist." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:184 +#: htdocs/luci-static/resources/view/homeproxy/status.js:235 msgid "Log is empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1360 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1351 msgid "MTU" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:175 +#: htdocs/luci-static/resources/view/homeproxy/client.js:176 msgid "Main UDP node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:147 +#: htdocs/luci-static/resources/view/homeproxy/client.js:148 msgid "Main node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:685 +#: htdocs/luci-static/resources/view/homeproxy/client.js:679 msgid "Make IP CIDR in rule set used to match the source IP." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1158 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1152 msgid "Make IP CIDR in rule sets match the source IP." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1162 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1156 msgid "Make IP CIDR in rule-sets accept empty query response." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:928 +#: htdocs/luci-static/resources/view/homeproxy/client.js:922 msgid "" "Make each DNS server's cache independent for special purposes. If enabled, " "will slightly degrade performance." @@ -1405,109 +1396,109 @@ msgstr "" msgid "Masquerade" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1291 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1285 msgid "" "Match IP CIDR with query response. Current rule will be skipped if not match." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:854 +#: htdocs/luci-static/resources/view/homeproxy/client.js:848 msgid "Match IP CIDR." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:834 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1271 +#: htdocs/luci-static/resources/view/homeproxy/client.js:828 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1265 msgid "Match domain suffix." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:838 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1275 +#: htdocs/luci-static/resources/view/homeproxy/client.js:832 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1269 msgid "Match domain using keyword." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:842 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1279 +#: htdocs/luci-static/resources/view/homeproxy/client.js:836 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1273 msgid "Match domain using regular expression." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:829 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1266 +#: htdocs/luci-static/resources/view/homeproxy/client.js:823 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1260 msgid "Match full domain." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:877 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1315 +#: htdocs/luci-static/resources/view/homeproxy/client.js:871 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1309 msgid "Match port range. Format as START:/:END/START:END." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:872 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1310 +#: htdocs/luci-static/resources/view/homeproxy/client.js:866 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1304 msgid "Match port." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:858 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1295 +#: htdocs/luci-static/resources/view/homeproxy/client.js:852 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1289 msgid "Match private IP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1296 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1290 msgid "Match private IP with query response." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:850 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1287 +#: htdocs/luci-static/resources/view/homeproxy/client.js:844 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1281 msgid "Match private source IP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:882 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1320 +#: htdocs/luci-static/resources/view/homeproxy/client.js:876 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1314 msgid "Match process name." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:890 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1328 +#: htdocs/luci-static/resources/view/homeproxy/client.js:884 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1322 msgid "Match process path using regular expression." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:886 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1324 +#: htdocs/luci-static/resources/view/homeproxy/client.js:880 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1318 msgid "Match process path." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1119 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1113 msgid "Match query type." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:670 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1143 +#: htdocs/luci-static/resources/view/homeproxy/client.js:664 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1137 msgid "Match rule set." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:846 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1283 +#: htdocs/luci-static/resources/view/homeproxy/client.js:840 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1277 msgid "Match source IP CIDR." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:867 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1305 +#: htdocs/luci-static/resources/view/homeproxy/client.js:861 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1299 msgid "Match source port range. Format as START:/:END/START:END." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:862 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1300 +#: htdocs/luci-static/resources/view/homeproxy/client.js:856 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1294 msgid "Match source port." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:666 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1139 +#: htdocs/luci-static/resources/view/homeproxy/client.js:660 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1133 msgid "Match user name." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1009 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1000 #: htdocs/luci-static/resources/view/homeproxy/server.js:261 msgid "Max download speed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1010 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1001 #: htdocs/luci-static/resources/view/homeproxy/server.js:262 msgid "Max download speed in Mbps." msgstr "" @@ -1516,93 +1507,93 @@ msgstr "" msgid "Max time difference" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1016 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1007 #: htdocs/luci-static/resources/view/homeproxy/server.js:268 msgid "Max upload speed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1017 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1008 #: htdocs/luci-static/resources/view/homeproxy/server.js:269 msgid "Max upload speed in Mbps." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1486 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1477 #: htdocs/luci-static/resources/view/homeproxy/server.js:578 msgid "Maximum TLS version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1391 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1405 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1382 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1396 msgid "Maximum connections" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1403 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1394 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." "
Conflict with %s and %s." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1402 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1393 msgid "Maximum streams" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:791 -#: htdocs/luci-static/resources/view/homeproxy/client.js:799 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1225 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1234 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1271 +#: htdocs/luci-static/resources/view/homeproxy/client.js:785 +#: htdocs/luci-static/resources/view/homeproxy/client.js:793 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1219 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1228 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1262 #: htdocs/luci-static/resources/view/homeproxy/server.js:452 msgid "Method" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1478 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1469 #: htdocs/luci-static/resources/view/homeproxy/server.js:570 msgid "Minimum TLS version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:950 +#: htdocs/luci-static/resources/view/homeproxy/node.js:941 msgid "Minimum idle sessions" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1397 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1388 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/node.js:1387 #: htdocs/luci-static/resources/view/homeproxy/node.js:1396 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1405 msgid "Minimum streams" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1773 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1764 msgid "Minutes(0-59) Hours(0-23) Dates(1-31) Months(1-12) Weeks(0-6)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:333 +#: htdocs/luci-static/resources/view/homeproxy/client.js:334 #: htdocs/luci-static/resources/view/homeproxy/server.js:183 msgid "Mixed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:344 +#: htdocs/luci-static/resources/view/homeproxy/client.js:345 msgid "Mixed system TCP stack and gVisor UDP stack." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:618 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1098 +#: htdocs/luci-static/resources/view/homeproxy/client.js:612 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1092 msgid "Mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1594 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1585 #: htdocs/luci-static/resources/view/homeproxy/server.js:850 msgid "MultiPath TCP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1374 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1365 #: htdocs/luci-static/resources/view/homeproxy/server.js:500 msgid "Multiplex" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1382 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1373 msgid "Multiplex protocol." msgstr "" @@ -1611,15 +1602,19 @@ msgstr "" msgid "NOT RUNNING" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1835 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1826 msgid "NOTE: Save current settings before updating subscriptions." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1255 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1249 msgid "NS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1141 +#: htdocs/luci-static/resources/view/homeproxy/status.js:102 +msgid "Name" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1132 msgid "Native" msgstr "" @@ -1627,41 +1622,41 @@ msgstr "" msgid "NaïveProxy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:660 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1122 +#: htdocs/luci-static/resources/view/homeproxy/client.js:654 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1116 #: htdocs/luci-static/resources/view/homeproxy/server.js:866 msgid "Network" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1131 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1122 msgid "New Reno" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1204 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1221 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1195 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1212 #: htdocs/luci-static/resources/view/homeproxy/server.js:400 #: htdocs/luci-static/resources/view/homeproxy/server.js:417 msgid "No TCP transport, plain HTTP is merged into the HTTP transport." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1219 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1210 #: htdocs/luci-static/resources/view/homeproxy/server.js:415 msgid "No additional encryption support: It's basically duplicate encryption." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1852 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1843 msgid "No subscription available" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1877 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1868 msgid "No subscription node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1704 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1695 msgid "No valid share link found." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:442 +#: htdocs/luci-static/resources/view/homeproxy/client.js:436 #: htdocs/luci-static/resources/view/homeproxy/node.js:719 msgid "Node" msgstr "" @@ -1670,13 +1665,13 @@ msgstr "" msgid "Node Settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1650 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1641 msgid "Nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1017 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1167 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1205 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1011 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1158 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1196 #: htdocs/luci-static/resources/view/homeproxy/server.js:386 #: htdocs/luci-static/resources/view/homeproxy/server.js:401 msgid "None" @@ -1687,69 +1682,69 @@ msgstr "" msgid "Not Tested" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1003 +#: htdocs/luci-static/resources/view/homeproxy/node.js:994 #: htdocs/luci-static/resources/view/homeproxy/server.js:294 msgid "Obfuscate password" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:997 +#: htdocs/luci-static/resources/view/homeproxy/node.js:988 #: htdocs/luci-static/resources/view/homeproxy/server.js:288 msgid "Obfuscate type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1431 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1426 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:277 +#: htdocs/luci-static/resources/view/homeproxy/client.js:278 msgid "Only proxy mainland China" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:603 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1083 +#: htdocs/luci-static/resources/view/homeproxy/client.js:597 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1077 msgid "Other fields" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:483 -#: htdocs/luci-static/resources/view/homeproxy/client.js:701 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1050 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1398 +#: htdocs/luci-static/resources/view/homeproxy/client.js:477 +#: htdocs/luci-static/resources/view/homeproxy/client.js:695 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1044 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1392 msgid "Outbound" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:443 +#: htdocs/luci-static/resources/view/homeproxy/client.js:437 msgid "Outbound node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:719 +#: htdocs/luci-static/resources/view/homeproxy/client.js:713 msgid "Override address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:375 +#: htdocs/luci-static/resources/view/homeproxy/client.js:369 msgid "Override destination" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:726 +#: htdocs/luci-static/resources/view/homeproxy/client.js:720 msgid "Override port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:376 +#: htdocs/luci-static/resources/view/homeproxy/client.js:370 msgid "Override the connection destination address with the sniffed domain." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:720 +#: htdocs/luci-static/resources/view/homeproxy/client.js:714 msgid "Override the connection destination address." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:727 +#: htdocs/luci-static/resources/view/homeproxy/client.js:721 msgid "Override the connection destination port." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1273 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1264 msgid "PUT" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1316 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1307 msgid "Packet encoding" msgstr "" @@ -1757,7 +1752,7 @@ msgstr "" msgid "Padding scheme" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:141 +#: htdocs/luci-static/resources/view/homeproxy/status.js:192 msgid "Panic" msgstr "" @@ -1766,72 +1761,66 @@ msgstr "" msgid "Password" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:990 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1369 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1266 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1299 +#: htdocs/luci-static/resources/view/homeproxy/client.js:984 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1257 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1290 #: htdocs/luci-static/resources/view/homeproxy/server.js:447 #: htdocs/luci-static/resources/view/homeproxy/server.js:477 msgid "Path" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1341 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1332 msgid "Peer pubkic key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:352 -msgid "" -"Performance may degrade slightly, so it is not recommended to enable on when " -"it is not needed." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:1366 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1357 msgid "Persistent keepalive interval" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1285 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1276 #: htdocs/luci-static/resources/view/homeproxy/server.js:464 msgid "Ping timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1060 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1051 msgid "Plugin" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1067 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1058 msgid "Plugin opts" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:871 -#: htdocs/luci-static/resources/view/homeproxy/client.js:985 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1309 +#: htdocs/luci-static/resources/view/homeproxy/client.js:865 +#: htdocs/luci-static/resources/view/homeproxy/client.js:979 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1303 #: htdocs/luci-static/resources/view/homeproxy/node.js:883 msgid "Port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:299 +#: htdocs/luci-static/resources/view/homeproxy/client.js:300 msgid "Port %s alrealy exists!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:605 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1085 +#: htdocs/luci-static/resources/view/homeproxy/client.js:599 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1079 msgid "Port fields" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:966 +#: htdocs/luci-static/resources/view/homeproxy/node.js:957 msgid "Port hopping interval in seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:876 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1314 +#: htdocs/luci-static/resources/view/homeproxy/client.js:870 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1308 msgid "Port range" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1348 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1339 msgid "Pre-shared key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1173 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1167 msgid "Predefined" msgstr "" @@ -1843,12 +1832,12 @@ msgstr "" msgid "Prefer IPv6" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1108 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1333 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1324 msgid "Private key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1113 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1104 msgid "Private key passphrase" msgstr "" @@ -1856,97 +1845,93 @@ msgstr "" msgid "Probe failed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:606 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1086 +#: htdocs/luci-static/resources/view/homeproxy/client.js:600 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1080 msgid "Process fields" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:881 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1319 +#: htdocs/luci-static/resources/view/homeproxy/client.js:875 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1313 msgid "Process name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:885 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1323 +#: htdocs/luci-static/resources/view/homeproxy/client.js:879 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1317 msgid "Process path" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:889 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1327 +#: htdocs/luci-static/resources/view/homeproxy/client.js:883 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1321 msgid "Process path (regex)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:638 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1127 -#: htdocs/luci-static/resources/view/homeproxy/node.js:973 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1381 +#: htdocs/luci-static/resources/view/homeproxy/client.js:632 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1121 +#: htdocs/luci-static/resources/view/homeproxy/node.js:964 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1372 #: htdocs/luci-static/resources/view/homeproxy/server.js:250 msgid "Protocol" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1197 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1188 msgid "Protocol parameter. Enable length block encryption." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1190 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1181 msgid "" "Protocol parameter. Will waste traffic randomly if enabled (enabled by " "default in v2ray and cannot be disabled)." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1505 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1500 msgid "Proxy Domain List" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1460 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1489 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1455 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1484 msgid "Proxy IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1463 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1492 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1458 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1487 msgid "Proxy IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1466 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1461 msgid "Proxy MAC-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1447 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1442 msgid "Proxy all except listed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1444 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1439 msgid "Proxy filter mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1446 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1441 msgid "Proxy listed only" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:307 +#: htdocs/luci-static/resources/view/homeproxy/client.js:308 msgid "Proxy mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:927 -msgid "Proxy protocol" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:644 -#: htdocs/luci-static/resources/view/homeproxy/client.js:976 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1132 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1142 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1209 +#: htdocs/luci-static/resources/view/homeproxy/client.js:638 +#: htdocs/luci-static/resources/view/homeproxy/client.js:970 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1126 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1133 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1200 #: htdocs/luci-static/resources/view/homeproxy/server.js:405 msgid "QUIC" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1129 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1120 #: htdocs/luci-static/resources/view/homeproxy/server.js:355 msgid "QUIC congestion control algorithm." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1029 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1020 #: htdocs/luci-static/resources/view/homeproxy/server.js:307 msgid "QUIC connection receive window" msgstr "" @@ -1955,33 +1940,33 @@ msgstr "" msgid "QUIC maximum concurrent bidirectional streams" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1023 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1014 #: htdocs/luci-static/resources/view/homeproxy/server.js:300 msgid "QUIC stream receive window" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:209 +#: htdocs/luci-static/resources/view/homeproxy/client.js:210 msgid "Quad9 Public DNS (DoH)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1118 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1112 msgid "Query type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1238 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1232 msgid "RCode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:645 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1133 +#: htdocs/luci-static/resources/view/homeproxy/client.js:639 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1127 msgid "RDP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:940 +#: htdocs/luci-static/resources/view/homeproxy/client.js:934 msgid "RDRC timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1572 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1563 #: htdocs/luci-static/resources/view/homeproxy/server.js:709 msgid "REALITY" msgstr "" @@ -1990,17 +1975,17 @@ msgstr "" msgid "REALITY private key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1577 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1568 #: htdocs/luci-static/resources/view/homeproxy/server.js:730 msgid "REALITY public key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1583 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1574 #: htdocs/luci-static/resources/view/homeproxy/server.js:734 msgid "REALITY short ID" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1785 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1776 msgid "RP" msgstr "" @@ -2013,31 +1998,31 @@ msgstr "" msgid "RUNNING" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1086 msgid "Random version will be used if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:511 +#: htdocs/luci-static/resources/view/homeproxy/client.js:505 msgid "Recursive outbound detected!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1036 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1030 msgid "Recursive resolver detected!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:308 +#: htdocs/luci-static/resources/view/homeproxy/client.js:309 msgid "Redirect TCP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:310 +#: htdocs/luci-static/resources/view/homeproxy/client.js:311 msgid "Redirect TCP + TProxy UDP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:312 +#: htdocs/luci-static/resources/view/homeproxy/client.js:313 msgid "Redirect TCP + Tun UDP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:219 +#: htdocs/luci-static/resources/view/homeproxy/status.js:270 msgid "Refresh every %s seconds." msgstr "" @@ -2045,44 +2030,44 @@ msgstr "" msgid "Region ID" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:695 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1172 +#: htdocs/luci-static/resources/view/homeproxy/client.js:689 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1166 msgid "Reject" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1359 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1353 msgid "Remote" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1874 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1865 msgid "Remove %s nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1864 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1855 msgid "Remove all nodes from subscriptions" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1226 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1220 msgid "Reply with REFUSED" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:792 +#: htdocs/luci-static/resources/view/homeproxy/client.js:786 msgid "Reply with TCP RST / ICMP port unreachable" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1346 msgid "Reserved field bytes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:696 +#: htdocs/luci-static/resources/view/homeproxy/client.js:690 msgid "Resolve" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:803 +#: htdocs/luci-static/resources/view/homeproxy/client.js:797 msgid "Resolve strategy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:241 +#: htdocs/luci-static/resources/view/homeproxy/status.js:128 msgid "Resources management" msgstr "" @@ -2094,115 +2079,115 @@ msgstr "" msgid "Reuse listener address." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:815 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1210 +#: htdocs/luci-static/resources/view/homeproxy/client.js:809 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1204 msgid "Rewrite TTL" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:816 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1211 +#: htdocs/luci-static/resources/view/homeproxy/client.js:810 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1205 msgid "Rewrite TTL in DNS responses." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:693 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1170 +#: htdocs/luci-static/resources/view/homeproxy/client.js:687 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1164 msgid "Route" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:694 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1171 +#: htdocs/luci-static/resources/view/homeproxy/client.js:688 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1165 msgid "Route options" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:419 +#: htdocs/luci-static/resources/view/homeproxy/client.js:413 msgid "Routing Nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:590 +#: htdocs/luci-static/resources/view/homeproxy/client.js:584 msgid "Routing Rules" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:145 +#: htdocs/luci-static/resources/view/homeproxy/client.js:146 msgid "Routing Settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:274 +#: htdocs/luci-static/resources/view/homeproxy/client.js:275 msgid "Routing mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:428 +#: htdocs/luci-static/resources/view/homeproxy/client.js:422 msgid "Routing node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:287 +#: htdocs/luci-static/resources/view/homeproxy/client.js:288 msgid "Routing ports" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:599 +#: htdocs/luci-static/resources/view/homeproxy/client.js:593 msgid "Routing rule" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1334 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1328 msgid "Rule Set" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:669 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1142 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1343 +#: htdocs/luci-static/resources/view/homeproxy/client.js:663 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1136 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1337 msgid "Rule set" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:684 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1157 +#: htdocs/luci-static/resources/view/homeproxy/client.js:678 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1151 msgid "Rule set IP CIDR as source IP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1376 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1370 msgid "Rule set URL" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:646 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1134 +#: htdocs/luci-static/resources/view/homeproxy/client.js:640 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1128 #: htdocs/luci-static/resources/view/homeproxy/node.js:868 msgid "SSH" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:647 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1135 +#: htdocs/luci-static/resources/view/homeproxy/client.js:641 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1129 msgid "STUN" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1607 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1598 msgid "SUoT version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:655 +#: htdocs/luci-static/resources/view/homeproxy/client.js:649 msgid "Safari / Apple Network API" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:999 +#: htdocs/luci-static/resources/view/homeproxy/node.js:990 #: htdocs/luci-static/resources/view/homeproxy/server.js:290 msgid "Salamander" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:177 +#: htdocs/luci-static/resources/view/homeproxy/client.js:178 msgid "Same as main node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:267 -#: htdocs/luci-static/resources/view/homeproxy/status.js:273 +#: htdocs/luci-static/resources/view/homeproxy/status.js:305 +#: htdocs/luci-static/resources/view/homeproxy/status.js:311 msgid "Save" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1837 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1828 msgid "Save current settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1834 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1825 msgid "Save subscriptions settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1178 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1172 #: htdocs/luci-static/resources/view/homeproxy/server.js:156 msgid "Server" msgstr "" @@ -2225,7 +2210,7 @@ msgstr "" msgid "Service Status" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1198 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1192 msgid "Set domain strategy for this query." msgstr "" @@ -2233,7 +2218,7 @@ msgstr "" msgid "ShadowTLS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1074 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1065 msgid "ShadowTLS version" msgstr "" @@ -2242,12 +2227,12 @@ msgstr "" msgid "Shadowsocks" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:651 +#: htdocs/luci-static/resources/view/homeproxy/client.js:645 msgid "Sniffed client type (QUIC client type or SSH client name)." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:639 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1128 +#: htdocs/luci-static/resources/view/homeproxy/client.js:633 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1122 msgid "" "Sniffed protocol, see Sniff for details." @@ -2258,48 +2243,52 @@ msgstr "" msgid "Socks" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1084 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1075 msgid "Socks version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1085 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1076 msgid "Socks4" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1086 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1077 msgid "Socks4A" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1087 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1078 msgid "Socks5" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:845 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1282 +#: htdocs/luci-static/resources/view/homeproxy/status.js:104 +msgid "Source" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:839 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1276 msgid "Source IP CIDR" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1365 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1359 msgid "Source file" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:861 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1299 +#: htdocs/luci-static/resources/view/homeproxy/client.js:855 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1293 msgid "Source port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:866 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1304 +#: htdocs/luci-static/resources/view/homeproxy/client.js:860 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1298 msgid "Source port range" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:773 +#: htdocs/luci-static/resources/view/homeproxy/client.js:767 msgid "" "Specifies DNS server tag to use instead of selecting through DNS routing." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1226 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1278 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1217 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1269 msgid "" "Specifies the period of time (in seconds) after which a health check will be " "performed using a ping frame if no frames have been received on the " @@ -2315,8 +2304,8 @@ msgid "" "GOAWAY frame. PING frames are not considered as activity." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1230 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1286 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1221 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1277 msgid "" "Specifies the timeout duration (in seconds) after sending a PING frame, " "within which a response must be received.
If a response to the PING " @@ -2324,36 +2313,36 @@ msgid "" "will be closed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:288 +#: htdocs/luci-static/resources/view/homeproxy/client.js:289 msgid "" "Specify target ports to be proxied. Multiple ports must be separated by " "commas." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:936 +#: htdocs/luci-static/resources/view/homeproxy/client.js:930 msgid "Store RDRC" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:937 +#: htdocs/luci-static/resources/view/homeproxy/client.js:931 msgid "" "Store rejected DNS response cache.
The check results of Address " "filter DNS rule items will be cached until expiration." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:987 +#: htdocs/luci-static/resources/view/homeproxy/node.js:978 #: htdocs/luci-static/resources/view/homeproxy/server.js:278 msgid "String" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1755 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1746 msgid "Sub (%s)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1789 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1780 msgid "Subscription URL-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1766 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1757 msgid "Subscriptions" msgstr "" @@ -2361,111 +2350,111 @@ msgstr "" msgid "Success" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1706 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1697 msgid "Successfully imported %s nodes of total %s." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:86 +#: htdocs/luci-static/resources/view/homeproxy/status.js:138 msgid "Successfully updated." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1666 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1790 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1657 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1781 msgid "" "Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) " "online configuration delivery standard." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:205 +#: htdocs/luci-static/resources/view/homeproxy/client.js:206 msgid "" "Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:336 +#: htdocs/luci-static/resources/view/homeproxy/client.js:337 msgid "System" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:406 -#: htdocs/luci-static/resources/view/homeproxy/client.js:458 -#: htdocs/luci-static/resources/view/homeproxy/client.js:780 -#: htdocs/luci-static/resources/view/homeproxy/client.js:911 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1019 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1185 +#: htdocs/luci-static/resources/view/homeproxy/client.js:400 +#: htdocs/luci-static/resources/view/homeproxy/client.js:452 +#: htdocs/luci-static/resources/view/homeproxy/client.js:774 +#: htdocs/luci-static/resources/view/homeproxy/client.js:905 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1013 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 msgid "System DNS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:661 -#: htdocs/luci-static/resources/view/homeproxy/client.js:972 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1123 +#: htdocs/luci-static/resources/view/homeproxy/client.js:655 +#: htdocs/luci-static/resources/view/homeproxy/client.js:966 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1117 #: htdocs/luci-static/resources/view/homeproxy/server.js:867 msgid "TCP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1591 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1582 #: htdocs/luci-static/resources/view/homeproxy/server.js:845 msgid "TCP fast open" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:330 +#: htdocs/luci-static/resources/view/homeproxy/client.js:331 msgid "TCP/IP stack" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:331 +#: htdocs/luci-static/resources/view/homeproxy/client.js:332 msgid "TCP/IP stack." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:648 -#: htdocs/luci-static/resources/view/homeproxy/client.js:973 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1136 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1433 +#: htdocs/luci-static/resources/view/homeproxy/client.js:642 +#: htdocs/luci-static/resources/view/homeproxy/client.js:967 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1130 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1424 #: htdocs/luci-static/resources/view/homeproxy/server.js:532 msgid "TLS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1465 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1456 #: htdocs/luci-static/resources/view/homeproxy/server.js:565 msgid "TLS ALPN" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1003 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1460 +#: htdocs/luci-static/resources/view/homeproxy/client.js:997 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1451 #: htdocs/luci-static/resources/view/homeproxy/server.js:560 msgid "TLS SNI" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:758 +#: htdocs/luci-static/resources/view/homeproxy/client.js:752 msgid "TLS fragment" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1217 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1208 #: htdocs/luci-static/resources/view/homeproxy/server.js:413 msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:752 -#: htdocs/luci-static/resources/view/homeproxy/client.js:760 +#: htdocs/luci-static/resources/view/homeproxy/client.js:746 +#: htdocs/luci-static/resources/view/homeproxy/client.js:754 msgid "TLS record fragment" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1012 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1006 msgid "" "Tag of a another server to resolve the domain name in the address. Required " "if address contains domain." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1051 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1045 msgid "Tag of an outbound for connecting to the dns server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1399 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1393 msgid "Tag of the outbound to download rule set." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1173 msgid "Tag of the target dns server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:702 +#: htdocs/luci-static/resources/view/homeproxy/client.js:696 msgid "Tag of the target outbound." msgstr "" @@ -2474,7 +2463,7 @@ msgid "" "Tell the client to use the BBR flow control algorithm instead of Hysteria CC." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:245 +#: htdocs/luci-static/resources/view/homeproxy/client.js:246 msgid "Tencent Public DNS (DoH)" msgstr "" @@ -2483,28 +2472,28 @@ msgstr "" msgid "Test" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1924 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1928 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1915 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1919 msgid "Test Current List" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:533 +#: htdocs/luci-static/resources/view/homeproxy/client.js:527 msgid "Test URL" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:163 -#: htdocs/luci-static/resources/view/homeproxy/client.js:192 -#: htdocs/luci-static/resources/view/homeproxy/client.js:553 +#: htdocs/luci-static/resources/view/homeproxy/client.js:164 +#: htdocs/luci-static/resources/view/homeproxy/client.js:193 +#: htdocs/luci-static/resources/view/homeproxy/client.js:547 msgid "Test interval" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:561 +#: htdocs/luci-static/resources/view/homeproxy/client.js:555 msgid "Test interval must be less or equal than idle timeout." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:169 -#: htdocs/luci-static/resources/view/homeproxy/client.js:198 -#: htdocs/luci-static/resources/view/homeproxy/client.js:569 +#: htdocs/luci-static/resources/view/homeproxy/client.js:170 +#: htdocs/luci-static/resources/view/homeproxy/client.js:199 +#: htdocs/luci-static/resources/view/homeproxy/client.js:563 msgid "Test tolerance" msgstr "" @@ -2513,7 +2502,7 @@ msgstr "" msgid "Testing" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1917 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1908 msgid "Testing Current List..." msgstr "" @@ -2521,25 +2510,25 @@ msgstr "" msgid "The ACME CA provider to use." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:901 +#: htdocs/luci-static/resources/view/homeproxy/client.js:895 msgid "The DNS strategy for resolving the domain name in the address." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1030 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1021 #: htdocs/luci-static/resources/view/homeproxy/server.js:308 msgid "The QUIC connection-level flow control window for receiving data." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1024 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1015 #: htdocs/luci-static/resources/view/homeproxy/server.js:301 msgid "The QUIC stream-level flow control window for receiving data." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:534 +#: htdocs/luci-static/resources/view/homeproxy/client.js:528 msgid "The URL to test." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:981 +#: htdocs/luci-static/resources/view/homeproxy/client.js:975 msgid "The address of the dns server." msgstr "" @@ -2555,7 +2544,7 @@ msgid "" "forward 443 to this port for challenge to succeed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:619 +#: htdocs/luci-static/resources/view/homeproxy/client.js:613 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex || ip_cidr || " @@ -2566,7 +2555,7 @@ msgid "" "than as a single rule sub-item." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1093 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex) &&
(port " @@ -2576,17 +2565,17 @@ msgid "" "considered merged rather than as a single rule sub-item." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:242 +#: htdocs/luci-static/resources/view/homeproxy/client.js:243 msgid "" "The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:470 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1044 +#: htdocs/luci-static/resources/view/homeproxy/client.js:464 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1038 msgid "The domain strategy for resolving the domain name in the address." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1495 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1486 #: htdocs/luci-static/resources/view/homeproxy/server.js:587 msgid "" "The elliptic curves that will be used in an ECDHE handshake, in preference " @@ -2599,17 +2588,17 @@ msgid "" "account." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:766 +#: htdocs/luci-static/resources/view/homeproxy/client.js:760 msgid "" "The fallback value in milliseconds used when TLS segmentation cannot " "automatically determine the wait time." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:577 +#: htdocs/luci-static/resources/view/homeproxy/client.js:571 msgid "The idle timeout in seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1487 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1478 #: htdocs/luci-static/resources/view/homeproxy/server.js:579 msgid "The maximum TLS version that is acceptable." msgstr "" @@ -2624,32 +2613,32 @@ msgstr "" msgid "The maximum time difference between the server and the client." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1479 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1470 #: htdocs/luci-static/resources/view/homeproxy/server.js:571 msgid "The minimum TLS version that is acceptable." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:113 +#: htdocs/luci-static/resources/view/homeproxy/client.js:114 #: htdocs/luci-static/resources/view/homeproxy/server.js:130 msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:477 +#: htdocs/luci-static/resources/view/homeproxy/client.js:471 #: htdocs/luci-static/resources/view/homeproxy/server.js:875 msgid "The network interface to bind to." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:991 +#: htdocs/luci-static/resources/view/homeproxy/client.js:985 msgid "The path of the DNS server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1529 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1520 msgid "" "The path to the ECH config, in PEM format. If empty, load from DNS will be " "attempted." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1508 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1499 msgid "The path to the server certificate, in PEM format." msgstr "" @@ -2657,11 +2646,11 @@ msgstr "" msgid "The port must be unique." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:986 +#: htdocs/luci-static/resources/view/homeproxy/client.js:980 msgid "The port of the DNS server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1239 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1233 msgid "The response code." msgstr "" @@ -2673,25 +2662,25 @@ msgstr "" msgid "The server public key, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:484 +#: htdocs/luci-static/resources/view/homeproxy/client.js:478 msgid "" "The tag of the upstream outbound.
Other dial fields will be ignored when " "enabled." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:164 -#: htdocs/luci-static/resources/view/homeproxy/client.js:193 -#: htdocs/luci-static/resources/view/homeproxy/client.js:554 +#: htdocs/luci-static/resources/view/homeproxy/client.js:165 +#: htdocs/luci-static/resources/view/homeproxy/client.js:194 +#: htdocs/luci-static/resources/view/homeproxy/client.js:548 msgid "The test interval in seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:170 -#: htdocs/luci-static/resources/view/homeproxy/client.js:199 -#: htdocs/luci-static/resources/view/homeproxy/client.js:570 +#: htdocs/luci-static/resources/view/homeproxy/client.js:171 +#: htdocs/luci-static/resources/view/homeproxy/client.js:200 +#: htdocs/luci-static/resources/view/homeproxy/client.js:564 msgid "The test tolerance in milliseconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1237 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1228 #: htdocs/luci-static/resources/view/homeproxy/server.js:465 msgid "" "The timeout (in seconds) that after performing a keepalive check, the client " @@ -2699,20 +2688,20 @@ msgid "" "closed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1473 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1825 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1464 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1816 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1147 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1138 msgid "" "This is the TUIC port of the UDP over TCP protocol, designed to provide a " "QUIC stream based UDP relay mode that TUIC does not provide." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:244 +#: htdocs/luci-static/resources/view/homeproxy/client.js:245 msgid "ThreatBook Public DNS (DoH)" msgstr "" @@ -2720,13 +2709,13 @@ msgstr "" msgid "Timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:746 +#: htdocs/luci-static/resources/view/homeproxy/client.js:740 msgid "" "Timeout for UDP connections.
Setting a larger value than the UDP timeout " "in inbounds will have no effect." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:941 +#: htdocs/luci-static/resources/view/homeproxy/client.js:935 msgid "" "Timeout of rejected DNS response cache in seconds. 604800 (7d) " "is used by default." @@ -2738,17 +2727,17 @@ msgid "" "code>." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:315 +#: htdocs/luci-static/resources/view/homeproxy/client.js:316 msgid "" "To enable Tun support, you need to install ip-full and " "kmod-tun" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:135 +#: htdocs/luci-static/resources/view/homeproxy/status.js:186 msgid "Trace" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1203 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1194 #: htdocs/luci-static/resources/view/homeproxy/server.js:399 msgid "Transport" msgstr "" @@ -2763,130 +2752,134 @@ msgstr "" msgid "Tuic" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:313 +#: htdocs/luci-static/resources/view/homeproxy/client.js:314 msgid "Tun TCP/UDP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:970 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1357 +#: htdocs/luci-static/resources/view/homeproxy/client.js:964 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1351 #: htdocs/luci-static/resources/view/homeproxy/node.js:857 #: htdocs/luci-static/resources/view/homeproxy/server.js:175 msgid "Type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:662 -#: htdocs/luci-static/resources/view/homeproxy/client.js:971 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1124 +#: htdocs/luci-static/resources/view/homeproxy/client.js:656 +#: htdocs/luci-static/resources/view/homeproxy/client.js:965 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1118 #: htdocs/luci-static/resources/view/homeproxy/server.js:868 msgid "UDP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1597 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1588 #: htdocs/luci-static/resources/view/homeproxy/server.js:854 msgid "UDP Fragment" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:358 +#: htdocs/luci-static/resources/view/homeproxy/client.js:352 #: htdocs/luci-static/resources/view/homeproxy/server.js:859 msgid "UDP NAT expiration time" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1601 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1592 msgid "UDP over TCP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1146 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1137 msgid "UDP over stream" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1139 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1130 msgid "UDP packet relay mode." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1138 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1129 msgid "UDP relay mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:745 +#: htdocs/luci-static/resources/view/homeproxy/client.js:739 msgid "UDP timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:149 -#: htdocs/luci-static/resources/view/homeproxy/client.js:178 -#: htdocs/luci-static/resources/view/homeproxy/client.js:444 +#: htdocs/luci-static/resources/view/homeproxy/client.js:150 +#: htdocs/luci-static/resources/view/homeproxy/client.js:179 +#: htdocs/luci-static/resources/view/homeproxy/client.js:438 msgid "URLTest" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:156 -#: htdocs/luci-static/resources/view/homeproxy/client.js:185 -#: htdocs/luci-static/resources/view/homeproxy/client.js:519 +#: htdocs/luci-static/resources/view/homeproxy/client.js:157 +#: htdocs/luci-static/resources/view/homeproxy/client.js:186 +#: htdocs/luci-static/resources/view/homeproxy/client.js:513 msgid "URLTest nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:130 +#: htdocs/luci-static/resources/view/homeproxy/client.js:131 msgid "URLTest: %s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1120 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1111 #: htdocs/luci-static/resources/view/homeproxy/server.js:346 msgid "UUID" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:98 +#: htdocs/luci-static/resources/view/homeproxy/status.js:151 msgid "Unknown error." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:195 +#: htdocs/luci-static/resources/view/homeproxy/status.js:246 msgid "Unknown error: %s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1565 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1556 msgid "Unsupported fingerprint!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1849 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1840 msgid "Update %s subscriptions" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:89 +#: htdocs/luci-static/resources/view/homeproxy/status.js:160 +msgid "Update all" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/status.js:141 msgid "Update failed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1415 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1410 msgid "Update interval" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1416 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1411 msgid "Update interval of rule set." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1844 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1835 msgid "Update nodes from subscriptions" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1779 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1770 msgid "Update subscriptions via proxy." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1778 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1769 msgid "Update via proxy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1534 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1525 msgid "Upload ECH config" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1425 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1416 #: htdocs/luci-static/resources/view/homeproxy/server.js:523 msgid "Upload bandwidth" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1426 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1417 #: htdocs/luci-static/resources/view/homeproxy/server.js:524 msgid "Upload bandwidth in Mbps." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1515 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1506 #: htdocs/luci-static/resources/view/homeproxy/server.js:767 msgid "Upload certificate" msgstr "" @@ -2895,8 +2888,8 @@ msgstr "" msgid "Upload key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1518 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1537 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1509 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1528 #: htdocs/luci-static/resources/view/homeproxy/server.js:770 #: htdocs/luci-static/resources/view/homeproxy/server.js:789 msgid "Upload..." @@ -2906,23 +2899,23 @@ msgstr "" msgid "Use ACME TLS certificate issuer." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1461 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1452 #: htdocs/luci-static/resources/view/homeproxy/server.js:561 msgid "" "Used to verify the hostname on the returned certificates unless insecure is " "given." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1004 +#: htdocs/luci-static/resources/view/homeproxy/client.js:998 msgid "Used to verify the hostname on the returned certificates." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:665 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1138 +#: htdocs/luci-static/resources/view/homeproxy/client.js:659 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1132 msgid "User" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1819 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1810 msgid "User-Agent" msgstr "" @@ -2941,25 +2934,29 @@ msgstr "" msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:206 -#: htdocs/luci-static/resources/view/homeproxy/client.js:243 +#: htdocs/luci-static/resources/view/homeproxy/status.js:103 +msgid "Version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:207 +#: htdocs/luci-static/resources/view/homeproxy/client.js:244 msgid "WAN DNS (read from interface)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1487 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1482 msgid "WAN IP Policy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:138 +#: htdocs/luci-static/resources/view/homeproxy/status.js:189 msgid "Warn" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1210 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1201 #: htdocs/luci-static/resources/view/homeproxy/server.js:406 msgid "WebSocket" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1810 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1801 msgid "Whitelist mode" msgstr "" @@ -2967,24 +2964,20 @@ msgstr "" msgid "WireGuard" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1342 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1333 msgid "WireGuard peer public key." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1349 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1340 msgid "WireGuard pre-shared key." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1334 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1325 msgid "WireGuard requires base64-encoded private keys." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:928 -msgid "Write proxy protocol in the connection header." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:1319 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1832 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1310 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1823 msgid "Xudp (Xray-core)" msgstr "" @@ -2996,17 +2989,17 @@ msgstr "" msgid "ZeroSSL" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1520 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1511 #: htdocs/luci-static/resources/view/homeproxy/server.js:772 msgid "certificate" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:739 +#: htdocs/luci-static/resources/view/homeproxy/client.js:733 msgid "connect UDP connections" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1480 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1488 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1471 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1479 #: htdocs/luci-static/resources/view/homeproxy/server.js:572 #: htdocs/luci-static/resources/view/homeproxy/server.js:580 msgid "default" @@ -3016,44 +3009,44 @@ msgstr "" msgid "failed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1206 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1197 #: htdocs/luci-static/resources/view/homeproxy/server.js:402 msgid "gRPC" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1248 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1239 msgid "gRPC permit without stream" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1243 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1234 #: htdocs/luci-static/resources/view/homeproxy/server.js:430 msgid "gRPC service name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:334 +#: htdocs/luci-static/resources/view/homeproxy/client.js:335 msgid "gVisor" msgstr "" #: htdocs/luci-static/resources/homeproxy.js:306 #: htdocs/luci-static/resources/homeproxy.js:326 -#: htdocs/luci-static/resources/view/homeproxy/client.js:219 -#: htdocs/luci-static/resources/view/homeproxy/client.js:253 -#: htdocs/luci-static/resources/view/homeproxy/client.js:527 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1380 +#: htdocs/luci-static/resources/view/homeproxy/client.js:220 +#: htdocs/luci-static/resources/view/homeproxy/client.js:254 +#: htdocs/luci-static/resources/view/homeproxy/client.js:521 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1374 #: htdocs/luci-static/resources/view/homeproxy/node.js:918 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1561 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1552 #: htdocs/luci-static/resources/view/homeproxy/server.js:235 msgid "non-empty value" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1061 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1317 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1830 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1052 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1308 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1821 msgid "none" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1318 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1831 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1309 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1822 msgid "packet addr (v2ray-core v5+)" msgstr "" @@ -3065,23 +3058,23 @@ msgstr "" msgid "private key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:654 +#: htdocs/luci-static/resources/view/homeproxy/client.js:648 msgid "quic-go / uquic chrome" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:285 +#: htdocs/luci-static/resources/view/homeproxy/status.js:323 msgid "sing-box client" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:288 +#: htdocs/luci-static/resources/view/homeproxy/status.js:326 msgid "sing-box server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1543 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1534 msgid "uTLS fingerprint" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1544 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1535 msgid "" "uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting " "resistance." @@ -3092,7 +3085,7 @@ msgid "unchecked" msgstr "" #: htdocs/luci-static/resources/homeproxy.js:237 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1735 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1726 msgid "unique UCI identifier" msgstr "" @@ -3100,35 +3093,33 @@ msgstr "" msgid "unique value" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:930 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1075 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1608 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1066 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1599 msgid "v1" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:931 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1076 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1609 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1067 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1600 msgid "v2" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1077 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1068 msgid "v3" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:231 -#: htdocs/luci-static/resources/view/homeproxy/client.js:235 -#: htdocs/luci-static/resources/view/homeproxy/client.js:264 -#: htdocs/luci-static/resources/view/homeproxy/client.js:268 +#: htdocs/luci-static/resources/view/homeproxy/client.js:232 +#: htdocs/luci-static/resources/view/homeproxy/client.js:236 +#: htdocs/luci-static/resources/view/homeproxy/client.js:265 +#: htdocs/luci-static/resources/view/homeproxy/client.js:269 msgid "valid DNS server address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:541 -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1385 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1388 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1796 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1799 +#: htdocs/luci-static/resources/view/homeproxy/client.js:535 +#: htdocs/luci-static/resources/view/homeproxy/client.js:538 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1379 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1382 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1787 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1790 msgid "valid URL" msgstr "" @@ -3136,8 +3127,8 @@ msgstr "" msgid "valid base64 key with %d characters" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1530 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1562 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1525 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1557 msgid "valid hostname" msgstr "" @@ -3145,7 +3136,7 @@ msgstr "" msgid "valid port range (port1:port2)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:297 +#: htdocs/luci-static/resources/view/homeproxy/client.js:298 msgid "valid port value" msgstr "" diff --git a/homeproxy/po/zh_Hans/homeproxy.po b/homeproxy/po/zh_Hans/homeproxy.po index 20b56b29..34f36636 100644 --- a/homeproxy/po/zh_Hans/homeproxy.po +++ b/homeproxy/po/zh_Hans/homeproxy.po @@ -8,7 +8,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" -#: htdocs/luci-static/resources/view/homeproxy/status.js:206 +#: htdocs/luci-static/resources/view/homeproxy/status.js:257 msgid "%s log" msgstr "%s 日志" @@ -16,7 +16,7 @@ msgstr "%s 日志" msgid "%s ms" msgstr "%s 毫秒" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1896 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1887 msgid "%s nodes removed" msgstr "移除了 %s 个节点" @@ -24,12 +24,12 @@ msgstr "移除了 %s 个节点" msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..." msgstr "/etc/homeproxy/certs/...,/etc/acme/...,/etc/ssl/..." -#: htdocs/luci-static/resources/view/homeproxy/client.js:632 +#: htdocs/luci-static/resources/view/homeproxy/client.js:626 msgid "4 or 6. Not limited if empty." msgstr "4 或 6。留空不限制。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:798 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1233 +#: htdocs/luci-static/resources/view/homeproxy/client.js:792 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1227 msgid "" "%s will be temporarily overwritten to %s after 50 " "triggers in 30s if not enabled." @@ -37,8 +37,8 @@ msgstr "" "%s 在未启用的情况下,50 次触发后会在 30 秒内临时覆盖为 " "%s。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1516 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1535 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1507 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1526 #: htdocs/luci-static/resources/view/homeproxy/server.js:768 #: htdocs/luci-static/resources/view/homeproxy/server.js:787 msgid "Save your configuration before uploading files!" @@ -48,15 +48,15 @@ msgstr "上传文件前请先保存配置!" msgid "API token" msgstr "API 令牌" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1100 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1091 msgid "Accept any if empty." msgstr "留空则不校验。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1161 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1155 msgid "Accept empty query response" msgstr "接受空查询响应" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1422 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1417 msgid "Access Control" msgstr "访问控制" @@ -68,20 +68,20 @@ msgstr "访问密钥 ID" msgid "Access key secret" msgstr "访问密钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:692 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1169 +#: htdocs/luci-static/resources/view/homeproxy/client.js:686 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1163 msgid "Action" msgstr "操作" -#: htdocs/luci-static/resources/view/homeproxy/client.js:210 +#: htdocs/luci-static/resources/view/homeproxy/client.js:211 msgid "AdGuard Public DNS (DoH)" msgstr "AdGuard 公共DNS (DoH)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1079 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1073 msgid "Add a DNS rule" msgstr "新增 DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:956 +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 msgid "Add a DNS server" msgstr "新增 DNS 服务器" @@ -89,15 +89,15 @@ msgstr "新增 DNS 服务器" msgid "Add a node" msgstr "新增节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:428 +#: htdocs/luci-static/resources/view/homeproxy/client.js:422 msgid "Add a routing node" msgstr "新增路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:599 +#: htdocs/luci-static/resources/view/homeproxy/client.js:593 msgid "Add a routing rule" msgstr "新增路由规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1343 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1337 msgid "Add a rule set" msgstr "新增规则集" @@ -105,20 +105,20 @@ msgstr "新增规则集" msgid "Add a server" msgstr "新增服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:998 +#: htdocs/luci-static/resources/view/homeproxy/client.js:992 msgid "Additional headers to be sent to the DNS server." msgstr "发送到 DNS 服务器的附加标头。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:980 +#: htdocs/luci-static/resources/view/homeproxy/client.js:974 #: htdocs/luci-static/resources/view/homeproxy/node.js:878 msgid "Address" msgstr "地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1011 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1005 msgid "Address resolver" msgstr "地址解析器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1043 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1037 msgid "Address strategy" msgstr "地址解析策略" @@ -126,11 +126,11 @@ msgstr "地址解析策略" msgid "AliYun" msgstr "AliYun" -#: htdocs/luci-static/resources/view/homeproxy/client.js:246 +#: htdocs/luci-static/resources/view/homeproxy/client.js:247 msgid "AliYun Public DNS (DoH)" msgstr "阿里 公共DNS (DoH)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:289 +#: htdocs/luci-static/resources/view/homeproxy/client.js:290 msgid "All ports" msgstr "所有端口" @@ -138,33 +138,33 @@ msgstr "所有端口" msgid "Allow access from the Internet." msgstr "允许来自互联网的访问。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1470 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1822 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1461 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1813 msgid "Allow insecure" msgstr "允许不安全连接" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1471 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1462 msgid "Allow insecure connection at TLS client." msgstr "允许 TLS 客户端侧的不安全连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1823 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1814 msgid "Allow insecure connection by default when add nodes from subscriptions." msgstr "从订阅获取节点时,默认允许不安全连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1304 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1295 #: htdocs/luci-static/resources/view/homeproxy/server.js:482 msgid "Allowed payload size is in the request." msgstr "请求中允许的载荷大小。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:95 +#: htdocs/luci-static/resources/view/homeproxy/status.js:148 msgid "Already at the latest version." msgstr "已是最新版本。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:92 +#: htdocs/luci-static/resources/view/homeproxy/status.js:145 msgid "Already in updating." msgstr "已在更新中。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1172 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1163 #: htdocs/luci-static/resources/view/homeproxy/server.js:391 msgid "Alter ID" msgstr "额外 ID" @@ -177,11 +177,11 @@ msgstr "替代 HTTP 端口" msgid "Alternative TLS port" msgstr "替代 HTTPS 端口" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1859 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1850 msgid "An error occurred during updating subscriptions: %s" msgstr "更新订阅时发生错误:%s" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1250 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1244 msgid "Answer" msgstr "回答" @@ -194,9 +194,9 @@ msgstr "AnyTLS" msgid "AnyTLS padding scheme in array." msgstr "AnyTLS 填充方案。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:822 -#: htdocs/luci-static/resources/view/homeproxy/client.js:932 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1218 +#: htdocs/luci-static/resources/view/homeproxy/client.js:816 +#: htdocs/luci-static/resources/view/homeproxy/client.js:926 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1212 msgid "" "Append a edns0-subnet OPT extra record with the specified IP " "prefix to every query by default.
If value is an IP address instead of " @@ -205,7 +205,7 @@ msgstr "" "将带有指定 IP 前缀的 edns0-subnet OPT 记录附加到每个查询。如果值" "是 IP 地址而不是前缀,则会自动添加 /32/128。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1502 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1493 msgid "Append self-signed certificate" msgstr "追加自签名证书" @@ -226,29 +226,29 @@ msgstr "确定要允许不安全连接吗?" msgid "Auth timeout" msgstr "认证超时" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1196 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1187 msgid "Authenticated length" msgstr "认证长度" -#: htdocs/luci-static/resources/view/homeproxy/node.js:991 +#: htdocs/luci-static/resources/view/homeproxy/node.js:982 #: htdocs/luci-static/resources/view/homeproxy/server.js:282 msgid "Authentication payload" msgstr "认证载荷" -#: htdocs/luci-static/resources/view/homeproxy/node.js:984 +#: htdocs/luci-static/resources/view/homeproxy/node.js:975 #: htdocs/luci-static/resources/view/homeproxy/server.js:275 msgid "Authentication type" msgstr "认证类型" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1768 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1759 msgid "Auto update" msgstr "自动更新" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1769 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1760 msgid "Auto update subscriptions and geodata." msgstr "自动更新订阅和地理数据。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1132 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1123 msgid "BBR" msgstr "BBR" @@ -256,64 +256,64 @@ msgstr "BBR" msgid "Backend execution failed" msgstr "后端执行失败" -#: htdocs/luci-static/resources/view/homeproxy/status.js:235 +#: htdocs/luci-static/resources/view/homeproxy/status.js:286 msgid "BaiDu" msgstr "百度" -#: htdocs/luci-static/resources/view/homeproxy/node.js:986 +#: htdocs/luci-static/resources/view/homeproxy/node.js:977 #: htdocs/luci-static/resources/view/homeproxy/server.js:277 msgid "Base64" msgstr "Base64" -#: htdocs/luci-static/resources/view/homeproxy/client.js:346 +#: htdocs/luci-static/resources/view/homeproxy/client.js:347 msgid "Based on google/gvisor." msgstr "基于 google/gvisor。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1364 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1358 msgid "Binary file" msgstr "二进制文件" -#: htdocs/luci-static/resources/view/homeproxy/client.js:476 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1435 +#: htdocs/luci-static/resources/view/homeproxy/client.js:470 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1430 #: htdocs/luci-static/resources/view/homeproxy/server.js:874 msgid "Bind interface" msgstr "绑定接口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1436 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1431 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect." msgstr "绑定出站流量至指定端口。留空自动检测。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:640 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1129 +#: htdocs/luci-static/resources/view/homeproxy/client.js:634 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1123 msgid "BitTorrent" msgstr "BitTorrent" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1809 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1800 msgid "Blacklist mode" msgstr "黑名单模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:388 +#: htdocs/luci-static/resources/view/homeproxy/client.js:382 msgid "Block" msgstr "封锁" -#: htdocs/luci-static/resources/view/homeproxy/client.js:635 -#: htdocs/luci-static/resources/view/homeproxy/client.js:663 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1115 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1125 +#: htdocs/luci-static/resources/view/homeproxy/client.js:629 +#: htdocs/luci-static/resources/view/homeproxy/client.js:657 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1109 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1119 #: htdocs/luci-static/resources/view/homeproxy/server.js:869 msgid "Both" msgstr "全部" -#: htdocs/luci-static/resources/view/homeproxy/client.js:366 +#: htdocs/luci-static/resources/view/homeproxy/client.js:360 msgid "Bypass CN traffic" msgstr "绕过中国流量" -#: htdocs/luci-static/resources/view/homeproxy/client.js:276 +#: htdocs/luci-static/resources/view/homeproxy/client.js:277 msgid "Bypass mainland China" msgstr "大陆白名单" -#: htdocs/luci-static/resources/view/homeproxy/client.js:367 +#: htdocs/luci-static/resources/view/homeproxy/client.js:361 msgid "Bypass mainland China traffic via firewall rules by default." msgstr "默认使用防火墙规则绕过中国大陆流量。" @@ -321,15 +321,15 @@ msgstr "默认使用防火墙规则绕过中国大陆流量。" msgid "CA provider" msgstr "CA 颁发机构" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1130 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1121 msgid "CUBIC" msgstr "CUBIC" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1672 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1663 msgid "Cancel" msgstr "取消" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1507 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1498 #: htdocs/luci-static/resources/view/homeproxy/server.js:756 msgid "Certificate path" msgstr "证书路径" @@ -338,48 +338,44 @@ msgstr "证书路径" msgid "Check" msgstr "检查" -#: htdocs/luci-static/resources/view/homeproxy/status.js:105 -msgid "Check update" -msgstr "检查更新" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:241 +#: htdocs/luci-static/resources/view/homeproxy/client.js:242 msgid "China DNS server" msgstr "国内 DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/status.js:244 -msgid "China IPv4 list version" -msgstr "国内 IPv4 库版本" +#: htdocs/luci-static/resources/view/homeproxy/status.js:66 +msgid "China IPv4 list" +msgstr "国内 IPv4 列表" -#: htdocs/luci-static/resources/view/homeproxy/status.js:248 -msgid "China IPv6 list version" -msgstr "国内 IPv6 库版本" +#: htdocs/luci-static/resources/view/homeproxy/status.js:70 +msgid "China IPv6 list" +msgstr "国内 IPv6 列表" -#: htdocs/luci-static/resources/view/homeproxy/status.js:252 -msgid "China list version" -msgstr "国内域名列表版本" +#: htdocs/luci-static/resources/view/homeproxy/status.js:74 +msgid "China domain list" +msgstr "国内域名列表" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1783 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1774 msgid "Choose which method node latency tests use." msgstr "选择节点延迟测试使用的方法。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:652 +#: htdocs/luci-static/resources/view/homeproxy/client.js:646 msgid "Chromium / Cronet" msgstr "Chromium / Cronet" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1494 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1485 #: htdocs/luci-static/resources/view/homeproxy/server.js:586 msgid "Cipher suites" msgstr "密码套件" -#: htdocs/luci-static/resources/view/homeproxy/client.js:212 +#: htdocs/luci-static/resources/view/homeproxy/client.js:213 msgid "Cisco Public DNS (DoH)" msgstr "Cisco 公共DNS (DoH)" -#: htdocs/luci-static/resources/view/homeproxy/status.js:214 +#: htdocs/luci-static/resources/view/homeproxy/status.js:265 msgid "Clean log" msgstr "清空日志" -#: htdocs/luci-static/resources/view/homeproxy/client.js:650 +#: htdocs/luci-static/resources/view/homeproxy/client.js:644 msgid "Client" msgstr "客户端" @@ -387,7 +383,7 @@ msgstr "客户端" msgid "Client Settings" msgstr "客户端设置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1094 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1085 msgid "Client version" msgstr "客户端版本" @@ -395,50 +391,50 @@ msgstr "客户端版本" msgid "CloudFlare" msgstr "CloudFlare" -#: htdocs/luci-static/resources/view/homeproxy/client.js:207 +#: htdocs/luci-static/resources/view/homeproxy/client.js:208 msgid "CloudFlare Public DNS (DoH)" msgstr "CloudFlare 公共DNS (DoH)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:139 +#: htdocs/luci-static/resources/view/homeproxy/client.js:140 #: htdocs/luci-static/resources/view/homeproxy/server.js:142 -#: htdocs/luci-static/resources/view/homeproxy/status.js:176 +#: htdocs/luci-static/resources/view/homeproxy/status.js:227 msgid "Collecting data..." msgstr "正在收集数据中..." -#: htdocs/luci-static/resources/view/homeproxy/client.js:290 +#: htdocs/luci-static/resources/view/homeproxy/client.js:291 msgid "Common ports only (bypass P2P traffic)" msgstr "仅常用端口(绕过 P2P 流量)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1128 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1119 #: htdocs/luci-static/resources/view/homeproxy/server.js:354 msgid "Congestion control algorithm" msgstr "拥塞控制算法" -#: htdocs/luci-static/resources/view/homeproxy/status.js:232 +#: htdocs/luci-static/resources/view/homeproxy/status.js:283 msgid "Connection check" msgstr "连接检查" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1772 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1763 msgid "Cron expression" msgstr "定时任务表达式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:278 +#: htdocs/luci-static/resources/view/homeproxy/client.js:279 msgid "Custom routing" msgstr "自定义路由" -#: htdocs/luci-static/resources/view/homeproxy/client.js:641 +#: htdocs/luci-static/resources/view/homeproxy/client.js:635 msgid "DNS" msgstr "DNS" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1070 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1064 msgid "DNS Rules" msgstr "DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:947 +#: htdocs/luci-static/resources/view/homeproxy/client.js:941 msgid "DNS Servers" msgstr "DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:895 +#: htdocs/luci-static/resources/view/homeproxy/client.js:889 msgid "DNS Settings" msgstr "DNS 设置" @@ -446,17 +442,17 @@ msgstr "DNS 设置" msgid "DNS provider" msgstr "DNS 提供商" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1079 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1073 msgid "DNS rule" msgstr "DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:204 -#: htdocs/luci-static/resources/view/homeproxy/client.js:772 -#: htdocs/luci-static/resources/view/homeproxy/client.js:956 +#: htdocs/luci-static/resources/view/homeproxy/client.js:205 +#: htdocs/luci-static/resources/view/homeproxy/client.js:766 +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 msgid "DNS server" msgstr "DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:211 +#: htdocs/luci-static/resources/view/homeproxy/client.js:212 msgid "DNS.SB Public DNS (DoH)" msgstr "DNS.SB 公共DNS (DoH)" @@ -464,59 +460,59 @@ msgstr "DNS.SB 公共DNS (DoH)" msgid "DNS01 challenge" msgstr "DNS01 验证" -#: htdocs/luci-static/resources/view/homeproxy/client.js:642 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1130 +#: htdocs/luci-static/resources/view/homeproxy/client.js:636 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1124 msgid "DTLS" msgstr "DTLS" -#: htdocs/luci-static/resources/view/homeproxy/status.js:136 +#: htdocs/luci-static/resources/view/homeproxy/status.js:187 msgid "Debug" msgstr "调试" #: htdocs/luci-static/resources/homeproxy.js:17 -#: htdocs/luci-static/resources/view/homeproxy/client.js:456 -#: htdocs/luci-static/resources/view/homeproxy/client.js:626 -#: htdocs/luci-static/resources/view/homeproxy/client.js:778 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1106 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1404 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1140 +#: htdocs/luci-static/resources/view/homeproxy/client.js:450 +#: htdocs/luci-static/resources/view/homeproxy/client.js:620 +#: htdocs/luci-static/resources/view/homeproxy/client.js:772 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1100 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1398 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1131 msgid "Default" msgstr "默认" -#: htdocs/luci-static/resources/view/homeproxy/client.js:405 -#: htdocs/luci-static/resources/view/homeproxy/client.js:457 -#: htdocs/luci-static/resources/view/homeproxy/client.js:779 -#: htdocs/luci-static/resources/view/homeproxy/client.js:910 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1018 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1184 +#: htdocs/luci-static/resources/view/homeproxy/client.js:399 +#: htdocs/luci-static/resources/view/homeproxy/client.js:451 +#: htdocs/luci-static/resources/view/homeproxy/client.js:773 +#: htdocs/luci-static/resources/view/homeproxy/client.js:904 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1012 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1178 msgid "Default DNS (issued by WAN)" msgstr "默认 DNS(由 WAN 下发)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:905 +#: htdocs/luci-static/resources/view/homeproxy/client.js:899 msgid "Default DNS server" msgstr "默认 DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:400 +#: htdocs/luci-static/resources/view/homeproxy/client.js:394 msgid "Default DNS server for resolving domain name in the server address." msgstr "用于解析服务器地址中的域名的默认 DNS 服务器。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:900 +#: htdocs/luci-static/resources/view/homeproxy/client.js:894 msgid "Default DNS strategy" msgstr "默认 DNS 解析策略" -#: htdocs/luci-static/resources/view/homeproxy/client.js:380 +#: htdocs/luci-static/resources/view/homeproxy/client.js:374 msgid "Default outbound" msgstr "默认出站" -#: htdocs/luci-static/resources/view/homeproxy/client.js:399 +#: htdocs/luci-static/resources/view/homeproxy/client.js:393 msgid "Default outbound DNS" msgstr "默认出站 DNS" -#: htdocs/luci-static/resources/view/homeproxy/client.js:381 +#: htdocs/luci-static/resources/view/homeproxy/client.js:375 msgid "Default outbound for connections not matched by any routing rules." msgstr "用于未被任何路由规则匹配的连接的默认出站。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1829 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1820 msgid "Default packet encoding" msgstr "默认包封装格式" @@ -524,56 +520,55 @@ msgstr "默认包封装格式" msgid "Default server name" msgstr "默认服务器名称" -#: htdocs/luci-static/resources/view/homeproxy/client.js:387 -#: htdocs/luci-static/resources/view/homeproxy/client.js:489 -#: htdocs/luci-static/resources/view/homeproxy/client.js:707 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1056 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1405 +#: htdocs/luci-static/resources/view/homeproxy/client.js:381 +#: htdocs/luci-static/resources/view/homeproxy/client.js:483 +#: htdocs/luci-static/resources/view/homeproxy/client.js:701 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1050 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1399 #: htdocs/luci-static/resources/view/homeproxy/node.js:858 msgid "Direct" msgstr "直连" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1537 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1532 msgid "Direct Domain List" msgstr "直连域名列表" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1451 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1496 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1446 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1491 msgid "Direct IPv4 IP-s" msgstr "直连 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1454 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1499 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1449 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1494 msgid "Direct IPv6 IP-s" msgstr "直连 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1457 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1452 msgid "Direct MAC-s" msgstr "直连 MAC 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:148 -#: htdocs/luci-static/resources/view/homeproxy/client.js:176 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1445 -#: htdocs/luci-static/resources/view/homeproxy/node.js:929 -#: htdocs/luci-static/resources/view/homeproxy/node.js:985 -#: htdocs/luci-static/resources/view/homeproxy/node.js:998 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1545 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1808 +#: htdocs/luci-static/resources/view/homeproxy/client.js:149 +#: htdocs/luci-static/resources/view/homeproxy/client.js:177 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1440 +#: htdocs/luci-static/resources/view/homeproxy/node.js:976 +#: htdocs/luci-static/resources/view/homeproxy/node.js:989 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1536 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1799 #: htdocs/luci-static/resources/view/homeproxy/server.js:276 #: htdocs/luci-static/resources/view/homeproxy/server.js:289 msgid "Disable" msgstr "禁用" -#: htdocs/luci-static/resources/view/homeproxy/client.js:386 +#: htdocs/luci-static/resources/view/homeproxy/client.js:380 msgid "Disable (the service)" msgstr "禁用(服务)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:810 -#: htdocs/luci-static/resources/view/homeproxy/client.js:922 +#: htdocs/luci-static/resources/view/homeproxy/client.js:804 +#: htdocs/luci-static/resources/view/homeproxy/client.js:916 msgid "Disable DNS cache" msgstr "禁用 DNS 缓存" -#: htdocs/luci-static/resources/view/homeproxy/client.js:811 +#: htdocs/luci-static/resources/view/homeproxy/client.js:805 msgid "Disable DNS cache in this query." msgstr "在本次查询中禁用 DNS 缓存。" @@ -581,7 +576,7 @@ msgstr "在本次查询中禁用 DNS 缓存。" msgid "Disable HTTP challenge" msgstr "禁用 HTTP 验证" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1035 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1026 #: htdocs/luci-static/resources/view/homeproxy/server.js:321 msgid "Disable Path MTU discovery" msgstr "禁用路径 MTU 探测" @@ -590,23 +585,23 @@ msgstr "禁用路径 MTU 探测" msgid "Disable TLS ALPN challenge" msgstr "禁用 TLS ALPN 认证" -#: htdocs/luci-static/resources/view/homeproxy/client.js:733 +#: htdocs/luci-static/resources/view/homeproxy/client.js:727 msgid "Disable UDP domain unmapping" msgstr "禁用 UDP 域名映射" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1205 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1199 msgid "Disable cache and save cache in this query." msgstr "在本次查询中禁用缓存。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:924 +#: htdocs/luci-static/resources/view/homeproxy/client.js:918 msgid "Disable cache expire" msgstr "缓存永不过期" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1204 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1198 msgid "Disable dns cache" msgstr "禁用 DNS 缓存" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1036 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1027 #: htdocs/luci-static/resources/view/homeproxy/server.js:322 msgid "" "Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 " @@ -615,37 +610,37 @@ msgstr "" "禁用路径 MTU 发现 (RFC 8899)。 数据包的大小最多为 1252 (IPv4) / 1232 (IPv6) " "字节。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:837 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1274 +#: htdocs/luci-static/resources/view/homeproxy/client.js:831 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1268 msgid "Domain keyword" msgstr "域名关键词" -#: htdocs/luci-static/resources/view/homeproxy/client.js:828 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1265 +#: htdocs/luci-static/resources/view/homeproxy/client.js:822 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1259 msgid "Domain name" msgstr "域名" -#: htdocs/luci-static/resources/view/homeproxy/client.js:841 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1278 +#: htdocs/luci-static/resources/view/homeproxy/client.js:835 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1272 msgid "Domain regex" msgstr "域名正则表达式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:450 +#: htdocs/luci-static/resources/view/homeproxy/client.js:444 msgid "Domain resolver" msgstr "域名解析器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:370 -#: htdocs/luci-static/resources/view/homeproxy/client.js:469 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1197 +#: htdocs/luci-static/resources/view/homeproxy/client.js:364 +#: htdocs/luci-static/resources/view/homeproxy/client.js:463 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1191 msgid "Domain strategy" msgstr "域名解析策略" -#: htdocs/luci-static/resources/view/homeproxy/client.js:804 +#: htdocs/luci-static/resources/view/homeproxy/client.js:798 msgid "Domain strategy for resolving the domain names." msgstr "目标域名的解析策略。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:833 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1270 +#: htdocs/luci-static/resources/view/homeproxy/client.js:827 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1264 msgid "Domain suffix" msgstr "域名后缀" @@ -653,35 +648,35 @@ msgstr "域名后缀" msgid "Domains" msgstr "域名" -#: htdocs/luci-static/resources/view/homeproxy/client.js:797 +#: htdocs/luci-static/resources/view/homeproxy/client.js:791 msgid "Don't drop packets" msgstr "不丢弃数据包" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1232 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1226 msgid "Don't drop requests" msgstr "不丢弃请求" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1419 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1410 #: htdocs/luci-static/resources/view/homeproxy/server.js:517 msgid "Download bandwidth" msgstr "下载带宽" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1420 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1411 #: htdocs/luci-static/resources/view/homeproxy/server.js:518 msgid "Download bandwidth in Mbps." msgstr "下载带宽(单位:Mbps)。" +#: htdocs/luci-static/resources/view/homeproxy/client.js:787 #: htdocs/luci-static/resources/view/homeproxy/client.js:793 -#: htdocs/luci-static/resources/view/homeproxy/client.js:799 msgid "Drop packets" msgstr "丢弃数据包" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1227 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1234 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1221 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1228 msgid "Drop requests" msgstr "丢弃请求" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1815 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1806 msgid "" "Drop/keep nodes that contain the specific keywords. " "正则表达式。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1807 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1798 msgid "Drop/keep specific nodes from subscriptions." msgstr "从订阅中 丢弃/保留 指定节点" @@ -706,7 +701,7 @@ msgstr "" "
外部帐户绑定“用于将 ACME 帐户与非 ACME 系统中的现有帐户相关联,例如 CA " "客户数据库。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1524 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1515 msgid "" "ECH (Encrypted Client Hello) is a TLS extension that allows a client to " "encrypt the first part of its ClientHello message." @@ -714,12 +709,12 @@ msgstr "" "ECH(Encrypted Client Hello)是一个 TLS 扩展,它允许客户端加密其 ClientHello " "信息的第一部分。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1539 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1530 #: htdocs/luci-static/resources/view/homeproxy/server.js:835 msgid "ECH config" msgstr "ECH 配置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1528 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1519 msgid "ECH config path" msgstr "ECH 配置路径" @@ -727,18 +722,18 @@ msgstr "ECH 配置路径" msgid "ECH key" msgstr "ECH 密钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:821 -#: htdocs/luci-static/resources/view/homeproxy/client.js:931 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1217 +#: htdocs/luci-static/resources/view/homeproxy/client.js:815 +#: htdocs/luci-static/resources/view/homeproxy/client.js:925 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1211 msgid "EDNS Client subnet" msgstr "ENDS 客户端子网" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1303 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1294 #: htdocs/luci-static/resources/view/homeproxy/server.js:481 msgid "Early data" msgstr "前置数据" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1310 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1301 #: htdocs/luci-static/resources/view/homeproxy/server.js:488 msgid "Early data header name" msgstr "前置数据标头" @@ -747,7 +742,7 @@ msgstr "前置数据标头" msgid "Early data is sent in path instead of header by default." msgstr "前置数据默认发送在路径而不是标头中。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1644 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1635 msgid "Edit nodes" msgstr "修改节点" @@ -755,17 +750,17 @@ msgstr "修改节点" msgid "Email" msgstr "Email" -#: htdocs/luci-static/resources/view/homeproxy/client.js:437 -#: htdocs/luci-static/resources/view/homeproxy/client.js:613 -#: htdocs/luci-static/resources/view/homeproxy/client.js:965 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1093 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1352 +#: htdocs/luci-static/resources/view/homeproxy/client.js:431 +#: htdocs/luci-static/resources/view/homeproxy/client.js:607 +#: htdocs/luci-static/resources/view/homeproxy/client.js:959 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1087 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1346 #: htdocs/luci-static/resources/view/homeproxy/server.js:148 #: htdocs/luci-static/resources/view/homeproxy/server.js:166 msgid "Enable" msgstr "启用" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1152 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1143 #: htdocs/luci-static/resources/view/homeproxy/server.js:371 msgid "" "Enable 0-RTT QUIC connection handshake on the client side. This is not " @@ -775,7 +770,7 @@ msgstr "" "在客户端启用 0-RTT QUIC 连接握手。由于协议是完全复用的,这对性能影响不大。" "
强烈建议禁用此功能,因为它容易受到重放攻击。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1151 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1142 #: htdocs/luci-static/resources/view/homeproxy/server.js:370 msgid "Enable 0-RTT handshake" msgstr "启用 0-RTT 握手" @@ -784,30 +779,26 @@ msgstr "启用 0-RTT 握手" msgid "Enable ACME" msgstr "启用 ACME" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1523 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1514 msgid "Enable ECH" msgstr "启用 ECH" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1414 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1405 #: htdocs/luci-static/resources/view/homeproxy/server.js:512 msgid "Enable TCP Brutal" msgstr "启用 TCP Brutal" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1415 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1406 #: htdocs/luci-static/resources/view/homeproxy/server.js:513 msgid "Enable TCP Brutal congestion control algorithm" msgstr "启用 TCP Brutal 拥塞控制算法。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1598 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1589 #: htdocs/luci-static/resources/view/homeproxy/server.js:855 msgid "Enable UDP fragmentation." msgstr "启用 UDP 分片。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:351 -msgid "Enable endpoint-independent NAT" -msgstr "启用端点独立 NAT" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:1410 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1401 #: htdocs/luci-static/resources/view/homeproxy/server.js:507 msgid "Enable padding" msgstr "启用填充" @@ -816,19 +807,19 @@ msgstr "启用填充" msgid "Enable tcp fast open for listener." msgstr "为监听器启用 TCP 快速打开。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1602 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1593 msgid "" "Enable the SUoT protocol, requires server support. Conflict with multiplex." msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1042 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1178 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1033 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1169 #: htdocs/luci-static/resources/view/homeproxy/server.js:338 msgid "Encrypt method" msgstr "加密方式" #: htdocs/luci-static/resources/view/homeproxy/node.js:488 -#: htdocs/luci-static/resources/view/homeproxy/status.js:139 +#: htdocs/luci-static/resources/view/homeproxy/status.js:190 msgid "Error" msgstr "错误" @@ -840,26 +831,26 @@ msgstr "错误" #: htdocs/luci-static/resources/homeproxy.js:317 #: htdocs/luci-static/resources/homeproxy.js:326 #: htdocs/luci-static/resources/homeproxy.js:328 -#: htdocs/luci-static/resources/view/homeproxy/client.js:219 -#: htdocs/luci-static/resources/view/homeproxy/client.js:231 -#: htdocs/luci-static/resources/view/homeproxy/client.js:235 -#: htdocs/luci-static/resources/view/homeproxy/client.js:253 -#: htdocs/luci-static/resources/view/homeproxy/client.js:264 -#: htdocs/luci-static/resources/view/homeproxy/client.js:268 -#: htdocs/luci-static/resources/view/homeproxy/client.js:297 -#: htdocs/luci-static/resources/view/homeproxy/client.js:527 -#: htdocs/luci-static/resources/view/homeproxy/client.js:541 -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1380 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1385 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1388 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1530 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1562 +#: htdocs/luci-static/resources/view/homeproxy/client.js:220 +#: htdocs/luci-static/resources/view/homeproxy/client.js:232 +#: htdocs/luci-static/resources/view/homeproxy/client.js:236 +#: htdocs/luci-static/resources/view/homeproxy/client.js:254 +#: htdocs/luci-static/resources/view/homeproxy/client.js:265 +#: htdocs/luci-static/resources/view/homeproxy/client.js:269 +#: htdocs/luci-static/resources/view/homeproxy/client.js:298 +#: htdocs/luci-static/resources/view/homeproxy/client.js:521 +#: htdocs/luci-static/resources/view/homeproxy/client.js:535 +#: htdocs/luci-static/resources/view/homeproxy/client.js:538 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1374 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1379 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1382 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1525 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1557 #: htdocs/luci-static/resources/view/homeproxy/node.js:918 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1561 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1735 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1796 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1799 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1552 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1726 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1787 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1790 #: htdocs/luci-static/resources/view/homeproxy/server.js:235 #: htdocs/luci-static/resources/view/homeproxy/server.js:618 #: htdocs/luci-static/resources/view/homeproxy/server.js:620 @@ -878,7 +869,7 @@ msgstr "外部账户 MAC 密钥" msgid "External account key ID" msgstr "外部账户密钥标识符" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1260 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1254 msgid "Extra records" msgstr "附加记录" @@ -890,19 +881,19 @@ msgstr "生成 %s 失败,错误:%s。" msgid "Failed to upload %s, error: %s." msgstr "上传 %s 失败,错误:%s。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:140 +#: htdocs/luci-static/resources/view/homeproxy/status.js:191 msgid "Fatal" msgstr "致命" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1814 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1805 msgid "Filter keywords" msgstr "过滤关键词" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1806 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1797 msgid "Filter nodes" msgstr "过滤节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:653 +#: htdocs/luci-static/resources/view/homeproxy/client.js:647 msgid "Firefox / uquic firefox" msgstr "Firefox / uquic firefox" @@ -910,53 +901,53 @@ msgstr "Firefox / uquic firefox" msgid "Firewall" msgstr "防火墙" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1166 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1157 #: htdocs/luci-static/resources/view/homeproxy/server.js:385 msgid "Flow" msgstr "流控" -#: htdocs/luci-static/resources/view/homeproxy/client.js:451 +#: htdocs/luci-static/resources/view/homeproxy/client.js:445 msgid "For resolving domain name in the server address." msgstr "用于解析服务器地址中的域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1357 msgid "Format" msgstr "格式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:753 +#: htdocs/luci-static/resources/view/homeproxy/client.js:747 msgid "Fragment TLS handshake into multiple TLS records." msgstr "将 TLS 握手分片为多个 TLS 记录" -#: htdocs/luci-static/resources/view/homeproxy/client.js:759 +#: htdocs/luci-static/resources/view/homeproxy/client.js:753 msgid "" "Fragment TLS handshakes. Due to poor performance, try %s first." msgstr "分片 TLS 握手。由于性能较差,请先尝试 %s。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:765 +#: htdocs/luci-static/resources/view/homeproxy/client.js:759 msgid "Fragment fallback delay" msgstr "分片回退延迟" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1272 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1263 msgid "GET" msgstr "GET" -#: htdocs/luci-static/resources/view/homeproxy/status.js:256 -msgid "GFW list version" -msgstr "GFW 域名列表版本" +#: htdocs/luci-static/resources/view/homeproxy/status.js:78 +msgid "GFW domain list" +msgstr "GFW 域名列表" -#: htdocs/luci-static/resources/view/homeproxy/client.js:275 +#: htdocs/luci-static/resources/view/homeproxy/client.js:276 msgid "GFWList" msgstr "GFWList" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1469 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1464 msgid "Gaming mode IPv4 IP-s" msgstr "游戏模式 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1471 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1466 msgid "Gaming mode IPv6 IP-s" msgstr "游戏模式 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1474 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1469 msgid "Gaming mode MAC-s" msgstr "游戏模式 MAC 地址" @@ -966,27 +957,27 @@ msgstr "游戏模式 MAC 地址" msgid "Generate" msgstr "生成" -#: htdocs/luci-static/resources/view/homeproxy/status.js:260 +#: htdocs/luci-static/resources/view/homeproxy/status.js:298 msgid "GitHub token" msgstr "GitHub 令牌" -#: htdocs/luci-static/resources/view/homeproxy/client.js:279 +#: htdocs/luci-static/resources/view/homeproxy/client.js:280 msgid "Global" msgstr "全局" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1189 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1180 msgid "Global padding" msgstr "全局填充" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1476 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1471 msgid "Global proxy IPv4 IP-s" msgstr "全局代理 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1479 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1474 msgid "Global proxy IPv6 IP-s" msgstr "全局代理 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1482 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1477 msgid "Global proxy MAC-s" msgstr "全局代理 MAC 地址" @@ -994,11 +985,11 @@ msgstr "全局代理 MAC 地址" msgid "Global settings" msgstr "全局设置" -#: htdocs/luci-static/resources/view/homeproxy/status.js:238 +#: htdocs/luci-static/resources/view/homeproxy/status.js:289 msgid "Google" msgstr "谷歌" -#: htdocs/luci-static/resources/view/homeproxy/client.js:208 +#: htdocs/luci-static/resources/view/homeproxy/client.js:209 msgid "Google Public DNS (DoH)" msgstr "Google 公共DNS (DoH)" @@ -1006,16 +997,16 @@ msgstr "Google 公共DNS (DoH)" msgid "Grant access to homeproxy configuration" msgstr "授予 homeproxy 访问 UCI 配置的权限" -#: htdocs/luci-static/resources/view/homeproxy/client.js:643 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1131 +#: htdocs/luci-static/resources/view/homeproxy/client.js:637 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1125 #: htdocs/luci-static/resources/view/homeproxy/node.js:860 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1207 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1198 #: htdocs/luci-static/resources/view/homeproxy/server.js:177 #: htdocs/luci-static/resources/view/homeproxy/server.js:403 msgid "HTTP" msgstr "HTTP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:975 +#: htdocs/luci-static/resources/view/homeproxy/client.js:969 msgid "HTTP/3" msgstr "HTTP/3" @@ -1025,11 +1016,11 @@ msgid "" "returned if empty." msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:974 +#: htdocs/luci-static/resources/view/homeproxy/client.js:968 msgid "HTTPS" msgstr "HTTPS" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1208 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1199 #: htdocs/luci-static/resources/view/homeproxy/server.js:404 msgid "HTTPUpgrade" msgstr "HTTPUpgrade" @@ -1042,19 +1033,19 @@ msgstr "握手服务器地址" msgid "Handshake server port" msgstr "握手服务器端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:997 +#: htdocs/luci-static/resources/view/homeproxy/client.js:991 msgid "Headers" msgstr "标头" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1157 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1148 #: htdocs/luci-static/resources/view/homeproxy/server.js:376 msgid "Heartbeat interval" msgstr "心跳间隔" #: htdocs/luci-static/resources/view/homeproxy/client.js:63 #: htdocs/luci-static/resources/view/homeproxy/client.js:65 -#: htdocs/luci-static/resources/view/homeproxy/client.js:112 -#: htdocs/luci-static/resources/view/homeproxy/status.js:282 +#: htdocs/luci-static/resources/view/homeproxy/client.js:113 +#: htdocs/luci-static/resources/view/homeproxy/status.js:320 #: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3 msgid "HomeProxy" msgstr "HomeProxy" @@ -1065,33 +1056,33 @@ msgstr "HomeProxy" msgid "HomeProxy Server" msgstr "HomeProxy 服务端" -#: htdocs/luci-static/resources/view/homeproxy/node.js:965 +#: htdocs/luci-static/resources/view/homeproxy/node.js:956 msgid "Hop interval" msgstr "跳跃间隔" -#: htdocs/luci-static/resources/view/homeproxy/node.js:959 +#: htdocs/luci-static/resources/view/homeproxy/node.js:950 msgid "Hopping port" msgstr "跳跃端口" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1256 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1261 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1295 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1247 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1252 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1286 #: htdocs/luci-static/resources/view/homeproxy/server.js:437 #: htdocs/luci-static/resources/view/homeproxy/server.js:442 #: htdocs/luci-static/resources/view/homeproxy/server.js:473 msgid "Host" msgstr "主机名" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1090 msgid "Host key" msgstr "主机密钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1104 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 msgid "Host key algorithms" msgstr "主机密钥算法" -#: htdocs/luci-static/resources/view/homeproxy/client.js:604 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1084 +#: htdocs/luci-static/resources/view/homeproxy/client.js:598 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1078 msgid "Host/IP fields" msgstr "主机/IP 字段" @@ -1111,7 +1102,7 @@ msgstr "Hysteria" msgid "Hysteria2" msgstr "Hysteria2" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1784 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1775 msgid "ICMP" msgstr "ICMP" @@ -1127,18 +1118,18 @@ msgstr "ICMP 探测不可用" msgid "ICMP Timeout" msgstr "ICMP 超时" -#: htdocs/luci-static/resources/view/homeproxy/client.js:853 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1290 +#: htdocs/luci-static/resources/view/homeproxy/client.js:847 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1284 msgid "IP CIDR" msgstr "IP CIDR" -#: htdocs/luci-static/resources/view/homeproxy/client.js:631 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1112 +#: htdocs/luci-static/resources/view/homeproxy/client.js:625 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1106 msgid "IP version" msgstr "IP 版本" -#: htdocs/luci-static/resources/view/homeproxy/client.js:633 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1113 +#: htdocs/luci-static/resources/view/homeproxy/client.js:627 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1107 msgid "IPv4" msgstr "IPv4" @@ -1146,8 +1137,8 @@ msgstr "IPv4" msgid "IPv4 only" msgstr "仅 IPv4" -#: htdocs/luci-static/resources/view/homeproxy/client.js:634 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1114 +#: htdocs/luci-static/resources/view/homeproxy/client.js:628 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1108 msgid "IPv6" msgstr "IPv6" @@ -1155,31 +1146,31 @@ msgstr "IPv6" msgid "IPv6 only" msgstr "仅 IPv6" -#: htdocs/luci-static/resources/view/homeproxy/client.js:320 +#: htdocs/luci-static/resources/view/homeproxy/client.js:321 msgid "IPv6 support" msgstr "IPv6 支持" -#: htdocs/luci-static/resources/view/homeproxy/node.js:936 +#: htdocs/luci-static/resources/view/homeproxy/node.js:927 msgid "Idle session check interval" msgstr "空闲会话检查间隔" -#: htdocs/luci-static/resources/view/homeproxy/node.js:943 +#: htdocs/luci-static/resources/view/homeproxy/node.js:934 msgid "Idle session check timeout" msgstr "空闲会话检查超时" -#: htdocs/luci-static/resources/view/homeproxy/client.js:576 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1277 +#: htdocs/luci-static/resources/view/homeproxy/client.js:570 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1268 #: htdocs/luci-static/resources/view/homeproxy/server.js:456 msgid "Idle timeout" msgstr "空闲超时" -#: htdocs/luci-static/resources/view/homeproxy/client.js:740 +#: htdocs/luci-static/resources/view/homeproxy/client.js:734 msgid "" "If enabled, attempts to connect UDP connection to the destination instead of " "listen." msgstr "如果启用,尝试主动连接到目标的 UDP 而不是监听。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:734 +#: htdocs/luci-static/resources/view/homeproxy/client.js:728 msgid "" "If enabled, for UDP proxy requests addressed to a domain, the original " "packet address will be sent in the response instead of the mapped domain." @@ -1187,18 +1178,18 @@ msgstr "" "如果启用,对于发送到域名的 UDP 代理请求,响应中将发送原始数据包地址而不是映射" "的域名。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1249 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1240 msgid "" "If enabled, the client transport sends keepalive pings even with no active " "connections." msgstr "如果启用,客户端传输即使没有活动连接也会发送 keepalive ping。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:371 +#: htdocs/luci-static/resources/view/homeproxy/client.js:365 msgid "" "If set, the requested domain name will be resolved to IP before routing." msgstr "如果设置,请求的域名将在路由前被解析为 IP 地址。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1234 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1225 #: htdocs/luci-static/resources/view/homeproxy/server.js:425 msgid "" "If the transport doesn't see any activity after a duration of this time (in " @@ -1207,7 +1198,7 @@ msgstr "" "如果传输在此时间段(单位:秒)后没有看到任何活动,它会向客户端发送 ping 请求" "以检查连接是否仍然活动。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1503 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1494 msgid "" "If you have the root certificate, use this option instead of allowing " "insecure." @@ -1217,68 +1208,68 @@ msgstr "如果你拥有根证书,使用此选项而不是允许不安全连接 msgid "Ignore client bandwidth" msgstr "忽略客户端带宽" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1718 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1709 msgid "Import" msgstr "导入" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1665 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1744 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1746 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1656 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1735 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1737 msgid "Import share links" msgstr "导入分享链接" -#: htdocs/luci-static/resources/view/homeproxy/client.js:359 +#: htdocs/luci-static/resources/view/homeproxy/client.js:353 #: htdocs/luci-static/resources/view/homeproxy/server.js:860 msgid "In seconds." msgstr "单位:秒。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1367 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1358 msgid "In seconds. Disabled by default." msgstr "单位:秒。默认禁用。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:951 +#: htdocs/luci-static/resources/view/homeproxy/node.js:942 msgid "" "In the check, at least the first n idle sessions are kept open." msgstr "在检查中,至少保持前 n 个空闲会话处于打开状态。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:944 +#: htdocs/luci-static/resources/view/homeproxy/node.js:935 msgid "" "In the check, close sessions that have been idle for longer than this, in " "seconds." msgstr "在检查中,关闭空闲时间超过此值的会话(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:927 +#: htdocs/luci-static/resources/view/homeproxy/client.js:921 msgid "Independent cache per server" msgstr "独立缓存" -#: htdocs/luci-static/resources/view/homeproxy/status.js:137 +#: htdocs/luci-static/resources/view/homeproxy/status.js:188 msgid "Info" msgstr "信息" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1428 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1423 msgid "Interface Control" msgstr "接口控制" -#: htdocs/luci-static/resources/view/homeproxy/client.js:583 +#: htdocs/luci-static/resources/view/homeproxy/client.js:577 msgid "Interrupt existing connections" msgstr "中断现有连接" -#: htdocs/luci-static/resources/view/homeproxy/client.js:584 +#: htdocs/luci-static/resources/view/homeproxy/client.js:578 msgid "Interrupt existing connections when the selected outbound has changed." msgstr "当选择的出站发生变化时中断现有连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:937 +#: htdocs/luci-static/resources/view/homeproxy/node.js:928 msgid "Interval checking for idle sessions, in seconds." msgstr "空闲会话检查间隔(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1158 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1149 #: htdocs/luci-static/resources/view/homeproxy/server.js:377 msgid "" "Interval for sending heartbeat packets for keeping the connection alive (in " "seconds)." msgstr "发送心跳包以保持连接存活的时间间隔(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:128 +#: htdocs/luci-static/resources/view/homeproxy/client.js:129 #: htdocs/luci-static/resources/view/homeproxy/node.js:480 msgid "Invalid node" msgstr "无效节点" @@ -1287,13 +1278,13 @@ msgstr "无效节点" msgid "Invalid response" msgstr "无效响应" -#: htdocs/luci-static/resources/view/homeproxy/client.js:688 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1165 +#: htdocs/luci-static/resources/view/homeproxy/client.js:682 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1159 msgid "Invert" msgstr "反转" -#: htdocs/luci-static/resources/view/homeproxy/client.js:689 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1166 +#: htdocs/luci-static/resources/view/homeproxy/client.js:683 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1160 msgid "Invert match result." msgstr "反转匹配结果" @@ -1301,15 +1292,15 @@ msgstr "反转匹配结果" msgid "Key path" msgstr "证书路径" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1442 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1437 msgid "LAN IP Policy" msgstr "LAN IP 策略" -#: htdocs/luci-static/resources/view/homeproxy/client.js:432 -#: htdocs/luci-static/resources/view/homeproxy/client.js:608 -#: htdocs/luci-static/resources/view/homeproxy/client.js:960 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1088 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1347 +#: htdocs/luci-static/resources/view/homeproxy/client.js:426 +#: htdocs/luci-static/resources/view/homeproxy/client.js:602 +#: htdocs/luci-static/resources/view/homeproxy/client.js:954 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1082 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1341 #: htdocs/luci-static/resources/view/homeproxy/node.js:852 #: htdocs/luci-static/resources/view/homeproxy/server.js:160 msgid "Label" @@ -1319,11 +1310,11 @@ msgstr "标签" msgid "Latency" msgstr "延迟" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1782 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1773 msgid "Latency test mode" msgstr "延迟测试模式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1173 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1164 #: htdocs/luci-static/resources/view/homeproxy/server.js:392 msgid "" "Legacy protocol support (VMess MD5 Authentication) is provided for " @@ -1332,7 +1323,7 @@ msgstr "" "提供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > " "1。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:348 +#: htdocs/luci-static/resources/view/homeproxy/client.js:349 msgid "Less compatibility and sometimes better performance." msgstr "有时性能更好。" @@ -1340,31 +1331,31 @@ msgstr "有时性能更好。" msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1327 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1318 msgid "" "List of IP (v4 or v6) addresses prefixes to be assigned to the interface." msgstr "分配给接口的 IP(v4 或 v6)地址前缀列表。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:157 -#: htdocs/luci-static/resources/view/homeproxy/client.js:186 -#: htdocs/luci-static/resources/view/homeproxy/client.js:520 +#: htdocs/luci-static/resources/view/homeproxy/client.js:158 +#: htdocs/luci-static/resources/view/homeproxy/client.js:187 +#: htdocs/luci-static/resources/view/homeproxy/client.js:514 msgid "List of nodes to test." msgstr "要测试的节点列表。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1466 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1457 #: htdocs/luci-static/resources/view/homeproxy/server.js:566 msgid "List of supported application level protocols, in order of preference." msgstr "支持的应用层协议协商列表,按顺序排列。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1251 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1245 msgid "List of text DNS record to respond as answers." msgstr "要响应的 DNS 记录列表。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1261 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1255 msgid "List of text DNS record to respond as extra records." msgstr "要响应的附加 DNS 记录列表。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1256 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1250 msgid "List of text DNS record to respond as name servers." msgstr "要响应的域名服务器(NS) DNS 记录列表。" @@ -1372,7 +1363,7 @@ msgstr "要响应的域名服务器(NS) DNS 记录列表。" msgid "Listen address" msgstr "监听地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1430 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1425 msgid "Listen interfaces" msgstr "监听接口" @@ -1380,51 +1371,51 @@ msgstr "监听接口" msgid "Listen port" msgstr "监听端口" -#: htdocs/luci-static/resources/view/homeproxy/status.js:174 +#: htdocs/luci-static/resources/view/homeproxy/status.js:225 msgid "Loading" msgstr "加载中" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1358 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1352 msgid "Local" msgstr "本地" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1326 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1317 msgid "Local address" msgstr "本地地址" -#: htdocs/luci-static/resources/view/homeproxy/status.js:191 +#: htdocs/luci-static/resources/view/homeproxy/status.js:242 msgid "Log file does not exist." msgstr "日志文件不存在。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:184 +#: htdocs/luci-static/resources/view/homeproxy/status.js:235 msgid "Log is empty." msgstr "日志为空。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1360 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1351 msgid "MTU" msgstr "MTU" -#: htdocs/luci-static/resources/view/homeproxy/client.js:175 +#: htdocs/luci-static/resources/view/homeproxy/client.js:176 msgid "Main UDP node" msgstr "主 UDP 节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:147 +#: htdocs/luci-static/resources/view/homeproxy/client.js:148 msgid "Main node" msgstr "主节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:685 +#: htdocs/luci-static/resources/view/homeproxy/client.js:679 msgid "Make IP CIDR in rule set used to match the source IP." msgstr "使规则集中的 IP CIDR 用于匹配源 IP。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1158 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1152 msgid "Make IP CIDR in rule sets match the source IP." msgstr "使规则集中的 IP CIDR 匹配源 IP。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1162 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1156 msgid "Make IP CIDR in rule-sets accept empty query response." msgstr "使规则集中的 IP CIDR 接受空查询响应。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:928 +#: htdocs/luci-static/resources/view/homeproxy/client.js:922 msgid "" "Make each DNS server's cache independent for special purposes. If enabled, " "will slightly degrade performance." @@ -1434,109 +1425,109 @@ msgstr "独立缓存每个 DNS 服务器的结果以供特殊用途。启用后 msgid "Masquerade" msgstr "伪装" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1291 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1285 msgid "" "Match IP CIDR with query response. Current rule will be skipped if not match." msgstr "使用查询响应匹配 IP CIDR。如果不匹配,则跳过当前规则。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:854 +#: htdocs/luci-static/resources/view/homeproxy/client.js:848 msgid "Match IP CIDR." msgstr "匹配 IP CIDR。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:834 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1271 +#: htdocs/luci-static/resources/view/homeproxy/client.js:828 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1265 msgid "Match domain suffix." msgstr "匹配域名后缀。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:838 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1275 +#: htdocs/luci-static/resources/view/homeproxy/client.js:832 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1269 msgid "Match domain using keyword." msgstr "使用关键词匹配域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:842 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1279 +#: htdocs/luci-static/resources/view/homeproxy/client.js:836 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1273 msgid "Match domain using regular expression." msgstr "使用正则表达式匹配域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:829 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1266 +#: htdocs/luci-static/resources/view/homeproxy/client.js:823 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1260 msgid "Match full domain." msgstr "匹配完整域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:877 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1315 +#: htdocs/luci-static/resources/view/homeproxy/client.js:871 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1309 msgid "Match port range. Format as START:/:END/START:END." msgstr "匹配端口范围。格式为 START:/:END/START:END。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:872 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1310 +#: htdocs/luci-static/resources/view/homeproxy/client.js:866 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1304 msgid "Match port." msgstr "匹配端口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:858 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1295 +#: htdocs/luci-static/resources/view/homeproxy/client.js:852 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1289 msgid "Match private IP" msgstr "匹配私有 IP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1296 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1290 msgid "Match private IP with query response." msgstr "使用查询响应匹配私有 IP。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:850 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1287 +#: htdocs/luci-static/resources/view/homeproxy/client.js:844 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1281 msgid "Match private source IP" msgstr "匹配私有源 IP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:882 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1320 +#: htdocs/luci-static/resources/view/homeproxy/client.js:876 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1314 msgid "Match process name." msgstr "匹配进程名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:890 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1328 +#: htdocs/luci-static/resources/view/homeproxy/client.js:884 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1322 msgid "Match process path using regular expression." msgstr "使用正则表达式匹配进程路径。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:886 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1324 +#: htdocs/luci-static/resources/view/homeproxy/client.js:880 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1318 msgid "Match process path." msgstr "匹配进程路径。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1119 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1113 msgid "Match query type." msgstr "匹配请求类型。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:670 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1143 +#: htdocs/luci-static/resources/view/homeproxy/client.js:664 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1137 msgid "Match rule set." msgstr "匹配规则集。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:846 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1283 +#: htdocs/luci-static/resources/view/homeproxy/client.js:840 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1277 msgid "Match source IP CIDR." msgstr "匹配源 IP CIDR。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:867 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1305 +#: htdocs/luci-static/resources/view/homeproxy/client.js:861 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1299 msgid "Match source port range. Format as START:/:END/START:END." msgstr "匹配源端口范围。格式为 START:/:END/START:END。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:862 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1300 +#: htdocs/luci-static/resources/view/homeproxy/client.js:856 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1294 msgid "Match source port." msgstr "匹配源端口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:666 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1139 +#: htdocs/luci-static/resources/view/homeproxy/client.js:660 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1133 msgid "Match user name." msgstr "匹配用户名。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1009 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1000 #: htdocs/luci-static/resources/view/homeproxy/server.js:261 msgid "Max download speed" msgstr "最大下载速度" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1010 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1001 #: htdocs/luci-static/resources/view/homeproxy/server.js:262 msgid "Max download speed in Mbps." msgstr "最大下载速度(Mbps)。" @@ -1545,27 +1536,27 @@ msgstr "最大下载速度(Mbps)。" msgid "Max time difference" msgstr "最大时间差" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1016 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1007 #: htdocs/luci-static/resources/view/homeproxy/server.js:268 msgid "Max upload speed" msgstr "最大上传速度" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1017 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1008 #: htdocs/luci-static/resources/view/homeproxy/server.js:269 msgid "Max upload speed in Mbps." msgstr "最大上传速度(Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1486 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1477 #: htdocs/luci-static/resources/view/homeproxy/server.js:578 msgid "Maximum TLS version" msgstr "最大 TLS 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1391 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1405 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1382 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1396 msgid "Maximum connections" msgstr "最大连接数" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1403 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1394 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." "
Conflict with %s and %s." @@ -1573,67 +1564,67 @@ msgstr "" "在打开新连接之前,连接中的最大多路复用流数量。与 %s 和 " "%s 冲突。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1402 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1393 msgid "Maximum streams" msgstr "最大流数量" -#: htdocs/luci-static/resources/view/homeproxy/client.js:791 -#: htdocs/luci-static/resources/view/homeproxy/client.js:799 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1225 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1234 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1271 +#: htdocs/luci-static/resources/view/homeproxy/client.js:785 +#: htdocs/luci-static/resources/view/homeproxy/client.js:793 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1219 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1228 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1262 #: htdocs/luci-static/resources/view/homeproxy/server.js:452 msgid "Method" msgstr "方式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1478 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1469 #: htdocs/luci-static/resources/view/homeproxy/server.js:570 msgid "Minimum TLS version" msgstr "最低 TLS 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:950 +#: htdocs/luci-static/resources/view/homeproxy/node.js:941 msgid "Minimum idle sessions" msgstr "最小空闲会话数" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1397 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1388 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "在打开新连接之前,连接中的最小多路复用流数量。" +#: htdocs/luci-static/resources/view/homeproxy/node.js:1387 #: htdocs/luci-static/resources/view/homeproxy/node.js:1396 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1405 msgid "Minimum streams" msgstr "最小流数量" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1773 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1764 msgid "Minutes(0-59) Hours(0-23) Dates(1-31) Months(1-12) Weeks(0-6)" msgstr "分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:333 +#: htdocs/luci-static/resources/view/homeproxy/client.js:334 #: htdocs/luci-static/resources/view/homeproxy/server.js:183 msgid "Mixed" msgstr "混合" -#: htdocs/luci-static/resources/view/homeproxy/client.js:344 +#: htdocs/luci-static/resources/view/homeproxy/client.js:345 msgid "Mixed system TCP stack and gVisor UDP stack." msgstr "混合系统 TCP 栈和 gVisor UDP 栈。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:618 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1098 +#: htdocs/luci-static/resources/view/homeproxy/client.js:612 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1092 msgid "Mode" msgstr "模式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1594 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1585 #: htdocs/luci-static/resources/view/homeproxy/server.js:850 msgid "MultiPath TCP" msgstr "多路径 TCP(MPTCP)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1374 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1365 #: htdocs/luci-static/resources/view/homeproxy/server.js:500 msgid "Multiplex" msgstr "多路复用" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1382 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1373 msgid "Multiplex protocol." msgstr "多路复用协议。" @@ -1642,15 +1633,19 @@ msgstr "多路复用协议。" msgid "NOT RUNNING" msgstr "未运行" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1835 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1826 msgid "NOTE: Save current settings before updating subscriptions." msgstr "注意:更新订阅前先保存当前配置。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1255 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1249 msgid "NS" msgstr "NS" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1141 +#: htdocs/luci-static/resources/view/homeproxy/status.js:102 +msgid "Name" +msgstr "名称" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1132 msgid "Native" msgstr "原生" @@ -1658,41 +1653,41 @@ msgstr "原生" msgid "NaïveProxy" msgstr "NaïveProxy" -#: htdocs/luci-static/resources/view/homeproxy/client.js:660 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1122 +#: htdocs/luci-static/resources/view/homeproxy/client.js:654 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1116 #: htdocs/luci-static/resources/view/homeproxy/server.js:866 msgid "Network" msgstr "网络" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1131 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1122 msgid "New Reno" msgstr "New Reno" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1204 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1221 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1195 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1212 #: htdocs/luci-static/resources/view/homeproxy/server.js:400 #: htdocs/luci-static/resources/view/homeproxy/server.js:417 msgid "No TCP transport, plain HTTP is merged into the HTTP transport." msgstr "无 TCP 传输层, 纯 HTTP 已合并到 HTTP 传输层。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1219 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1210 #: htdocs/luci-static/resources/view/homeproxy/server.js:415 msgid "No additional encryption support: It's basically duplicate encryption." msgstr "无额外加密支持:它基本上是重复加密。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1852 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1843 msgid "No subscription available" msgstr "无可用订阅" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1877 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1868 msgid "No subscription node" msgstr "无订阅节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1704 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1695 msgid "No valid share link found." msgstr "找不到有效分享链接。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:442 +#: htdocs/luci-static/resources/view/homeproxy/client.js:436 #: htdocs/luci-static/resources/view/homeproxy/node.js:719 msgid "Node" msgstr "节点" @@ -1701,13 +1696,13 @@ msgstr "节点" msgid "Node Settings" msgstr "节点设置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1650 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1641 msgid "Nodes" msgstr "节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1017 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1167 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1205 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1011 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1158 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1196 #: htdocs/luci-static/resources/view/homeproxy/server.js:386 #: htdocs/luci-static/resources/view/homeproxy/server.js:401 msgid "None" @@ -1718,69 +1713,69 @@ msgstr "无" msgid "Not Tested" msgstr "未测试" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1003 +#: htdocs/luci-static/resources/view/homeproxy/node.js:994 #: htdocs/luci-static/resources/view/homeproxy/server.js:294 msgid "Obfuscate password" msgstr "混淆密码" -#: htdocs/luci-static/resources/view/homeproxy/node.js:997 +#: htdocs/luci-static/resources/view/homeproxy/node.js:988 #: htdocs/luci-static/resources/view/homeproxy/server.js:288 msgid "Obfuscate type" msgstr "混淆类型" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1431 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1426 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "只处理来自指定接口的流量。留空表示全部。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:277 +#: htdocs/luci-static/resources/view/homeproxy/client.js:278 msgid "Only proxy mainland China" msgstr "仅代理中国大陆" -#: htdocs/luci-static/resources/view/homeproxy/client.js:603 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1083 +#: htdocs/luci-static/resources/view/homeproxy/client.js:597 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1077 msgid "Other fields" msgstr "其他字段" -#: htdocs/luci-static/resources/view/homeproxy/client.js:483 -#: htdocs/luci-static/resources/view/homeproxy/client.js:701 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1050 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1398 +#: htdocs/luci-static/resources/view/homeproxy/client.js:477 +#: htdocs/luci-static/resources/view/homeproxy/client.js:695 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1044 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1392 msgid "Outbound" msgstr "出站" -#: htdocs/luci-static/resources/view/homeproxy/client.js:443 +#: htdocs/luci-static/resources/view/homeproxy/client.js:437 msgid "Outbound node" msgstr "出站节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:719 +#: htdocs/luci-static/resources/view/homeproxy/client.js:713 msgid "Override address" msgstr "覆盖地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:375 +#: htdocs/luci-static/resources/view/homeproxy/client.js:369 msgid "Override destination" msgstr "覆盖目标地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:726 +#: htdocs/luci-static/resources/view/homeproxy/client.js:720 msgid "Override port" msgstr "覆盖端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:376 +#: htdocs/luci-static/resources/view/homeproxy/client.js:370 msgid "Override the connection destination address with the sniffed domain." msgstr "使用嗅探到的域名覆盖连接目标。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:720 +#: htdocs/luci-static/resources/view/homeproxy/client.js:714 msgid "Override the connection destination address." msgstr "覆盖目标连接地址。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:727 +#: htdocs/luci-static/resources/view/homeproxy/client.js:721 msgid "Override the connection destination port." msgstr "覆盖目标连接端口。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1273 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1264 msgid "PUT" msgstr "PUT" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1316 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1307 msgid "Packet encoding" msgstr "数据包编码" @@ -1788,7 +1783,7 @@ msgstr "数据包编码" msgid "Padding scheme" msgstr "填充方案" -#: htdocs/luci-static/resources/view/homeproxy/status.js:141 +#: htdocs/luci-static/resources/view/homeproxy/status.js:192 msgid "Panic" msgstr "崩溃" @@ -1797,72 +1792,66 @@ msgstr "崩溃" msgid "Password" msgstr "密码" -#: htdocs/luci-static/resources/view/homeproxy/client.js:990 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1369 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1266 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1299 +#: htdocs/luci-static/resources/view/homeproxy/client.js:984 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1257 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1290 #: htdocs/luci-static/resources/view/homeproxy/server.js:447 #: htdocs/luci-static/resources/view/homeproxy/server.js:477 msgid "Path" msgstr "路径" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1341 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1332 msgid "Peer pubkic key" msgstr "对端公钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:352 -msgid "" -"Performance may degrade slightly, so it is not recommended to enable on when " -"it is not needed." -msgstr "性能可能会略有下降,建议仅在需要时开启。" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:1366 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1357 msgid "Persistent keepalive interval" msgstr "持久 keepalive 间隔" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1285 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1276 #: htdocs/luci-static/resources/view/homeproxy/server.js:464 msgid "Ping timeout" msgstr "Ping 超时" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1060 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1051 msgid "Plugin" msgstr "插件" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1067 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1058 msgid "Plugin opts" msgstr "插件参数" -#: htdocs/luci-static/resources/view/homeproxy/client.js:871 -#: htdocs/luci-static/resources/view/homeproxy/client.js:985 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1309 +#: htdocs/luci-static/resources/view/homeproxy/client.js:865 +#: htdocs/luci-static/resources/view/homeproxy/client.js:979 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1303 #: htdocs/luci-static/resources/view/homeproxy/node.js:883 msgid "Port" msgstr "端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:299 +#: htdocs/luci-static/resources/view/homeproxy/client.js:300 msgid "Port %s alrealy exists!" msgstr "端口 %s 已存在!" -#: htdocs/luci-static/resources/view/homeproxy/client.js:605 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1085 +#: htdocs/luci-static/resources/view/homeproxy/client.js:599 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1079 msgid "Port fields" msgstr "端口字段" -#: htdocs/luci-static/resources/view/homeproxy/node.js:966 +#: htdocs/luci-static/resources/view/homeproxy/node.js:957 msgid "Port hopping interval in seconds." msgstr "端口跳跃间隔(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:876 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1314 +#: htdocs/luci-static/resources/view/homeproxy/client.js:870 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1308 msgid "Port range" msgstr "端口范围" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1348 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1339 msgid "Pre-shared key" msgstr "预共享密钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1173 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1167 msgid "Predefined" msgstr "预定义" @@ -1874,12 +1863,12 @@ msgstr "优先 IPv4" msgid "Prefer IPv6" msgstr "优先 IPv6" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1108 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1333 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1324 msgid "Private key" msgstr "私钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1113 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1104 msgid "Private key passphrase" msgstr "私钥指纹" @@ -1887,97 +1876,93 @@ msgstr "私钥指纹" msgid "Probe failed" msgstr "探测失败" -#: htdocs/luci-static/resources/view/homeproxy/client.js:606 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1086 +#: htdocs/luci-static/resources/view/homeproxy/client.js:600 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1080 msgid "Process fields" msgstr "进程字段" -#: htdocs/luci-static/resources/view/homeproxy/client.js:881 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1319 +#: htdocs/luci-static/resources/view/homeproxy/client.js:875 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1313 msgid "Process name" msgstr "进程名" -#: htdocs/luci-static/resources/view/homeproxy/client.js:885 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1323 +#: htdocs/luci-static/resources/view/homeproxy/client.js:879 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1317 msgid "Process path" msgstr "进程路径" -#: htdocs/luci-static/resources/view/homeproxy/client.js:889 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1327 +#: htdocs/luci-static/resources/view/homeproxy/client.js:883 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1321 msgid "Process path (regex)" msgstr "进程路径(正则表达式)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:638 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1127 -#: htdocs/luci-static/resources/view/homeproxy/node.js:973 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1381 +#: htdocs/luci-static/resources/view/homeproxy/client.js:632 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1121 +#: htdocs/luci-static/resources/view/homeproxy/node.js:964 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1372 #: htdocs/luci-static/resources/view/homeproxy/server.js:250 msgid "Protocol" msgstr "协议" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1197 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1188 msgid "Protocol parameter. Enable length block encryption." msgstr "协议参数。启用长度块加密。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1190 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1181 msgid "" "Protocol parameter. Will waste traffic randomly if enabled (enabled by " "default in v2ray and cannot be disabled)." msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1505 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1500 msgid "Proxy Domain List" msgstr "代理域名列表" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1460 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1489 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1455 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1484 msgid "Proxy IPv4 IP-s" msgstr "代理 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1463 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1492 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1458 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1487 msgid "Proxy IPv6 IP-s" msgstr "代理 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1466 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1461 msgid "Proxy MAC-s" msgstr "代理 MAC 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1447 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1442 msgid "Proxy all except listed" msgstr "仅允许列表外" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1444 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1439 msgid "Proxy filter mode" msgstr "代理过滤模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1446 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1441 msgid "Proxy listed only" msgstr "仅允许列表内" -#: htdocs/luci-static/resources/view/homeproxy/client.js:307 +#: htdocs/luci-static/resources/view/homeproxy/client.js:308 msgid "Proxy mode" msgstr "代理模式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:927 -msgid "Proxy protocol" -msgstr "代理协议" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:644 -#: htdocs/luci-static/resources/view/homeproxy/client.js:976 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1132 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1142 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1209 +#: htdocs/luci-static/resources/view/homeproxy/client.js:638 +#: htdocs/luci-static/resources/view/homeproxy/client.js:970 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1126 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1133 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1200 #: htdocs/luci-static/resources/view/homeproxy/server.js:405 msgid "QUIC" msgstr "QUIC" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1129 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1120 #: htdocs/luci-static/resources/view/homeproxy/server.js:355 msgid "QUIC congestion control algorithm." msgstr "QUIC 拥塞控制算法。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1029 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1020 #: htdocs/luci-static/resources/view/homeproxy/server.js:307 msgid "QUIC connection receive window" msgstr "QUIC 连接窗口" @@ -1986,33 +1971,33 @@ msgstr "QUIC 连接窗口" msgid "QUIC maximum concurrent bidirectional streams" msgstr "QUIC 最大双向并发流" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1023 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1014 #: htdocs/luci-static/resources/view/homeproxy/server.js:300 msgid "QUIC stream receive window" msgstr "QUIC 流接收窗口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:209 +#: htdocs/luci-static/resources/view/homeproxy/client.js:210 msgid "Quad9 Public DNS (DoH)" msgstr "Quad9 公共DNS (DoH)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1118 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1112 msgid "Query type" msgstr "请求类型" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1238 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1232 msgid "RCode" msgstr "RCode" -#: htdocs/luci-static/resources/view/homeproxy/client.js:645 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1133 +#: htdocs/luci-static/resources/view/homeproxy/client.js:639 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1127 msgid "RDP" msgstr "RDP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:940 +#: htdocs/luci-static/resources/view/homeproxy/client.js:934 msgid "RDRC timeout" msgstr "RDRC 超时" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1572 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1563 #: htdocs/luci-static/resources/view/homeproxy/server.js:709 msgid "REALITY" msgstr "REALITY" @@ -2021,17 +2006,17 @@ msgstr "REALITY" msgid "REALITY private key" msgstr "REALITY 私钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1577 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1568 #: htdocs/luci-static/resources/view/homeproxy/server.js:730 msgid "REALITY public key" msgstr "REALITY 公钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1583 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1574 #: htdocs/luci-static/resources/view/homeproxy/server.js:734 msgid "REALITY short ID" msgstr "REALITY 标识符" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1785 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1776 msgid "RP" msgstr "RP" @@ -2044,31 +2029,31 @@ msgstr "RPC 失败" msgid "RUNNING" msgstr "运行中" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1086 msgid "Random version will be used if empty." msgstr "如留空,则使用随机版本。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:511 +#: htdocs/luci-static/resources/view/homeproxy/client.js:505 msgid "Recursive outbound detected!" msgstr "检测到递归出站!" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1036 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1030 msgid "Recursive resolver detected!" msgstr "检测到递归解析器!" -#: htdocs/luci-static/resources/view/homeproxy/client.js:308 +#: htdocs/luci-static/resources/view/homeproxy/client.js:309 msgid "Redirect TCP" msgstr "Redirect TCP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:310 +#: htdocs/luci-static/resources/view/homeproxy/client.js:311 msgid "Redirect TCP + TProxy UDP" msgstr "Redirect TCP + TProxy UDP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:312 +#: htdocs/luci-static/resources/view/homeproxy/client.js:313 msgid "Redirect TCP + Tun UDP" msgstr "Redirect TCP + Tun UDP" -#: htdocs/luci-static/resources/view/homeproxy/status.js:219 +#: htdocs/luci-static/resources/view/homeproxy/status.js:270 msgid "Refresh every %s seconds." msgstr "每 %s 秒刷新。" @@ -2076,44 +2061,44 @@ msgstr "每 %s 秒刷新。" msgid "Region ID" msgstr "区域 ID" -#: htdocs/luci-static/resources/view/homeproxy/client.js:695 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1172 +#: htdocs/luci-static/resources/view/homeproxy/client.js:689 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1166 msgid "Reject" msgstr "拒绝" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1359 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1353 msgid "Remote" msgstr "远程" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1874 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1865 msgid "Remove %s nodes" msgstr "移除 %s 个节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1864 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1855 msgid "Remove all nodes from subscriptions" msgstr "移除所有订阅节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1226 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1220 msgid "Reply with REFUSED" msgstr "回复 REFUSED" -#: htdocs/luci-static/resources/view/homeproxy/client.js:792 +#: htdocs/luci-static/resources/view/homeproxy/client.js:786 msgid "Reply with TCP RST / ICMP port unreachable" msgstr "回复 TCP RST / ICMP 端口不可达" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1346 msgid "Reserved field bytes" msgstr "保留字段字节" -#: htdocs/luci-static/resources/view/homeproxy/client.js:696 +#: htdocs/luci-static/resources/view/homeproxy/client.js:690 msgid "Resolve" msgstr "解析" -#: htdocs/luci-static/resources/view/homeproxy/client.js:803 +#: htdocs/luci-static/resources/view/homeproxy/client.js:797 msgid "Resolve strategy" msgstr "解析策略" -#: htdocs/luci-static/resources/view/homeproxy/status.js:241 +#: htdocs/luci-static/resources/view/homeproxy/status.js:128 msgid "Resources management" msgstr "资源管理" @@ -2125,115 +2110,115 @@ msgstr "复用地址" msgid "Reuse listener address." msgstr "复用监听地址。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:815 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1210 +#: htdocs/luci-static/resources/view/homeproxy/client.js:809 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1204 msgid "Rewrite TTL" msgstr "重写 TTL" -#: htdocs/luci-static/resources/view/homeproxy/client.js:816 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1211 +#: htdocs/luci-static/resources/view/homeproxy/client.js:810 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1205 msgid "Rewrite TTL in DNS responses." msgstr "在 DNS 响应中重写 TTL。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:693 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1170 +#: htdocs/luci-static/resources/view/homeproxy/client.js:687 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1164 msgid "Route" msgstr "路由" -#: htdocs/luci-static/resources/view/homeproxy/client.js:694 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1171 +#: htdocs/luci-static/resources/view/homeproxy/client.js:688 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1165 msgid "Route options" msgstr "路由选项" -#: htdocs/luci-static/resources/view/homeproxy/client.js:419 +#: htdocs/luci-static/resources/view/homeproxy/client.js:413 msgid "Routing Nodes" msgstr "路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:590 +#: htdocs/luci-static/resources/view/homeproxy/client.js:584 msgid "Routing Rules" msgstr "路由规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:145 +#: htdocs/luci-static/resources/view/homeproxy/client.js:146 msgid "Routing Settings" msgstr "路由设置" -#: htdocs/luci-static/resources/view/homeproxy/client.js:274 +#: htdocs/luci-static/resources/view/homeproxy/client.js:275 msgid "Routing mode" msgstr "路由模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:428 +#: htdocs/luci-static/resources/view/homeproxy/client.js:422 msgid "Routing node" msgstr "路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:287 +#: htdocs/luci-static/resources/view/homeproxy/client.js:288 msgid "Routing ports" msgstr "路由端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:599 +#: htdocs/luci-static/resources/view/homeproxy/client.js:593 msgid "Routing rule" msgstr "路由规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1334 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1328 msgid "Rule Set" msgstr "规则集" -#: htdocs/luci-static/resources/view/homeproxy/client.js:669 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1142 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1343 +#: htdocs/luci-static/resources/view/homeproxy/client.js:663 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1136 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1337 msgid "Rule set" msgstr "规则集" -#: htdocs/luci-static/resources/view/homeproxy/client.js:684 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1157 +#: htdocs/luci-static/resources/view/homeproxy/client.js:678 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1151 msgid "Rule set IP CIDR as source IP" msgstr "规则集 IP CIDR 作为源 IP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1376 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1370 msgid "Rule set URL" msgstr "规则集 URL" -#: htdocs/luci-static/resources/view/homeproxy/client.js:646 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1134 +#: htdocs/luci-static/resources/view/homeproxy/client.js:640 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1128 #: htdocs/luci-static/resources/view/homeproxy/node.js:868 msgid "SSH" msgstr "SSH" -#: htdocs/luci-static/resources/view/homeproxy/client.js:647 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1135 +#: htdocs/luci-static/resources/view/homeproxy/client.js:641 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1129 msgid "STUN" msgstr "STUN" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1607 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1598 msgid "SUoT version" msgstr "SUoT 版本" -#: htdocs/luci-static/resources/view/homeproxy/client.js:655 +#: htdocs/luci-static/resources/view/homeproxy/client.js:649 msgid "Safari / Apple Network API" msgstr "Safari / Apple Network API" -#: htdocs/luci-static/resources/view/homeproxy/node.js:999 +#: htdocs/luci-static/resources/view/homeproxy/node.js:990 #: htdocs/luci-static/resources/view/homeproxy/server.js:290 msgid "Salamander" msgstr "Salamander" -#: htdocs/luci-static/resources/view/homeproxy/client.js:177 +#: htdocs/luci-static/resources/view/homeproxy/client.js:178 msgid "Same as main node" msgstr "保持与主节点一致" -#: htdocs/luci-static/resources/view/homeproxy/status.js:267 -#: htdocs/luci-static/resources/view/homeproxy/status.js:273 +#: htdocs/luci-static/resources/view/homeproxy/status.js:305 +#: htdocs/luci-static/resources/view/homeproxy/status.js:311 msgid "Save" msgstr "保存" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1837 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1828 msgid "Save current settings" msgstr "保存当前设置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1834 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1825 msgid "Save subscriptions settings" msgstr "保存订阅设置" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1178 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1172 #: htdocs/luci-static/resources/view/homeproxy/server.js:156 msgid "Server" msgstr "服务器" @@ -2256,7 +2241,7 @@ msgstr "服务器设置" msgid "Service Status" msgstr "服务状态" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1198 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1192 msgid "Set domain strategy for this query." msgstr "为此查询设置域名策略。" @@ -2264,7 +2249,7 @@ msgstr "为此查询设置域名策略。" msgid "ShadowTLS" msgstr "ShadowTLS" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1074 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1065 msgid "ShadowTLS version" msgstr "ShadowTLS 版本" @@ -2273,12 +2258,12 @@ msgstr "ShadowTLS 版本" msgid "Shadowsocks" msgstr "Shadowsocks" -#: htdocs/luci-static/resources/view/homeproxy/client.js:651 +#: htdocs/luci-static/resources/view/homeproxy/client.js:645 msgid "Sniffed client type (QUIC client type or SSH client name)." msgstr "嗅探到的客户端类型(QUIC 客户端类型或 SSH 客户端名称)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:639 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1128 +#: htdocs/luci-static/resources/view/homeproxy/client.js:633 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1122 msgid "" "Sniffed protocol, see Sniff for details." @@ -2291,48 +2276,52 @@ msgstr "" msgid "Socks" msgstr "Socks" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1084 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1075 msgid "Socks version" msgstr "Socks 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1085 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1076 msgid "Socks4" msgstr "Socks4" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1086 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1077 msgid "Socks4A" msgstr "Socks4A" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1087 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1078 msgid "Socks5" msgstr "Socks5" -#: htdocs/luci-static/resources/view/homeproxy/client.js:845 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1282 +#: htdocs/luci-static/resources/view/homeproxy/status.js:104 +msgid "Source" +msgstr "来源" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:839 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1276 msgid "Source IP CIDR" msgstr "源 IP CIDR" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1365 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1359 msgid "Source file" msgstr "源文件" -#: htdocs/luci-static/resources/view/homeproxy/client.js:861 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1299 +#: htdocs/luci-static/resources/view/homeproxy/client.js:855 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1293 msgid "Source port" msgstr "源端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:866 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1304 +#: htdocs/luci-static/resources/view/homeproxy/client.js:860 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1298 msgid "Source port range" msgstr "源端口范围" -#: htdocs/luci-static/resources/view/homeproxy/client.js:773 +#: htdocs/luci-static/resources/view/homeproxy/client.js:767 msgid "" "Specifies DNS server tag to use instead of selecting through DNS routing." msgstr "指定使用的 DNS 服务器,而不是通过 DNS 规则选择。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1226 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1278 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1217 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1269 msgid "" "Specifies the period of time (in seconds) after which a health check will be " "performed using a ping frame if no frames have been received on the " @@ -2353,8 +2342,8 @@ msgstr "" "指定闲置客户端应在多长时间(单位:秒)内使用 GOAWAY 帧关闭。PING 帧不被视为活" "动。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1230 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1286 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1221 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1277 msgid "" "Specifies the timeout duration (in seconds) after sending a PING frame, " "within which a response must be received.
If a response to the PING " @@ -2364,17 +2353,17 @@ msgstr "" "指定发送 PING 帧后,在指定的超时时间(单位:秒)内必须接收到响应。
如果在" "指定的超时时间内没有收到 PING 帧的响应,则连接将关闭。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:288 +#: htdocs/luci-static/resources/view/homeproxy/client.js:289 msgid "" "Specify target ports to be proxied. Multiple ports must be separated by " "commas." msgstr "指定需要被代理的目标端口。多个端口必须用逗号隔开。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:936 +#: htdocs/luci-static/resources/view/homeproxy/client.js:930 msgid "Store RDRC" msgstr "存储 RDRC" -#: htdocs/luci-static/resources/view/homeproxy/client.js:937 +#: htdocs/luci-static/resources/view/homeproxy/client.js:931 msgid "" "Store rejected DNS response cache.
The check results of Address " "filter DNS rule items will be cached until expiration." @@ -2382,20 +2371,20 @@ msgstr "" "存储被拒绝的 DNS 响应缓存。
地址过滤 DNS 规则 的检查结果将被" "缓存直到过期。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:987 +#: htdocs/luci-static/resources/view/homeproxy/node.js:978 #: htdocs/luci-static/resources/view/homeproxy/server.js:278 msgid "String" msgstr "字符串" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1755 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1746 msgid "Sub (%s)" msgstr "订阅(%s)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1789 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1780 msgid "Subscription URL-s" msgstr "订阅地址" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1766 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1757 msgid "Subscriptions" msgstr "订阅" @@ -2403,16 +2392,16 @@ msgstr "订阅" msgid "Success" msgstr "成功" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1706 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1697 msgid "Successfully imported %s nodes of total %s." msgstr "成功导入 %s 个节点,共 %s 个。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:86 +#: htdocs/luci-static/resources/view/homeproxy/status.js:138 msgid "Successfully updated." msgstr "更新成功。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1666 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1790 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1657 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1781 msgid "" "Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) " "online configuration delivery standard." @@ -2420,78 +2409,78 @@ msgstr "" "支持 Hysteria、Shadowsocks、Trojan、v2rayN(VMess)和 XTLS(VLESS)在线配置交" "付标准。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:205 +#: htdocs/luci-static/resources/view/homeproxy/client.js:206 msgid "" "Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified." msgstr "支持 UDP、TCP、DoH、DoQ、DoT。如未指定则使用 TCP 协议。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:336 +#: htdocs/luci-static/resources/view/homeproxy/client.js:337 msgid "System" msgstr "系统" -#: htdocs/luci-static/resources/view/homeproxy/client.js:406 -#: htdocs/luci-static/resources/view/homeproxy/client.js:458 -#: htdocs/luci-static/resources/view/homeproxy/client.js:780 -#: htdocs/luci-static/resources/view/homeproxy/client.js:911 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1019 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1185 +#: htdocs/luci-static/resources/view/homeproxy/client.js:400 +#: htdocs/luci-static/resources/view/homeproxy/client.js:452 +#: htdocs/luci-static/resources/view/homeproxy/client.js:774 +#: htdocs/luci-static/resources/view/homeproxy/client.js:905 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1013 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 msgid "System DNS" msgstr "系统 DNS" -#: htdocs/luci-static/resources/view/homeproxy/client.js:661 -#: htdocs/luci-static/resources/view/homeproxy/client.js:972 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1123 +#: htdocs/luci-static/resources/view/homeproxy/client.js:655 +#: htdocs/luci-static/resources/view/homeproxy/client.js:966 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1117 #: htdocs/luci-static/resources/view/homeproxy/server.js:867 msgid "TCP" msgstr "TCP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1591 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1582 #: htdocs/luci-static/resources/view/homeproxy/server.js:845 msgid "TCP fast open" msgstr "TCP 快速打开" -#: htdocs/luci-static/resources/view/homeproxy/client.js:330 +#: htdocs/luci-static/resources/view/homeproxy/client.js:331 msgid "TCP/IP stack" msgstr "TCP/IP 协议栈" -#: htdocs/luci-static/resources/view/homeproxy/client.js:331 +#: htdocs/luci-static/resources/view/homeproxy/client.js:332 msgid "TCP/IP stack." msgstr "TCP/IP 协议栈。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:648 -#: htdocs/luci-static/resources/view/homeproxy/client.js:973 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1136 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1433 +#: htdocs/luci-static/resources/view/homeproxy/client.js:642 +#: htdocs/luci-static/resources/view/homeproxy/client.js:967 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1130 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1424 #: htdocs/luci-static/resources/view/homeproxy/server.js:532 msgid "TLS" msgstr "TLS" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1465 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1456 #: htdocs/luci-static/resources/view/homeproxy/server.js:565 msgid "TLS ALPN" msgstr "TLS ALPN" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1003 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1460 +#: htdocs/luci-static/resources/view/homeproxy/client.js:997 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1451 #: htdocs/luci-static/resources/view/homeproxy/server.js:560 msgid "TLS SNI" msgstr "TLS SNI" -#: htdocs/luci-static/resources/view/homeproxy/client.js:758 +#: htdocs/luci-static/resources/view/homeproxy/client.js:752 msgid "TLS fragment" msgstr "TLS 分片" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1217 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1208 #: htdocs/luci-static/resources/view/homeproxy/server.js:413 msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used." msgstr "不强制执行 TLS。如未配置 TLS,将使用纯 HTTP 1.1。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:752 -#: htdocs/luci-static/resources/view/homeproxy/client.js:760 +#: htdocs/luci-static/resources/view/homeproxy/client.js:746 +#: htdocs/luci-static/resources/view/homeproxy/client.js:754 msgid "TLS record fragment" msgstr "TLS 记录分片" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1012 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1006 msgid "" "Tag of a another server to resolve the domain name in the address. Required " "if address contains domain." @@ -2499,19 +2488,19 @@ msgstr "" "用于解析本 DNS 服务器的域名的另一个 DNS 服务器的标签。如果服务器地址包括域名" "则必须。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1051 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1045 msgid "Tag of an outbound for connecting to the dns server." msgstr "用于连接到 DNS 服务器的出站标签。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1399 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1393 msgid "Tag of the outbound to download rule set." msgstr "用于下载规则集的出站标签。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1173 msgid "Tag of the target dns server." msgstr "目标 DNS 服务器标签。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:702 +#: htdocs/luci-static/resources/view/homeproxy/client.js:696 msgid "Tag of the target outbound." msgstr "目标出站标签。" @@ -2520,7 +2509,7 @@ msgid "" "Tell the client to use the BBR flow control algorithm instead of Hysteria CC." msgstr "让客户端使用 BBR 流控算法。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:245 +#: htdocs/luci-static/resources/view/homeproxy/client.js:246 msgid "Tencent Public DNS (DoH)" msgstr "腾讯 公共DNS (DoH)" @@ -2529,28 +2518,28 @@ msgstr "腾讯 公共DNS (DoH)" msgid "Test" msgstr "测试" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1924 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1928 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1915 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1919 msgid "Test Current List" msgstr "测试当前列表" -#: htdocs/luci-static/resources/view/homeproxy/client.js:533 +#: htdocs/luci-static/resources/view/homeproxy/client.js:527 msgid "Test URL" msgstr "测试 URL" -#: htdocs/luci-static/resources/view/homeproxy/client.js:163 -#: htdocs/luci-static/resources/view/homeproxy/client.js:192 -#: htdocs/luci-static/resources/view/homeproxy/client.js:553 +#: htdocs/luci-static/resources/view/homeproxy/client.js:164 +#: htdocs/luci-static/resources/view/homeproxy/client.js:193 +#: htdocs/luci-static/resources/view/homeproxy/client.js:547 msgid "Test interval" msgstr "测试间隔" -#: htdocs/luci-static/resources/view/homeproxy/client.js:561 +#: htdocs/luci-static/resources/view/homeproxy/client.js:555 msgid "Test interval must be less or equal than idle timeout." msgstr "测试间隔时间必须小于或等于空闲超时时间。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:169 -#: htdocs/luci-static/resources/view/homeproxy/client.js:198 -#: htdocs/luci-static/resources/view/homeproxy/client.js:569 +#: htdocs/luci-static/resources/view/homeproxy/client.js:170 +#: htdocs/luci-static/resources/view/homeproxy/client.js:199 +#: htdocs/luci-static/resources/view/homeproxy/client.js:563 msgid "Test tolerance" msgstr "测试容差" @@ -2559,7 +2548,7 @@ msgstr "测试容差" msgid "Testing" msgstr "测试中" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1917 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1908 msgid "Testing Current List..." msgstr "当前列表测试中..." @@ -2567,25 +2556,25 @@ msgstr "当前列表测试中..." msgid "The ACME CA provider to use." msgstr "使用的 ACME CA 颁发机构。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:901 +#: htdocs/luci-static/resources/view/homeproxy/client.js:895 msgid "The DNS strategy for resolving the domain name in the address." msgstr "解析域名的默认策略。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1030 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1021 #: htdocs/luci-static/resources/view/homeproxy/server.js:308 msgid "The QUIC connection-level flow control window for receiving data." msgstr "用于接收数据的 QUIC 连接级流控制窗口。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1024 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1015 #: htdocs/luci-static/resources/view/homeproxy/server.js:301 msgid "The QUIC stream-level flow control window for receiving data." msgstr "用于接收数据的 QUIC 流级流控制窗口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:534 +#: htdocs/luci-static/resources/view/homeproxy/client.js:528 msgid "The URL to test." msgstr "用于测试的 URL。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:981 +#: htdocs/luci-static/resources/view/homeproxy/client.js:975 msgid "The address of the dns server." msgstr "DNS 服务器的地址。" @@ -2604,7 +2593,7 @@ msgid "" msgstr "" "用于 ACME TLS-ALPN 质询的备用端口; 系统必须将 443 转发到此端口以使质询成功。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:619 +#: htdocs/luci-static/resources/view/homeproxy/client.js:613 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex || ip_cidr || " @@ -2621,7 +2610,7 @@ msgstr "" "source_port_range) &&
其他字段。此外,包含的所有规则" "集会被合并而不是独立生效。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1093 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex) &&
(port " @@ -2636,17 +2625,17 @@ msgstr "" ">(source_port || source_port_range) &&
其他字段。此外,包含的所有规则集会被合并而不是独立生效。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:242 +#: htdocs/luci-static/resources/view/homeproxy/client.js:243 msgid "" "The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT." msgstr "用于解析国内域名的 DNS 服务器。支持 UDP、TCP、DoH、DoQ、DoT。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:470 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1044 +#: htdocs/luci-static/resources/view/homeproxy/client.js:464 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1038 msgid "The domain strategy for resolving the domain name in the address." msgstr "用于解析本 DNS 服务器的域名的策略。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1495 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1486 #: htdocs/luci-static/resources/view/homeproxy/server.js:587 msgid "" "The elliptic curves that will be used in an ECDHE handshake, in preference " @@ -2659,17 +2648,17 @@ msgid "" "account." msgstr "创建或选择现有 ACME 服务器帐户时使用的电子邮件地址。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:766 +#: htdocs/luci-static/resources/view/homeproxy/client.js:760 msgid "" "The fallback value in milliseconds used when TLS segmentation cannot " "automatically determine the wait time." msgstr "当 TLS 分段无法自动确定等待时间时使用的回退值(单位:毫秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:577 +#: htdocs/luci-static/resources/view/homeproxy/client.js:571 msgid "The idle timeout in seconds." msgstr "空闲超时时间(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1487 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1478 #: htdocs/luci-static/resources/view/homeproxy/server.js:579 msgid "The maximum TLS version that is acceptable." msgstr "可接受的最高 TLS 版本。" @@ -2684,32 +2673,32 @@ msgstr "允许对等点打开的 QUIC 并发双向流的最大数量。" msgid "The maximum time difference between the server and the client." msgstr "服务器和客户端之间的最大时间差。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1479 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1470 #: htdocs/luci-static/resources/view/homeproxy/server.js:571 msgid "The minimum TLS version that is acceptable." msgstr "可接受的最低 TLS 版本。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:113 +#: htdocs/luci-static/resources/view/homeproxy/client.js:114 #: htdocs/luci-static/resources/view/homeproxy/server.js:130 msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64." msgstr "为 ARM64/AMD64 设计的现代 ImmortalWrt 代理平台。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:477 +#: htdocs/luci-static/resources/view/homeproxy/client.js:471 #: htdocs/luci-static/resources/view/homeproxy/server.js:875 msgid "The network interface to bind to." msgstr "绑定到的网络接口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:991 +#: htdocs/luci-static/resources/view/homeproxy/client.js:985 msgid "The path of the DNS server." msgstr "DNS 服务器的路径。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1529 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1520 msgid "" "The path to the ECH config, in PEM format. If empty, load from DNS will be " "attempted." msgstr "PEM 格式的 ECH 配置路径。如果为空,将尝试从 DNS 加载。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1508 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1499 msgid "The path to the server certificate, in PEM format." msgstr "服务端证书路径,需要 PEM 格式。" @@ -2717,11 +2706,11 @@ msgstr "服务端证书路径,需要 PEM 格式。" msgid "The port must be unique." msgstr "必须是唯一端口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:986 +#: htdocs/luci-static/resources/view/homeproxy/client.js:980 msgid "The port of the DNS server." msgstr "DNS 服务器的端口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1239 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1233 msgid "The response code." msgstr "响应代码。" @@ -2733,25 +2722,25 @@ msgstr "服务端私钥,需要 PEM 格式。" msgid "The server public key, in PEM format." msgstr "服务端公钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:484 +#: htdocs/luci-static/resources/view/homeproxy/client.js:478 msgid "" "The tag of the upstream outbound.
Other dial fields will be ignored when " "enabled." msgstr "上游出站的标签。
启用时,其他拨号字段将被忽略。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:164 -#: htdocs/luci-static/resources/view/homeproxy/client.js:193 -#: htdocs/luci-static/resources/view/homeproxy/client.js:554 +#: htdocs/luci-static/resources/view/homeproxy/client.js:165 +#: htdocs/luci-static/resources/view/homeproxy/client.js:194 +#: htdocs/luci-static/resources/view/homeproxy/client.js:548 msgid "The test interval in seconds." msgstr "测试间隔时间(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:170 -#: htdocs/luci-static/resources/view/homeproxy/client.js:199 -#: htdocs/luci-static/resources/view/homeproxy/client.js:570 +#: htdocs/luci-static/resources/view/homeproxy/client.js:171 +#: htdocs/luci-static/resources/view/homeproxy/client.js:200 +#: htdocs/luci-static/resources/view/homeproxy/client.js:564 msgid "The test tolerance in milliseconds." msgstr "测试容差时间(单位:毫秒)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1237 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1228 #: htdocs/luci-static/resources/view/homeproxy/server.js:465 msgid "" "The timeout (in seconds) that after performing a keepalive check, the client " @@ -2761,15 +2750,15 @@ msgstr "" "经过一段时间(单位:秒)之后,客户端将执行 keepalive 检查并等待活动。如果没有" "检测到任何活动,则会关闭连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1473 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1825 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1464 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1816 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" msgstr "" "这是危险行为,您的流量将几乎等同于明文!使用风险自负!" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1147 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1138 msgid "" "This is the TUIC port of the UDP over TCP protocol, designed to provide a " "QUIC stream based UDP relay mode that TUIC does not provide." @@ -2777,7 +2766,7 @@ msgstr "" "这是 TUIC 的 UDP over TCP 协议移植, 旨在提供 TUIC 不提供的基于 QUIC 流的 " "UDP 中继模式。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:244 +#: htdocs/luci-static/resources/view/homeproxy/client.js:245 msgid "ThreatBook Public DNS (DoH)" msgstr "微步 公共DNS (DoH)" @@ -2785,13 +2774,13 @@ msgstr "微步 公共DNS (DoH)" msgid "Timeout" msgstr "超时" -#: htdocs/luci-static/resources/view/homeproxy/client.js:746 +#: htdocs/luci-static/resources/view/homeproxy/client.js:740 msgid "" "Timeout for UDP connections.
Setting a larger value than the UDP timeout " "in inbounds will have no effect." msgstr "UDP 连接的超时时间。
设置比入站的 UDP 超时更大的值将无效。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:941 +#: htdocs/luci-static/resources/view/homeproxy/client.js:935 msgid "" "Timeout of rejected DNS response cache in seconds. 604800 (7d) " "is used by default." @@ -2806,18 +2795,18 @@ msgid "" msgstr "" "要与 Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:315 +#: htdocs/luci-static/resources/view/homeproxy/client.js:316 msgid "" "To enable Tun support, you need to install ip-full and " "kmod-tun" msgstr "" "要启用 Tun 支持,您需要安装 ip-fullkmod-tun。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:135 +#: htdocs/luci-static/resources/view/homeproxy/status.js:186 msgid "Trace" msgstr "跟踪" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1203 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1194 #: htdocs/luci-static/resources/view/homeproxy/server.js:399 msgid "Transport" msgstr "传输层" @@ -2832,130 +2821,134 @@ msgstr "Trojan" msgid "Tuic" msgstr "Tuic" -#: htdocs/luci-static/resources/view/homeproxy/client.js:313 +#: htdocs/luci-static/resources/view/homeproxy/client.js:314 msgid "Tun TCP/UDP" msgstr "Tun TCP/UDP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:970 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1357 +#: htdocs/luci-static/resources/view/homeproxy/client.js:964 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1351 #: htdocs/luci-static/resources/view/homeproxy/node.js:857 #: htdocs/luci-static/resources/view/homeproxy/server.js:175 msgid "Type" msgstr "类型" -#: htdocs/luci-static/resources/view/homeproxy/client.js:662 -#: htdocs/luci-static/resources/view/homeproxy/client.js:971 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1124 +#: htdocs/luci-static/resources/view/homeproxy/client.js:656 +#: htdocs/luci-static/resources/view/homeproxy/client.js:965 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1118 #: htdocs/luci-static/resources/view/homeproxy/server.js:868 msgid "UDP" msgstr "UDP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1597 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1588 #: htdocs/luci-static/resources/view/homeproxy/server.js:854 msgid "UDP Fragment" msgstr "UDP 分片" -#: htdocs/luci-static/resources/view/homeproxy/client.js:358 +#: htdocs/luci-static/resources/view/homeproxy/client.js:352 #: htdocs/luci-static/resources/view/homeproxy/server.js:859 msgid "UDP NAT expiration time" msgstr "UDP NAT 过期时间" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1601 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1592 msgid "UDP over TCP" msgstr "UDP over TCP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1146 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1137 msgid "UDP over stream" msgstr "UDP over stream" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1139 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1130 msgid "UDP packet relay mode." msgstr "UDP 包中继模式。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1138 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1129 msgid "UDP relay mode" msgstr "UDP 中继模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:745 +#: htdocs/luci-static/resources/view/homeproxy/client.js:739 msgid "UDP timeout" msgstr "UDP 超时" -#: htdocs/luci-static/resources/view/homeproxy/client.js:149 -#: htdocs/luci-static/resources/view/homeproxy/client.js:178 -#: htdocs/luci-static/resources/view/homeproxy/client.js:444 +#: htdocs/luci-static/resources/view/homeproxy/client.js:150 +#: htdocs/luci-static/resources/view/homeproxy/client.js:179 +#: htdocs/luci-static/resources/view/homeproxy/client.js:438 msgid "URLTest" msgstr "URLTest" -#: htdocs/luci-static/resources/view/homeproxy/client.js:156 -#: htdocs/luci-static/resources/view/homeproxy/client.js:185 -#: htdocs/luci-static/resources/view/homeproxy/client.js:519 +#: htdocs/luci-static/resources/view/homeproxy/client.js:157 +#: htdocs/luci-static/resources/view/homeproxy/client.js:186 +#: htdocs/luci-static/resources/view/homeproxy/client.js:513 msgid "URLTest nodes" msgstr "URLTest 节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:130 +#: htdocs/luci-static/resources/view/homeproxy/client.js:131 msgid "URLTest: %s" msgstr "URLTest: %s" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1120 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1111 #: htdocs/luci-static/resources/view/homeproxy/server.js:346 msgid "UUID" msgstr "UUID" -#: htdocs/luci-static/resources/view/homeproxy/status.js:98 +#: htdocs/luci-static/resources/view/homeproxy/status.js:151 msgid "Unknown error." msgstr "未知错误。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:195 +#: htdocs/luci-static/resources/view/homeproxy/status.js:246 msgid "Unknown error: %s" msgstr "未知错误:%s" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1565 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1556 msgid "Unsupported fingerprint!" msgstr "不支持的指纹!" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1849 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1840 msgid "Update %s subscriptions" msgstr "更新 %s 个订阅" -#: htdocs/luci-static/resources/view/homeproxy/status.js:89 +#: htdocs/luci-static/resources/view/homeproxy/status.js:160 +msgid "Update all" +msgstr "全部更新" + +#: htdocs/luci-static/resources/view/homeproxy/status.js:141 msgid "Update failed." msgstr "更新失败。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1415 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1410 msgid "Update interval" msgstr "更新间隔" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1416 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1411 msgid "Update interval of rule set." msgstr "规则集更新间隔。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1844 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1835 msgid "Update nodes from subscriptions" msgstr "从订阅更新节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1779 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1770 msgid "Update subscriptions via proxy." msgstr "使用代理更新订阅。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1778 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1769 msgid "Update via proxy" msgstr "使用代理更新" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1534 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1525 msgid "Upload ECH config" msgstr "上传 ECH 配置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1425 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1416 #: htdocs/luci-static/resources/view/homeproxy/server.js:523 msgid "Upload bandwidth" msgstr "上传带宽" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1426 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1417 #: htdocs/luci-static/resources/view/homeproxy/server.js:524 msgid "Upload bandwidth in Mbps." msgstr "上传带宽(单位:Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1515 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1506 #: htdocs/luci-static/resources/view/homeproxy/server.js:767 msgid "Upload certificate" msgstr "上传证书" @@ -2964,8 +2957,8 @@ msgstr "上传证书" msgid "Upload key" msgstr "上传密钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1518 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1537 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1509 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1528 #: htdocs/luci-static/resources/view/homeproxy/server.js:770 #: htdocs/luci-static/resources/view/homeproxy/server.js:789 msgid "Upload..." @@ -2975,23 +2968,23 @@ msgstr "上传..." msgid "Use ACME TLS certificate issuer." msgstr "使用 ACME TLS 证书颁发机构。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1461 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1452 #: htdocs/luci-static/resources/view/homeproxy/server.js:561 msgid "" "Used to verify the hostname on the returned certificates unless insecure is " "given." msgstr "用于验证返回证书上的主机名。如允许不安全连接,此配置无效。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1004 +#: htdocs/luci-static/resources/view/homeproxy/client.js:998 msgid "Used to verify the hostname on the returned certificates." msgstr "用于验证返回证书上的主机名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:665 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1138 +#: htdocs/luci-static/resources/view/homeproxy/client.js:659 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1132 msgid "User" msgstr "用户" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1819 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1810 msgid "User-Agent" msgstr "用户代理" @@ -3010,25 +3003,29 @@ msgstr "VLESS" msgid "VMess" msgstr "VMess" -#: htdocs/luci-static/resources/view/homeproxy/client.js:206 -#: htdocs/luci-static/resources/view/homeproxy/client.js:243 +#: htdocs/luci-static/resources/view/homeproxy/status.js:103 +msgid "Version" +msgstr "版本" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:207 +#: htdocs/luci-static/resources/view/homeproxy/client.js:244 msgid "WAN DNS (read from interface)" msgstr "WAN DNS(从接口获取)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1487 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1482 msgid "WAN IP Policy" msgstr "WAN IP 策略" -#: htdocs/luci-static/resources/view/homeproxy/status.js:138 +#: htdocs/luci-static/resources/view/homeproxy/status.js:189 msgid "Warn" msgstr "警告" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1210 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1201 #: htdocs/luci-static/resources/view/homeproxy/server.js:406 msgid "WebSocket" msgstr "WebSocket" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1810 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1801 msgid "Whitelist mode" msgstr "白名单模式" @@ -3036,24 +3033,20 @@ msgstr "白名单模式" msgid "WireGuard" msgstr "WireGuard" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1342 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1333 msgid "WireGuard peer public key." msgstr "WireGuard 对端公钥。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1349 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1340 msgid "WireGuard pre-shared key." msgstr "WireGuard 预共享密钥。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1334 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1325 msgid "WireGuard requires base64-encoded private keys." msgstr "WireGuard 要求 base64 编码的私钥。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:928 -msgid "Write proxy protocol in the connection header." -msgstr "在连接头中写入代理协议。" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:1319 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1832 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1310 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1823 msgid "Xudp (Xray-core)" msgstr "Xudp (Xray-core)" @@ -3065,17 +3058,17 @@ msgstr "您的 %s 已成功上传。大小:%sB。" msgid "ZeroSSL" msgstr "ZeroSSL" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1520 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1511 #: htdocs/luci-static/resources/view/homeproxy/server.js:772 msgid "certificate" msgstr "证书" -#: htdocs/luci-static/resources/view/homeproxy/client.js:739 +#: htdocs/luci-static/resources/view/homeproxy/client.js:733 msgid "connect UDP connections" msgstr "主动连接 UDP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1480 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1488 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1471 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1479 #: htdocs/luci-static/resources/view/homeproxy/server.js:572 #: htdocs/luci-static/resources/view/homeproxy/server.js:580 msgid "default" @@ -3085,44 +3078,44 @@ msgstr "默认" msgid "failed" msgstr "失败" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1206 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1197 #: htdocs/luci-static/resources/view/homeproxy/server.js:402 msgid "gRPC" msgstr "gRPC" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1248 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1239 msgid "gRPC permit without stream" msgstr "gRPC 允许无活动连接" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1243 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1234 #: htdocs/luci-static/resources/view/homeproxy/server.js:430 msgid "gRPC service name" msgstr "gRPC 服务名称" -#: htdocs/luci-static/resources/view/homeproxy/client.js:334 +#: htdocs/luci-static/resources/view/homeproxy/client.js:335 msgid "gVisor" msgstr "gVisor" #: htdocs/luci-static/resources/homeproxy.js:306 #: htdocs/luci-static/resources/homeproxy.js:326 -#: htdocs/luci-static/resources/view/homeproxy/client.js:219 -#: htdocs/luci-static/resources/view/homeproxy/client.js:253 -#: htdocs/luci-static/resources/view/homeproxy/client.js:527 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1380 +#: htdocs/luci-static/resources/view/homeproxy/client.js:220 +#: htdocs/luci-static/resources/view/homeproxy/client.js:254 +#: htdocs/luci-static/resources/view/homeproxy/client.js:521 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1374 #: htdocs/luci-static/resources/view/homeproxy/node.js:918 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1561 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1552 #: htdocs/luci-static/resources/view/homeproxy/server.js:235 msgid "non-empty value" msgstr "非空值" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1061 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1317 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1830 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1052 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1308 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1821 msgid "none" msgstr "无" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1318 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1831 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1309 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1822 msgid "packet addr (v2ray-core v5+)" msgstr "packet addr (v2ray-core v5+)" @@ -3134,23 +3127,23 @@ msgstr "通过" msgid "private key" msgstr "私钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:654 +#: htdocs/luci-static/resources/view/homeproxy/client.js:648 msgid "quic-go / uquic chrome" msgstr "quic-go / uquic chrome" -#: htdocs/luci-static/resources/view/homeproxy/status.js:285 +#: htdocs/luci-static/resources/view/homeproxy/status.js:323 msgid "sing-box client" msgstr "sing-box 客户端" -#: htdocs/luci-static/resources/view/homeproxy/status.js:288 +#: htdocs/luci-static/resources/view/homeproxy/status.js:326 msgid "sing-box server" msgstr "sing-box 服务端" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1543 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1534 msgid "uTLS fingerprint" msgstr "uTLS 指纹" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1544 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1535 msgid "" "uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting " "resistance." @@ -3162,7 +3155,7 @@ msgid "unchecked" msgstr "未检查" #: htdocs/luci-static/resources/homeproxy.js:237 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1735 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1726 msgid "unique UCI identifier" msgstr "独立 UCI 标识" @@ -3170,35 +3163,33 @@ msgstr "独立 UCI 标识" msgid "unique value" msgstr "独立值" -#: htdocs/luci-static/resources/view/homeproxy/node.js:930 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1075 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1608 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1066 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1599 msgid "v1" msgstr "v1" -#: htdocs/luci-static/resources/view/homeproxy/node.js:931 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1076 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1609 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1067 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1600 msgid "v2" msgstr "v2" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1077 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1068 msgid "v3" msgstr "v3" -#: htdocs/luci-static/resources/view/homeproxy/client.js:231 -#: htdocs/luci-static/resources/view/homeproxy/client.js:235 -#: htdocs/luci-static/resources/view/homeproxy/client.js:264 -#: htdocs/luci-static/resources/view/homeproxy/client.js:268 +#: htdocs/luci-static/resources/view/homeproxy/client.js:232 +#: htdocs/luci-static/resources/view/homeproxy/client.js:236 +#: htdocs/luci-static/resources/view/homeproxy/client.js:265 +#: htdocs/luci-static/resources/view/homeproxy/client.js:269 msgid "valid DNS server address" msgstr "有效 DNS 服务器地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:541 -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1385 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1388 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1796 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1799 +#: htdocs/luci-static/resources/view/homeproxy/client.js:535 +#: htdocs/luci-static/resources/view/homeproxy/client.js:538 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1379 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1382 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1787 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1790 msgid "valid URL" msgstr "有效网址" @@ -3206,8 +3197,8 @@ msgstr "有效网址" msgid "valid base64 key with %d characters" msgstr "包含 %d 个字符的有效 base64 密钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1530 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1562 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1525 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1557 msgid "valid hostname" msgstr "有效主机名" @@ -3215,7 +3206,7 @@ msgstr "有效主机名" msgid "valid port range (port1:port2)" msgstr "有效端口范围(port1:port2)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:297 +#: htdocs/luci-static/resources/view/homeproxy/client.js:298 msgid "valid port value" msgstr "有效端口值" diff --git a/homeproxy/root/etc/homeproxy/scripts/generate_client.uc b/homeproxy/root/etc/homeproxy/scripts/generate_client.uc index 5b8dbee3..d9d5aea9 100755 --- a/homeproxy/root/etc/homeproxy/scripts/generate_client.uc +++ b/homeproxy/root/etc/homeproxy/scripts/generate_client.uc @@ -14,7 +14,7 @@ import { cursor } from 'uci'; import { isEmpty, parseURL, strToBool, strToInt, strToTime, - removeBlankAttrs, validation, HP_DIR, RUN_DIR + removeBlankAttrs, renderEndpoint, renderOutbound, validation, HP_DIR, RUN_DIR } from 'homeproxy'; const ubus = connect(); @@ -117,8 +117,7 @@ const proxy_mode = uci.get(uciconfig, ucimain, 'proxy_mode') || 'redirect_tproxy const mixed_port = uci.get(uciconfig, uciinfra, 'mixed_port') || '5330'; let self_mark, redirect_port, tproxy_port, tun_name, - tun_addr4, tun_addr6, tun_mtu, tcpip_stack, - endpoint_independent_nat, udp_timeout; + tun_addr4, tun_addr6, tun_mtu, tcpip_stack, udp_timeout; if (routing_mode === 'custom') udp_timeout = uci.get(uciconfig, uciroutingsetting, 'udp_timeout'); @@ -140,7 +139,6 @@ if (match(proxy_mode, /tun/)) { tcpip_stack = 'system'; if (routing_mode === 'custom') { tcpip_stack = uci.get(uciconfig, uciroutingsetting, 'tcpip_stack') || 'system'; - endpoint_independent_nat = uci.get(uciconfig, uciroutingsetting, 'endpoint_independent_nat'); } } @@ -198,168 +196,10 @@ function filter_existing_nodes(nodes) { }); } -function generate_endpoint(node) { - if (type(node) !== 'object' || isEmpty(node)) - return null; - - const endpoint = { - type: node.type, - tag: 'cfg-' + node['.name'] + '-out', - address: node.wireguard_local_address, - mtu: strToInt(node.wireguard_mtu), - private_key: node.wireguard_private_key, - peers: (node.type === 'wireguard') ? [ - { - address: node.address, - port: strToInt(node.port), - allowed_ips: [ - '0.0.0.0/0', - '::/0' - ], - persistent_keepalive_interval: strToInt(node.wireguard_persistent_keepalive_interval), - public_key: node.wireguard_peer_public_key, - pre_shared_key: node.wireguard_pre_shared_key, - reserved: parse_port(node.wireguard_reserved), - } - ] : null, - system: (node.type === 'wireguard') ? false : null, - tcp_fast_open: strToBool(node.tcp_fast_open), - tcp_multi_path: strToBool(node.tcp_multi_path), - udp_fragment: strToBool(node.udp_fragment) - }; - - return endpoint; -} +const generate_endpoint = renderEndpoint; function generate_outbound(node) { - if (type(node) !== 'object' || isEmpty(node)) - return null; - - const tls_utls_value = (node.type === 'anytls' && isEmpty(node.tls_utls)) ? 'chrome' : node.tls_utls; - const outbound = { - type: node.type, - tag: 'cfg-' + node['.name'] + '-out', - routing_mark: strToInt(self_mark), - - server: node.address, - server_port: strToInt(node.port), - /* Hysteria(2) */ - server_ports: node.hysteria_hopping_port, - - username: (node.type !== 'ssh') ? node.username : null, - user: (node.type === 'ssh') ? node.username : null, - password: node.password, - - /* Direct */ - override_address: node.override_address, - override_port: strToInt(node.override_port), - proxy_protocol: strToInt(node.proxy_protocol), - /* AnyTLS */ - idle_session_check_interval: strToTime(node.anytls_idle_session_check_interval), - idle_session_timeout: strToTime(node.anytls_idle_session_timeout), - min_idle_session: strToInt(node.anytls_min_idle_session), - /* Hysteria (2) */ - hop_interval: strToTime(node.hysteria_hop_interval), - up_mbps: strToInt(node.hysteria_up_mbps), - down_mbps: strToInt(node.hysteria_down_mbps), - obfs: node.hysteria_obfs_type ? { - type: node.hysteria_obfs_type, - password: node.hysteria_obfs_password - } : node.hysteria_obfs_password, - auth: (node.hysteria_auth_type === 'base64') ? node.hysteria_auth_payload : null, - auth_str: (node.hysteria_auth_type === 'string') ? node.hysteria_auth_payload : null, - recv_window_conn: strToInt(node.hysteria_recv_window_conn), - recv_window: strToInt(node.hysteria_revc_window), - disable_mtu_discovery: strToBool(node.hysteria_disable_mtu_discovery), - /* Shadowsocks */ - method: node.shadowsocks_encrypt_method, - plugin: node.shadowsocks_plugin, - plugin_opts: node.shadowsocks_plugin_opts, - /* ShadowTLS / Socks */ - version: (node.type === 'shadowtls') ? strToInt(node.shadowtls_version) : ((node.type === 'socks') ? node.socks_version : null), - /* SSH */ - client_version: node.ssh_client_version, - host_key: node.ssh_host_key, - host_key_algorithms: node.ssh_host_key_algo, - private_key: node.ssh_priv_key, - private_key_passphrase: node.ssh_priv_key_pp, - /* Tuic */ - uuid: node.uuid, - congestion_control: node.tuic_congestion_control, - udp_relay_mode: node.tuic_udp_relay_mode, - udp_over_stream: strToBool(node.tuic_udp_over_stream), - zero_rtt_handshake: strToBool(node.tuic_enable_zero_rtt), - heartbeat: strToTime(node.tuic_heartbeat), - /* VLESS / VMess */ - flow: node.vless_flow, - alter_id: strToInt(node.vmess_alterid), - security: node.vmess_encrypt, - global_padding: strToBool(node.vmess_global_padding), - authenticated_length: strToBool(node.vmess_authenticated_length), - packet_encoding: node.packet_encoding, - - multiplex: (node.multiplex === '1') ? { - enabled: true, - protocol: node.multiplex_protocol, - max_connections: strToInt(node.multiplex_max_connections), - min_streams: strToInt(node.multiplex_min_streams), - max_streams: strToInt(node.multiplex_max_streams), - padding: strToBool(node.multiplex_padding), - brutal: (node.multiplex_brutal === '1') ? { - enabled: true, - up_mbps: strToInt(node.multiplex_brutal_up), - down_mbps: strToInt(node.multiplex_brutal_down) - } : null - } : null, - tls: (node.tls === '1') ? { - enabled: true, - server_name: node.tls_sni, - insecure: strToBool(node.tls_insecure), - alpn: node.tls_alpn, - min_version: node.tls_min_version, - max_version: node.tls_max_version, - cipher_suites: node.tls_cipher_suites, - certificate_path: node.tls_cert_path, - ech: (node.tls_ech === '1') ? { - enabled: true, - config: node.tls_ech_config, - config_path: node.tls_ech_config_path - } : null, - utls: !isEmpty(tls_utls_value) ? { - enabled: true, - fingerprint: tls_utls_value - } : null, - reality: (node.tls_reality === '1') ? { - enabled: true, - public_key: node.tls_reality_public_key, - short_id: node.tls_reality_short_id - } : null - } : null, - transport: !isEmpty(node.transport) ? { - type: node.transport, - host: node.http_host || node.httpupgrade_host, - path: node.http_path || node.ws_path, - headers: node.ws_host ? { - Host: node.ws_host - } : null, - method: node.http_method, - max_early_data: strToInt(node.websocket_early_data), - early_data_header_name: node.websocket_early_data_header, - service_name: node.grpc_servicename, - idle_timeout: strToTime(node.http_idle_timeout), - ping_timeout: strToTime(node.http_ping_timeout), - permit_without_stream: strToBool(node.grpc_permit_without_stream) - } : null, - udp_over_tcp: (node.udp_over_tcp === '1') ? { - enabled: true, - version: strToInt(node.udp_over_tcp_version) - } : null, - tcp_fast_open: strToBool(node.tcp_fast_open), - tcp_multi_path: strToBool(node.tcp_multi_path), - udp_fragment: strToBool(node.udp_fragment) - }; - - return outbound; + return renderOutbound(node, self_mark); } function get_outbound(cfg) { @@ -586,7 +426,6 @@ if (!isEmpty(main_node)) { rule_set_ip_cidr_match_source: strToBool(cfg.rule_set_ip_cidr_match_source), rule_set_ip_cidr_accept_empty: strToBool(cfg.rule_set_ip_cidr_accept_empty), invert: strToBool(cfg.invert), - outbound: get_outbound(cfg.outbound), action: cfg.action, server: get_resolver(cfg.server), strategy: cfg.domain_strategy, @@ -655,7 +494,6 @@ if (match(proxy_mode, /tun/)) address: (ipv6_support === '1') ? [tun_addr4, tun_addr6] : [tun_addr4], mtu: strToInt(tun_mtu), auto_route: false, - endpoint_independent_nat: strToBool(endpoint_independent_nat), udp_timeout: strToTime(udp_timeout), stack: tcpip_stack }); @@ -865,7 +703,6 @@ config.route = { if (!isEmpty(main_node)) { /* Avoid DNS loop */ config.route.default_domain_resolver = { - action: 'route', server: (routing_mode === 'bypass_mainland_china') ? 'china-dns' : 'default-dns', strategy: (ipv6_support !== '1') ? 'prefer_ipv4' : null }; @@ -919,21 +756,21 @@ if (!isEmpty(main_node)) { tag: 'geoip-cn', format: 'binary', url: 'https://fastly.jsdelivr.net/gh/1715173329/IPCIDR-CHINA@rule-set/cn.srs', - download_detour: 'main-out' + download_detour: 'direct-out' }); push(config.route.rule_set, { type: 'remote', tag: 'geosite-cn', format: 'binary', url: 'https://fastly.jsdelivr.net/gh/1715173329/sing-geosite@rule-set-unstable/geosite-geolocation-cn.srs', - download_detour: 'main-out' + download_detour: 'direct-out' }); push(config.route.rule_set, { type: 'remote', tag: 'geosite-noncn', format: 'binary', url: 'https://fastly.jsdelivr.net/gh/1715173329/sing-geosite@rule-set-unstable/geosite-geolocation-!cn.srs', - download_detour: 'main-out' + download_detour: 'direct-out' }); } @@ -941,7 +778,6 @@ if (!isEmpty(main_node)) { config.route.rule_set = null; } else if (!isEmpty(default_outbound)) { config.route.default_domain_resolver = { - action: 'resolve', server: get_resolver(default_outbound_dns) }; @@ -1004,7 +840,7 @@ if (!isEmpty(main_node)) { format: cfg.format, path: cfg.path, url: cfg.url, - download_detour: get_outbound(cfg.outbound), + download_detour: get_outbound(cfg.outbound) || ((cfg.type === 'remote') ? 'direct-out' : null), update_interval: cfg.update_interval }); }); @@ -1019,7 +855,7 @@ if (routing_mode in ['bypass_mainland_china', 'custom']) { }, cache_file: { enabled: true, - path: RUN_DIR + '/cache.db', + path: HP_DIR + '/cache/cache.db', store_rdrc: strToBool(cache_file_store_rdrc), rdrc_timeout: strToTime(cache_file_rdrc_timeout), } @@ -1028,4 +864,5 @@ if (routing_mode in ['bypass_mainland_china', 'custom']) { /* Experimental end */ system('mkdir -p ' + RUN_DIR); -writefile(RUN_DIR + '/sing-box-c.json', sprintf('%.J\n', removeBlankAttrs(config))); +if (!writefile(RUN_DIR + '/sing-box-c.json.new', sprintf('%.J\n', removeBlankAttrs(config)))) + exit(1); diff --git a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc index 224d7250..550603b5 100755 --- a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc +++ b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc @@ -129,7 +129,7 @@ uci.foreach(uciconfig, uciserver, (cfg) => { email: cfg.tls_acme_email, provider: cfg.tls_acme_provider, disable_http_challenge: strToBool(cfg.tls_acme_dhc), - disable_tls_alpn_challenge: (cfg.tls_acme_dtac), + disable_tls_alpn_challenge: strToBool(cfg.tls_acme_dtac), alternative_http_port: strToInt(cfg.tls_acme_ahp), alternative_tls_port: strToInt(cfg.tls_acme_atp), external_account: (cfg.tls_acme_external_account === '1') ? { @@ -182,4 +182,5 @@ if (length(config.inbounds) === 0) exit(1); system('mkdir -p ' + RUN_DIR); -writefile(RUN_DIR + '/sing-box-s.json', sprintf('%.J\n', removeBlankAttrs(config))); +if (!writefile(RUN_DIR + '/sing-box-s.json.new', sprintf('%.J\n', removeBlankAttrs(config)))) + exit(1); diff --git a/homeproxy/root/etc/homeproxy/scripts/homeproxy.uc b/homeproxy/root/etc/homeproxy/scripts/homeproxy.uc index fb274320..de326876 100755 --- a/homeproxy/root/etc/homeproxy/scripts/homeproxy.uc +++ b/homeproxy/root/etc/homeproxy/scripts/homeproxy.uc @@ -95,6 +95,161 @@ export function strToTime(str) { return !isEmpty(str) ? (str + 's') : null; }; +function strListToInts(value) { + if (type(value) !== 'array' || isEmpty(value)) + return null; + + return map(value, (item) => int(item)); +}; + +export function renderEndpoint(node) { + if (type(node) !== 'object' || isEmpty(node)) + return null; + + return { + type: node.type, + tag: 'cfg-' + node['.name'] + '-out', + address: node.wireguard_local_address, + mtu: strToInt(node.wireguard_mtu), + private_key: node.wireguard_private_key, + peers: (node.type === 'wireguard') ? [ + { + address: node.address, + port: strToInt(node.port), + allowed_ips: [ + '0.0.0.0/0', + '::/0' + ], + persistent_keepalive_interval: strToInt(node.wireguard_persistent_keepalive_interval), + public_key: node.wireguard_peer_public_key, + pre_shared_key: node.wireguard_pre_shared_key, + reserved: strListToInts(node.wireguard_reserved) + } + ] : null, + system: (node.type === 'wireguard') ? false : null, + tcp_fast_open: strToBool(node.tcp_fast_open), + tcp_multi_path: strToBool(node.tcp_multi_path), + udp_fragment: strToBool(node.udp_fragment) + }; +}; + +export function renderOutbound(node, routingMark) { + if (type(node) !== 'object' || isEmpty(node)) + return null; + + const tls_utls_value = (node.type === 'anytls' && isEmpty(node.tls_utls)) ? 'chrome' : node.tls_utls; + return { + type: node.type, + tag: 'cfg-' + node['.name'] + '-out', + routing_mark: strToInt(routingMark), + + server: node.address, + server_port: strToInt(node.port), + server_ports: node.hysteria_hopping_port, + + username: (node.type !== 'ssh') ? node.username : null, + user: (node.type === 'ssh') ? node.username : null, + password: node.password, + + idle_session_check_interval: strToTime(node.anytls_idle_session_check_interval), + idle_session_timeout: strToTime(node.anytls_idle_session_timeout), + min_idle_session: strToInt(node.anytls_min_idle_session), + hop_interval: strToTime(node.hysteria_hop_interval), + up_mbps: strToInt(node.hysteria_up_mbps), + down_mbps: strToInt(node.hysteria_down_mbps), + obfs: node.hysteria_obfs_type ? { + type: node.hysteria_obfs_type, + password: node.hysteria_obfs_password + } : node.hysteria_obfs_password, + auth: (node.hysteria_auth_type === 'base64') ? node.hysteria_auth_payload : null, + auth_str: (node.hysteria_auth_type === 'string') ? node.hysteria_auth_payload : null, + recv_window_conn: strToInt(node.hysteria_recv_window_conn), + recv_window: strToInt(node.hysteria_revc_window), + disable_mtu_discovery: strToBool(node.hysteria_disable_mtu_discovery), + method: node.shadowsocks_encrypt_method, + plugin: node.shadowsocks_plugin, + plugin_opts: node.shadowsocks_plugin_opts, + version: (node.type === 'shadowtls') ? strToInt(node.shadowtls_version) : ((node.type === 'socks') ? node.socks_version : null), + client_version: node.ssh_client_version, + host_key: node.ssh_host_key, + host_key_algorithms: node.ssh_host_key_algo, + private_key: node.ssh_priv_key, + private_key_passphrase: node.ssh_priv_key_pp, + uuid: node.uuid, + congestion_control: node.tuic_congestion_control, + udp_relay_mode: node.tuic_udp_relay_mode, + udp_over_stream: strToBool(node.tuic_udp_over_stream), + zero_rtt_handshake: strToBool(node.tuic_enable_zero_rtt), + heartbeat: strToTime(node.tuic_heartbeat), + flow: node.vless_flow, + alter_id: strToInt(node.vmess_alterid), + security: node.vmess_encrypt, + global_padding: strToBool(node.vmess_global_padding), + authenticated_length: strToBool(node.vmess_authenticated_length), + packet_encoding: node.packet_encoding, + + multiplex: (node.multiplex === '1') ? { + enabled: true, + protocol: node.multiplex_protocol, + max_connections: strToInt(node.multiplex_max_connections), + min_streams: strToInt(node.multiplex_min_streams), + max_streams: strToInt(node.multiplex_max_streams), + padding: strToBool(node.multiplex_padding), + brutal: (node.multiplex_brutal === '1') ? { + enabled: true, + up_mbps: strToInt(node.multiplex_brutal_up), + down_mbps: strToInt(node.multiplex_brutal_down) + } : null + } : null, + tls: (node.tls === '1') ? { + enabled: true, + server_name: node.tls_sni, + insecure: strToBool(node.tls_insecure), + alpn: node.tls_alpn, + min_version: node.tls_min_version, + max_version: node.tls_max_version, + cipher_suites: node.tls_cipher_suites, + certificate_path: node.tls_cert_path, + ech: (node.tls_ech === '1') ? { + enabled: true, + config: node.tls_ech_config, + config_path: node.tls_ech_config_path + } : null, + utls: !isEmpty(tls_utls_value) ? { + enabled: true, + fingerprint: tls_utls_value + } : null, + reality: (node.tls_reality === '1') ? { + enabled: true, + public_key: node.tls_reality_public_key, + short_id: node.tls_reality_short_id + } : null + } : null, + transport: !isEmpty(node.transport) ? { + type: node.transport, + host: node.http_host || node.httpupgrade_host, + path: node.http_path || node.ws_path, + headers: node.ws_host ? { + Host: node.ws_host + } : null, + method: node.http_method, + max_early_data: strToInt(node.websocket_early_data), + early_data_header_name: node.websocket_early_data_header, + service_name: node.grpc_servicename, + idle_timeout: strToTime(node.http_idle_timeout), + ping_timeout: strToTime(node.http_ping_timeout), + permit_without_stream: strToBool(node.grpc_permit_without_stream) + } : null, + udp_over_tcp: (node.udp_over_tcp === '1') ? { + enabled: true, + version: strToInt(node.udp_over_tcp_version) + } : null, + tcp_fast_open: strToBool(node.tcp_fast_open), + tcp_multi_path: strToBool(node.tcp_multi_path), + udp_fragment: strToBool(node.udp_fragment) + }; +}; + export function removeBlankAttrs(res) { let content; diff --git a/homeproxy/root/etc/homeproxy/scripts/migrate_config.uc b/homeproxy/root/etc/homeproxy/scripts/migrate_config.uc index 88a3b0e3..7cde78f7 100755 --- a/homeproxy/root/etc/homeproxy/scripts/migrate_config.uc +++ b/homeproxy/root/etc/homeproxy/scripts/migrate_config.uc @@ -55,6 +55,10 @@ if (!uci.get(uciconfig, uciinfra, 'ntp_server')) if (!isEmpty(uci.get(uciconfig, uciinfra, 'tun_gso'))) uci.delete(uciconfig, uciinfra, 'tun_gso'); +/* endpoint_independent_nat has been removed */ +if (!isEmpty(uci.get(uciconfig, ucirouting, 'endpoint_independent_nat'))) + uci.delete(uciconfig, ucirouting, 'endpoint_independent_nat'); + /* create migration section */ if (!uci.get(uciconfig, ucimigration)) uci.set(uciconfig, ucimigration, uciconfig); @@ -99,6 +103,9 @@ uci.foreach(uciconfig, ucidnsserver, (cfg) => { /* legacy format was deprecated in sb 1.12 */ if (cfg.address) { const addr = parseURL((!match(cfg.address, /:\/\//) ? 'udp://' : '') + (validation('ip6addr', cfg.address) ? `[${cfg.address}]` : cfg.address)); + if (!addr) + return; + /* RCode was moved into DNS rules */ if (addr.protocol === 'rcode') { dns_server_migration[cfg['.name']] = { action: 'predefined' }; @@ -157,10 +164,11 @@ uci.foreach(uciconfig, ucidnsrule, (cfg) => { /* outbound was removed in sb 1.12 */ if (cfg.outbound) { uci.delete(uciconfig, cfg['.name']); - if (!cfg.enabled) + if (cfg.enabled !== '1') return; - map(cfg.outbound, (outbound) => { + const outbounds = (type(cfg.outbound) === 'array') ? cfg.outbound : [ cfg.outbound ]; + for (let outbound in outbounds) { switch (outbound) { case 'direct-out': case 'block-out': @@ -169,16 +177,16 @@ uci.foreach(uciconfig, ucidnsrule, (cfg) => { uci.set(uciconfig, ucirouting, 'default_outbound_dns', cfg.server); break; default: - uci.set(uciconfig, cfg.outbound, 'domain_resolver', cfg.server); - break; + uci.set(uciconfig, outbound, 'domain_resolver', cfg.server); + break; } - }); + } return; } /* rule_set_ipcidr_match_source was renamed in sb 1.10 */ - if (cfg.rule_set_ipcidr_match_source === '1') + if (!isEmpty(cfg.rule_set_ipcidr_match_source)) uci.rename(uciconfig, cfg['.name'], 'rule_set_ipcidr_match_source', 'rule_set_ip_cidr_match_source'); /* block-dns was moved into action in sb 1.11 */ @@ -208,6 +216,11 @@ uci.foreach(uciconfig, ucidnsrule, (cfg) => { /* nodes options */ uci.foreach(uciconfig, ucinode, (cfg) => { + /* destination override and Proxy Protocol were removed from direct outbound */ + for (let option in ['override_address', 'override_port', 'proxy_protocol']) + if (!isEmpty(cfg[option])) + uci.delete(uciconfig, cfg['.name'], option); + /* tls_ech_tls_disable_drs is useless and deprecated in sb 1.12 */ if (!isEmpty(cfg.tls_ech_tls_disable_drs)) uci.delete(uciconfig, cfg['.name'], 'tls_ech_tls_disable_drs'); @@ -224,7 +237,7 @@ uci.foreach(uciconfig, ucinode, (cfg) => { /* routing rules options */ uci.foreach(uciconfig, uciroutingrule, (cfg) => { /* rule_set_ipcidr_match_source was renamed in sb 1.10 */ - if (cfg.rule_set_ipcidr_match_source === '1') + if (!isEmpty(cfg.rule_set_ipcidr_match_source)) uci.rename(uciconfig, cfg['.name'], 'rule_set_ipcidr_match_source', 'rule_set_ip_cidr_match_source'); /* block-out was moved into action in sb 1.11 */ diff --git a/homeproxy/root/etc/homeproxy/scripts/update_crond.sh b/homeproxy/root/etc/homeproxy/scripts/update_crond.sh index d3c608ab..1cf89585 100755 --- a/homeproxy/root/etc/homeproxy/scripts/update_crond.sh +++ b/homeproxy/root/etc/homeproxy/scripts/update_crond.sh @@ -5,8 +5,6 @@ SCRIPTS_DIR="/etc/homeproxy/scripts" -for i in "china_ip4" "china_ip6" "gfw_list" "china_list"; do - "$SCRIPTS_DIR"/update_resources.sh "$i" -done +"$SCRIPTS_DIR"/update_resources.sh "$SCRIPTS_DIR"/update_subscriptions.uc diff --git a/homeproxy/root/etc/homeproxy/scripts/update_resources.sh b/homeproxy/root/etc/homeproxy/scripts/update_resources.sh index 85e4e170..2a6a0fe8 100755 --- a/homeproxy/root/etc/homeproxy/scripts/update_resources.sh +++ b/homeproxy/root/etc/homeproxy/scripts/update_resources.sh @@ -5,85 +5,102 @@ NAME="homeproxy" -RESOURCES_DIR="/etc/$NAME/resources" -mkdir -p "$RESOURCES_DIR" - -RUN_DIR="/var/run/$NAME" +RESOURCES_DIR="${RESOURCES_DIR:-/etc/$NAME/resources}" +RUN_DIR="${RUN_DIR:-/var/run/$NAME}" LOG_PATH="$RUN_DIR/$NAME.log" -mkdir -p "$RUN_DIR" +REPO_NAME="Loyalsoldier/surge-rules" +REPO_BRANCH="release" +SOURCE_BASE="${SOURCE_BASE:-https://cdn.jsdelivr.net/gh/$REPO_NAME@$REPO_BRANCH}" +RELEASE_API="${RELEASE_API:-https://api.github.com/repos/$REPO_NAME/releases/latest}" + +mkdir -p "$RESOURCES_DIR" "$RUN_DIR" log() { - echo -e "$(date "+%Y-%m-%d %H:%M:%S") $*" >> "$LOG_PATH" + printf '%s %s\n' "$(date "+%Y-%m-%d %H:%M:%S")" "$*" >> "$LOG_PATH" } to_upper() { - echo -e "$1" | tr "[a-z]" "[A-Z]" + printf '%s\n' "$1" | tr '[:lower:]' '[:upper:]' } -check_list_update() { - local LIST_FILE="$1" - local REPO_NAME="$2" - local REPO_BRANCH="$3" - local REPO_FILE="$4" - local LOCK_FILE="$RUN_DIR/update_resources-$LIST_FILE.lock" - local GITHUB_TOKEN="$(uci -q get homeproxy.config.github_token)" +download() { + local source_file="$1" + local target_file="$2" - exec 200>"$LOCK_FILE" - if ! flock -n 200 &> "/dev/null"; then - log "[$(to_upper "$LIST_FILE")] A task is already running." - return 2 - fi - - local NEW_VER=$(curl -sL ${GITHUB_TOKEN:+-H "Authorization: Bearer $GITHUB_TOKEN"} "https://api.github.com/repos/$REPO_NAME/releases/latest" | jsonfilter -e "@.tag_name") - if [ -z "$NEW_VER" ]; then - log "[$(to_upper "$LIST_FILE")] Failed to get the latest version, please retry later." - - return 1 - fi - - local OLD_VER=$(cat "$RESOURCES_DIR/$LIST_FILE.ver" 2>/dev/null || echo "NOT FOUND") - if [ "$OLD_VER" = "$NEW_VER" ]; then - log "[$(to_upper "$LIST_FILE")] Current version: $NEW_VER." - log "[$(to_upper "$LIST_FILE")] You're already at the latest version." - - return 3 - else - log "[$(to_upper "$LIST_FILE")] Local version: $OLD_VER, latest version: $NEW_VER." - fi - - if ! curl -sL -o "$RUN_DIR/$REPO_FILE" "https://cdn.jsdelivr.net/gh/$REPO_NAME@$REPO_BRANCH/$REPO_FILE" || [ ! -s "$RUN_DIR/$REPO_FILE" ]; then - rm -f "$RUN_DIR/$REPO_FILE" - log "[$(to_upper "$LIST_FILE")] Update failed." - - return 1 - fi - - mv -f "$RUN_DIR/$REPO_FILE" "$RESOURCES_DIR/$LIST_FILE.${REPO_FILE##*.}" - echo -e "$NEW_VER" > "$RESOURCES_DIR/$LIST_FILE.ver" - log "[$(to_upper "$LIST_FILE")] Successfully updated." - - return 0 + curl -fsSL --retry 2 --connect-timeout 10 --max-time 60 \ + -o "$target_file" "$SOURCE_BASE/$source_file" && [ -s "$target_file" ] } -case "$1" in -"china_ip4") - check_list_update "$1" "Loyalsoldier/surge-rules" "release" "cncidr.txt" && \ - sed -i "/IP-CIDR6,/d; s/IP-CIDR,//g" "$RESOURCES_DIR/china_ip4.txt" - ;; -"china_ip6") - check_list_update "$1" "Loyalsoldier/surge-rules" "release" "cncidr.txt" && \ - sed -i "/IP-CIDR,/d; s/IP-CIDR6,//g" "$RESOURCES_DIR/china_ip6.txt" - ;; -"gfw_list") - check_list_update "$1" "Loyalsoldier/surge-rules" "release" "gfw.txt" && \ - sed -i "s/^\.//g" "$RESOURCES_DIR/gfw_list.txt" - ;; -"china_list") - check_list_update "$1" "Loyalsoldier/surge-rules" "release" "direct.txt" && \ - sed -i "s/^\.//g" "$RESOURCES_DIR/china_list.txt" - ;; -*) - echo -e "Usage: $0 " +exec 9>"$RUN_DIR/update_resources.lock" +if ! flock -n 9 > "/dev/null" 2>&1; then + log "[RESOURCES] A task is already running." + exit 2 +fi + +GITHUB_TOKEN="${GITHUB_TOKEN:-$(uci -q get homeproxy.config.github_token)}" +if [ -n "$GITHUB_TOKEN" ]; then + NEW_VER="$(curl -fsSL --retry 2 --connect-timeout 10 --max-time 30 \ + -H "Authorization: Bearer $GITHUB_TOKEN" \ + "$RELEASE_API" | jsonfilter -e "@.tag_name")" +else + NEW_VER="$(curl -fsSL --retry 2 --connect-timeout 10 --max-time 30 \ + "$RELEASE_API" | jsonfilter -e "@.tag_name")" +fi +if [ -z "$NEW_VER" ]; then + log "[RESOURCES] Failed to get the latest version, please retry later." exit 1 - ;; -esac \ No newline at end of file +fi + +CURRENT=1 +for RESOURCE in china_ip4 china_ip6 china_list gfw_list; do + OLD_VER="$(cat "$RESOURCES_DIR/$RESOURCE.ver" 2>/dev/null || echo "NOT FOUND")" + if [ "$OLD_VER" = "$NEW_VER" ]; then + log "[$(to_upper "$RESOURCE")] Current version: $NEW_VER." + else + CURRENT=0 + log "[$(to_upper "$RESOURCE")] Local version: $OLD_VER, latest version: $NEW_VER." + fi +done +[ "$CURRENT" -eq 0 ] || { + log "[RESOURCES] You're already at the latest version." + exit 3 +} + +TMP_DIR="$(mktemp -d "$RUN_DIR/resources-update.XXXXXX")" || exit 1 +trap 'rm -rf "$TMP_DIR"' EXIT INT TERM + +if ! download "cncidr.txt" "$TMP_DIR/cncidr.txt" || \ + ! download "direct.txt" "$TMP_DIR/china_list.txt" || \ + ! download "gfw.txt" "$TMP_DIR/gfw_list.txt"; then + log "[RESOURCES] Update failed while downloading source lists." + exit 1 +fi + +cp "$TMP_DIR/cncidr.txt" "$TMP_DIR/china_ip4.txt" && \ +cp "$TMP_DIR/cncidr.txt" "$TMP_DIR/china_ip6.txt" && \ +sed -i "/IP-CIDR6,/d; s/IP-CIDR,//g" "$TMP_DIR/china_ip4.txt" && \ +sed -i "/IP-CIDR,/d; s/IP-CIDR6,//g" "$TMP_DIR/china_ip6.txt" && \ +sed -i "s/^\\.//g" "$TMP_DIR/china_list.txt" "$TMP_DIR/gfw_list.txt" +if [ "$?" -ne 0 ]; then + log "[RESOURCES] Update failed while processing source lists." + exit 1 +fi + +for RESOURCE in china_ip4 china_ip6 china_list gfw_list; do + if [ ! -s "$TMP_DIR/$RESOURCE.txt" ] || grep -qi ' "$TMP_DIR/$RESOURCE.ver" || exit 1 +done + +for RESOURCE in china_ip4 china_ip6 china_list gfw_list; do + if ! mv -f "$TMP_DIR/$RESOURCE.txt" "$RESOURCES_DIR/$RESOURCE.txt" || \ + ! mv -f "$TMP_DIR/$RESOURCE.ver" "$RESOURCES_DIR/$RESOURCE.ver"; then + log "[$(to_upper "$RESOURCE")] Update failed: unable to replace list." + exit 1 + fi + log "[$(to_upper "$RESOURCE")] Successfully updated." +done + +exit 0 diff --git a/homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc b/homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc index e0b827a2..f5d43dd0 100755 --- a/homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc +++ b/homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc @@ -17,7 +17,7 @@ import { init_action } from 'luci.sys'; import { wGET, decodeBase64Str, getTime, isEmpty, parseURL, - validation, HP_DIR, RUN_DIR + shellQuote, validation, HP_DIR, RUN_DIR } from 'homeproxy'; /* UCI config start */ @@ -80,6 +80,18 @@ function log(...args) { logfile.close(); } +if (getenv('HOMEPROXY_SUBSCRIPTION_LOCKED') !== '1') { + const lock_path = `${RUN_DIR}/update_subscriptions.lock`; + const script_path = `${HP_DIR}/scripts/update_subscriptions.uc`; + const status = system(sprintf( + 'HOMEPROXY_SUBSCRIPTION_LOCKED=1 flock -n %s %s', + shellQuote(lock_path), shellQuote(script_path) + )); + if (status !== 0) + log('Subscription update did not complete; another task may be running.'); + exit(status); +} + function has_value(value) { return value !== null && value !== '' && value !== 'nil'; } @@ -1000,7 +1012,8 @@ function main() { const label = config.label; config.label = null; const confHash = md5(sprintf('%J', config)), - nameHash = md5(label); + nameHash = md5(groupHash + ':' + label), + legacyNameHash = md5(label); config.label = label; if (filter_check(config.label)) @@ -1018,6 +1031,7 @@ function main() { push(node_result[length(node_result)-1], config); node_cache[groupHash][confHash] = config; node_cache[groupHash][nameHash] = config; + node_cache[groupHash][legacyNameHash] = config; count++; } @@ -1040,7 +1054,7 @@ function main() { return false; } - let added = 0, removed = 0; + let added = 0, removed = 0, updated = 0; uci.foreach(uciconfig, ucinode, (cfg) => { /* Nodes created by the user */ if (!cfg.grouphash) @@ -1054,50 +1068,54 @@ function main() { uci.delete(uciconfig, cfg['.name']); removed++; - log(sprintf('Removing node: %s.', cfg.label || cfg['name'])); + log(sprintf('Removing node: %s.', cfg.label || cfg['.name'])); } else { - map(keys(cfg), (v) => { - if (v in node_cache[cfg.grouphash][cfg['.name']]) - uci.set(uciconfig, cfg['.name'], v, node_cache[cfg.grouphash][cfg['.name']][v]); - else - uci.delete(uciconfig, cfg['.name'], v); - }); - node_cache[cfg.grouphash][cfg['.name']].isExisting = true; + const next = node_cache[cfg.grouphash][cfg['.name']]; + for (let option in keys(cfg)) + if (!match(option, /^\./) && !(option in next)) + uci.delete(uciconfig, cfg['.name'], option); + + for (let option in keys(next)) + if (option !== 'isExisting') + uci.set(uciconfig, cfg['.name'], option, next[option]); + + next.isExisting = true; + updated++; } }); + for (let nodes in node_result) map(nodes, (node) => { if (node.isExisting) return null; - const nameHash = md5(node.label); + const nameHash = md5(node.grouphash + ':' + node.label); uci.set(uciconfig, nameHash, 'node'); map(keys(node), (v) => uci.set(uciconfig, nameHash, v, node[v])); added++; log(sprintf('Adding node: %s.', node.label)); }); - uci.commit(uciconfig); - let need_restart = (via_proxy !== '1'); if (!isEmpty(main_node)) { const first_server = uci.get_first(uciconfig, ucinode); if (first_server) { let main_urltest_nodes; if (main_node === 'urltest') { - main_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_urltest_nodes'), (v) => { + main_urltest_nodes = filter(normalize_list(uci.get(uciconfig, ucimain, 'main_urltest_nodes')) || [], (v) => { if (!uci.get(uciconfig, v)) { log(sprintf('Node %s is gone, removing from urltest list.', v)); return false; } return true; }); + if (length(main_urltest_nodes)) + uci.set(uciconfig, ucimain, 'main_urltest_nodes', main_urltest_nodes); } if ((main_node === 'urltest') ? !length(main_urltest_nodes) : !uci.get(uciconfig, main_node)) { uci.set(uciconfig, ucimain, 'main_node', first_server); - uci.commit(uciconfig); - need_restart = true; + uci.delete(uciconfig, ucimain, 'main_urltest_nodes'); log('Main node is gone, switching to the first node.'); } @@ -1105,19 +1123,20 @@ function main() { if (!isEmpty(main_udp_node) && main_udp_node !== 'same') { let main_udp_urltest_nodes; if (main_udp_node === 'urltest') { - main_udp_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_udp_urltest_nodes'), (v) => { + main_udp_urltest_nodes = filter(normalize_list(uci.get(uciconfig, ucimain, 'main_udp_urltest_nodes')) || [], (v) => { if (!uci.get(uciconfig, v)) { log(sprintf('Node %s is gone, removing from urltest list.', v)); return false; } return true; }); + if (length(main_udp_urltest_nodes)) + uci.set(uciconfig, ucimain, 'main_udp_urltest_nodes', main_udp_urltest_nodes); } if ((main_udp_node === 'urltest') ? !length(main_udp_urltest_nodes) : !uci.get(uciconfig, main_udp_node)) { uci.set(uciconfig, ucimain, 'main_udp_node', first_server); - uci.commit(uciconfig); - need_restart = true; + uci.delete(uciconfig, ucimain, 'main_udp_urltest_nodes'); log('Main UDP node is gone, switching to the first node.'); } @@ -1125,20 +1144,19 @@ function main() { } else { uci.set(uciconfig, ucimain, 'main_node', 'nil'); uci.set(uciconfig, ucimain, 'main_udp_node', 'nil'); - uci.commit(uciconfig); - need_restart = true; + uci.delete(uciconfig, ucimain, 'main_urltest_nodes'); + uci.delete(uciconfig, ucimain, 'main_udp_urltest_nodes'); log('No available node, disable tproxy.'); } } + uci.commit(uciconfig); - if (need_restart) { - log('Restarting service...'); - init_action('homeproxy', 'stop'); - init_action('homeproxy', 'start'); - } + log('Restarting service...'); + init_action('homeproxy', 'stop'); + init_action('homeproxy', 'start'); - log(sprintf('%s nodes added, %s removed.', added, removed)); + log(sprintf('%s nodes added, %s updated, %s removed.', added, updated, removed)); log('Successfully updated subscriptions.'); } diff --git a/homeproxy/root/etc/init.d/homeproxy b/homeproxy/root/etc/init.d/homeproxy index 03f4b672..44e291ca 100755 --- a/homeproxy/root/etc/init.d/homeproxy +++ b/homeproxy/root/etc/init.d/homeproxy @@ -14,6 +14,8 @@ PROG="/usr/bin/sing-box" HP_DIR="/etc/homeproxy" RUN_DIR="/var/run/homeproxy" LOG_PATH="$RUN_DIR/homeproxy.log" +CACHE_DIR="$HP_DIR/cache" +CACHE_PATH="$CACHE_DIR/cache.db" # we don't know which is the default server, just take the first one DNSMASQ_UCI_CONFIG="$(uci -q show "dhcp.@dnsmasq[0]" | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')" @@ -27,6 +29,23 @@ log() { echo -e "$(date "+%Y-%m-%d %H:%M:%S") [DAEMON] $*" >> "$LOG_PATH" } +validate_cron() { + local expression="$1" field + + case "$expression" in + ""|*[!0-9*/?,\ -]*) return 1 ;; + esac + + set -f + set -- $expression + set +f + [ "$#" -eq 5 ] || return 1 + + for field in "$@"; do + [ -n "$field" ] || return 1 + done +} + start_service() { config_load "$CONF" @@ -49,26 +68,65 @@ start_service() { fi mkdir -p "$RUN_DIR" + rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new" + # Generate and validate every enabled instance before changing system state. if [ "$outbound_node" != "nil" ]; then - # Generate/Validate client config - ucode -S "$HP_DIR/scripts/generate_client.uc" 2>>"$LOG_PATH" - - if [ ! -e "$RUN_DIR/sing-box-c.json" ]; then + if ! ucode -S "$HP_DIR/scripts/generate_client.uc" 2>>"$LOG_PATH" || \ + [ ! -s "$RUN_DIR/sing-box-c.json.new" ]; then log "Error: failed to generate client configuration." + rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new" return 1 - elif ! "$PROG" check --config "$RUN_DIR/sing-box-c.json" 2>>"$LOG_PATH"; then + elif ! "$PROG" check --config "$RUN_DIR/sing-box-c.json.new" 2>>"$LOG_PATH"; then log "Error: wrong client configuration detected." + rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new" return 1 fi + fi + if [ "$server_enabled" = "1" ]; then + if ! ucode -S "$HP_DIR/scripts/generate_server.uc" 2>>"$LOG_PATH" || \ + [ ! -s "$RUN_DIR/sing-box-s.json.new" ]; then + log "Error: failed to generate server configuration." + rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new" + return 1 + elif ! "$PROG" check --config "$RUN_DIR/sing-box-s.json.new" 2>>"$LOG_PATH"; then + log "Error: wrong server configuration detected." + rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new" + return 1 + fi + fi + + if { [ "$outbound_node" = "nil" ] || mv -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-c.json"; } && \ + { [ "$server_enabled" = "0" ] || mv -f "$RUN_DIR/sing-box-s.json.new" "$RUN_DIR/sing-box-s.json"; }; then + [ "$outbound_node" != "nil" ] || rm -f "$RUN_DIR/sing-box-c.json" + [ "$server_enabled" = "1" ] || rm -f "$RUN_DIR/sing-box-s.json" + else + log "Error: failed to install generated configuration." + rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new" + return 1 + fi + + case "$routing_mode" in + "bypass_mainland_china"|"custom") + mkdir -p "$CACHE_DIR" + touch "$CACHE_PATH" + chown -R sing-box:sing-box "$CACHE_DIR" + ;; + esac + + if [ "$outbound_node" != "nil" ]; then # Auto update local auto_update auto_update_time config_get_bool auto_update "subscription" "auto_update" "0" if [ "$auto_update" = "1" ]; then config_get auto_update_time "subscription" "auto_update_time" "0 */6 * * *" sed -i "/#${CONF}_autosetup/d" "/etc/crontabs/root" 2>"/dev/null" - echo -e "$auto_update_time $HP_DIR/scripts/update_crond.sh #${CONF}_autosetup" >> "/etc/crontabs/root" + if validate_cron "$auto_update_time"; then + printf '%s %s #%s_autosetup\n' "$auto_update_time" "$HP_DIR/scripts/update_crond.sh" "$CONF" >> "/etc/crontabs/root" + else + log "Error: invalid subscription update schedule." + fi /etc/init.d/cron restart fi @@ -79,7 +137,29 @@ start_service() { mkdir -p "$DNSMASQ_DIR" echo -e "conf-dir=$DNSMASQ_DIR" > "$DNSMASQ_DIR/../dnsmasq-homeproxy.conf" case "$routing_mode" in - "bypass_mainland_china"|"custom"|"global") + "bypass_mainland_china") + cat <<-EOF >> "$DNSMASQ_DIR/redirect-dns.conf" + no-poll + no-resolv + server=127.0.0.1#$dns_port + EOF + + local wan_interface wan_dns china_dns candidate + . /lib/functions/network.sh + if network_find_wan wan_interface && network_get_dnsserver wan_dns "$wan_interface"; then + for candidate in $wan_dns; do + case "$candidate" in + *:*) ;; + *) china_dns="$candidate"; break ;; + esac + done + [ -n "$china_dns" ] || china_dns="${wan_dns%% *}" + fi + china_dns="${china_dns:-223.5.5.5}" + sed -r -e '/^\s*$/d' -e "s|(.*)|server=/\1/$china_dns|g" \ + "$HP_DIR/resources/china_list.txt" > "$DNSMASQ_DIR/china_list.conf" + ;; + "custom"|"global") cat <<-EOF >> "$DNSMASQ_DIR/redirect-dns.conf" no-poll no-resolv @@ -156,7 +236,7 @@ start_service() { procd_add_jail "sing-box-c" log procfs procd_add_jail_mount "$RUN_DIR/sing-box-c.json" procd_add_jail_mount_rw "$RUN_DIR/sing-box-c.log" - [ "$routing_mode" != "bypass_mainland_china" ] || procd_add_jail_mount_rw "$RUN_DIR/cache.db" + [ "$routing_mode" != "bypass_mainland_china" ] || procd_add_jail_mount_rw "$CACHE_PATH" procd_add_jail_mount "$HP_DIR/certs/" procd_add_jail_mount "/etc/ssl/" procd_add_jail_mount "/etc/localtime" @@ -176,17 +256,6 @@ start_service() { fi if [ "$server_enabled" = "1" ]; then - # Generate/Validate server config - ucode -S "$HP_DIR/scripts/generate_server.uc" 2>>"$LOG_PATH" - - if [ ! -e "$RUN_DIR/sing-box-s.json" ]; then - log "Error: failed to generate server configuration." - return 1 - elif ! "$PROG" check --config "$RUN_DIR/sing-box-s.json" 2>>"$LOG_PATH"; then - log "Error: wrong server configuration detected." - return 1 - fi - # sing-box (server) procd_open_instance "sing-box-s" @@ -226,10 +295,6 @@ start_service() { procd_close_instance case "$routing_mode" in - "bypass_mainland_china") - # Prepare cache db - [ -e "$RUN_DIR/cache.db" ] || touch "$RUN_DIR/cache.db" - ;; "custom") # Prepare ruleset directory [ -d "$HP_DIR/ruleset" ] || mkdir -p "$HP_DIR/ruleset" @@ -308,8 +373,8 @@ stop_service() { rm -rf "$DNSMASQ_DIR/../dnsmasq-homeproxy.conf" "$DNSMASQ_DIR" /etc/init.d/dnsmasq restart >"/dev/null" 2>&1 - rm -f "$RUN_DIR/sing-box-c.json" "$RUN_DIR/sing-box-c.log" \ - "$RUN_DIR/sing-box-s.json" "$RUN_DIR/sing-box-s.log" + rm -f "$RUN_DIR/sing-box-c.json" "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-c.log" \ + "$RUN_DIR/sing-box-s.json" "$RUN_DIR/sing-box-s.json.new" "$RUN_DIR/sing-box-s.log" log "Service stopped." } diff --git a/homeproxy/root/etc/uci-defaults/luci-homeproxy-migration b/homeproxy/root/etc/uci-defaults/luci-homeproxy-migration index a2082d0c..a629e5e3 100755 --- a/homeproxy/root/etc/uci-defaults/luci-homeproxy-migration +++ b/homeproxy/root/etc/uci-defaults/luci-homeproxy-migration @@ -1,5 +1,3 @@ #!/bin/sh -ucode "/etc/homeproxy/scripts/migrate_config.uc" - -exit 0 +exec ucode "/etc/homeproxy/scripts/migrate_config.uc" diff --git a/homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json b/homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json index b4b97ea8..ff37cd0b 100644 --- a/homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json +++ b/homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json @@ -3,21 +3,30 @@ "description": "Grant access to homeproxy configuration", "read": { "file": { - "/etc/homeproxy/scripts/update_subscriptions.uc": [ "exec" ], "/var/run/homeproxy/homeproxy.log": [ "read" ], "/var/run/homeproxy/sing-box-c.log": [ "read" ], "/var/run/homeproxy/sing-box-s.log": [ "read" ] }, "ubus": { "service": [ "list" ], - "luci.homeproxy": [ "*" ] + "luci.homeproxy": [ + "acllist_read", "connection_check", "current_node_get", + "node_latency_test", "resources_get", + "singbox_generator", "singbox_get_features" + ] }, "uci": [ "homeproxy" ] }, "write": { "file": { + "/etc/homeproxy/scripts/update_subscriptions.uc": [ "exec" ], "/tmp/homeproxy_certificate.tmp": [ "write" ] }, + "ubus": { + "luci.homeproxy": [ + "acllist_write", "certificate_write", "log_clean", "resources_update" + ] + }, "uci": [ "homeproxy" ] } } diff --git a/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy b/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy index 59bdbac3..9dd555e1 100644 --- a/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy +++ b/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy @@ -7,9 +7,13 @@ 'use strict'; -import { access, error, lstat, popen, readfile, writefile } from 'fs'; +import { access, lstat, popen, readfile, writefile } from 'fs'; import { cursor } from 'uci'; +import { + removeBlankAttrs, renderEndpoint, renderOutbound +} from '/etc/homeproxy/scripts/homeproxy.uc'; + /* Kanged from ucode/luci */ function shellquote(s) { return `'${replace(s, "'", "'\\''")}'`; @@ -21,6 +25,12 @@ function hasKernelModule(kmod) { const HP_DIR = '/etc/homeproxy'; const RUN_DIR = '/var/run/homeproxy'; +const RESOURCE_SOURCES = { + china_ip4: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/cncidr.txt', + china_ip6: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/cncidr.txt', + china_list: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/direct.txt', + gfw_list: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/gfw.txt' +}; const methods = { acllist_read: { @@ -60,7 +70,7 @@ const methods = { certificate_write: { args: { filename: 'filename' }, call: function(req) { - const writeCertificate = (filename, priv) => { + const writeCertificate = (filename, kind) => { const tmpcert = '/tmp/homeproxy_certificate.tmp'; const filestat = lstat(tmpcert); @@ -76,8 +86,10 @@ const methods = { } /* Kanged from luci-proto-openconnect */ - const beg = priv ? /^-----BEGIN (RSA|EC) PRIVATE KEY-----$/ : /^-----BEGIN CERTIFICATE-----$/, - end = priv ? /^-----END (RSA|EC) PRIVATE KEY-----$/ : /^-----END CERTIFICATE-----$/, + const beg = (kind === 'private') ? /^-----BEGIN (RSA|EC) PRIVATE KEY-----$/ : + ((kind === 'ech') ? /^-----BEGIN ECH CONFIGS-----$/ : /^-----BEGIN CERTIFICATE-----$/), + end = (kind === 'private') ? /^-----END (RSA|EC) PRIVATE KEY-----$/ : + ((kind === 'ech') ? /^-----END ECH CONFIGS-----$/ : /^-----END CERTIFICATE-----$/), lines = split(trim(filecontent), /[\r\n]/); let start = false, i; @@ -100,7 +112,10 @@ const methods = { filecontent += '\n'; system(`mkdir -p ${HP_DIR}/certs`); - writefile(`${HP_DIR}/certs/${filename}.pem`, filecontent); + const certfile = `${HP_DIR}/certs/${filename}.pem`; + writefile(certfile, filecontent); + if (kind === 'private') + system(`chmod 600 ${certfile}`); system(`rm -f ${tmpcert}`); return { result: true }; @@ -110,10 +125,13 @@ const methods = { switch (filename) { case 'client_ca': case 'server_publickey': - return writeCertificate(filename, false); + return writeCertificate(filename, 'certificate'); + break; + case 'client_ech_conf': + return writeCertificate(filename, 'ech'); break; case 'server_privatekey': - return writeCertificate(filename, true); + return writeCertificate(filename, 'private'); break; default: return { result: false, error: 'illegal cerificate filename' }; @@ -155,8 +173,8 @@ const methods = { if (!section || section['.type'] !== 'node') return { id: section_id, label: fallback_name || section_id, type: null }; - const address = trim(section.override_address || section.address || ''); - const port = trim(section.override_port || section.port || ''); + const address = trim(section.address || ''); + const port = trim(section.port || ''); const label = trim(section.label || '') || ((address && port) ? `${address}:${port}` : section_id); return { id: section_id, @@ -248,195 +266,6 @@ const methods = { rp_runtime: (extras && extras.rp_runtime) ? extras.rp_runtime : null }); - const strToBool = (str) => ((str === '1') || null); - const strToInt = (str) => (str != null && trim(sprintf('%s', str)) !== '') ? (int(str) || null) : null; - const strToTime = (str) => (str != null && trim(sprintf('%s', str)) !== '') ? (str + 's') : null; - - function removeBlankAttrs(res) { - let content; - - if (type(res) === 'object') { - content = {}; - map(keys(res), (k) => { - if (type(res[k]) in ['array', 'object']) - content[k] = removeBlankAttrs(res[k]); - else if (res[k] !== null && res[k] !== '') - content[k] = res[k]; - }); - } else if (type(res) === 'array') { - content = []; - map(res, (k) => { - if (type(k) in ['array', 'object']) - push(content, removeBlankAttrs(k)); - else if (k !== null && k !== '') - push(content, k); - }); - } else - return res; - - return content; - } - - const parse_port = (strport) => { - if (type(strport) !== 'array' || length(strport) === 0) - return null; - - let ports = []; - for (let i = 0; i < length(strport); i++) - push(ports, int(strport[i])); - - return ports; - }; - - const generate_endpoint = (node_cfg) => { - if (type(node_cfg) !== 'object' || length(node_cfg) === 0) - return null; - - return { - type: node_cfg.type, - tag: 'cfg-' + node_cfg['.name'] + '-out', - address: node_cfg.wireguard_local_address, - mtu: strToInt(node_cfg.wireguard_mtu), - private_key: node_cfg.wireguard_private_key, - peers: (node_cfg.type === 'wireguard') ? [ - { - address: node_cfg.address, - port: strToInt(node_cfg.port), - allowed_ips: [ - '0.0.0.0/0', - '::/0' - ], - persistent_keepalive_interval: strToInt(node_cfg.wireguard_persistent_keepalive_interval), - public_key: node_cfg.wireguard_peer_public_key, - pre_shared_key: node_cfg.wireguard_pre_shared_key, - reserved: parse_port(node_cfg.wireguard_reserved) - } - ] : null, - system: (node_cfg.type === 'wireguard') ? false : null, - tcp_fast_open: strToBool(node_cfg.tcp_fast_open), - tcp_multi_path: strToBool(node_cfg.tcp_multi_path), - udp_fragment: strToBool(node_cfg.udp_fragment) - }; - }; - - const generate_outbound = (node_cfg) => { - if (type(node_cfg) !== 'object' || length(node_cfg) === 0) - return null; - - return { - type: node_cfg.type, - tag: 'cfg-' + node_cfg['.name'] + '-out', - - server: node_cfg.address, - server_port: strToInt(node_cfg.port), - server_ports: node_cfg.hysteria_hopping_port, - - username: (node_cfg.type !== 'ssh') ? node_cfg.username : null, - user: (node_cfg.type === 'ssh') ? node_cfg.username : null, - password: node_cfg.password, - - override_address: node_cfg.override_address, - override_port: strToInt(node_cfg.override_port), - proxy_protocol: strToInt(node_cfg.proxy_protocol), - idle_session_check_interval: strToTime(node_cfg.anytls_idle_session_check_interval), - idle_session_timeout: strToTime(node_cfg.anytls_idle_session_timeout), - min_idle_session: strToInt(node_cfg.anytls_min_idle_session), - hop_interval: strToTime(node_cfg.hysteria_hop_interval), - up_mbps: strToInt(node_cfg.hysteria_up_mbps), - down_mbps: strToInt(node_cfg.hysteria_down_mbps), - obfs: node_cfg.hysteria_obfs_type ? { - type: node_cfg.hysteria_obfs_type, - password: node_cfg.hysteria_obfs_password - } : node_cfg.hysteria_obfs_password, - auth: (node_cfg.hysteria_auth_type === 'base64') ? node_cfg.hysteria_auth_payload : null, - auth_str: (node_cfg.hysteria_auth_type === 'string') ? node_cfg.hysteria_auth_payload : null, - recv_window_conn: strToInt(node_cfg.hysteria_recv_window_conn), - recv_window: strToInt(node_cfg.hysteria_revc_window), - disable_mtu_discovery: strToBool(node_cfg.hysteria_disable_mtu_discovery), - method: node_cfg.shadowsocks_encrypt_method, - plugin: node_cfg.shadowsocks_plugin, - plugin_opts: node_cfg.shadowsocks_plugin_opts, - version: (node_cfg.type === 'shadowtls') ? strToInt(node_cfg.shadowtls_version) : ((node_cfg.type === 'socks') ? node_cfg.socks_version : null), - client_version: node_cfg.ssh_client_version, - host_key: node_cfg.ssh_host_key, - host_key_algorithms: node_cfg.ssh_host_key_algo, - private_key: node_cfg.ssh_priv_key, - private_key_passphrase: node_cfg.ssh_priv_key_pp, - uuid: node_cfg.uuid, - congestion_control: node_cfg.tuic_congestion_control, - udp_relay_mode: node_cfg.tuic_udp_relay_mode, - udp_over_stream: strToBool(node_cfg.tuic_udp_over_stream), - zero_rtt_handshake: strToBool(node_cfg.tuic_enable_zero_rtt), - heartbeat: strToTime(node_cfg.tuic_heartbeat), - flow: node_cfg.vless_flow, - alter_id: strToInt(node_cfg.vmess_alterid), - security: node_cfg.vmess_encrypt, - global_padding: strToBool(node_cfg.vmess_global_padding), - authenticated_length: strToBool(node_cfg.vmess_authenticated_length), - packet_encoding: node_cfg.packet_encoding, - - multiplex: (node_cfg.multiplex === '1') ? { - enabled: true, - protocol: node_cfg.multiplex_protocol, - max_connections: strToInt(node_cfg.multiplex_max_connections), - min_streams: strToInt(node_cfg.multiplex_min_streams), - max_streams: strToInt(node_cfg.multiplex_max_streams), - padding: strToBool(node_cfg.multiplex_padding), - brutal: (node_cfg.multiplex_brutal === '1') ? { - enabled: true, - up_mbps: strToInt(node_cfg.multiplex_brutal_up), - down_mbps: strToInt(node_cfg.multiplex_brutal_down) - } : null - } : null, - tls: (node_cfg.tls === '1') ? { - enabled: true, - server_name: node_cfg.tls_sni, - insecure: strToBool(node_cfg.tls_insecure), - alpn: node_cfg.tls_alpn, - min_version: node_cfg.tls_min_version, - max_version: node_cfg.tls_max_version, - cipher_suites: node_cfg.tls_cipher_suites, - certificate_path: node_cfg.tls_cert_path, - ech: (node_cfg.tls_ech === '1') ? { - enabled: true, - config: node_cfg.tls_ech_config, - config_path: node_cfg.tls_ech_config_path - } : null, - utls: node_cfg.tls_utls ? { - enabled: true, - fingerprint: node_cfg.tls_utls - } : null, - reality: (node_cfg.tls_reality === '1') ? { - enabled: true, - public_key: node_cfg.tls_reality_public_key, - short_id: node_cfg.tls_reality_short_id - } : null - } : null, - transport: node_cfg.transport ? { - type: node_cfg.transport, - host: node_cfg.http_host || node_cfg.httpupgrade_host, - path: node_cfg.http_path || node_cfg.ws_path, - headers: node_cfg.ws_host ? { - Host: node_cfg.ws_host - } : null, - method: node_cfg.http_method, - max_early_data: strToInt(node_cfg.websocket_early_data), - early_data_header_name: node_cfg.websocket_early_data_header, - service_name: node_cfg.grpc_servicename, - idle_timeout: node_cfg.http_idle_timeout, - ping_timeout: node_cfg.http_ping_timeout, - permit_without_stream: strToBool(node_cfg.grpc_permit_without_stream) - } : null, - udp_over_tcp: (node_cfg.udp_over_tcp === '1') ? { - enabled: true, - version: strToInt(node_cfg.udp_over_tcp_version) - } : null, - tcp_fast_open: strToBool(node_cfg.tcp_fast_open), - tcp_multi_path: strToBool(node_cfg.tcp_multi_path), - udp_fragment: strToBool(node_cfg.udp_fragment) - }; - }; - const isControllerPortBusy = (port) => { const hex_port = sprintf('%04X', int(port)); const tcp_v4 = readfile('/proc/net/tcp') || ''; @@ -645,7 +474,7 @@ const methods = { } }; - const rendered_outbound = (node_cfg.type === 'wireguard') ? generate_endpoint(node_cfg) : generate_outbound(node_cfg); + const rendered_outbound = (node_cfg.type === 'wireguard') ? renderEndpoint(node_cfg) : renderOutbound(node_cfg); if (rendered_outbound && type(rendered_outbound) === 'object') rendered_outbound.tag = selected_tag; @@ -1104,22 +933,23 @@ const methods = { } }, - resources_get_version: { - args: { type: 'type' }, - call: function(req) { - const version = trim(readfile(`${HP_DIR}/resources/${req.args?.type}.ver`)); - return { version: version, error: error() }; + resources_get: { + call: function() { + let resources = []; + for (let resource_type in keys(RESOURCE_SOURCES)) { + const version = trim(readfile(`${HP_DIR}/resources/${resource_type}.ver`) || ''); + push(resources, { + type: resource_type, + version: version || null, + source: RESOURCE_SOURCES[resource_type] + }); + } + return { resources }; } }, resources_update: { - args: { type: 'type' }, - call: function(req) { - if (req.args?.type) { - const type = shellquote(req.args?.type); - const exit_code = system(`${HP_DIR}/scripts/update_resources.sh ${type}`); - return { status: exit_code }; - } else - return { status: 255, error: 'illegal type' }; + call: function() { + return { status: system(`${HP_DIR}/scripts/update_resources.sh`) }; } } }; diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua index ccd1d34f..2fddbb8f 100644 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua @@ -1479,6 +1479,7 @@ if is_finded("xray") then o:value("qq", translate("qq")) o:value("random", translate("random")) o:value("randomized", translate("randomized")) + o:value("unsafe", translate("unsafe")) o:value("", translate("disable")) o:depends({type = "v2ray", tls = true}) o:depends({type = "v2ray", reality = true}) diff --git a/rblibtorrent/Makefile b/rblibtorrent/Makefile index 237ee7ae..f576172a 100644 --- a/rblibtorrent/Makefile +++ b/rblibtorrent/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=rblibtorrent -PKG_VERSION:=2.1.0 +PKG_VERSION:=2.0.13 PKG_RELEASE:=1 PKG_SOURCE:=libtorrent-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/arvidn/libtorrent/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=5d5b264eb960fafe4a5c935f6c71bc00e02d3dab8872e76dee9dadb27282f912 +PKG_HASH:=86207fbe502153568bb4b11d11bb881d6c1388962e852ee0caacf1c07adeb161 PKG_BUILD_DIR:=$(BUILD_DIR)/libtorrent-$(PKG_VERSION) PKG_LICENSE:=BSD diff --git a/v2ray-geodata/Makefile b/v2ray-geodata/Makefile index aac1861f..b6590237 100644 --- a/v2ray-geodata/Makefile +++ b/v2ray-geodata/Makefile @@ -21,13 +21,13 @@ define Download/geoip HASH:=b71d1999439dde2de2d2b6844a2befa50c50211ff739785c005ca7c230a17d6a endef -GEOSITE_VER:=20260711034308 +GEOSITE_VER:=20260711103457 GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) define Download/geosite URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ URL_FILE:=dlc.dat FILE:=$(GEOSITE_FILE) - HASH:=356743c9d1ac82ba9c2ed725cc11e8175d431ca5d327bd1ce457edbba70ffd7c + HASH:=1d09df82a533dd9bcdeaa8ddabb81be4cfa031dea211102ab09d115f984fbe36 endef GEOSITE_IRAN_VER:=202607060129