diff --git a/homeproxy/Makefile b/homeproxy/Makefile index 5b72fd02e..dd7293642 100644 --- a/homeproxy/Makefile +++ b/homeproxy/Makefile @@ -17,12 +17,10 @@ PKG_NAME:=luci-app-homeproxy define Package/luci-app-homeproxy/conffiles /etc/config/homeproxy /etc/homeproxy/certs/ -/etc/homeproxy/resources/geoip.db -/etc/homeproxy/resources/geoip.ver -/etc/homeproxy/resources/geosite.db -/etc/homeproxy/resources/geosite.ver +/etc/homeproxy/ruleset/ /etc/homeproxy/resources/direct_list.txt /etc/homeproxy/resources/proxy_list.txt +/etc/homeproxy/cache.db endef include $(TOPDIR)/feeds/luci/luci.mk diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js index 44a211675..7716141d2 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js @@ -287,8 +287,6 @@ return view.extend({ desc.innerHTML = _('Mixed system TCP stack and gVisor UDP stack.') else if (value === 'gvisor') desc.innerHTML = _('Based on google/gvisor.'); - else if (value === 'lwip') - desc.innerHTML = _('Upstream archived. Not recommended.'); else if (value === 'system') desc.innerHTML = _('Less compatibility and sometimes better performance.'); } @@ -430,9 +428,9 @@ return view.extend({ so = ss.option(form.ListValue, 'mode', _('Mode'), _('The default rule uses the following matching logic:
' + - '(domain || domain_suffix || domain_keyword || domain_regex || geosite || geoip || ip_cidr) &&
' + + '(domain || domain_suffix || domain_keyword || domain_regex || ip_cidr || ip_is_private) &&
' + '(port || port_range) &&
' + - '(source_geoip || source_ip_cidr) &&
' + + '(source_ip_cidr || source_ip_is_private) &&
' + '(source_port || source_port_range) &&
' + 'other fields.')); so.value('default', _('Default')); @@ -476,28 +474,28 @@ return view.extend({ _('Match domain using regular expression.')); so.modalonly = true; - so = ss.option(form.DynamicList, 'geosite', _('Geosite'), - _('Match geosite.')); - so.modalonly = true; - - so = ss.option(form.DynamicList, 'source_geoip', _('Source GeoIP'), - _('Match source GeoIP.')); - so.modalonly = true; - - so = ss.option(form.DynamicList, 'geoip', _('GeoIP'), - _('Match GeoIP.')); - so.modalonly = true; - so = ss.option(form.DynamicList, 'source_ip_cidr', _('Source IP CIDR'), _('Match source IP CIDR.')); so.datatype = 'or(cidr, ipaddr)'; so.modalonly = true; + so = ss.option(form.Flag, 'source_ip_is_private', _('Private source IP'), + _('Match private source IP.')); + so.default = so.disabled; + so.rmempty = false; + so.modalonly = true; + so = ss.option(form.DynamicList, 'ip_cidr', _('IP CIDR'), _('Match IP CIDR.')); so.datatype = 'or(cidr, ipaddr)'; so.modalonly = true; + so = ss.option(form.Flag, 'ip_is_private', _('Private IP'), + _('Match private IP.')); + so.default = so.disabled; + so.rmempty = false; + so.modalonly = true; + so = ss.option(form.DynamicList, 'source_port', _('Source port'), _('Match source port.')); so.datatype = 'port'; @@ -530,6 +528,28 @@ return view.extend({ _('Match user name.')); so.modalonly = true; + so = ss.option(form.MultiValue, 'rule_set', _('Rule set'), + _('Match rule set.')); + so.load = function(section_id) { + delete this.keylist; + delete this.vallist; + + this.value('', _('-- Please choose --')); + uci.sections(data[0], 'ruleset', (res) => { + if (res.enabled === '1') + this.value(res['.name'], res.label); + }); + + return this.super('load', section_id); + } + so.modalonly = true; + + so = ss.option(form.Flag, 'rule_set_ipcidr_match_source', _('Match source IP via rule set'), + _('Make IP CIDR in rule set used to match the source IP.')); + so.default = so.disabled; + so.rmempty = false; + so.modalonly = true; + so = ss.option(form.Flag, 'invert', _('Invert'), _('Invert match result.')); so.default = so.disabled; @@ -712,9 +732,9 @@ return view.extend({ so = ss.option(form.ListValue, 'mode', _('Mode'), _('The default rule uses the following matching logic:
' + - '(domain || domain_suffix || domain_keyword || domain_regex || geosite) &&
' + + '(domain || domain_suffix || domain_keyword || domain_regex) &&
' + '(port || port_range) &&
' + - '(source_geoip || source_ip_cidr) &&
' + + '(source_ip_cidr || source_ip_is_private) &&
' + '(source_port || source_port_range) &&
' + 'other fields.')); so.value('default', _('Default')); @@ -762,10 +782,6 @@ return view.extend({ _('Match domain using regular expression.')); so.modalonly = true; - so = ss.option(form.DynamicList, 'geosite', _('Geosite'), - _('Match geosite.')); - so.modalonly = true; - so = ss.option(form.DynamicList, 'port', _('Port'), _('Match port.')); so.datatype = 'port'; @@ -776,15 +792,17 @@ return view.extend({ so.validate = validatePortRange; so.modalonly = true; - so = ss.option(form.DynamicList, 'source_geoip', _('Source GeoIP'), - _('Match source GeoIP.')); - so.modalonly = true; - so = ss.option(form.DynamicList, 'source_ip_cidr', _('Source IP CIDR'), _('Match source IP CIDR.')); so.datatype = 'or(cidr, ipaddr)'; so.modalonly = true; + so = ss.option(form.Flag, 'source_ip_is_private', _('Private source IP'), + _('Match private source IP.')); + so.default = so.disabled; + so.rmempty = false; + so.modalonly = true; + so = ss.option(form.DynamicList, 'source_port', _('Source port'), _('Match source port.')); so.datatype = 'port'; @@ -807,6 +825,22 @@ return view.extend({ _('Match user name.')); so.modalonly = true; + so = ss.option(form.MultiValue, 'rule_set', _('Rule set'), + _('Match rule set.')); + so.load = function(section_id) { + delete this.keylist; + delete this.vallist; + + this.value('', _('-- Please choose --')); + uci.sections(data[0], 'ruleset', (res) => { + if (res.enabled === '1') + this.value(res['.name'], res.label); + }); + + return this.super('load', section_id); + } + so.modalonly = true; + so = ss.option(form.Flag, 'invert', _('Invert'), _('Invert match result.')); so.default = so.disabled; @@ -861,6 +895,94 @@ return view.extend({ /* DNS rules end */ /* Custom routing settings end */ + /* Rule set settings start */ + s.tab('ruleset', _('Rule set')); + o = s.taboption('ruleset', form.SectionValue, '_ruleset', form.GridSection, 'ruleset'); + o.depends('routing_mode', 'custom'); + + ss = o.subsection; + ss.addremove = true; + ss.rowcolors = true; + ss.sortable = true; + ss.nodescriptions = true; + ss.modaltitle = L.bind(hp.loadModalTitle, this, _('Rule set'), _('Add a rule set'), data[0]); + ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, data[0]); + ss.renderSectionAdd = L.bind(hp.renderSectionAdd, this, ss); + + so = ss.option(form.Value, 'label', _('Label')); + so.load = L.bind(hp.loadDefaultLabel, this, data[0]); + so.validate = L.bind(hp.validateUniqueValue, this, data[0], 'ruleset', 'label'); + so.modalonly = true; + + so = ss.option(form.Flag, 'enabled', _('Enable')); + so.default = o.enabled; + so.rmempty = false; + so.editable = true; + + so = ss.option(form.ListValue, 'type', _('Type')); + so.value('local', _('Local')); + so.value('remote', _('Remote')); + so.default = 'remote'; + so.rmempty = false; + + so = ss.option(form.ListValue, 'format', _('Format')); + so.value('source', _('Source file')); + so.value('binary', _('Binary file')); + so.default = 'source'; + so.rmempty = false; + + so = ss.option(form.Value, 'path', _('Path')); + so.datatype = 'file'; + so.placeholder = '/etc/homeproxy/ruleset/example.json'; + so.rmempty = false; + so.depends('type', 'local'); + so.modalonly = true; + + so = ss.option(form.Value, 'url', _('Rule set URL')); + so.validate = function(section_id, value) { + if (section_id) { + if (!value) + return _('Expecting: %s').format(_('non-empty value')); + + try { + var url = new URL(value); + if (!url.hostname) + return _('Expecting: %s').format(_('valid URL')); + } + catch(e) { + return _('Expecting: %s').format(_('valid URL')); + } + } + + return true; + } + so.rmempty = false; + so.depends('type', 'remote'); + so.modalonly = true; + + so = ss.option(form.ListValue, 'outbound', _('Outbound'), + _('Tag of the outbound to download rule set.')); + so.load = function(section_id) { + delete this.keylist; + delete this.vallist; + + this.value('direct-out', _('Direct')); + uci.sections(data[0], 'routing_node', (res) => { + if (res.enabled === '1') + this.value(res['.name'], res.label); + }); + + return this.super('load', section_id); + } + so.default = 'direct-out'; + so.rmempty = false; + so.depends('type', 'remote'); + + so = ss.option(form.Value, 'update_interval', _('Update interval'), + _('Update interval of rule set.
1d will be used if empty.')); + so.depends('type', 'remote'); + /* Rule set settings end */ + /* ACL settings start */ s.tab('control', _('Access Control')); diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js index f1f2b9381..d645db446 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js @@ -1252,7 +1252,7 @@ return view.extend({ s.tab('subscription', _('Subscriptions')); o = s.taboption('subscription', form.Flag, 'auto_update', _('Auto update'), - _('Auto update subscriptions, GeoIP and GeoSite.')); + _('Auto update subscriptions.')); o.default = o.disabled; o.rmempty = false; diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js index 34fd3b19e..e02c1b8cd 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js @@ -200,16 +200,6 @@ return view.extend({ s = m.section(form.NamedSection, 'config', 'homeproxy', _('Resources management')); s.anonymous = true; - if (routing_mode === 'custom') { - o = s.option(form.DummyValue, '_geoip_version', _('GeoIP version')); - o.cfgvalue = function() { return getResVersion(this, 'geoip') }; - o.rawhtml = true; - - o = s.option(form.DummyValue, '_geosite_version', _('GeoSite version')); - o.cfgvalue = function() { return getResVersion(this, 'geosite') }; - o.rawhtml = true; - } - o = s.option(form.DummyValue, '_china_ip4_version', _('China IPv4 list version')); o.cfgvalue = function() { return getResVersion(this, 'china_ip4') }; o.rawhtml = true; diff --git a/homeproxy/po/templates/homeproxy.pot b/homeproxy/po/templates/homeproxy.pot index f0cc7278d..ec451afc0 100644 --- a/homeproxy/po/templates/homeproxy.pot +++ b/homeproxy/po/templates/homeproxy.pot @@ -9,7 +9,12 @@ msgstr "" msgid "%s nodes removed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:444 +#: htdocs/luci-static/resources/view/homeproxy/client.js:537 +#: htdocs/luci-static/resources/view/homeproxy/client.js:834 +msgid "-- Please choose --" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:442 msgid "4 or 6. Not limited if empty." msgstr "" @@ -27,7 +32,7 @@ msgstr "" msgid "Accept any if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:865 +#: htdocs/luci-static/resources/view/homeproxy/client.js:987 msgid "Access Control" msgstr "" @@ -39,11 +44,11 @@ msgstr "" msgid "Access key secret" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:699 +#: htdocs/luci-static/resources/view/homeproxy/client.js:719 msgid "Add a DNS rule" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:609 +#: htdocs/luci-static/resources/view/homeproxy/client.js:629 msgid "Add a DNS server" msgstr "" @@ -51,28 +56,32 @@ msgstr "" msgid "Add a node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:341 +#: htdocs/luci-static/resources/view/homeproxy/client.js:339 msgid "Add a routing node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:417 +#: htdocs/luci-static/resources/view/homeproxy/client.js:415 msgid "Add a routing rule" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:908 +msgid "Add a rule set" +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/server.js:88 msgid "Add a server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:623 +#: htdocs/luci-static/resources/view/homeproxy/client.js:643 #: htdocs/luci-static/resources/view/homeproxy/node.js:529 msgid "Address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:627 +#: htdocs/luci-static/resources/view/homeproxy/client.js:647 msgid "Address resolver" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:659 +#: htdocs/luci-static/resources/view/homeproxy/client.js:679 msgid "Address strategy" msgstr "" @@ -132,7 +141,7 @@ msgstr "" msgid "An error occurred during updating subscriptions: %s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:821 +#: htdocs/luci-static/resources/view/homeproxy/client.js:855 msgid "Any" msgstr "" @@ -180,7 +189,7 @@ msgid "Auto update" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1255 -msgid "Auto update subscriptions, GeoIP and GeoSite." +msgid "Auto update subscriptions." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:749 @@ -200,12 +209,16 @@ msgstr "" msgid "Based on google/gvisor." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:368 -#: htdocs/luci-static/resources/view/homeproxy/client.js:878 +#: htdocs/luci-static/resources/view/homeproxy/client.js:930 +msgid "Binary file" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:366 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1000 msgid "Bind interface" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:879 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1001 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect." msgstr "" @@ -214,26 +227,26 @@ msgstr "" msgid "Blacklist mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:319 -#: htdocs/luci-static/resources/view/homeproxy/client.js:545 -#: htdocs/luci-static/resources/view/homeproxy/client.js:823 +#: htdocs/luci-static/resources/view/homeproxy/client.js:317 +#: htdocs/luci-static/resources/view/homeproxy/client.js:565 +#: htdocs/luci-static/resources/view/homeproxy/client.js:857 msgid "Block" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:575 -#: htdocs/luci-static/resources/view/homeproxy/client.js:841 +#: htdocs/luci-static/resources/view/homeproxy/client.js:595 +#: htdocs/luci-static/resources/view/homeproxy/client.js:875 msgid "Block DNS queries" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:447 -#: htdocs/luci-static/resources/view/homeproxy/client.js:460 -#: htdocs/luci-static/resources/view/homeproxy/client.js:728 -#: htdocs/luci-static/resources/view/homeproxy/client.js:738 +#: htdocs/luci-static/resources/view/homeproxy/client.js:445 +#: htdocs/luci-static/resources/view/homeproxy/client.js:458 +#: htdocs/luci-static/resources/view/homeproxy/client.js:748 +#: htdocs/luci-static/resources/view/homeproxy/client.js:758 #: htdocs/luci-static/resources/view/homeproxy/server.js:733 msgid "Both" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:302 +#: htdocs/luci-static/resources/view/homeproxy/client.js:300 msgid "Bypass CN traffic" msgstr "" @@ -241,7 +254,7 @@ msgstr "" msgid "Bypass mainland China" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:303 +#: htdocs/luci-static/resources/view/homeproxy/client.js:301 msgid "Bypass mainland China traffic via firewall rules by default." msgstr "" @@ -278,15 +291,15 @@ msgstr "" msgid "China DNS server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:213 +#: htdocs/luci-static/resources/view/homeproxy/status.js:203 msgid "China IPv4 list version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:217 +#: htdocs/luci-static/resources/view/homeproxy/status.js:207 msgid "China IPv6 list version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:221 +#: htdocs/luci-static/resources/view/homeproxy/status.js:211 msgid "China list version" msgstr "" @@ -342,19 +355,19 @@ msgstr "" msgid "Custom routing" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:745 +#: htdocs/luci-static/resources/view/homeproxy/client.js:765 msgid "DNS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:690 +#: htdocs/luci-static/resources/view/homeproxy/client.js:710 msgid "DNS Rules" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:600 +#: htdocs/luci-static/resources/view/homeproxy/client.js:620 msgid "DNS Servers" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:558 +#: htdocs/luci-static/resources/view/homeproxy/client.js:578 msgid "DNS Settings" msgstr "" @@ -362,12 +375,12 @@ msgstr "" msgid "DNS provider" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:699 +#: htdocs/luci-static/resources/view/homeproxy/client.js:719 msgid "DNS rule" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client.js:609 +#: htdocs/luci-static/resources/view/homeproxy/client.js:629 msgid "DNS server" msgstr "" @@ -376,31 +389,31 @@ msgid "DNS01 challenge" msgstr "" #: htdocs/luci-static/resources/homeproxy.js:17 -#: htdocs/luci-static/resources/view/homeproxy/client.js:438 -#: htdocs/luci-static/resources/view/homeproxy/client.js:720 +#: htdocs/luci-static/resources/view/homeproxy/client.js:436 +#: htdocs/luci-static/resources/view/homeproxy/client.js:740 #: htdocs/luci-static/resources/view/homeproxy/node.js:757 msgid "Default" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:573 -#: htdocs/luci-static/resources/view/homeproxy/client.js:634 -#: htdocs/luci-static/resources/view/homeproxy/client.js:839 +#: htdocs/luci-static/resources/view/homeproxy/client.js:593 +#: htdocs/luci-static/resources/view/homeproxy/client.js:654 +#: htdocs/luci-static/resources/view/homeproxy/client.js:873 msgid "Default DNS (issued by WAN)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:568 +#: htdocs/luci-static/resources/view/homeproxy/client.js:588 msgid "Default DNS server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:563 +#: htdocs/luci-static/resources/view/homeproxy/client.js:583 msgid "Default DNS strategy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:666 +#: htdocs/luci-static/resources/view/homeproxy/client.js:686 msgid "Default domain strategy for resolving the domain names." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:312 +#: htdocs/luci-static/resources/view/homeproxy/client.js:310 msgid "Default outbound" msgstr "" @@ -412,38 +425,39 @@ msgstr "" msgid "Default server name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:318 -#: htdocs/luci-static/resources/view/homeproxy/client.js:381 -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 -#: htdocs/luci-static/resources/view/homeproxy/client.js:676 -#: htdocs/luci-static/resources/view/homeproxy/client.js:822 +#: htdocs/luci-static/resources/view/homeproxy/client.js:316 +#: htdocs/luci-static/resources/view/homeproxy/client.js:379 +#: htdocs/luci-static/resources/view/homeproxy/client.js:564 +#: htdocs/luci-static/resources/view/homeproxy/client.js:696 +#: htdocs/luci-static/resources/view/homeproxy/client.js:856 +#: htdocs/luci-static/resources/view/homeproxy/client.js:969 #: htdocs/luci-static/resources/view/homeproxy/node.js:510 msgid "Direct" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:977 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1099 msgid "Direct Domain List" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:894 -#: htdocs/luci-static/resources/view/homeproxy/client.js:939 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1016 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1061 msgid "Direct IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:897 -#: htdocs/luci-static/resources/view/homeproxy/client.js:942 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1019 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1064 msgid "Direct IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:900 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1022 msgid "Direct MAC-s" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:142 #: htdocs/luci-static/resources/view/homeproxy/client.js:150 #: htdocs/luci-static/resources/view/homeproxy/client.js:187 -#: htdocs/luci-static/resources/view/homeproxy/client.js:317 -#: htdocs/luci-static/resources/view/homeproxy/client.js:888 +#: htdocs/luci-static/resources/view/homeproxy/client.js:315 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1010 #: htdocs/luci-static/resources/view/homeproxy/node.js:604 #: htdocs/luci-static/resources/view/homeproxy/node.js:616 #: htdocs/luci-static/resources/view/homeproxy/node.js:1173 @@ -453,7 +467,7 @@ msgstr "" msgid "Disable" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:586 +#: htdocs/luci-static/resources/view/homeproxy/client.js:606 msgid "Disable DNS cache" msgstr "" @@ -470,15 +484,15 @@ msgstr "" msgid "Disable TLS ALPN challenge" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:853 +#: htdocs/luci-static/resources/view/homeproxy/client.js:887 msgid "Disable cache and save cache in this query." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:589 +#: htdocs/luci-static/resources/view/homeproxy/client.js:609 msgid "Disable cache expire" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:852 +#: htdocs/luci-static/resources/view/homeproxy/client.js:886 msgid "Disable dns cache" msgstr "" @@ -493,28 +507,28 @@ msgid "" "(IPv4) / 1232 (IPv6) bytes in size." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:471 -#: htdocs/luci-static/resources/view/homeproxy/client.js:757 +#: htdocs/luci-static/resources/view/homeproxy/client.js:469 +#: htdocs/luci-static/resources/view/homeproxy/client.js:777 msgid "Domain keyword" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:462 -#: htdocs/luci-static/resources/view/homeproxy/client.js:748 +#: htdocs/luci-static/resources/view/homeproxy/client.js:460 +#: htdocs/luci-static/resources/view/homeproxy/client.js:768 msgid "Domain name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:475 -#: htdocs/luci-static/resources/view/homeproxy/client.js:761 +#: htdocs/luci-static/resources/view/homeproxy/client.js:473 +#: htdocs/luci-static/resources/view/homeproxy/client.js:781 msgid "Domain regex" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:362 +#: htdocs/luci-static/resources/view/homeproxy/client.js:360 #: htdocs/luci-static/resources/view/homeproxy/server.js:724 msgid "Domain strategy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:467 -#: htdocs/luci-static/resources/view/homeproxy/client.js:753 +#: htdocs/luci-static/resources/view/homeproxy/client.js:465 +#: htdocs/luci-static/resources/view/homeproxy/client.js:773 msgid "Domain suffix" msgstr "" @@ -583,10 +597,11 @@ msgstr "" msgid "Email" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:350 -#: htdocs/luci-static/resources/view/homeproxy/client.js:426 -#: htdocs/luci-static/resources/view/homeproxy/client.js:618 -#: htdocs/luci-static/resources/view/homeproxy/client.js:708 +#: htdocs/luci-static/resources/view/homeproxy/client.js:348 +#: htdocs/luci-static/resources/view/homeproxy/client.js:424 +#: htdocs/luci-static/resources/view/homeproxy/client.js:638 +#: htdocs/luci-static/resources/view/homeproxy/client.js:728 +#: htdocs/luci-static/resources/view/homeproxy/client.js:917 #: htdocs/luci-static/resources/view/homeproxy/server.js:75 #: htdocs/luci-static/resources/view/homeproxy/server.js:98 msgid "Enable" @@ -632,7 +647,7 @@ msgstr "" msgid "Enable UDP fragmentation." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:296 +#: htdocs/luci-static/resources/view/homeproxy/client.js:294 msgid "Enable endpoint-independent NAT" msgstr "" @@ -668,8 +683,11 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:200 #: htdocs/luci-static/resources/view/homeproxy/client.js:229 #: htdocs/luci-static/resources/view/homeproxy/client.js:234 -#: htdocs/luci-static/resources/view/homeproxy/client.js:970 -#: htdocs/luci-static/resources/view/homeproxy/client.js:999 +#: htdocs/luci-static/resources/view/homeproxy/client.js:945 +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 +#: htdocs/luci-static/resources/view/homeproxy/client.js:953 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1092 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1121 #: htdocs/luci-static/resources/view/homeproxy/node.js:465 #: htdocs/luci-static/resources/view/homeproxy/node.js:572 #: htdocs/luci-static/resources/view/homeproxy/node.js:1194 @@ -710,11 +728,15 @@ msgstr "" msgid "Flow" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:928 +msgid "Format" +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/node.js:893 msgid "GET" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:225 +#: htdocs/luci-static/resources/view/homeproxy/status.js:215 msgid "GFW list version" msgstr "" @@ -722,15 +744,15 @@ msgstr "" msgid "GFWList" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:912 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1034 msgid "Gaming mode IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:914 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1036 msgid "Gaming mode IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:917 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1039 msgid "Gaming mode MAC-s" msgstr "" @@ -739,23 +761,6 @@ msgstr "" msgid "Generic segmentation offload" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:487 -msgid "GeoIP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:204 -msgid "GeoIP version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:208 -msgid "GeoSite version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:479 -#: htdocs/luci-static/resources/view/homeproxy/client.js:765 -msgid "Geosite" -msgstr "" - #: htdocs/luci-static/resources/view/homeproxy/client.js:212 msgid "Global" msgstr "" @@ -764,15 +769,15 @@ msgstr "" msgid "Global padding" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:919 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1041 msgid "Global proxy IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:922 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1044 msgid "Global proxy IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:925 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1047 msgid "Global proxy MAC-s" msgstr "" @@ -792,8 +797,8 @@ msgstr "" msgid "Grant access to homeproxy configuration" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:452 -#: htdocs/luci-static/resources/view/homeproxy/client.js:742 +#: htdocs/luci-static/resources/view/homeproxy/client.js:450 +#: htdocs/luci-static/resources/view/homeproxy/client.js:762 #: htdocs/luci-static/resources/view/homeproxy/node.js:511 #: htdocs/luci-static/resources/view/homeproxy/node.js:827 #: htdocs/luci-static/resources/view/homeproxy/server.js:104 @@ -828,7 +833,7 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:55 #: htdocs/luci-static/resources/view/homeproxy/client.js:57 #: htdocs/luci-static/resources/view/homeproxy/client.js:109 -#: htdocs/luci-static/resources/view/homeproxy/status.js:233 +#: htdocs/luci-static/resources/view/homeproxy/status.js:223 #: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3 msgid "HomeProxy" msgstr "" @@ -872,17 +877,17 @@ msgstr "" msgid "Hysteria2" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:496 +#: htdocs/luci-static/resources/view/homeproxy/client.js:488 msgid "IP CIDR" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:443 -#: htdocs/luci-static/resources/view/homeproxy/client.js:725 +#: htdocs/luci-static/resources/view/homeproxy/client.js:441 +#: htdocs/luci-static/resources/view/homeproxy/client.js:745 msgid "IP version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:445 -#: htdocs/luci-static/resources/view/homeproxy/client.js:726 +#: htdocs/luci-static/resources/view/homeproxy/client.js:443 +#: htdocs/luci-static/resources/view/homeproxy/client.js:746 msgid "IPv4" msgstr "" @@ -890,8 +895,8 @@ msgstr "" msgid "IPv4 only" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:446 -#: htdocs/luci-static/resources/view/homeproxy/client.js:727 +#: htdocs/luci-static/resources/view/homeproxy/client.js:444 +#: htdocs/luci-static/resources/view/homeproxy/client.js:747 msgid "IPv6" msgstr "" @@ -919,7 +924,7 @@ msgid "" "If set, the requested domain name will be resolved to IP before routing." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:363 +#: htdocs/luci-static/resources/view/homeproxy/client.js:361 msgid "" "If set, the server domain name will be resolved to IP before connecting.
dns.strategy will be used if empty." @@ -952,11 +957,11 @@ msgstr "" msgid "Import share links" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:593 +#: htdocs/luci-static/resources/view/homeproxy/client.js:613 msgid "Independent cache per server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:871 +#: htdocs/luci-static/resources/view/homeproxy/client.js:993 msgid "Interface Control" msgstr "" @@ -967,13 +972,13 @@ msgid "" "seconds)." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:533 -#: htdocs/luci-static/resources/view/homeproxy/client.js:810 +#: htdocs/luci-static/resources/view/homeproxy/client.js:553 +#: htdocs/luci-static/resources/view/homeproxy/client.js:844 msgid "Invert" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:534 -#: htdocs/luci-static/resources/view/homeproxy/client.js:811 +#: htdocs/luci-static/resources/view/homeproxy/client.js:554 +#: htdocs/luci-static/resources/view/homeproxy/client.js:845 msgid "Invert match result." msgstr "" @@ -981,14 +986,15 @@ msgstr "" msgid "Key path" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:885 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1007 msgid "LAN IP Policy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:345 -#: htdocs/luci-static/resources/view/homeproxy/client.js:421 -#: htdocs/luci-static/resources/view/homeproxy/client.js:613 -#: htdocs/luci-static/resources/view/homeproxy/client.js:703 +#: htdocs/luci-static/resources/view/homeproxy/client.js:343 +#: htdocs/luci-static/resources/view/homeproxy/client.js:419 +#: htdocs/luci-static/resources/view/homeproxy/client.js:633 +#: htdocs/luci-static/resources/view/homeproxy/client.js:723 +#: htdocs/luci-static/resources/view/homeproxy/client.js:912 #: htdocs/luci-static/resources/view/homeproxy/node.js:504 #: htdocs/luci-static/resources/view/homeproxy/server.js:92 msgid "Label" @@ -1001,7 +1007,7 @@ msgid "" "compatibility purposes only, use of alterId > 1 is not recommended." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:293 +#: htdocs/luci-static/resources/view/homeproxy/client.js:291 msgid "Less compatibility and sometimes better performance." msgstr "" @@ -1023,7 +1029,7 @@ msgstr "" msgid "Listen address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:873 +#: htdocs/luci-static/resources/view/homeproxy/client.js:995 msgid "Listen interfaces" msgstr "" @@ -1035,6 +1041,10 @@ msgstr "" msgid "Loading" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:923 +msgid "Local" +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/node.js:953 msgid "Local address" msgstr "" @@ -1059,7 +1069,11 @@ msgstr "" msgid "Main node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:594 +#: htdocs/luci-static/resources/view/homeproxy/client.js:548 +msgid "Make IP CIDR in rule set used to match the source IP." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:614 msgid "" "Make each DNS server's cache independent for special purposes. If enabled, " "will slightly degrade performance." @@ -1069,89 +1083,93 @@ msgstr "" msgid "Masquerade" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:488 -msgid "Match GeoIP." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:497 +#: htdocs/luci-static/resources/view/homeproxy/client.js:489 msgid "Match IP CIDR." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:468 -#: htdocs/luci-static/resources/view/homeproxy/client.js:754 +#: htdocs/luci-static/resources/view/homeproxy/client.js:466 +#: htdocs/luci-static/resources/view/homeproxy/client.js:774 msgid "Match domain suffix." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:472 -#: htdocs/luci-static/resources/view/homeproxy/client.js:758 +#: htdocs/luci-static/resources/view/homeproxy/client.js:470 +#: htdocs/luci-static/resources/view/homeproxy/client.js:778 msgid "Match domain using keyword." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:476 -#: htdocs/luci-static/resources/view/homeproxy/client.js:762 +#: htdocs/luci-static/resources/view/homeproxy/client.js:474 +#: htdocs/luci-static/resources/view/homeproxy/client.js:782 msgid "Match domain using regular expression." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:463 -#: htdocs/luci-static/resources/view/homeproxy/client.js:749 +#: htdocs/luci-static/resources/view/homeproxy/client.js:461 +#: htdocs/luci-static/resources/view/homeproxy/client.js:769 msgid "Match full domain." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:480 -#: htdocs/luci-static/resources/view/homeproxy/client.js:766 -msgid "Match geosite." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:816 +#: htdocs/luci-static/resources/view/homeproxy/client.js:850 msgid "Match outbound." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:517 -#: htdocs/luci-static/resources/view/homeproxy/client.js:775 +#: htdocs/luci-static/resources/view/homeproxy/client.js:515 +#: htdocs/luci-static/resources/view/homeproxy/client.js:791 msgid "Match port range. Format as START:/:END/START:END." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:512 -#: htdocs/luci-static/resources/view/homeproxy/client.js:770 +#: htdocs/luci-static/resources/view/homeproxy/client.js:510 +#: htdocs/luci-static/resources/view/homeproxy/client.js:786 msgid "Match port." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:522 -#: htdocs/luci-static/resources/view/homeproxy/client.js:799 +#: htdocs/luci-static/resources/view/homeproxy/client.js:494 +msgid "Match private IP." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:483 +#: htdocs/luci-static/resources/view/homeproxy/client.js:801 +msgid "Match private source IP." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:520 +#: htdocs/luci-static/resources/view/homeproxy/client.js:817 msgid "Match process name." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:526 -#: htdocs/luci-static/resources/view/homeproxy/client.js:803 +#: htdocs/luci-static/resources/view/homeproxy/client.js:524 +#: htdocs/luci-static/resources/view/homeproxy/client.js:821 msgid "Match process path." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:732 +#: htdocs/luci-static/resources/view/homeproxy/client.js:752 msgid "Match query type." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:484 -#: htdocs/luci-static/resources/view/homeproxy/client.js:780 -msgid "Match source GeoIP." +#: htdocs/luci-static/resources/view/homeproxy/client.js:532 +#: htdocs/luci-static/resources/view/homeproxy/client.js:829 +msgid "Match rule set." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:492 -#: htdocs/luci-static/resources/view/homeproxy/client.js:784 +#: htdocs/luci-static/resources/view/homeproxy/client.js:478 +#: htdocs/luci-static/resources/view/homeproxy/client.js:796 msgid "Match source IP CIDR." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:507 -#: htdocs/luci-static/resources/view/homeproxy/client.js:794 +#: htdocs/luci-static/resources/view/homeproxy/client.js:547 +msgid "Match source IP via rule set" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:505 +#: htdocs/luci-static/resources/view/homeproxy/client.js:812 msgid "Match source port range. Format as START:/:END/START:END." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:502 -#: htdocs/luci-static/resources/view/homeproxy/client.js:789 +#: htdocs/luci-static/resources/view/homeproxy/client.js:500 +#: htdocs/luci-static/resources/view/homeproxy/client.js:807 msgid "Match source port." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:530 -#: htdocs/luci-static/resources/view/homeproxy/client.js:807 +#: htdocs/luci-static/resources/view/homeproxy/client.js:528 +#: htdocs/luci-static/resources/view/homeproxy/client.js:825 msgid "Match user name." msgstr "" @@ -1226,8 +1244,8 @@ msgstr "" msgid "Mixed system TCP stack and gVisor UDP stack." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:431 -#: htdocs/luci-static/resources/view/homeproxy/client.js:713 +#: htdocs/luci-static/resources/view/homeproxy/client.js:429 +#: htdocs/luci-static/resources/view/homeproxy/client.js:733 msgid "Mode" msgstr "" @@ -1262,8 +1280,8 @@ msgstr "" msgid "NaïveProxy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:457 -#: htdocs/luci-static/resources/view/homeproxy/client.js:735 +#: htdocs/luci-static/resources/view/homeproxy/client.js:455 +#: htdocs/luci-static/resources/view/homeproxy/client.js:755 #: htdocs/luci-static/resources/view/homeproxy/server.js:730 msgid "Network" msgstr "" @@ -1296,7 +1314,7 @@ msgstr "" msgid "No valid share link found." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:355 +#: htdocs/luci-static/resources/view/homeproxy/client.js:353 #: htdocs/luci-static/resources/view/homeproxy/node.js:389 msgid "Node" msgstr "" @@ -1309,7 +1327,7 @@ msgstr "" msgid "Nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:633 +#: htdocs/luci-static/resources/view/homeproxy/client.js:653 #: htdocs/luci-static/resources/view/homeproxy/node.js:786 #: htdocs/luci-static/resources/view/homeproxy/node.js:825 #: htdocs/luci-static/resources/view/homeproxy/server.js:304 @@ -1327,7 +1345,7 @@ msgstr "" msgid "Obfuscate type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:874 +#: htdocs/luci-static/resources/view/homeproxy/client.js:996 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "" @@ -1335,14 +1353,15 @@ msgstr "" msgid "Only proxy mainland China" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:375 -#: htdocs/luci-static/resources/view/homeproxy/client.js:538 -#: htdocs/luci-static/resources/view/homeproxy/client.js:670 -#: htdocs/luci-static/resources/view/homeproxy/client.js:815 +#: htdocs/luci-static/resources/view/homeproxy/client.js:373 +#: htdocs/luci-static/resources/view/homeproxy/client.js:558 +#: htdocs/luci-static/resources/view/homeproxy/client.js:690 +#: htdocs/luci-static/resources/view/homeproxy/client.js:849 +#: htdocs/luci-static/resources/view/homeproxy/client.js:963 msgid "Outbound" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:356 +#: htdocs/luci-static/resources/view/homeproxy/client.js:354 msgid "Outbound node" msgstr "" @@ -1350,7 +1369,7 @@ msgstr "" msgid "Override address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:307 +#: htdocs/luci-static/resources/view/homeproxy/client.js:305 #: htdocs/luci-static/resources/view/homeproxy/server.js:720 msgid "Override destination" msgstr "" @@ -1359,7 +1378,7 @@ msgstr "" msgid "Override port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:308 +#: htdocs/luci-static/resources/view/homeproxy/client.js:306 #: htdocs/luci-static/resources/view/homeproxy/server.js:721 msgid "Override the connection destination address with the sniffed domain." msgstr "" @@ -1385,6 +1404,7 @@ msgstr "" msgid "Password" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:934 #: htdocs/luci-static/resources/view/homeproxy/node.js:887 #: htdocs/luci-static/resources/view/homeproxy/node.js:920 #: htdocs/luci-static/resources/view/homeproxy/server.js:365 @@ -1396,7 +1416,7 @@ msgstr "" msgid "Peer pubkic key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:297 +#: htdocs/luci-static/resources/view/homeproxy/client.js:295 msgid "" "Performance may degrade slightly, so it is not recommended to enable on when " "it is not needed." @@ -1415,8 +1435,8 @@ msgstr "" msgid "Plugin opts" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:511 -#: htdocs/luci-static/resources/view/homeproxy/client.js:769 +#: htdocs/luci-static/resources/view/homeproxy/client.js:509 +#: htdocs/luci-static/resources/view/homeproxy/client.js:785 #: htdocs/luci-static/resources/view/homeproxy/node.js:534 msgid "Port" msgstr "" @@ -1425,8 +1445,8 @@ msgstr "" msgid "Port %s alrealy exists!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:516 -#: htdocs/luci-static/resources/view/homeproxy/client.js:774 +#: htdocs/luci-static/resources/view/homeproxy/client.js:514 +#: htdocs/luci-static/resources/view/homeproxy/client.js:790 msgid "Port range" msgstr "" @@ -1442,6 +1462,10 @@ msgstr "" msgid "Prefer IPv6" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:493 +msgid "Private IP" +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/node.js:726 #: htdocs/luci-static/resources/view/homeproxy/node.js:960 msgid "Private key" @@ -1451,18 +1475,23 @@ msgstr "" msgid "Private key passphrase" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:521 -#: htdocs/luci-static/resources/view/homeproxy/client.js:798 +#: htdocs/luci-static/resources/view/homeproxy/client.js:482 +#: htdocs/luci-static/resources/view/homeproxy/client.js:800 +msgid "Private source IP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:519 +#: htdocs/luci-static/resources/view/homeproxy/client.js:816 msgid "Process name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:525 -#: htdocs/luci-static/resources/view/homeproxy/client.js:802 +#: htdocs/luci-static/resources/view/homeproxy/client.js:523 +#: htdocs/luci-static/resources/view/homeproxy/client.js:820 msgid "Process path" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:450 -#: htdocs/luci-static/resources/view/homeproxy/client.js:740 +#: htdocs/luci-static/resources/view/homeproxy/client.js:448 +#: htdocs/luci-static/resources/view/homeproxy/client.js:760 #: htdocs/luci-static/resources/view/homeproxy/node.js:592 #: htdocs/luci-static/resources/view/homeproxy/node.js:1004 #: htdocs/luci-static/resources/view/homeproxy/server.js:168 @@ -1479,33 +1508,33 @@ msgid "" "default in v2ray and cannot be disabled)." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:948 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1070 msgid "Proxy Domain List" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:903 -#: htdocs/luci-static/resources/view/homeproxy/client.js:932 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1025 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1054 msgid "Proxy IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:906 -#: htdocs/luci-static/resources/view/homeproxy/client.js:935 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1028 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1057 msgid "Proxy IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:909 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1031 msgid "Proxy MAC-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:890 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1012 msgid "Proxy all except listed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:887 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1009 msgid "Proxy filter mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:889 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1011 msgid "Proxy listed only" msgstr "" @@ -1513,8 +1542,8 @@ msgstr "" msgid "Proxy mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:454 -#: htdocs/luci-static/resources/view/homeproxy/client.js:744 +#: htdocs/luci-static/resources/view/homeproxy/client.js:452 +#: htdocs/luci-static/resources/view/homeproxy/client.js:764 #: htdocs/luci-static/resources/view/homeproxy/node.js:759 #: htdocs/luci-static/resources/view/homeproxy/node.js:829 #: htdocs/luci-static/resources/view/homeproxy/server.js:323 @@ -1540,7 +1569,7 @@ msgstr "" msgid "QUIC stream receive window" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:731 +#: htdocs/luci-static/resources/view/homeproxy/client.js:751 msgid "Query type" msgstr "" @@ -1571,11 +1600,11 @@ msgstr "" msgid "Random version will be used if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:400 +#: htdocs/luci-static/resources/view/homeproxy/client.js:398 msgid "Recursive outbound detected!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:652 +#: htdocs/luci-static/resources/view/homeproxy/client.js:672 msgid "Recursive resolver detected!" msgstr "" @@ -1599,6 +1628,10 @@ msgstr "" msgid "Region ID" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:924 +msgid "Remote" +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/node.js:1352 msgid "Remove %s nodes" msgstr "" @@ -1611,7 +1644,7 @@ msgstr "" msgid "Reserved field bytes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:665 +#: htdocs/luci-static/resources/view/homeproxy/client.js:685 msgid "Resolve strategy" msgstr "" @@ -1619,19 +1652,19 @@ msgstr "" msgid "Resources management" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:857 +#: htdocs/luci-static/resources/view/homeproxy/client.js:891 msgid "Rewrite TTL" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:858 +#: htdocs/luci-static/resources/view/homeproxy/client.js:892 msgid "Rewrite TTL in DNS responses." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:332 +#: htdocs/luci-static/resources/view/homeproxy/client.js:330 msgid "Routing Nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:408 +#: htdocs/luci-static/resources/view/homeproxy/client.js:406 msgid "Routing Rules" msgstr "" @@ -1643,7 +1676,7 @@ msgstr "" msgid "Routing mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:341 +#: htdocs/luci-static/resources/view/homeproxy/client.js:339 msgid "Routing node" msgstr "" @@ -1651,16 +1684,27 @@ msgstr "" msgid "Routing ports" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:417 +#: htdocs/luci-static/resources/view/homeproxy/client.js:415 msgid "Routing rule" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:531 +#: htdocs/luci-static/resources/view/homeproxy/client.js:828 +#: htdocs/luci-static/resources/view/homeproxy/client.js:899 +#: htdocs/luci-static/resources/view/homeproxy/client.js:908 +msgid "Rule set" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:941 +msgid "Rule set URL" +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/node.js:519 msgid "SSH" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:455 -#: htdocs/luci-static/resources/view/homeproxy/client.js:746 +#: htdocs/luci-static/resources/view/homeproxy/client.js:453 +#: htdocs/luci-static/resources/view/homeproxy/client.js:766 msgid "STUN" msgstr "" @@ -1685,7 +1729,7 @@ msgstr "" msgid "Save subscriptions settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:833 +#: htdocs/luci-static/resources/view/homeproxy/client.js:867 #: htdocs/luci-static/resources/view/homeproxy/server.js:88 msgid "Server" msgstr "" @@ -1721,8 +1765,8 @@ msgstr "" msgid "Shadowsocks" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:451 -#: htdocs/luci-static/resources/view/homeproxy/client.js:741 +#: htdocs/luci-static/resources/view/homeproxy/client.js:449 +#: htdocs/luci-static/resources/view/homeproxy/client.js:761 msgid "" "Sniffed protocol, see Sniff for details." @@ -1749,23 +1793,22 @@ msgstr "" msgid "Socks5" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:483 -#: htdocs/luci-static/resources/view/homeproxy/client.js:779 -msgid "Source GeoIP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:491 -#: htdocs/luci-static/resources/view/homeproxy/client.js:783 +#: htdocs/luci-static/resources/view/homeproxy/client.js:477 +#: htdocs/luci-static/resources/view/homeproxy/client.js:795 msgid "Source IP CIDR" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:501 -#: htdocs/luci-static/resources/view/homeproxy/client.js:788 +#: htdocs/luci-static/resources/view/homeproxy/client.js:929 +msgid "Source file" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:499 +#: htdocs/luci-static/resources/view/homeproxy/client.js:806 msgid "Source port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:506 -#: htdocs/luci-static/resources/view/homeproxy/client.js:793 +#: htdocs/luci-static/resources/view/homeproxy/client.js:504 +#: htdocs/luci-static/resources/view/homeproxy/client.js:811 msgid "Source port range" msgstr "" @@ -1833,14 +1876,14 @@ msgstr "" msgid "System" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:574 -#: htdocs/luci-static/resources/view/homeproxy/client.js:635 -#: htdocs/luci-static/resources/view/homeproxy/client.js:840 +#: htdocs/luci-static/resources/view/homeproxy/client.js:594 +#: htdocs/luci-static/resources/view/homeproxy/client.js:655 +#: htdocs/luci-static/resources/view/homeproxy/client.js:874 msgid "System DNS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:458 -#: htdocs/luci-static/resources/view/homeproxy/client.js:736 +#: htdocs/luci-static/resources/view/homeproxy/client.js:456 +#: htdocs/luci-static/resources/view/homeproxy/client.js:756 #: htdocs/luci-static/resources/view/homeproxy/server.js:731 msgid "TCP" msgstr "" @@ -1858,8 +1901,8 @@ msgstr "" msgid "TCP/IP stack." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:453 -#: htdocs/luci-static/resources/view/homeproxy/client.js:743 +#: htdocs/luci-static/resources/view/homeproxy/client.js:451 +#: htdocs/luci-static/resources/view/homeproxy/client.js:763 #: htdocs/luci-static/resources/view/homeproxy/node.js:1057 #: htdocs/luci-static/resources/view/homeproxy/server.js:453 msgid "TLS" @@ -1880,21 +1923,25 @@ msgstr "" 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:628 +#: htdocs/luci-static/resources/view/homeproxy/client.js:648 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:671 +#: htdocs/luci-static/resources/view/homeproxy/client.js:691 msgid "Tag of an outbound for connecting to the dns server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:834 +#: htdocs/luci-static/resources/view/homeproxy/client.js:964 +msgid "Tag of the outbound to download rule set." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:868 msgid "Tag of the target dns server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:539 +#: htdocs/luci-static/resources/view/homeproxy/client.js:559 msgid "Tag of the target outbound." msgstr "" @@ -1912,7 +1959,7 @@ msgstr "" msgid "The ACME CA provider to use." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:564 +#: htdocs/luci-static/resources/view/homeproxy/client.js:584 msgid "The DNS strategy for resolving the domain name in the address." msgstr "" @@ -1926,7 +1973,7 @@ msgstr "" msgid "The QUIC stream-level flow control window for receiving data." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:624 +#: htdocs/luci-static/resources/view/homeproxy/client.js:644 msgid "The address of the dns server. Support UDP, TCP, DoT, DoH and RCode." msgstr "" @@ -1942,25 +1989,26 @@ msgid "" "forward 443 to this port for challenge to succeed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:432 +#: htdocs/luci-static/resources/view/homeproxy/client.js:430 msgid "" "The default rule uses the following matching logic:
(domain || " -"domain_suffix || domain_keyword || domain_regex || geosite || geoip || " -"ip_cidr) &&
(port || port_range) &&
(source_geoip || source_ip_cidr) &&
(source_port || " -"source_port_range) &&
other fields." +"domain_suffix || domain_keyword || domain_regex || ip_cidr || " +"ip_is_private) &&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:714 +#: htdocs/luci-static/resources/view/homeproxy/client.js:734 msgid "" "The default rule uses the following matching logic:
(domain || " -"domain_suffix || domain_keyword || domain_regex || geosite) &&
(port || port_range) &&
(source_geoip || " -"source_ip_cidr) &&
(source_port || source_port_range) &&
other fields." +"domain_suffix || domain_keyword || domain_regex)
&&
(port " +"|| port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:660 +#: htdocs/luci-static/resources/view/homeproxy/client.js:680 msgid "" "The domain strategy for resolving the domain name in the address. dns." "strategy will be used if empty." @@ -2004,7 +2052,7 @@ msgstr "" msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:369 +#: htdocs/luci-static/resources/view/homeproxy/client.js:367 msgid "The network interface to bind to." msgstr "" @@ -2024,7 +2072,7 @@ msgstr "" msgid "The server public key, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:376 +#: htdocs/luci-static/resources/view/homeproxy/client.js:374 msgid "" "The tag of the upstream outbound.
Other dial fields will be ignored when " "enabled." @@ -2082,13 +2130,14 @@ msgstr "" msgid "Tun TCP/UDP" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:922 #: htdocs/luci-static/resources/view/homeproxy/node.js:509 #: htdocs/luci-static/resources/view/homeproxy/server.js:103 msgid "Type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:459 -#: htdocs/luci-static/resources/view/homeproxy/client.js:737 +#: htdocs/luci-static/resources/view/homeproxy/client.js:457 +#: htdocs/luci-static/resources/view/homeproxy/client.js:757 #: htdocs/luci-static/resources/view/homeproxy/server.js:732 msgid "UDP" msgstr "" @@ -2139,6 +2188,14 @@ msgstr "" msgid "Update failed." msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:981 +msgid "Update interval" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:982 +msgid "Update interval of rule set.
1d will be used if empty." +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/node.js:1322 msgid "Update nodes from subscriptions" msgstr "" @@ -2180,10 +2237,6 @@ msgstr "" msgid "Upload..." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:291 -msgid "Upstream archived. Not recommended." -msgstr "" - #: htdocs/luci-static/resources/view/homeproxy/server.js:517 msgid "Use ACME TLS certificate issuer." msgstr "" @@ -2204,8 +2257,8 @@ msgid "" "given." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:529 -#: htdocs/luci-static/resources/view/homeproxy/client.js:806 +#: htdocs/luci-static/resources/view/homeproxy/client.js:527 +#: htdocs/luci-static/resources/view/homeproxy/client.js:824 msgid "User" msgstr "" @@ -2224,7 +2277,7 @@ msgstr "" msgid "VMess" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:930 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1052 msgid "WAN IP Policy" msgstr "" @@ -2316,6 +2369,7 @@ msgstr "" #: htdocs/luci-static/resources/homeproxy.js:248 #: htdocs/luci-static/resources/homeproxy.js:266 #: htdocs/luci-static/resources/view/homeproxy/client.js:176 +#: htdocs/luci-static/resources/view/homeproxy/client.js:945 #: htdocs/luci-static/resources/view/homeproxy/node.js:572 #: htdocs/luci-static/resources/view/homeproxy/node.js:1194 #: htdocs/luci-static/resources/view/homeproxy/server.js:159 @@ -2341,11 +2395,11 @@ msgstr "" msgid "private key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:236 +#: htdocs/luci-static/resources/view/homeproxy/status.js:226 msgid "sing-box client" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/status.js:239 +#: htdocs/luci-static/resources/view/homeproxy/status.js:229 msgid "sing-box server" msgstr "" @@ -2391,6 +2445,8 @@ msgstr "" msgid "valid IP address" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 +#: htdocs/luci-static/resources/view/homeproxy/client.js:953 #: htdocs/luci-static/resources/view/homeproxy/node.js:1277 #: htdocs/luci-static/resources/view/homeproxy/node.js:1280 msgid "valid URL" @@ -2400,8 +2456,8 @@ msgstr "" msgid "valid base64 key with %d characters" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:970 -#: htdocs/luci-static/resources/view/homeproxy/client.js:999 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1092 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1121 msgid "valid hostname" msgstr "" diff --git a/homeproxy/po/zh_Hans/homeproxy.po b/homeproxy/po/zh_Hans/homeproxy.po index bc8afcbd9..dc772c626 100644 --- a/homeproxy/po/zh_Hans/homeproxy.po +++ b/homeproxy/po/zh_Hans/homeproxy.po @@ -16,7 +16,12 @@ msgstr "%s 日志" msgid "%s nodes removed" msgstr "移除了 %s 个节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:444 +#: htdocs/luci-static/resources/view/homeproxy/client.js:537 +#: htdocs/luci-static/resources/view/homeproxy/client.js:834 +msgid "-- Please choose --" +msgstr "-- 请选择 --" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:442 msgid "4 or 6. Not limited if empty." msgstr "4 或 6。留空不限制。" @@ -34,7 +39,7 @@ msgstr "API 令牌" msgid "Accept any if empty." msgstr "留空则不校验。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:865 +#: htdocs/luci-static/resources/view/homeproxy/client.js:987 msgid "Access Control" msgstr "访问控制" @@ -46,11 +51,11 @@ msgstr "访问密钥 ID" msgid "Access key secret" msgstr "访问密钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:699 +#: htdocs/luci-static/resources/view/homeproxy/client.js:719 msgid "Add a DNS rule" msgstr "新增 DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:609 +#: htdocs/luci-static/resources/view/homeproxy/client.js:629 msgid "Add a DNS server" msgstr "新增 DNS 服务器" @@ -58,28 +63,32 @@ msgstr "新增 DNS 服务器" msgid "Add a node" msgstr "新增节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:341 +#: htdocs/luci-static/resources/view/homeproxy/client.js:339 msgid "Add a routing node" msgstr "新增路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:417 +#: htdocs/luci-static/resources/view/homeproxy/client.js:415 msgid "Add a routing rule" msgstr "新增路由规则" +#: htdocs/luci-static/resources/view/homeproxy/client.js:908 +msgid "Add a rule set" +msgstr "新增规则集" + #: htdocs/luci-static/resources/view/homeproxy/server.js:88 msgid "Add a server" msgstr "新增服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:623 +#: htdocs/luci-static/resources/view/homeproxy/client.js:643 #: htdocs/luci-static/resources/view/homeproxy/node.js:529 msgid "Address" msgstr "地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:627 +#: htdocs/luci-static/resources/view/homeproxy/client.js:647 msgid "Address resolver" msgstr "地址解析器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:659 +#: htdocs/luci-static/resources/view/homeproxy/client.js:679 msgid "Address strategy" msgstr "地址解析策略" @@ -139,7 +148,7 @@ msgstr "替代 HTTPS 端口" msgid "An error occurred during updating subscriptions: %s" msgstr "更新订阅时发生错误:%s" -#: htdocs/luci-static/resources/view/homeproxy/client.js:821 +#: htdocs/luci-static/resources/view/homeproxy/client.js:855 msgid "Any" msgstr "任何" @@ -187,8 +196,8 @@ msgid "Auto update" msgstr "自动更新" #: htdocs/luci-static/resources/view/homeproxy/node.js:1255 -msgid "Auto update subscriptions, GeoIP and GeoSite." -msgstr "自动更新订阅、GeoIP 和 GeoSite。" +msgid "Auto update subscriptions." +msgstr "自动更新订阅。" #: htdocs/luci-static/resources/view/homeproxy/node.js:749 msgid "BBR" @@ -207,12 +216,16 @@ msgstr "Base64" msgid "Based on google/gvisor." msgstr "基于 google/gvisor。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:368 -#: htdocs/luci-static/resources/view/homeproxy/client.js:878 +#: htdocs/luci-static/resources/view/homeproxy/client.js:930 +msgid "Binary file" +msgstr "二进制文件" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:366 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1000 msgid "Bind interface" msgstr "绑定接口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:879 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1001 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect." msgstr "绑定出站流量至指定端口。留空自动检测。" @@ -221,26 +234,26 @@ msgstr "绑定出站流量至指定端口。留空自动检测。" msgid "Blacklist mode" msgstr "黑名单模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:319 -#: htdocs/luci-static/resources/view/homeproxy/client.js:545 -#: htdocs/luci-static/resources/view/homeproxy/client.js:823 +#: htdocs/luci-static/resources/view/homeproxy/client.js:317 +#: htdocs/luci-static/resources/view/homeproxy/client.js:565 +#: htdocs/luci-static/resources/view/homeproxy/client.js:857 msgid "Block" msgstr "封锁" -#: htdocs/luci-static/resources/view/homeproxy/client.js:575 -#: htdocs/luci-static/resources/view/homeproxy/client.js:841 +#: htdocs/luci-static/resources/view/homeproxy/client.js:595 +#: htdocs/luci-static/resources/view/homeproxy/client.js:875 msgid "Block DNS queries" msgstr "封锁 DNS 请求" -#: htdocs/luci-static/resources/view/homeproxy/client.js:447 -#: htdocs/luci-static/resources/view/homeproxy/client.js:460 -#: htdocs/luci-static/resources/view/homeproxy/client.js:728 -#: htdocs/luci-static/resources/view/homeproxy/client.js:738 +#: htdocs/luci-static/resources/view/homeproxy/client.js:445 +#: htdocs/luci-static/resources/view/homeproxy/client.js:458 +#: htdocs/luci-static/resources/view/homeproxy/client.js:748 +#: htdocs/luci-static/resources/view/homeproxy/client.js:758 #: htdocs/luci-static/resources/view/homeproxy/server.js:733 msgid "Both" msgstr "全部" -#: htdocs/luci-static/resources/view/homeproxy/client.js:302 +#: htdocs/luci-static/resources/view/homeproxy/client.js:300 msgid "Bypass CN traffic" msgstr "绕过中国流量" @@ -248,7 +261,7 @@ msgstr "绕过中国流量" msgid "Bypass mainland China" msgstr "大陆白名单" -#: htdocs/luci-static/resources/view/homeproxy/client.js:303 +#: htdocs/luci-static/resources/view/homeproxy/client.js:301 msgid "Bypass mainland China traffic via firewall rules by default." msgstr "默认使用防火墙规则绕过中国大陆流量。" @@ -285,15 +298,15 @@ msgstr "检查更新" msgid "China DNS server" msgstr "国内 DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/status.js:213 +#: htdocs/luci-static/resources/view/homeproxy/status.js:203 msgid "China IPv4 list version" msgstr "大陆 IPv4 库版本" -#: htdocs/luci-static/resources/view/homeproxy/status.js:217 +#: htdocs/luci-static/resources/view/homeproxy/status.js:207 msgid "China IPv6 list version" msgstr "大陆 IPv6 库版本" -#: htdocs/luci-static/resources/view/homeproxy/status.js:221 +#: htdocs/luci-static/resources/view/homeproxy/status.js:211 msgid "China list version" msgstr "大陆域名列表版本" @@ -349,19 +362,19 @@ msgstr "连接检查" msgid "Custom routing" msgstr "自定义路由" -#: htdocs/luci-static/resources/view/homeproxy/client.js:745 +#: htdocs/luci-static/resources/view/homeproxy/client.js:765 msgid "DNS" msgstr "DNS" -#: htdocs/luci-static/resources/view/homeproxy/client.js:690 +#: htdocs/luci-static/resources/view/homeproxy/client.js:710 msgid "DNS Rules" msgstr "DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:600 +#: htdocs/luci-static/resources/view/homeproxy/client.js:620 msgid "DNS Servers" msgstr "DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:558 +#: htdocs/luci-static/resources/view/homeproxy/client.js:578 msgid "DNS Settings" msgstr "DNS 设置" @@ -369,12 +382,12 @@ msgstr "DNS 设置" msgid "DNS provider" msgstr "DNS 提供商" -#: htdocs/luci-static/resources/view/homeproxy/client.js:699 +#: htdocs/luci-static/resources/view/homeproxy/client.js:719 msgid "DNS rule" msgstr "DNS 规则" #: htdocs/luci-static/resources/view/homeproxy/client.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client.js:609 +#: htdocs/luci-static/resources/view/homeproxy/client.js:629 msgid "DNS server" msgstr "DNS 服务器" @@ -383,31 +396,31 @@ msgid "DNS01 challenge" msgstr "DNS01 验证" #: htdocs/luci-static/resources/homeproxy.js:17 -#: htdocs/luci-static/resources/view/homeproxy/client.js:438 -#: htdocs/luci-static/resources/view/homeproxy/client.js:720 +#: htdocs/luci-static/resources/view/homeproxy/client.js:436 +#: htdocs/luci-static/resources/view/homeproxy/client.js:740 #: htdocs/luci-static/resources/view/homeproxy/node.js:757 msgid "Default" msgstr "默认" -#: htdocs/luci-static/resources/view/homeproxy/client.js:573 -#: htdocs/luci-static/resources/view/homeproxy/client.js:634 -#: htdocs/luci-static/resources/view/homeproxy/client.js:839 +#: htdocs/luci-static/resources/view/homeproxy/client.js:593 +#: htdocs/luci-static/resources/view/homeproxy/client.js:654 +#: htdocs/luci-static/resources/view/homeproxy/client.js:873 msgid "Default DNS (issued by WAN)" msgstr "默认 DNS(由 WAN 下发)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:568 +#: htdocs/luci-static/resources/view/homeproxy/client.js:588 msgid "Default DNS server" msgstr "默认 DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:563 +#: htdocs/luci-static/resources/view/homeproxy/client.js:583 msgid "Default DNS strategy" msgstr "默认 DNS 解析策略" -#: htdocs/luci-static/resources/view/homeproxy/client.js:666 +#: htdocs/luci-static/resources/view/homeproxy/client.js:686 msgid "Default domain strategy for resolving the domain names." msgstr "默认域名解析策略。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:312 +#: htdocs/luci-static/resources/view/homeproxy/client.js:310 msgid "Default outbound" msgstr "默认出站" @@ -419,38 +432,39 @@ msgstr "默认包封装格式" msgid "Default server name" msgstr "默认服务器名称" -#: htdocs/luci-static/resources/view/homeproxy/client.js:318 -#: htdocs/luci-static/resources/view/homeproxy/client.js:381 -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 -#: htdocs/luci-static/resources/view/homeproxy/client.js:676 -#: htdocs/luci-static/resources/view/homeproxy/client.js:822 +#: htdocs/luci-static/resources/view/homeproxy/client.js:316 +#: htdocs/luci-static/resources/view/homeproxy/client.js:379 +#: htdocs/luci-static/resources/view/homeproxy/client.js:564 +#: htdocs/luci-static/resources/view/homeproxy/client.js:696 +#: htdocs/luci-static/resources/view/homeproxy/client.js:856 +#: htdocs/luci-static/resources/view/homeproxy/client.js:969 #: htdocs/luci-static/resources/view/homeproxy/node.js:510 msgid "Direct" msgstr "直连" -#: htdocs/luci-static/resources/view/homeproxy/client.js:977 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1099 msgid "Direct Domain List" msgstr "直连域名列表" -#: htdocs/luci-static/resources/view/homeproxy/client.js:894 -#: htdocs/luci-static/resources/view/homeproxy/client.js:939 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1016 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1061 msgid "Direct IPv4 IP-s" msgstr "直连 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:897 -#: htdocs/luci-static/resources/view/homeproxy/client.js:942 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1019 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1064 msgid "Direct IPv6 IP-s" msgstr "直连 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:900 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1022 msgid "Direct MAC-s" msgstr "直连 MAC 地址" #: htdocs/luci-static/resources/view/homeproxy/client.js:142 #: htdocs/luci-static/resources/view/homeproxy/client.js:150 #: htdocs/luci-static/resources/view/homeproxy/client.js:187 -#: htdocs/luci-static/resources/view/homeproxy/client.js:317 -#: htdocs/luci-static/resources/view/homeproxy/client.js:888 +#: htdocs/luci-static/resources/view/homeproxy/client.js:315 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1010 #: htdocs/luci-static/resources/view/homeproxy/node.js:604 #: htdocs/luci-static/resources/view/homeproxy/node.js:616 #: htdocs/luci-static/resources/view/homeproxy/node.js:1173 @@ -460,7 +474,7 @@ msgstr "直连 MAC 地址" msgid "Disable" msgstr "禁用" -#: htdocs/luci-static/resources/view/homeproxy/client.js:586 +#: htdocs/luci-static/resources/view/homeproxy/client.js:606 msgid "Disable DNS cache" msgstr "禁用 DNS 缓存" @@ -477,15 +491,15 @@ msgstr "禁用路径 MTU 探测" msgid "Disable TLS ALPN challenge" msgstr "禁用 TLS ALPN 认证" -#: htdocs/luci-static/resources/view/homeproxy/client.js:853 +#: htdocs/luci-static/resources/view/homeproxy/client.js:887 msgid "Disable cache and save cache in this query." msgstr "在本次查询中禁用缓存。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:589 +#: htdocs/luci-static/resources/view/homeproxy/client.js:609 msgid "Disable cache expire" msgstr "缓存永不过期" -#: htdocs/luci-static/resources/view/homeproxy/client.js:852 +#: htdocs/luci-static/resources/view/homeproxy/client.js:886 msgid "Disable dns cache" msgstr "禁用 DNS 缓存" @@ -502,28 +516,28 @@ msgstr "" "禁用路径 MTU 发现 (RFC 8899)。 数据包的大小最多为 1252 (IPv4) / 1232 (IPv6) " "字节。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:471 -#: htdocs/luci-static/resources/view/homeproxy/client.js:757 +#: htdocs/luci-static/resources/view/homeproxy/client.js:469 +#: htdocs/luci-static/resources/view/homeproxy/client.js:777 msgid "Domain keyword" msgstr "域名关键词" -#: htdocs/luci-static/resources/view/homeproxy/client.js:462 -#: htdocs/luci-static/resources/view/homeproxy/client.js:748 +#: htdocs/luci-static/resources/view/homeproxy/client.js:460 +#: htdocs/luci-static/resources/view/homeproxy/client.js:768 msgid "Domain name" msgstr "域名" -#: htdocs/luci-static/resources/view/homeproxy/client.js:475 -#: htdocs/luci-static/resources/view/homeproxy/client.js:761 +#: htdocs/luci-static/resources/view/homeproxy/client.js:473 +#: htdocs/luci-static/resources/view/homeproxy/client.js:781 msgid "Domain regex" msgstr "域名正则表达式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:362 +#: htdocs/luci-static/resources/view/homeproxy/client.js:360 #: htdocs/luci-static/resources/view/homeproxy/server.js:724 msgid "Domain strategy" msgstr "域名解析策略" -#: htdocs/luci-static/resources/view/homeproxy/client.js:467 -#: htdocs/luci-static/resources/view/homeproxy/client.js:753 +#: htdocs/luci-static/resources/view/homeproxy/client.js:465 +#: htdocs/luci-static/resources/view/homeproxy/client.js:773 msgid "Domain suffix" msgstr "域名后缀" @@ -600,10 +614,11 @@ msgstr "修改节点" msgid "Email" msgstr "Email" -#: htdocs/luci-static/resources/view/homeproxy/client.js:350 -#: htdocs/luci-static/resources/view/homeproxy/client.js:426 -#: htdocs/luci-static/resources/view/homeproxy/client.js:618 -#: htdocs/luci-static/resources/view/homeproxy/client.js:708 +#: htdocs/luci-static/resources/view/homeproxy/client.js:348 +#: htdocs/luci-static/resources/view/homeproxy/client.js:424 +#: htdocs/luci-static/resources/view/homeproxy/client.js:638 +#: htdocs/luci-static/resources/view/homeproxy/client.js:728 +#: htdocs/luci-static/resources/view/homeproxy/client.js:917 #: htdocs/luci-static/resources/view/homeproxy/server.js:75 #: htdocs/luci-static/resources/view/homeproxy/server.js:98 msgid "Enable" @@ -651,7 +666,7 @@ msgstr "启用 TCP Brutal 拥塞控制算法。" msgid "Enable UDP fragmentation." msgstr "启用 UDP 分片。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:296 +#: htdocs/luci-static/resources/view/homeproxy/client.js:294 msgid "Enable endpoint-independent NAT" msgstr "启用端点独立 NAT" @@ -687,8 +702,11 @@ msgstr "加密方式" #: htdocs/luci-static/resources/view/homeproxy/client.js:200 #: htdocs/luci-static/resources/view/homeproxy/client.js:229 #: htdocs/luci-static/resources/view/homeproxy/client.js:234 -#: htdocs/luci-static/resources/view/homeproxy/client.js:970 -#: htdocs/luci-static/resources/view/homeproxy/client.js:999 +#: htdocs/luci-static/resources/view/homeproxy/client.js:945 +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 +#: htdocs/luci-static/resources/view/homeproxy/client.js:953 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1092 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1121 #: htdocs/luci-static/resources/view/homeproxy/node.js:465 #: htdocs/luci-static/resources/view/homeproxy/node.js:572 #: htdocs/luci-static/resources/view/homeproxy/node.js:1194 @@ -729,11 +747,15 @@ msgstr "过滤节点" msgid "Flow" msgstr "流控" +#: htdocs/luci-static/resources/view/homeproxy/client.js:928 +msgid "Format" +msgstr "格式" + #: htdocs/luci-static/resources/view/homeproxy/node.js:893 msgid "GET" msgstr "GET" -#: htdocs/luci-static/resources/view/homeproxy/status.js:225 +#: htdocs/luci-static/resources/view/homeproxy/status.js:215 msgid "GFW list version" msgstr "GFW 域名列表版本" @@ -741,15 +763,15 @@ msgstr "GFW 域名列表版本" msgid "GFWList" msgstr "GFWList" -#: htdocs/luci-static/resources/view/homeproxy/client.js:912 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1034 msgid "Gaming mode IPv4 IP-s" msgstr "游戏模式 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:914 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1036 msgid "Gaming mode IPv6 IP-s" msgstr "游戏模式 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:917 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1039 msgid "Gaming mode MAC-s" msgstr "游戏模式 MAC 地址" @@ -758,23 +780,6 @@ msgstr "游戏模式 MAC 地址" msgid "Generic segmentation offload" msgstr "通用分段卸载(GSO)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:487 -msgid "GeoIP" -msgstr "GeoIP" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:204 -msgid "GeoIP version" -msgstr "GeoIP 版本" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:208 -msgid "GeoSite version" -msgstr "GeoSite 版本" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:479 -#: htdocs/luci-static/resources/view/homeproxy/client.js:765 -msgid "Geosite" -msgstr "Geosite" - #: htdocs/luci-static/resources/view/homeproxy/client.js:212 msgid "Global" msgstr "全局" @@ -783,15 +788,15 @@ msgstr "全局" msgid "Global padding" msgstr "全局填充" -#: htdocs/luci-static/resources/view/homeproxy/client.js:919 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1041 msgid "Global proxy IPv4 IP-s" msgstr "全局代理 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:922 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1044 msgid "Global proxy IPv6 IP-s" msgstr "全局代理 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:925 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1047 msgid "Global proxy MAC-s" msgstr "全局代理 MAC 地址" @@ -811,8 +816,8 @@ msgstr "谷歌公共 DNS(8.8.8.8)" msgid "Grant access to homeproxy configuration" msgstr "授予 homeproxy 访问 UCI 配置的权限" -#: htdocs/luci-static/resources/view/homeproxy/client.js:452 -#: htdocs/luci-static/resources/view/homeproxy/client.js:742 +#: htdocs/luci-static/resources/view/homeproxy/client.js:450 +#: htdocs/luci-static/resources/view/homeproxy/client.js:762 #: htdocs/luci-static/resources/view/homeproxy/node.js:511 #: htdocs/luci-static/resources/view/homeproxy/node.js:827 #: htdocs/luci-static/resources/view/homeproxy/server.js:104 @@ -847,7 +852,7 @@ msgstr "心跳间隔" #: htdocs/luci-static/resources/view/homeproxy/client.js:55 #: htdocs/luci-static/resources/view/homeproxy/client.js:57 #: htdocs/luci-static/resources/view/homeproxy/client.js:109 -#: htdocs/luci-static/resources/view/homeproxy/status.js:233 +#: htdocs/luci-static/resources/view/homeproxy/status.js:223 #: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3 msgid "HomeProxy" msgstr "HomeProxy" @@ -891,17 +896,17 @@ msgstr "Hysteria" msgid "Hysteria2" msgstr "Hysteria2" -#: htdocs/luci-static/resources/view/homeproxy/client.js:496 +#: htdocs/luci-static/resources/view/homeproxy/client.js:488 msgid "IP CIDR" msgstr "IP CIDR" -#: htdocs/luci-static/resources/view/homeproxy/client.js:443 -#: htdocs/luci-static/resources/view/homeproxy/client.js:725 +#: htdocs/luci-static/resources/view/homeproxy/client.js:441 +#: htdocs/luci-static/resources/view/homeproxy/client.js:745 msgid "IP version" msgstr "IP 版本" -#: htdocs/luci-static/resources/view/homeproxy/client.js:445 -#: htdocs/luci-static/resources/view/homeproxy/client.js:726 +#: htdocs/luci-static/resources/view/homeproxy/client.js:443 +#: htdocs/luci-static/resources/view/homeproxy/client.js:746 msgid "IPv4" msgstr "IPv4" @@ -909,8 +914,8 @@ msgstr "IPv4" msgid "IPv4 only" msgstr "仅 IPv4" -#: htdocs/luci-static/resources/view/homeproxy/client.js:446 -#: htdocs/luci-static/resources/view/homeproxy/client.js:727 +#: htdocs/luci-static/resources/view/homeproxy/client.js:444 +#: htdocs/luci-static/resources/view/homeproxy/client.js:747 msgid "IPv6" msgstr "IPv6" @@ -938,7 +943,7 @@ msgid "" "If set, the requested domain name will be resolved to IP before routing." msgstr "如果设置,请求的域名将在路由前被解析为 IP 地址。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:363 +#: htdocs/luci-static/resources/view/homeproxy/client.js:361 msgid "" "If set, the server domain name will be resolved to IP before connecting.
dns.strategy will be used if empty." @@ -974,11 +979,11 @@ msgstr "导入" msgid "Import share links" msgstr "导入分享链接" -#: htdocs/luci-static/resources/view/homeproxy/client.js:593 +#: htdocs/luci-static/resources/view/homeproxy/client.js:613 msgid "Independent cache per server" msgstr "独立缓存" -#: htdocs/luci-static/resources/view/homeproxy/client.js:871 +#: htdocs/luci-static/resources/view/homeproxy/client.js:993 msgid "Interface Control" msgstr "接口控制" @@ -989,13 +994,13 @@ msgid "" "seconds)." msgstr "发送心跳包以保持连接存活的时间间隔(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:533 -#: htdocs/luci-static/resources/view/homeproxy/client.js:810 +#: htdocs/luci-static/resources/view/homeproxy/client.js:553 +#: htdocs/luci-static/resources/view/homeproxy/client.js:844 msgid "Invert" msgstr "反转" -#: htdocs/luci-static/resources/view/homeproxy/client.js:534 -#: htdocs/luci-static/resources/view/homeproxy/client.js:811 +#: htdocs/luci-static/resources/view/homeproxy/client.js:554 +#: htdocs/luci-static/resources/view/homeproxy/client.js:845 msgid "Invert match result." msgstr "反转匹配结果" @@ -1003,14 +1008,15 @@ msgstr "反转匹配结果" msgid "Key path" msgstr "证书路径" -#: htdocs/luci-static/resources/view/homeproxy/client.js:885 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1007 msgid "LAN IP Policy" msgstr "LAN IP 策略" -#: htdocs/luci-static/resources/view/homeproxy/client.js:345 -#: htdocs/luci-static/resources/view/homeproxy/client.js:421 -#: htdocs/luci-static/resources/view/homeproxy/client.js:613 -#: htdocs/luci-static/resources/view/homeproxy/client.js:703 +#: htdocs/luci-static/resources/view/homeproxy/client.js:343 +#: htdocs/luci-static/resources/view/homeproxy/client.js:419 +#: htdocs/luci-static/resources/view/homeproxy/client.js:633 +#: htdocs/luci-static/resources/view/homeproxy/client.js:723 +#: htdocs/luci-static/resources/view/homeproxy/client.js:912 #: htdocs/luci-static/resources/view/homeproxy/node.js:504 #: htdocs/luci-static/resources/view/homeproxy/server.js:92 msgid "Label" @@ -1025,7 +1031,7 @@ msgstr "" "提供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > " "1。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:293 +#: htdocs/luci-static/resources/view/homeproxy/client.js:291 msgid "Less compatibility and sometimes better performance." msgstr "有时性能更好。" @@ -1047,7 +1053,7 @@ msgstr "支持的应用层协议协商列表,按顺序排列。" msgid "Listen address" msgstr "监听地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:873 +#: htdocs/luci-static/resources/view/homeproxy/client.js:995 msgid "Listen interfaces" msgstr "监听接口" @@ -1059,6 +1065,10 @@ msgstr "监听端口" msgid "Loading" msgstr "加载中" +#: htdocs/luci-static/resources/view/homeproxy/client.js:923 +msgid "Local" +msgstr "本地" + #: htdocs/luci-static/resources/view/homeproxy/node.js:953 msgid "Local address" msgstr "本地地址" @@ -1083,7 +1093,11 @@ msgstr "主 UDP 节点" msgid "Main node" msgstr "主节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:594 +#: htdocs/luci-static/resources/view/homeproxy/client.js:548 +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:614 msgid "" "Make each DNS server's cache independent for special purposes. If enabled, " "will slightly degrade performance." @@ -1093,89 +1107,93 @@ msgstr "独立缓存每个 DNS 服务器的结果以供特殊用途。启用后 msgid "Masquerade" msgstr "伪装" -#: htdocs/luci-static/resources/view/homeproxy/client.js:488 -msgid "Match GeoIP." -msgstr "匹配 GeoIP。" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:497 +#: htdocs/luci-static/resources/view/homeproxy/client.js:489 msgid "Match IP CIDR." msgstr "匹配 IP CIDR。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:468 -#: htdocs/luci-static/resources/view/homeproxy/client.js:754 +#: htdocs/luci-static/resources/view/homeproxy/client.js:466 +#: htdocs/luci-static/resources/view/homeproxy/client.js:774 msgid "Match domain suffix." msgstr "匹配域名后缀。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:472 -#: htdocs/luci-static/resources/view/homeproxy/client.js:758 +#: htdocs/luci-static/resources/view/homeproxy/client.js:470 +#: htdocs/luci-static/resources/view/homeproxy/client.js:778 msgid "Match domain using keyword." msgstr "使用关键词匹配域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:476 -#: htdocs/luci-static/resources/view/homeproxy/client.js:762 +#: htdocs/luci-static/resources/view/homeproxy/client.js:474 +#: htdocs/luci-static/resources/view/homeproxy/client.js:782 msgid "Match domain using regular expression." msgstr "使用正则表达式匹配域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:463 -#: htdocs/luci-static/resources/view/homeproxy/client.js:749 +#: htdocs/luci-static/resources/view/homeproxy/client.js:461 +#: htdocs/luci-static/resources/view/homeproxy/client.js:769 msgid "Match full domain." msgstr "匹配完整域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:480 -#: htdocs/luci-static/resources/view/homeproxy/client.js:766 -msgid "Match geosite." -msgstr "匹配 geosite。" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:816 +#: htdocs/luci-static/resources/view/homeproxy/client.js:850 msgid "Match outbound." msgstr "匹配出站。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:517 -#: htdocs/luci-static/resources/view/homeproxy/client.js:775 +#: htdocs/luci-static/resources/view/homeproxy/client.js:515 +#: htdocs/luci-static/resources/view/homeproxy/client.js:791 msgid "Match port range. Format as START:/:END/START:END." msgstr "匹配端口范围。格式为 START:/:END/START:END。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:512 -#: htdocs/luci-static/resources/view/homeproxy/client.js:770 +#: htdocs/luci-static/resources/view/homeproxy/client.js:510 +#: htdocs/luci-static/resources/view/homeproxy/client.js:786 msgid "Match port." msgstr "匹配端口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:522 -#: htdocs/luci-static/resources/view/homeproxy/client.js:799 +#: htdocs/luci-static/resources/view/homeproxy/client.js:494 +msgid "Match private IP." +msgstr "匹配私有 IP。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:483 +#: htdocs/luci-static/resources/view/homeproxy/client.js:801 +msgid "Match private source IP." +msgstr "匹配私有源 IP。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:520 +#: htdocs/luci-static/resources/view/homeproxy/client.js:817 msgid "Match process name." msgstr "匹配进程名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:526 -#: htdocs/luci-static/resources/view/homeproxy/client.js:803 +#: htdocs/luci-static/resources/view/homeproxy/client.js:524 +#: htdocs/luci-static/resources/view/homeproxy/client.js:821 msgid "Match process path." msgstr "匹配进程路径。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:732 +#: htdocs/luci-static/resources/view/homeproxy/client.js:752 msgid "Match query type." msgstr "匹配请求类型。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:484 -#: htdocs/luci-static/resources/view/homeproxy/client.js:780 -msgid "Match source GeoIP." -msgstr "匹配源 GeoIP。" +#: htdocs/luci-static/resources/view/homeproxy/client.js:532 +#: htdocs/luci-static/resources/view/homeproxy/client.js:829 +msgid "Match rule set." +msgstr "匹配规则集。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:492 -#: htdocs/luci-static/resources/view/homeproxy/client.js:784 +#: htdocs/luci-static/resources/view/homeproxy/client.js:478 +#: htdocs/luci-static/resources/view/homeproxy/client.js:796 msgid "Match source IP CIDR." msgstr "匹配源 IP CIDR。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:507 -#: htdocs/luci-static/resources/view/homeproxy/client.js:794 +#: htdocs/luci-static/resources/view/homeproxy/client.js:547 +msgid "Match source IP via rule set" +msgstr "通过规则集匹配源 IP" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:505 +#: htdocs/luci-static/resources/view/homeproxy/client.js:812 msgid "Match source port range. Format as START:/:END/START:END." msgstr "匹配源端口范围。格式为 START:/:END/START:END。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:502 -#: htdocs/luci-static/resources/view/homeproxy/client.js:789 +#: htdocs/luci-static/resources/view/homeproxy/client.js:500 +#: htdocs/luci-static/resources/view/homeproxy/client.js:807 msgid "Match source port." msgstr "匹配源端口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:530 -#: htdocs/luci-static/resources/view/homeproxy/client.js:807 +#: htdocs/luci-static/resources/view/homeproxy/client.js:528 +#: htdocs/luci-static/resources/view/homeproxy/client.js:825 msgid "Match user name." msgstr "匹配用户名。" @@ -1252,8 +1270,8 @@ msgstr "混合" msgid "Mixed system TCP stack and gVisor UDP stack." msgstr "混合系统 TCP 栈和 gVisor UDP 栈。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:431 -#: htdocs/luci-static/resources/view/homeproxy/client.js:713 +#: htdocs/luci-static/resources/view/homeproxy/client.js:429 +#: htdocs/luci-static/resources/view/homeproxy/client.js:733 msgid "Mode" msgstr "模式" @@ -1288,8 +1306,8 @@ msgstr "原生" msgid "NaïveProxy" msgstr "NaïveProxy" -#: htdocs/luci-static/resources/view/homeproxy/client.js:457 -#: htdocs/luci-static/resources/view/homeproxy/client.js:735 +#: htdocs/luci-static/resources/view/homeproxy/client.js:455 +#: htdocs/luci-static/resources/view/homeproxy/client.js:755 #: htdocs/luci-static/resources/view/homeproxy/server.js:730 msgid "Network" msgstr "网络" @@ -1322,7 +1340,7 @@ msgstr "无订阅节点" msgid "No valid share link found." msgstr "找不到有效分享链接。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:355 +#: htdocs/luci-static/resources/view/homeproxy/client.js:353 #: htdocs/luci-static/resources/view/homeproxy/node.js:389 msgid "Node" msgstr "节点" @@ -1335,7 +1353,7 @@ msgstr "节点设置" msgid "Nodes" msgstr "节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:633 +#: htdocs/luci-static/resources/view/homeproxy/client.js:653 #: htdocs/luci-static/resources/view/homeproxy/node.js:786 #: htdocs/luci-static/resources/view/homeproxy/node.js:825 #: htdocs/luci-static/resources/view/homeproxy/server.js:304 @@ -1353,7 +1371,7 @@ msgstr "混淆密码" msgid "Obfuscate type" msgstr "混淆类型" -#: htdocs/luci-static/resources/view/homeproxy/client.js:874 +#: htdocs/luci-static/resources/view/homeproxy/client.js:996 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "只处理来自指定接口的流量。留空表示全部。" @@ -1361,14 +1379,15 @@ msgstr "只处理来自指定接口的流量。留空表示全部。" msgid "Only proxy mainland China" msgstr "仅代理中国大陆" -#: htdocs/luci-static/resources/view/homeproxy/client.js:375 -#: htdocs/luci-static/resources/view/homeproxy/client.js:538 -#: htdocs/luci-static/resources/view/homeproxy/client.js:670 -#: htdocs/luci-static/resources/view/homeproxy/client.js:815 +#: htdocs/luci-static/resources/view/homeproxy/client.js:373 +#: htdocs/luci-static/resources/view/homeproxy/client.js:558 +#: htdocs/luci-static/resources/view/homeproxy/client.js:690 +#: htdocs/luci-static/resources/view/homeproxy/client.js:849 +#: htdocs/luci-static/resources/view/homeproxy/client.js:963 msgid "Outbound" msgstr "出站" -#: htdocs/luci-static/resources/view/homeproxy/client.js:356 +#: htdocs/luci-static/resources/view/homeproxy/client.js:354 msgid "Outbound node" msgstr "出站节点" @@ -1376,7 +1395,7 @@ msgstr "出站节点" msgid "Override address" msgstr "覆盖地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:307 +#: htdocs/luci-static/resources/view/homeproxy/client.js:305 #: htdocs/luci-static/resources/view/homeproxy/server.js:720 msgid "Override destination" msgstr "覆盖目标地址" @@ -1385,7 +1404,7 @@ msgstr "覆盖目标地址" msgid "Override port" msgstr "覆盖端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:308 +#: htdocs/luci-static/resources/view/homeproxy/client.js:306 #: htdocs/luci-static/resources/view/homeproxy/server.js:721 msgid "Override the connection destination address with the sniffed domain." msgstr "使用嗅探到的域名覆盖连接目标。" @@ -1411,6 +1430,7 @@ msgstr "数据包编码" msgid "Password" msgstr "密码" +#: htdocs/luci-static/resources/view/homeproxy/client.js:934 #: htdocs/luci-static/resources/view/homeproxy/node.js:887 #: htdocs/luci-static/resources/view/homeproxy/node.js:920 #: htdocs/luci-static/resources/view/homeproxy/server.js:365 @@ -1422,7 +1442,7 @@ msgstr "路径" msgid "Peer pubkic key" msgstr "对端公钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:297 +#: htdocs/luci-static/resources/view/homeproxy/client.js:295 msgid "" "Performance may degrade slightly, so it is not recommended to enable on when " "it is not needed." @@ -1441,8 +1461,8 @@ msgstr "插件" msgid "Plugin opts" msgstr "插件参数" -#: htdocs/luci-static/resources/view/homeproxy/client.js:511 -#: htdocs/luci-static/resources/view/homeproxy/client.js:769 +#: htdocs/luci-static/resources/view/homeproxy/client.js:509 +#: htdocs/luci-static/resources/view/homeproxy/client.js:785 #: htdocs/luci-static/resources/view/homeproxy/node.js:534 msgid "Port" msgstr "端口" @@ -1451,8 +1471,8 @@ msgstr "端口" msgid "Port %s alrealy exists!" msgstr "端口 %s 已存在!" -#: htdocs/luci-static/resources/view/homeproxy/client.js:516 -#: htdocs/luci-static/resources/view/homeproxy/client.js:774 +#: htdocs/luci-static/resources/view/homeproxy/client.js:514 +#: htdocs/luci-static/resources/view/homeproxy/client.js:790 msgid "Port range" msgstr "端口范围" @@ -1468,6 +1488,10 @@ msgstr "优先 IPv4" msgid "Prefer IPv6" msgstr "优先 IPv6" +#: htdocs/luci-static/resources/view/homeproxy/client.js:493 +msgid "Private IP" +msgstr "私有 IP" + #: htdocs/luci-static/resources/view/homeproxy/node.js:726 #: htdocs/luci-static/resources/view/homeproxy/node.js:960 msgid "Private key" @@ -1477,18 +1501,23 @@ msgstr "私钥" msgid "Private key passphrase" msgstr "私钥指纹" -#: htdocs/luci-static/resources/view/homeproxy/client.js:521 -#: htdocs/luci-static/resources/view/homeproxy/client.js:798 +#: htdocs/luci-static/resources/view/homeproxy/client.js:482 +#: htdocs/luci-static/resources/view/homeproxy/client.js:800 +msgid "Private source IP" +msgstr "私有源 IP" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:519 +#: htdocs/luci-static/resources/view/homeproxy/client.js:816 msgid "Process name" msgstr "进程名" -#: htdocs/luci-static/resources/view/homeproxy/client.js:525 -#: htdocs/luci-static/resources/view/homeproxy/client.js:802 +#: htdocs/luci-static/resources/view/homeproxy/client.js:523 +#: htdocs/luci-static/resources/view/homeproxy/client.js:820 msgid "Process path" msgstr "进程路径" -#: htdocs/luci-static/resources/view/homeproxy/client.js:450 -#: htdocs/luci-static/resources/view/homeproxy/client.js:740 +#: htdocs/luci-static/resources/view/homeproxy/client.js:448 +#: htdocs/luci-static/resources/view/homeproxy/client.js:760 #: htdocs/luci-static/resources/view/homeproxy/node.js:592 #: htdocs/luci-static/resources/view/homeproxy/node.js:1004 #: htdocs/luci-static/resources/view/homeproxy/server.js:168 @@ -1505,33 +1534,33 @@ msgid "" "default in v2ray and cannot be disabled)." msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:948 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1070 msgid "Proxy Domain List" msgstr "代理域名列表" -#: htdocs/luci-static/resources/view/homeproxy/client.js:903 -#: htdocs/luci-static/resources/view/homeproxy/client.js:932 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1025 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1054 msgid "Proxy IPv4 IP-s" msgstr "代理 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:906 -#: htdocs/luci-static/resources/view/homeproxy/client.js:935 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1028 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1057 msgid "Proxy IPv6 IP-s" msgstr "代理 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:909 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1031 msgid "Proxy MAC-s" msgstr "代理 MAC 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:890 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1012 msgid "Proxy all except listed" msgstr "仅允许列表外" -#: htdocs/luci-static/resources/view/homeproxy/client.js:887 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1009 msgid "Proxy filter mode" msgstr "代理过滤模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:889 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1011 msgid "Proxy listed only" msgstr "仅允许列表内" @@ -1539,8 +1568,8 @@ msgstr "仅允许列表内" msgid "Proxy mode" msgstr "代理模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:454 -#: htdocs/luci-static/resources/view/homeproxy/client.js:744 +#: htdocs/luci-static/resources/view/homeproxy/client.js:452 +#: htdocs/luci-static/resources/view/homeproxy/client.js:764 #: htdocs/luci-static/resources/view/homeproxy/node.js:759 #: htdocs/luci-static/resources/view/homeproxy/node.js:829 #: htdocs/luci-static/resources/view/homeproxy/server.js:323 @@ -1566,7 +1595,7 @@ msgstr "QUIC 最大双向并发流" msgid "QUIC stream receive window" msgstr "QUIC 流接收窗口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:731 +#: htdocs/luci-static/resources/view/homeproxy/client.js:751 msgid "Query type" msgstr "请求类型" @@ -1597,11 +1626,11 @@ msgstr "运行中" msgid "Random version will be used if empty." msgstr "如留空,则使用随机版本。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:400 +#: htdocs/luci-static/resources/view/homeproxy/client.js:398 msgid "Recursive outbound detected!" msgstr "检测到递归出站!" -#: htdocs/luci-static/resources/view/homeproxy/client.js:652 +#: htdocs/luci-static/resources/view/homeproxy/client.js:672 msgid "Recursive resolver detected!" msgstr "检测到递归解析器!" @@ -1625,6 +1654,10 @@ msgstr "每 %s 秒刷新。" msgid "Region ID" msgstr "区域 ID" +#: htdocs/luci-static/resources/view/homeproxy/client.js:924 +msgid "Remote" +msgstr "远程" + #: htdocs/luci-static/resources/view/homeproxy/node.js:1352 msgid "Remove %s nodes" msgstr "移除 %s 个节点" @@ -1637,7 +1670,7 @@ msgstr "移除所有订阅节点" msgid "Reserved field bytes" msgstr "保留字段字节" -#: htdocs/luci-static/resources/view/homeproxy/client.js:665 +#: htdocs/luci-static/resources/view/homeproxy/client.js:685 msgid "Resolve strategy" msgstr "解析策略" @@ -1645,19 +1678,19 @@ msgstr "解析策略" msgid "Resources management" msgstr "资源管理" -#: htdocs/luci-static/resources/view/homeproxy/client.js:857 +#: htdocs/luci-static/resources/view/homeproxy/client.js:891 msgid "Rewrite TTL" msgstr "重写 TTL" -#: htdocs/luci-static/resources/view/homeproxy/client.js:858 +#: htdocs/luci-static/resources/view/homeproxy/client.js:892 msgid "Rewrite TTL in DNS responses." msgstr "在 DNS 响应中重写 TTL。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:332 +#: htdocs/luci-static/resources/view/homeproxy/client.js:330 msgid "Routing Nodes" msgstr "路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:408 +#: htdocs/luci-static/resources/view/homeproxy/client.js:406 msgid "Routing Rules" msgstr "路由规则" @@ -1669,7 +1702,7 @@ msgstr "路由设置" msgid "Routing mode" msgstr "路由模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:341 +#: htdocs/luci-static/resources/view/homeproxy/client.js:339 msgid "Routing node" msgstr "路由节点" @@ -1677,16 +1710,27 @@ msgstr "路由节点" msgid "Routing ports" msgstr "路由端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:417 +#: htdocs/luci-static/resources/view/homeproxy/client.js:415 msgid "Routing rule" msgstr "路由规则" +#: htdocs/luci-static/resources/view/homeproxy/client.js:531 +#: htdocs/luci-static/resources/view/homeproxy/client.js:828 +#: htdocs/luci-static/resources/view/homeproxy/client.js:899 +#: htdocs/luci-static/resources/view/homeproxy/client.js:908 +msgid "Rule set" +msgstr "规则集" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:941 +msgid "Rule set URL" +msgstr "规则集 URL" + #: htdocs/luci-static/resources/view/homeproxy/node.js:519 msgid "SSH" msgstr "SSH" -#: htdocs/luci-static/resources/view/homeproxy/client.js:455 -#: htdocs/luci-static/resources/view/homeproxy/client.js:746 +#: htdocs/luci-static/resources/view/homeproxy/client.js:453 +#: htdocs/luci-static/resources/view/homeproxy/client.js:766 msgid "STUN" msgstr "STUN" @@ -1711,7 +1755,7 @@ msgstr "保存当前设置" msgid "Save subscriptions settings" msgstr "保存订阅设置" -#: htdocs/luci-static/resources/view/homeproxy/client.js:833 +#: htdocs/luci-static/resources/view/homeproxy/client.js:867 #: htdocs/luci-static/resources/view/homeproxy/server.js:88 msgid "Server" msgstr "服务器" @@ -1747,8 +1791,8 @@ msgstr "ShadowTLS 版本" msgid "Shadowsocks" msgstr "Shadowsocks" -#: htdocs/luci-static/resources/view/homeproxy/client.js:451 -#: htdocs/luci-static/resources/view/homeproxy/client.js:741 +#: htdocs/luci-static/resources/view/homeproxy/client.js:449 +#: htdocs/luci-static/resources/view/homeproxy/client.js:761 msgid "" "Sniffed protocol, see Sniff for details." @@ -1777,23 +1821,22 @@ msgstr "Socks4A" msgid "Socks5" msgstr "Socks5" -#: htdocs/luci-static/resources/view/homeproxy/client.js:483 -#: htdocs/luci-static/resources/view/homeproxy/client.js:779 -msgid "Source GeoIP" -msgstr "源 GeoIP" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:491 -#: htdocs/luci-static/resources/view/homeproxy/client.js:783 +#: htdocs/luci-static/resources/view/homeproxy/client.js:477 +#: htdocs/luci-static/resources/view/homeproxy/client.js:795 msgid "Source IP CIDR" msgstr "源 IP CIDR" -#: htdocs/luci-static/resources/view/homeproxy/client.js:501 -#: htdocs/luci-static/resources/view/homeproxy/client.js:788 +#: htdocs/luci-static/resources/view/homeproxy/client.js:929 +msgid "Source file" +msgstr "源文件" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:499 +#: htdocs/luci-static/resources/view/homeproxy/client.js:806 msgid "Source port" msgstr "源端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:506 -#: htdocs/luci-static/resources/view/homeproxy/client.js:793 +#: htdocs/luci-static/resources/view/homeproxy/client.js:504 +#: htdocs/luci-static/resources/view/homeproxy/client.js:811 msgid "Source port range" msgstr "源端口范围" @@ -1870,14 +1913,14 @@ msgstr "" msgid "System" msgstr "系统" -#: htdocs/luci-static/resources/view/homeproxy/client.js:574 -#: htdocs/luci-static/resources/view/homeproxy/client.js:635 -#: htdocs/luci-static/resources/view/homeproxy/client.js:840 +#: htdocs/luci-static/resources/view/homeproxy/client.js:594 +#: htdocs/luci-static/resources/view/homeproxy/client.js:655 +#: htdocs/luci-static/resources/view/homeproxy/client.js:874 msgid "System DNS" msgstr "系统 DNS" -#: htdocs/luci-static/resources/view/homeproxy/client.js:458 -#: htdocs/luci-static/resources/view/homeproxy/client.js:736 +#: htdocs/luci-static/resources/view/homeproxy/client.js:456 +#: htdocs/luci-static/resources/view/homeproxy/client.js:756 #: htdocs/luci-static/resources/view/homeproxy/server.js:731 msgid "TCP" msgstr "TCP" @@ -1895,8 +1938,8 @@ msgstr "TCP/IP 协议栈" msgid "TCP/IP stack." msgstr "TCP/IP 协议栈。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:453 -#: htdocs/luci-static/resources/view/homeproxy/client.js:743 +#: htdocs/luci-static/resources/view/homeproxy/client.js:451 +#: htdocs/luci-static/resources/view/homeproxy/client.js:763 #: htdocs/luci-static/resources/view/homeproxy/node.js:1057 #: htdocs/luci-static/resources/view/homeproxy/server.js:453 msgid "TLS" @@ -1917,7 +1960,7 @@ msgstr "TLS SNI" 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:628 +#: htdocs/luci-static/resources/view/homeproxy/client.js:648 msgid "" "Tag of a another server to resolve the domain name in the address. Required " "if address contains domain." @@ -1925,15 +1968,19 @@ msgstr "" "用于解析本 DNS 服务器的域名的另一个 DNS 服务器的标签。如果服务器地址包括域名" "则必须。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:671 +#: htdocs/luci-static/resources/view/homeproxy/client.js:691 msgid "Tag of an outbound for connecting to the dns server." msgstr "用于连接到 DNS 服务器的出站标签。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:834 +#: htdocs/luci-static/resources/view/homeproxy/client.js:964 +msgid "Tag of the outbound to download rule set." +msgstr "用于下载规则集的出站标签。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:868 msgid "Tag of the target dns server." msgstr "目标 DNS 服务器标签。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:539 +#: htdocs/luci-static/resources/view/homeproxy/client.js:559 msgid "Tag of the target outbound." msgstr "目标出站标签。" @@ -1951,7 +1998,7 @@ msgstr "腾讯公共 DNS(119.29.29.29)" msgid "The ACME CA provider to use." msgstr "使用的 ACME CA 颁发机构。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:564 +#: htdocs/luci-static/resources/view/homeproxy/client.js:584 msgid "The DNS strategy for resolving the domain name in the address." msgstr "解析域名的默认策略。" @@ -1965,7 +2012,7 @@ msgstr "用于接收数据的 QUIC 连接级流控制窗口。" msgid "The QUIC stream-level flow control window for receiving data." msgstr "用于接收数据的 QUIC 流级流控制窗口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:624 +#: htdocs/luci-static/resources/view/homeproxy/client.js:644 msgid "The address of the dns server. Support UDP, TCP, DoT, DoH and RCode." msgstr "DNS 服务器的地址。支持 UDP、TCP、DoT、DoH 和 RCode。" @@ -1984,35 +2031,36 @@ msgid "" msgstr "" "用于 ACME TLS-ALPN 质询的备用端口; 系统必须将 443 转发到此端口以使质询成功。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:432 +#: htdocs/luci-static/resources/view/homeproxy/client.js:430 msgid "" "The default rule uses the following matching logic:
(domain || " -"domain_suffix || domain_keyword || domain_regex || geosite || geoip || " -"ip_cidr) &&
(port || port_range) &&
(source_geoip || source_ip_cidr) &&
(source_port || " -"source_port_range) &&
other fields." +"domain_suffix || domain_keyword || domain_regex || ip_cidr || " +"ip_is_private)
&&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields." msgstr "" "默认规则使用以下匹配逻辑:
(domain || domain_suffix || " -"domain_keyword || domain_regex || geosite || geoip || ip_cidr) &&
(port || port_range) &&
(source_geoip || " -"source_ip_cidr) &&
(source_port || source_port_range) &&
其他字段." +"domain_keyword || domain_regex || ip_cidr || ip_is_private)
&&
(port || port_range) &&
(source_ip_cidr || " +"source_ip_is_private) &&
(source_port || " +"source_port_range) &&
other fields。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:714 +#: htdocs/luci-static/resources/view/homeproxy/client.js:734 msgid "" "The default rule uses the following matching logic:
(domain || " -"domain_suffix || domain_keyword || domain_regex || geosite) &&
(port || port_range) &&
(source_geoip || " -"source_ip_cidr) &&
(source_port || source_port_range) &&
other fields." +"domain_suffix || domain_keyword || domain_regex)
&&
(port " +"|| port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields." msgstr "" "默认规则使用以下匹配逻辑:
(domain || domain_suffix || " -"domain_keyword || domain_regex || geosite) &&
(port || " -"port_range) &&
(source_geoip || source_ip_cidr) " -"&&
(source_port || source_port_range) &&
other " -"fields." +"domain_keyword || domain_regex)
&&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:660 +#: htdocs/luci-static/resources/view/homeproxy/client.js:680 msgid "" "The domain strategy for resolving the domain name in the address. dns." "strategy will be used if empty." @@ -2056,7 +2104,7 @@ msgstr "可接受的最低 TLS 版本。" msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64." msgstr "为 ARM64/AMD64 设计的现代 ImmortalWrt 代理平台。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:369 +#: htdocs/luci-static/resources/view/homeproxy/client.js:367 msgid "The network interface to bind to." msgstr "绑定到的网络接口。" @@ -2076,7 +2124,7 @@ msgstr "服务端私钥,需要 PEM 格式。" msgid "The server public key, in PEM format." msgstr "服务端公钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:376 +#: htdocs/luci-static/resources/view/homeproxy/client.js:374 msgid "" "The tag of the upstream outbound.
Other dial fields will be ignored when " "enabled." @@ -2141,13 +2189,14 @@ msgstr "Tuic" msgid "Tun TCP/UDP" msgstr "Tun TCP/UDP" +#: htdocs/luci-static/resources/view/homeproxy/client.js:922 #: htdocs/luci-static/resources/view/homeproxy/node.js:509 #: htdocs/luci-static/resources/view/homeproxy/server.js:103 msgid "Type" msgstr "类型" -#: htdocs/luci-static/resources/view/homeproxy/client.js:459 -#: htdocs/luci-static/resources/view/homeproxy/client.js:737 +#: htdocs/luci-static/resources/view/homeproxy/client.js:457 +#: htdocs/luci-static/resources/view/homeproxy/client.js:757 #: htdocs/luci-static/resources/view/homeproxy/server.js:732 msgid "UDP" msgstr "UDP" @@ -2198,6 +2247,14 @@ msgstr "更新 %s 个订阅" msgid "Update failed." msgstr "更新失败。" +#: htdocs/luci-static/resources/view/homeproxy/client.js:981 +msgid "Update interval" +msgstr "更新间隔" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:982 +msgid "Update interval of rule set.
1d will be used if empty." +msgstr "规则集更新间隔。
留空使用 1d。" + #: htdocs/luci-static/resources/view/homeproxy/node.js:1322 msgid "Update nodes from subscriptions" msgstr "从订阅更新节点" @@ -2239,10 +2296,6 @@ msgstr "上传密钥" msgid "Upload..." msgstr "上传..." -#: htdocs/luci-static/resources/view/homeproxy/client.js:291 -msgid "Upstream archived. Not recommended." -msgstr "上游已存档。不建议。" - #: htdocs/luci-static/resources/view/homeproxy/server.js:517 msgid "Use ACME TLS certificate issuer." msgstr "使用 ACME TLS 证书颁发机构。" @@ -2263,8 +2316,8 @@ msgid "" "given." msgstr "用于验证返回证书上的主机名。如允许不安全连接,此配置无效。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:529 -#: htdocs/luci-static/resources/view/homeproxy/client.js:806 +#: htdocs/luci-static/resources/view/homeproxy/client.js:527 +#: htdocs/luci-static/resources/view/homeproxy/client.js:824 msgid "User" msgstr "用户" @@ -2283,7 +2336,7 @@ msgstr "VLESS" msgid "VMess" msgstr "VMess" -#: htdocs/luci-static/resources/view/homeproxy/client.js:930 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1052 msgid "WAN IP Policy" msgstr "WAN IP 策略" @@ -2375,6 +2428,7 @@ msgstr "gVisor" #: htdocs/luci-static/resources/homeproxy.js:248 #: htdocs/luci-static/resources/homeproxy.js:266 #: htdocs/luci-static/resources/view/homeproxy/client.js:176 +#: htdocs/luci-static/resources/view/homeproxy/client.js:945 #: htdocs/luci-static/resources/view/homeproxy/node.js:572 #: htdocs/luci-static/resources/view/homeproxy/node.js:1194 #: htdocs/luci-static/resources/view/homeproxy/server.js:159 @@ -2400,11 +2454,11 @@ msgstr "通过" msgid "private key" msgstr "私钥" -#: htdocs/luci-static/resources/view/homeproxy/status.js:236 +#: htdocs/luci-static/resources/view/homeproxy/status.js:226 msgid "sing-box client" msgstr "sing-box 客户端" -#: htdocs/luci-static/resources/view/homeproxy/status.js:239 +#: htdocs/luci-static/resources/view/homeproxy/status.js:229 msgid "sing-box server" msgstr "sing-box 服务端" @@ -2451,6 +2505,8 @@ msgstr "v3" msgid "valid IP address" msgstr "有效 IP 地址" +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 +#: htdocs/luci-static/resources/view/homeproxy/client.js:953 #: htdocs/luci-static/resources/view/homeproxy/node.js:1277 #: htdocs/luci-static/resources/view/homeproxy/node.js:1280 msgid "valid URL" @@ -2460,8 +2516,8 @@ msgstr "有效网址" msgid "valid base64 key with %d characters" msgstr "包含 %d 个字符的有效 base64 密钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:970 -#: htdocs/luci-static/resources/view/homeproxy/client.js:999 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1092 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1121 msgid "valid hostname" msgstr "有效主机名" diff --git a/homeproxy/root/etc/homeproxy/scripts/generate_client.uc b/homeproxy/root/etc/homeproxy/scripts/generate_client.uc index 050281d03..d308a517c 100755 --- a/homeproxy/root/etc/homeproxy/scripts/generate_client.uc +++ b/homeproxy/root/etc/homeproxy/scripts/generate_client.uc @@ -25,6 +25,7 @@ uci.load(uciconfig); const uciinfra = 'infra', ucimain = 'config', + uciexp = 'experimental', ucicontrol = 'control'; const ucidnssetting = 'dns', @@ -36,6 +37,7 @@ const uciroutingsetting = 'routing', uciroutingrule = 'routing_rule'; const ucinode = 'node'; +const uciruleset = 'ruleset'; const routing_mode = uci.get(uciconfig, ucimain, 'routing_mode') || 'bypass_mainland_china'; @@ -207,8 +209,8 @@ function generate_outbound(node) { padding: (node.multiplex_padding === '1'), brutal: (node.multiplex_brutal === '1') ? { enabled: true, - up_mbps: node.multiplex_brutal_up, - down_mbps: node.multiplex_brutal_down + up_mbps: strToInt(node.multiplex_brutal_up), + down_mbps: strToInt(node.multiplex_brutal_down) } : null } : null, tls: (node.tls === '1') ? { @@ -297,6 +299,16 @@ function get_resolver(cfg) { else return 'cfg-' + cfg + '-dns'; } + +function get_ruleset(cfg) { + if (isEmpty(cfg)) + return null; + + let rules = []; + for (let i in cfg) + push(rules, isEmpty(i) ? null : 'cfg-' + i + '-rule'); + return rules; +} /* Config helper end */ const config = {}; @@ -407,16 +419,16 @@ if (!isEmpty(main_node)) { domain_suffix: cfg.domain_suffix, domain_keyword: cfg.domain_keyword, domain_regex: cfg.domain_regex, - geosite: cfg.geosite, port: parse_port(cfg.port), port_range: cfg.port_range, - source_geoip: cfg.source_geoip, source_ip_cidr: cfg.source_ip_cidr, + source_ip_is_private: (cfg.source_ip_is_private === '1') || null, source_port: parse_port(cfg.source_port), source_port_range: cfg.source_port_range, process_name: cfg.process_name, process_path: cfg.process_path, user: cfg.user, + rule_set: get_ruleset(cfg.rule_set), invert: (cfg.invert === '1') || null, outbound: get_outbound(cfg.outbound), server: get_resolver(cfg.server), @@ -536,16 +548,6 @@ if (!isEmpty(main_node)) { /* Routing rules start */ /* Default settings */ config.route = { - geoip: !isEmpty(default_outbound) ? { - path: HP_DIR + '/resources/geoip.db', - download_url: 'https://github.com/1715173329/sing-geoip/releases/latest/download/geoip.db', - download_detour: get_outbound(default_outbound) - } : null, - geosite: !isEmpty(default_outbound) ? { - path: HP_DIR + '/resources/geosite.db', - download_url: 'https://github.com/1715173329/sing-geosite/releases/latest/download/geosite.db', - download_detour: get_outbound(default_outbound) - } : null, rules: [ { inbound: 'dns-in', @@ -556,6 +558,7 @@ config.route = { outbound: 'dns-out' } ], + rule_set: [], auto_detect_interface: isEmpty(default_interface) ? true : null, default_interface: default_interface }; @@ -590,11 +593,10 @@ if (!isEmpty(main_node)) { domain_suffix: cfg.domain_suffix, domain_keyword: cfg.domain_keyword, domain_regex: cfg.domain_regex, - geosite: cfg.geosite, - source_geoip: cfg.source_geoip, - geoip: cfg.geoip, source_ip_cidr: cfg.source_ip_cidr, + source_ip_is_private: (cfg.source_ip_is_private === '1') || null, ip_cidr: cfg.ip_cidr, + ip_is_private: (cfg.ip_is_private === '1') || null, source_port: parse_port(cfg.source_port), source_port_range: cfg.source_port_range, port: parse_port(cfg.port), @@ -602,14 +604,45 @@ if (!isEmpty(main_node)) { process_name: cfg.process_name, process_path: cfg.process_path, user: cfg.user, + rule_set: get_ruleset(cfg.rule_set), + rule_set_ipcidr_match_source: (cfg.rule_set_ipcidr_match_source === '1') || null, invert: (cfg.invert === '1') || null, outbound: get_outbound(cfg.outbound) }); }); config.route.final = get_outbound(default_outbound); +}; + +/* Rule set */ +if (routing_mode === 'custom') { + uci.foreach(uciconfig, uciruleset, (cfg) => { + if (cfg.enabled !== '1') + return null; + + push(config.route.rule_set, { + type: cfg.type, + tag: 'cfg-' + cfg['.name'] + '-rule', + format: cfg.format, + path: cfg.path, + url: cfg.url, + download_detour: get_outbound(cfg.outbound), + update_interval: cfg.update_interval + }); + }); } /* Routing rules end */ +/* Experimental start */ +if (routing_mode === 'custom') { + config.experimental = { + cache_file: { + enabled: true, + path: HP_DIR + '/cache.db' + } + }; +} +/* Experimental end */ + system('mkdir -p ' + RUN_DIR); writefile(RUN_DIR + '/sing-box-c.json', sprintf('%.J\n', removeBlankAttrs(config))); diff --git a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc index eb462e29e..c8f212544 100755 --- a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc +++ b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc @@ -103,8 +103,8 @@ uci.foreach(uciconfig, uciserver, (cfg) => { padding: (cfg.multiplex_padding === '1'), brutal: (cfg.multiplex_brutal === '1') ? { enabled: true, - up_mbps: cfg.multiplex_brutal_up, - down_mbps: cfg.multiplex_brutal_down + up_mbps: strToInt(cfg.multiplex_brutal_up), + down_mbps: strToInt(cfg.multiplex_brutal_down) } : null } : null, diff --git a/homeproxy/root/etc/homeproxy/scripts/update_crond.sh b/homeproxy/root/etc/homeproxy/scripts/update_crond.sh index ddb6589b8..d3c608ab7 100755 --- a/homeproxy/root/etc/homeproxy/scripts/update_crond.sh +++ b/homeproxy/root/etc/homeproxy/scripts/update_crond.sh @@ -9,10 +9,4 @@ for i in "china_ip4" "china_ip6" "gfw_list" "china_list"; do "$SCRIPTS_DIR"/update_resources.sh "$i" done -if [ "$(uci -q get homeproxy.config.routing_mode)" = "custom" ]; then - for i in "geoip" "geosite"; do - "$SCRIPTS_DIR"/update_resources.sh "$i" - done -fi - "$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 4c9c494dd..6e80fdd19 100755 --- a/homeproxy/root/etc/homeproxy/scripts/update_resources.sh +++ b/homeproxy/root/etc/homeproxy/scripts/update_resources.sh @@ -37,51 +37,6 @@ to_upper() { echo -e "$1" | tr "[a-z]" "[A-Z]" } -check_geodata_update() { - local geotype="$1" - local georepo="$2" - local wget="wget --timeout=10 -q" - - set_lock "set" "$geotype" - - local geodata_ver="$($wget -O- "https://api.github.com/repos/$georepo/releases/latest" | jsonfilter -e "@.tag_name")" - if [ -z "$geodata_ver" ]; then - log "[$(to_upper "$geotype")] Failed to get the latest version, please retry later." - - set_lock "remove" "$geotype" - return 1 - fi - - local local_geodata_ver="$(cat "$RESOURCES_DIR/$geotype.ver" 2>"/dev/null" || echo "NOT FOUND")" - if [ "$local_geodata_ver" = "$geodata_ver" ]; then - log "[$(to_upper "$geotype")] Current version: $geodata_ver." - log "[$(to_upper "$geotype")] You're already at the latest version." - - set_lock "remove" "$geotype" - return 3 - else - log "[$(to_upper "$geotype")] Local version: $local_geodata_ver, latest version: $geodata_ver." - fi - - local geodata_hash - $wget "https://github.com/$georepo/releases/download/$geodata_ver/$geotype.db" -O "$RUN_DIR/$geotype.db" - geodata_hash="$($wget -O- "https://github.com/$georepo/releases/download/$geodata_ver/$geotype.db.sha256sum" | awk '{print $1}')" - if ! echo -e "$geodata_hash $RUN_DIR/$geotype.db" | sha256sum -s -c -; then - rm -f "$RUN_DIR/$geotype.db" - log "[$(to_upper "$geotype")] Update failed." - - set_lock "remove" "$geotype" - return 1 - fi - - mv -f "$RUN_DIR/$geotype.db" "$RESOURCES_DIR/$geotype.db" - echo -e "$geodata_ver" > "$RESOURCES_DIR/$geotype.ver" - log "[$(to_upper "$geotype")] Successfully updated." - - set_lock "remove" "$geotype" - return 0 -} - check_list_update() { local listtype="$1" local listrepo="$2" @@ -130,12 +85,6 @@ check_list_update() { } case "$1" in -"geoip") - check_geodata_update "$1" "1715173329/sing-geoip" - ;; -"geosite") - check_geodata_update "$1" "1715173329/sing-geosite" - ;; "china_ip4") check_list_update "$1" "1715173329/IPCIDR-CHINA" "master" "ipv4.txt" ;; @@ -149,7 +98,7 @@ case "$1" in check_list_update "$1" "Loyalsoldier/v2ray-rules-dat" "release" "direct-list.txt" ;; *) - echo -e "Usage: $0 " + echo -e "Usage: $0 " exit 1 ;; esac diff --git a/homeproxy/root/etc/init.d/homeproxy b/homeproxy/root/etc/init.d/homeproxy index 7b13b8268..9e56c64e3 100755 --- a/homeproxy/root/etc/init.d/homeproxy +++ b/homeproxy/root/etc/init.d/homeproxy @@ -258,6 +258,11 @@ start_service() { procd_set_param respawn procd_close_instance + # Prepare ruleset directory for custom routing mode + if [ "$routing_mode" = "custom" ]; then + [ -d "$HP_DIR/ruleset" ] || mkdir -p "$HP_DIR/ruleset" + fi + # Update permissions for ujail if [ "$outbound_node" != "nil" ]; then echo > "$RUN_DIR/sing-box-c.log" diff --git a/luci-app-smartdns/Makefile b/luci-app-smartdns/Makefile index 2c3f9f868..7e362a21f 100644 --- a/luci-app-smartdns/Makefile +++ b/luci-app-smartdns/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2018-2023 Ruilin Peng (Nick) . +# Copyright (C) 2018-2024 Ruilin Peng (Nick) . # # smartdns is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/luci-app-smartdns/luasrc/controller/smartdns.lua b/luci-app-smartdns/luasrc/controller/smartdns.lua index be70065f8..616fdb9c0 100644 --- a/luci-app-smartdns/luasrc/controller/smartdns.lua +++ b/luci-app-smartdns/luasrc/controller/smartdns.lua @@ -1,5 +1,5 @@ -- --- Copyright (C) 2018-2023 Ruilin Peng (Nick) . +-- Copyright (C) 2018-2024 Ruilin Peng (Nick) . -- -- smartdns is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff --git a/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua b/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua index 64f05c1d5..ed8b40e5e 100644 --- a/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua +++ b/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua @@ -1,5 +1,5 @@ -- --- Copyright (C) 2018-2023 Ruilin Peng (Nick) . +-- Copyright (C) 2018-2024 Ruilin Peng (Nick) . -- -- smartdns is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff --git a/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua b/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua index 02b7a5f4b..f2fc1d23b 100644 --- a/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua +++ b/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua @@ -1,5 +1,5 @@ -- --- Copyright (C) 2018-2023 Ruilin Peng (Nick) . +-- Copyright (C) 2018-2024 Ruilin Peng (Nick) . -- -- smartdns is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by @@ -155,4 +155,4 @@ o = s:option(Value, "addition_arg", translate("Additional Server Args"), transla o.default = "" o.rempty = true -return m \ No newline at end of file +return m diff --git a/luci-app-smartdns/luasrc/model/smartdns.lua b/luci-app-smartdns/luasrc/model/smartdns.lua index d71742b74..777b775c4 100644 --- a/luci-app-smartdns/luasrc/model/smartdns.lua +++ b/luci-app-smartdns/luasrc/model/smartdns.lua @@ -1,5 +1,5 @@ -- --- Copyright (C) 2018-2023 Ruilin Peng (Nick) . +-- Copyright (C) 2018-2024 Ruilin Peng (Nick) . -- -- smartdns is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff --git a/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns b/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns index 88efcacb5..8c9580c1b 100644 --- a/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns +++ b/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2018-2023 Ruilin Peng (Nick) . +# Copyright (C) 2018-2024 Ruilin Peng (Nick) . # # smartdns is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by