mirror of
https://github.com/kenzok8/small-package
synced 2025-04-04 03:01:27 +08:00
update 2025-03-04 00:24:44
This commit is contained in:
parent
709a0a9be9
commit
c0bcb90923
@ -1,6 +1,6 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_VERSION:=1.19.5
|
||||
PKG_VERSION:=1.20.0
|
||||
|
||||
LUCI_TITLE:=LuCI Support for nikki
|
||||
LUCI_DEPENDS:=+luci-base +nikki
|
||||
|
@ -25,6 +25,12 @@ const callNikkiVersion = rpc.declare({
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callNikkiProfile = rpc.declare({
|
||||
object: 'luci.nikki',
|
||||
method: 'profile',
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callNikkiUpdateSubscription = rpc.declare({
|
||||
object: 'luci.nikki',
|
||||
method: 'update_subscription',
|
||||
@ -84,13 +90,18 @@ return baseclass.extend({
|
||||
return callNikkiVersion();
|
||||
},
|
||||
|
||||
profile: function () {
|
||||
return callNikkiProfile();
|
||||
},
|
||||
|
||||
updateSubscription: function (section_id) {
|
||||
return callNikkiUpdateSubscription(section_id);
|
||||
},
|
||||
|
||||
api: async function (method, path, query, body) {
|
||||
const apiPort = uci.get('nikki', 'mixin', 'api_port');
|
||||
const apiSecret = uci.get('nikki', 'mixin', 'api_secret');
|
||||
const apiListen = uci.get('nikki', 'mixin', 'api_listen');
|
||||
const apiSecret = uci.get('nikki', 'mixin', 'api_secret') ?? '';
|
||||
const apiPort = apiListen.substring(apiListen.lastIndexOf(':') + 1);
|
||||
const url = `http://${window.location.hostname}:${apiPort}${path}`;
|
||||
return request.request(url, {
|
||||
method: method,
|
||||
@ -100,10 +111,11 @@ return baseclass.extend({
|
||||
})
|
||||
},
|
||||
|
||||
openDashboard: function () {
|
||||
openDashboard: async function () {
|
||||
const uiName = uci.get('nikki', 'mixin', 'ui_name');
|
||||
const apiPort = uci.get('nikki', 'mixin', 'api_port');
|
||||
const apiSecret = encodeURIComponent(uci.get('nikki', 'mixin', 'api_secret'));
|
||||
const apiListen = uci.get('nikki', 'mixin', 'api_listen');
|
||||
const apiSecret = encodeURIComponent(uci.get('nikki', 'mixin', 'api_secret') ?? '');
|
||||
const apiPort = apiListen.substring(apiListen.lastIndexOf(':') + 1);
|
||||
const params = {
|
||||
host: window.location.hostname,
|
||||
hostname: window.location.hostname,
|
||||
|
@ -18,103 +18,104 @@ return view.extend({
|
||||
|
||||
m = new form.Map('nikki');
|
||||
|
||||
s = m.section(form.NamedSection, 'config', 'config', _('Mixin Config'));
|
||||
|
||||
o = s.option(form.Flag, 'mixin', _('Enable'));
|
||||
o.rmempty = false;
|
||||
|
||||
s = m.section(form.NamedSection, 'mixin', 'mixin', _('Mixin Option'));
|
||||
|
||||
s.tab('general', _('General Config'));
|
||||
|
||||
o = s.taboption('general', form.ListValue, 'log_level', '*' + ' ' + _('Log Level'));
|
||||
o = s.taboption('general', form.ListValue, 'log_level', _('Log Level'));
|
||||
o.optional = true;
|
||||
o.value('silent');
|
||||
o.value('error');
|
||||
o.value('warning');
|
||||
o.value('info');
|
||||
o.value('debug');
|
||||
|
||||
o = s.taboption('general', form.ListValue, 'mode', '*' + ' ' + _('Mode'));
|
||||
o = s.taboption('general', form.ListValue, 'mode', _('Mode'));
|
||||
o.optional = true;
|
||||
o.value('global', _('Global Mode'));
|
||||
o.value('rule', _('Rule Mode'));
|
||||
o.value('direct', _('Direct Mode'));
|
||||
|
||||
o = s.taboption('general', form.ListValue, 'match_process', '*' + ' ' + _('Match Process'));
|
||||
o.value('strict', _('Auto'));
|
||||
o.value('always', _('Enable'));
|
||||
o.value('off', _('Disable'));
|
||||
o = s.taboption('general', form.ListValue, 'match_process', _('Match Process'));
|
||||
o.optional = true;
|
||||
o.value('off');
|
||||
o.value('strict');
|
||||
o.value('always');
|
||||
|
||||
o = s.taboption('general', widgets.NetworkSelect, 'outbound_interface', '*' + ' ' + _('Outbound Interface'));
|
||||
o = s.taboption('general', widgets.NetworkSelect, 'outbound_interface', _('Outbound Interface'));
|
||||
o.optional = true;
|
||||
|
||||
o = s.taboption('general', form.Flag, 'ipv6', '*' + ' ' + _('IPv6'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('general', form.ListValue, 'ipv6', _('IPv6'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('general', form.Flag, 'unify_delay', _('Unify Delay'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('general', form.ListValue, 'unify_delay', _('Unify Delay'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('general', form.Flag, 'tcp_concurrent', _('TCP Concurrent'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('general', form.ListValue, 'tcp_concurrent', _('TCP Concurrent'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('general', form.Value, 'tcp_keep_alive_idle', _('TCP Keep Alive Idle'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '600';
|
||||
|
||||
o = s.taboption('general', form.Value, 'tcp_keep_alive_interval', _('TCP Keep Alive Interval'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '15';
|
||||
|
||||
s.tab('external_control', _('External Control Config'));
|
||||
|
||||
o = s.taboption('external_control', form.Value, 'ui_path', '*' + ' ' + _('UI Path'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('external_control', form.Value, 'ui_name', '*' + ' ' + _('UI Name'));
|
||||
o = s.taboption('external_control', form.Value, 'ui_name', _('UI Name'));
|
||||
|
||||
o = s.taboption('external_control', form.Value, 'ui_url', '*' + ' ' + _('UI Url'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('external_control', form.Value, 'ui_url', _('UI Url'));
|
||||
o.value('https://github.com/Zephyruso/zashboard/archive/refs/heads/gh-pages.zip', 'Zashboard');
|
||||
o.value('https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip', 'MetaCubeXD');
|
||||
o.value('https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip', 'YACD');
|
||||
o.value('https://github.com/MetaCubeX/Razord-meta/archive/refs/heads/gh-pages.zip', 'Razord');
|
||||
|
||||
o = s.taboption('external_control', form.Value, 'api_port', '*' + ' ' + _('API Port'));
|
||||
o.datatype = 'port';
|
||||
o.placeholder = '9090';
|
||||
o = s.taboption('external_control', form.Value, 'api_listen', '*' + ' ' + _('API Listen'));
|
||||
o.datatype = 'ipaddrport(1)';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('external_control', form.Value, 'api_secret', '*' + ' ' + _('API Secret'));
|
||||
o = s.taboption('external_control', form.Value, 'api_secret', _('API Secret'));
|
||||
o.password = true;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('external_control', form.Flag, 'selection_cache', '*' + ' ' + _('Save Proxy Selection'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('external_control', form.ListValue, 'selection_cache', _('Save Proxy Selection'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
s.tab('inbound', _('Inbound Config'));
|
||||
|
||||
o = s.taboption('inbound', form.Flag, 'allow_lan', '*' + ' ' + _('Allow Lan'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('inbound', form.ListValue, 'allow_lan', _('Allow Lan'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('inbound', form.Value, 'http_port', '*' + ' ' + _('HTTP Port'));
|
||||
o = s.taboption('inbound', form.Value, 'http_port', _('HTTP Port'));
|
||||
o.datatype = 'port';
|
||||
o.placeholder = '8080';
|
||||
|
||||
o = s.taboption('inbound', form.Value, 'socks_port', '*' + ' ' + _('SOCKS Port'));
|
||||
o = s.taboption('inbound', form.Value, 'socks_port', _('SOCKS Port'));
|
||||
o.datatype = 'port';
|
||||
o.placeholder = '1080';
|
||||
|
||||
o = s.taboption('inbound', form.Value, 'mixed_port', '*' + ' ' + _('Mixed Port'));
|
||||
o = s.taboption('inbound', form.Value, 'mixed_port', _('Mixed Port'));
|
||||
o.datatype = 'port';
|
||||
o.placeholder = '7890';
|
||||
|
||||
o = s.taboption('inbound', form.Value, 'redir_port', '*' + ' ' + _('Redirect Port'));
|
||||
o.datatype = 'port';
|
||||
o.placeholder = '7891';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('inbound', form.Value, 'tproxy_port', '*' + ' ' + _('TPROXY Port'));
|
||||
o.datatype = 'port';
|
||||
o.placeholder = '7892';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('inbound', form.Flag, 'authentication', '*' + ' ' + _('Overwrite Authentication'));
|
||||
o = s.taboption('inbound', form.Flag, 'authentication', _('Overwrite Authentication'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('inbound', form.SectionValue, '_authentications', form.TableSection, 'authentication', _('Edit Authentications'));
|
||||
@ -137,90 +138,97 @@ return view.extend({
|
||||
|
||||
s.tab('tun', _('TUN Config'));
|
||||
|
||||
o = s.taboption('tun', form.Value, 'tun_device', '*' + ' ' + _('Device'));
|
||||
o = s.taboption('tun', form.Value, 'tun_device', '*' + ' ' + _('Device Name'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('tun', form.ListValue, 'tun_stack', '*' + ' ' + _('Stack'));
|
||||
o = s.taboption('tun', form.ListValue, 'tun_stack', _('Stack'));
|
||||
o.optional = true;
|
||||
o.value('system', 'System');
|
||||
o.value('gvisor', 'gVisor');
|
||||
o.value('mixed', 'Mixed');
|
||||
|
||||
o = s.taboption('tun', form.Value, 'tun_mtu', '*' + ' ' + _('MTU'));
|
||||
o = s.taboption('tun', form.Value, 'tun_mtu', _('MTU'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '9000';
|
||||
|
||||
o = s.taboption('tun', form.Flag, 'tun_gso', '*' + ' ' + _('GSO'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('tun', form.ListValue, 'tun_gso', _('GSO'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('tun', form.Value, 'tun_gso_max_size', '*' + ' ' + _('GSO Max Size'));
|
||||
o = s.taboption('tun', form.Value, 'tun_gso_max_size', _('GSO Max Size'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '65536';
|
||||
|
||||
o = s.taboption('tun', form.ListValue, 'tun_endpoint_independent_nat', _('Endpoint Independent NAT'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('tun', form.Flag, 'tun_dns_hijack', _('Overwrite DNS Hijack'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('tun', form.DynamicList, 'tun_dns_hijacks', _('Edit DNS Hijacks'));
|
||||
o.retain = true;
|
||||
o.depends('tun_gso', '1');
|
||||
|
||||
o = s.taboption('tun', form.Flag, 'tun_endpoint_independent_nat', '*' + ' ' + _('Endpoint Independent NAT'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('tun', form.Flag, 'tun_dns_hijack', '*' + ' ' + _('Overwrite DNS Hijack'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('tun', form.DynamicList, 'tun_dns_hijacks', '*' + ' ' + _('Edit DNS Hijacks'));
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
o.depends('tun_dns_hijack', '1');
|
||||
o.value('tcp://any:53');
|
||||
o.value('udp://any:53');
|
||||
|
||||
s.tab('dns', _('DNS Config'));
|
||||
|
||||
o = s.taboption('dns', form.Value, 'dns_port', '*' + ' ' + _('DNS Port'));
|
||||
o.datatype = 'port';
|
||||
o.placeholder = '1053';
|
||||
|
||||
o = s.taboption('dns', form.Flag, 'dns_ipv6', '*' + ' ' + _('IPv6'));
|
||||
o = s.taboption('dns', form.Value, 'dns_listen', '*' + ' ' + _('DNS Listen'));
|
||||
o.datatype = 'ipaddrport(1)';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('dns', form.ListValue, 'dns_ipv6', _('IPv6'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('dns', form.ListValue, 'dns_mode', '*' + ' ' + _('DNS Mode'));
|
||||
o.value('fake-ip', 'Fake-IP');
|
||||
o.value('redir-host', 'Redir-Host');
|
||||
o.value('fake-ip', 'Fake-IP');
|
||||
|
||||
o = s.taboption('dns', form.Value, 'fake_ip_range', '*' + ' ' + _('Fake-IP Range'));
|
||||
o.datatype = 'cidr4';
|
||||
o.placeholder = '198.18.0.1/16';
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
o.depends('dns_mode', 'fake-ip');
|
||||
|
||||
o = s.taboption('dns', form.Flag, 'fake_ip_filter', _('Overwrite Fake-IP Filter'));
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
o.depends('dns_mode', 'fake-ip');
|
||||
|
||||
o = s.taboption('dns', form.DynamicList, 'fake_ip_filters', _('Edit Fake-IP Filters'));
|
||||
o.retain = true;
|
||||
o.depends({ 'dns_mode': 'fake-ip', 'fake_ip_filter': '1' });
|
||||
o.depends('fake_ip_filter', '1');
|
||||
|
||||
o = s.taboption('dns', form.ListValue, 'fake_ip_filter_mode', _('Fake-IP Filter Mode'));
|
||||
o.retain = true;
|
||||
o.optional = true;
|
||||
o.value('blacklist', _('Block Mode'));
|
||||
o.value('whitelist', _('Allow Mode'));
|
||||
o.depends({ 'dns_mode': 'fake-ip', 'fake_ip_filter': '1' });
|
||||
|
||||
o = s.taboption('dns', form.Flag, 'fake_ip_cache', '*' + ' ' + _('Fake-IP Cache'));
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
o.depends('dns_mode', 'fake-ip');
|
||||
o = s.taboption('dns', form.ListValue, 'fake_ip_cache', _('Fake-IP Cache'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('dns', form.Flag, 'dns_respect_rules', _('Respect Rules'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('dns', form.ListValue, 'dns_respect_rules', _('Respect Rules'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('dns', form.Flag, 'dns_doh_prefer_http3', _('DoH Prefer HTTP/3'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('dns', form.ListValue, 'dns_doh_prefer_http3', _('DoH Prefer HTTP/3'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('dns', form.Flag, 'dns_system_hosts', _('Use System Hosts'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('dns', form.ListValue, 'dns_system_hosts', _('Use System Hosts'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('dns', form.Flag, 'dns_hosts', _('Use Hosts'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('dns', form.ListValue, 'dns_hosts', _('Use Hosts'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('dns', form.Flag, 'hosts', _('Overwrite Hosts'));
|
||||
o.rmempty = false;
|
||||
@ -285,17 +293,20 @@ return view.extend({
|
||||
|
||||
s.tab('sniffer', _('Sniffer Config'));
|
||||
|
||||
o = s.taboption('sniffer', form.Flag, 'sniffer', _('Enable'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('sniffer', form.ListValue, 'sniffer', _('Enable'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('sniffer', form.Flag, 'sniffer_sniff_dns_mapping', _('Sniff Redir-Host'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('sniffer', form.ListValue, 'sniffer_sniff_dns_mapping', _('Sniff Redir-Host'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('sniffer', form.Flag, 'sniffer_sniff_pure_ip', _('Sniff Pure IP'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('sniffer', form.Flag, 'sniffer_overwrite_destination', _('Overwrite Destination'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('sniffer', form.ListValue, 'sniffer_sniff_pure_ip', _('Sniff Pure IP'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('sniffer', form.Flag, 'sniffer_force_domain_name', _('Overwrite Force Sniff Domain Name'));
|
||||
o.rmempty = false;
|
||||
@ -336,7 +347,7 @@ return view.extend({
|
||||
|
||||
s.tab('rule', _('Rule Config'));
|
||||
|
||||
o = s.taboption('rule', form.Flag, 'rule_provider', '*' + ' ' + _('Append Rule Provider'));
|
||||
o = s.taboption('rule', form.Flag, 'rule_provider', _('Append Rule Provider'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('rule', form.SectionValue, '_rule_providers', form.GridSection, 'rule_provider', _('Edit Rule Providers'));
|
||||
@ -405,7 +416,7 @@ return view.extend({
|
||||
so.modalonly = true;
|
||||
so.depends('type', 'http');
|
||||
|
||||
o = s.taboption('rule', form.Flag, 'rule', '*' + ' ' + _('Append Rule'));
|
||||
o = s.taboption('rule', form.Flag, 'rule', _('Append Rule'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('rule', form.SectionValue, '_rules', form.TableSection, 'rule', _('Edit Rules'));
|
||||
@ -421,8 +432,7 @@ return view.extend({
|
||||
so.rmempty = false;
|
||||
|
||||
so = o.subsection.option(form.Value, 'type', _('Type'));
|
||||
so.optional = true;
|
||||
so.rmempty = true;
|
||||
so.rmempty = false;
|
||||
so.value('RULE-SET', _('Rule Set'));
|
||||
so.value('DOMAIN', _('Domain Name'));
|
||||
so.value('DOMAIN-SUFFIX', _('Domain Name Suffix'));
|
||||
@ -453,37 +463,34 @@ return view.extend({
|
||||
s.tab('geox', _('GeoX Config'));
|
||||
|
||||
o = s.taboption('geox', form.ListValue, 'geoip_format', _('GeoIP Format'));
|
||||
o.optional = true;
|
||||
o.value('dat', 'DAT');
|
||||
o.value('mmdb', 'MMDB');
|
||||
|
||||
o = s.taboption('geox', form.ListValue, 'geodata_loader', _('GeoData Loader'));
|
||||
o.optional = true;
|
||||
o.value('standard', _('Standard Loader'));
|
||||
o.value('memconservative', _('Memory Conservative Loader'));
|
||||
|
||||
o = s.taboption('geox', form.Value, 'geosite_url', _('GeoSite Url'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('geox', form.Value, 'geoip_mmdb_url', _('GeoIP(MMDB) Url'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('geox', form.Value, 'geoip_dat_url', _('GeoIP(DAT) Url'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('geox', form.Value, 'geoip_asn_url', _('GeoIP(ASN) Url'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('geox', form.Flag, 'geox_auto_update', _('GeoX Auto Update'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('geox', form.ListValue, 'geox_auto_update', _('GeoX Auto Update'));
|
||||
o.optional = true;
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('geox', form.Value, 'geox_update_interval', _('GeoX Update Interval'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = '24';
|
||||
o.retain = true;
|
||||
o.depends('geox_auto_update', '1');
|
||||
|
||||
s.tab('mixin_file_content', _('Mixin File Content'));
|
||||
|
||||
o = s.taboption('mixin_file_content', form.Flag, 'mixin_file_content', '*' + ' ' + _('Enable'), _('Please go to the editor tab to edit the file for mixin'));
|
||||
o = s.taboption('mixin_file_content', form.Flag, 'mixin_file_content', _('Enable'), _('Please go to the editor tab to edit the file for mixin'));
|
||||
o.rmempty = false;
|
||||
|
||||
return m.render();
|
||||
|
@ -1,11 +1,11 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:81
|
||||
msgid "API Port"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:82
|
||||
msgid "API Listen"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:85
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:86
|
||||
msgid "API Secret"
|
||||
msgstr ""
|
||||
|
||||
@ -22,11 +22,11 @@ msgstr ""
|
||||
msgid "All Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:94
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:96
|
||||
msgid "Allow Lan"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:203
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:206
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:68
|
||||
msgid "Allow Mode"
|
||||
msgstr ""
|
||||
@ -44,23 +44,19 @@ msgstr ""
|
||||
msgid "App Version"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:409
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:419
|
||||
msgid "Append Rule"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:350
|
||||
msgid "Append Rule Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:43
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:396
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:406
|
||||
msgid "Behavior"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:202
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:205
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:69
|
||||
msgid "Block Mode"
|
||||
msgstr ""
|
||||
@ -123,31 +119,31 @@ msgstr ""
|
||||
msgid "Cron Expression"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:174
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:175
|
||||
msgid "DNS Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:180
|
||||
msgid "DNS Mode"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:177
|
||||
msgid "DNS Listen"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:176
|
||||
msgid "DNS Port"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:186
|
||||
msgid "DNS Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/log.js:93
|
||||
msgid "Debug Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:432
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:441
|
||||
msgid "Destination IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:436
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:445
|
||||
msgid "Destination IP Geo"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:433
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:442
|
||||
msgid "Destination Port"
|
||||
msgstr ""
|
||||
|
||||
@ -159,15 +155,31 @@ msgstr ""
|
||||
msgid "Destination UDP Port to Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:140
|
||||
msgid "Device"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:141
|
||||
msgid "Device Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:40
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:37
|
||||
msgid "Direct Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:45
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:50
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:55
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:60
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:91
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:98
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:155
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:163
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:183
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:210
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:215
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:220
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:225
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:298
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:303
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:308
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:485
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
@ -187,60 +199,60 @@ msgstr ""
|
||||
msgid "Disable Safe Path Check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:214
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:218
|
||||
msgid "DoH Prefer HTTP/3"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:428
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:247
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:437
|
||||
msgid "Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:435
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:444
|
||||
msgid "Domain Name Geo"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:430
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:439
|
||||
msgid "Domain Name Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:431
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:440
|
||||
msgid "Domain Name Regex"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:429
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:438
|
||||
msgid "Domain Name Suffix"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:120
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:121
|
||||
msgid "Edit Authentications"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:164
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:169
|
||||
msgid "Edit DNS Hijacks"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:196
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:199
|
||||
msgid "Edit Fake-IP Filters"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:236
|
||||
msgid "Edit Hosts"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:278
|
||||
msgid "Edit Nameserver Policies"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:248
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:255
|
||||
msgid "Edit Nameservers"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:343
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:353
|
||||
msgid "Edit Rule Providers"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:412
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:422
|
||||
msgid "Edit Rules"
|
||||
msgstr ""
|
||||
|
||||
@ -254,22 +266,37 @@ msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:95
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:23
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:44
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:128
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:237
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:256
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:323
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:351
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:420
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:487
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:51
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:56
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:61
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:92
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:99
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:129
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:156
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:164
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:184
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:211
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:216
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:221
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:231
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:244
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:296
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:299
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:304
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:309
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:333
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:361
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:430
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:486
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:493
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:31
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:171
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:161
|
||||
msgid "Endpoint Independent NAT"
|
||||
msgstr ""
|
||||
|
||||
@ -277,23 +304,23 @@ msgstr ""
|
||||
msgid "Expire At"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:67
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:69
|
||||
msgid "External Control Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208
|
||||
msgid "Fake-IP Cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:203
|
||||
msgid "Fake-IP Filter Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:55
|
||||
msgid "Fake-IP Ping Hijack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:206
|
||||
msgid "Fake-IP Cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:200
|
||||
msgid "Fake-IP Filter Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:185
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:190
|
||||
msgid "Fake-IP Range"
|
||||
msgstr ""
|
||||
|
||||
@ -301,15 +328,15 @@ msgstr ""
|
||||
msgid "Fast Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:400
|
||||
msgid "File Format"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:384
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:394
|
||||
msgid "File Path"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:378
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:388
|
||||
msgid "File Size Limit"
|
||||
msgstr ""
|
||||
|
||||
@ -330,19 +357,19 @@ msgstr ""
|
||||
msgid "File:"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:304
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:314
|
||||
msgid "Force Sniff Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:152
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:153
|
||||
msgid "GSO"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:155
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:158
|
||||
msgid "GSO Max Size"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:28
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:23
|
||||
msgid "General Config"
|
||||
msgstr ""
|
||||
|
||||
@ -350,43 +377,43 @@ msgstr ""
|
||||
msgid "Generate & Download"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:460
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:470
|
||||
msgid "GeoData Loader"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:456
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:465
|
||||
msgid "GeoIP Format"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:481
|
||||
msgid "GeoIP(ASN) Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:470
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:479
|
||||
msgid "GeoIP(DAT) Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:467
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:477
|
||||
msgid "GeoIP(MMDB) Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:464
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:475
|
||||
msgid "GeoSite Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:476
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:483
|
||||
msgid "GeoX Auto Update"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:454
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:463
|
||||
msgid "GeoX Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:479
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:488
|
||||
msgid "GeoX Update Interval"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:38
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:35
|
||||
msgid "Global Mode"
|
||||
msgstr ""
|
||||
|
||||
@ -394,7 +421,7 @@ msgstr ""
|
||||
msgid "Grant access to nikki procedures"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:97
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:101
|
||||
msgid "HTTP Port"
|
||||
msgstr ""
|
||||
|
||||
@ -402,7 +429,7 @@ msgstr ""
|
||||
msgid "How To Use"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:243
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:250
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
@ -414,8 +441,8 @@ msgstr ""
|
||||
msgid "IPv4 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:50
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:217
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:48
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:181
|
||||
msgid "IPv6"
|
||||
msgstr ""
|
||||
|
||||
@ -427,11 +454,11 @@ msgstr ""
|
||||
msgid "IPv6 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:310
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:320
|
||||
msgid "Ignore Sniff Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:92
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:94
|
||||
msgid "Inbound Config"
|
||||
msgstr ""
|
||||
|
||||
@ -452,55 +479,54 @@ msgstr ""
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:30
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:25
|
||||
msgid "Log Level"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:148
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:150
|
||||
msgid "MTU"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:42
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:39
|
||||
msgid "Match Process"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:282
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:438
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
|
||||
msgid "Matcher"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:462
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473
|
||||
msgid "Memory Conservative Loader"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:105
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:107
|
||||
msgid "Mixed Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:21
|
||||
#: applications/luci-app-nikki/root/usr/share/luci/menu.d/luci-app-nikki.json:29
|
||||
msgid "Mixin Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:485
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:491
|
||||
msgid "Mixin File Content"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:26
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:21
|
||||
msgid "Mixin Option"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:37
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:33
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
|
||||
msgid "Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:357
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:367
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:266
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292
|
||||
msgid "Nameserver"
|
||||
msgstr ""
|
||||
|
||||
@ -509,12 +535,12 @@ msgstr ""
|
||||
msgid "Nikki"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:448
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:457
|
||||
msgid "No Resolve"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:441
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:381
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:450
|
||||
msgid "Node"
|
||||
msgstr ""
|
||||
|
||||
@ -526,60 +552,59 @@ msgstr ""
|
||||
msgid "Open Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:47
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:45
|
||||
msgid "Outbound Interface"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:117
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:118
|
||||
msgid "Overwrite Authentication"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:161
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:166
|
||||
msgid "Overwrite DNS Hijack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:298
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:345
|
||||
msgid "Overwrite Destination"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:191
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:196
|
||||
msgid "Overwrite Fake-IP Filter"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:301
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:311
|
||||
msgid "Overwrite Force Sniff Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:233
|
||||
msgid "Overwrite Hosts"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:307
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:317
|
||||
msgid "Overwrite Ignore Sniff Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:245
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252
|
||||
msgid "Overwrite Nameserver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:268
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275
|
||||
msgid "Overwrite Nameserver Policy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:313
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:323
|
||||
msgid "Overwrite Sniff By Protocol"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:134
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:135
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:487
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:493
|
||||
msgid "Please go to the editor tab to edit the file for mixin"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:332
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:342
|
||||
msgid "Port"
|
||||
msgstr ""
|
||||
|
||||
@ -587,7 +612,7 @@ msgstr ""
|
||||
msgid "Prefer"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:434
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:443
|
||||
msgid "Process Name"
|
||||
msgstr ""
|
||||
|
||||
@ -600,7 +625,7 @@ msgstr ""
|
||||
msgid "Profile for Startup"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:326
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:336
|
||||
msgid "Protocol"
|
||||
msgstr ""
|
||||
|
||||
@ -617,7 +642,7 @@ msgstr ""
|
||||
msgid "Redirect Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:109
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:110
|
||||
msgid "Redirect Port"
|
||||
msgstr ""
|
||||
|
||||
@ -629,7 +654,7 @@ msgstr ""
|
||||
msgid "Remote"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:211
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:213
|
||||
msgid "Respect Rules"
|
||||
msgstr ""
|
||||
|
||||
@ -641,11 +666,11 @@ msgstr ""
|
||||
msgid "Router Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:338
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:348
|
||||
msgid "Rule Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:39
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:36
|
||||
msgid "Rule Mode"
|
||||
msgstr ""
|
||||
|
||||
@ -653,7 +678,7 @@ msgstr ""
|
||||
msgid "Rule Provider:"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:427
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:436
|
||||
msgid "Rule Set"
|
||||
msgstr ""
|
||||
|
||||
@ -661,7 +686,7 @@ msgstr ""
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:101
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:104
|
||||
msgid "SOCKS Port"
|
||||
msgstr ""
|
||||
|
||||
@ -678,27 +703,27 @@ msgstr ""
|
||||
msgid "Scroll To Bottom"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:316
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:326
|
||||
msgid "Sniff By Protocol"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:306
|
||||
msgid "Sniff Pure IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:301
|
||||
msgid "Sniff Redir-Host"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:294
|
||||
msgid "Sniffer Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:143
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:144
|
||||
msgid "Stack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:461
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:472
|
||||
msgid "Standard Loader"
|
||||
msgstr ""
|
||||
|
||||
@ -727,15 +752,15 @@ msgstr ""
|
||||
msgid "Subscription:"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:56
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:58
|
||||
msgid "TCP Concurrent"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:59
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:63
|
||||
msgid "TCP Keep Alive Idle"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:63
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:66
|
||||
msgid "TCP Keep Alive Interval"
|
||||
msgstr ""
|
||||
|
||||
@ -748,11 +773,11 @@ msgstr ""
|
||||
msgid "TPROXY Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:113
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:114
|
||||
msgid "TPROXY Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:138
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:139
|
||||
msgid "TUN Config"
|
||||
msgstr ""
|
||||
|
||||
@ -777,9 +802,9 @@ msgstr ""
|
||||
msgid "Transparent Proxy with Mihomo on OpenWrt."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:424
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:266
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:434
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
@ -787,15 +812,15 @@ msgstr ""
|
||||
msgid "UDP Proxy Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:72
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:74
|
||||
msgid "UI Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:69
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:71
|
||||
msgid "UI Path"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:74
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:76
|
||||
msgid "UI Url"
|
||||
msgstr ""
|
||||
|
||||
@ -815,7 +840,7 @@ msgstr ""
|
||||
msgid "Update Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:403
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:413
|
||||
msgid "Update Interval"
|
||||
msgstr ""
|
||||
|
||||
@ -823,15 +848,15 @@ msgstr ""
|
||||
msgid "Upload Profile"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376
|
||||
msgid "Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:223
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:228
|
||||
msgid "Use Hosts"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:220
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:223
|
||||
msgid "Use System Hosts"
|
||||
msgstr ""
|
||||
|
||||
@ -843,6 +868,6 @@ msgstr ""
|
||||
msgid "User Agent"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:131
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:132
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
@ -8,11 +8,11 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:81
|
||||
msgid "API Port"
|
||||
msgstr "API 端口"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:82
|
||||
msgid "API Listen"
|
||||
msgstr "API 监听"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:85
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:86
|
||||
msgid "API Secret"
|
||||
msgstr "API 密钥"
|
||||
|
||||
@ -29,11 +29,11 @@ msgstr "全部模式"
|
||||
msgid "All Port"
|
||||
msgstr "全部端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:94
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:96
|
||||
msgid "Allow Lan"
|
||||
msgstr "允许局域网访问"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:203
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:206
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:68
|
||||
msgid "Allow Mode"
|
||||
msgstr "白名单模式"
|
||||
@ -51,23 +51,19 @@ msgstr "插件日志"
|
||||
msgid "App Version"
|
||||
msgstr "插件版本"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:409
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:419
|
||||
msgid "Append Rule"
|
||||
msgstr "追加规则"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:350
|
||||
msgid "Append Rule Provider"
|
||||
msgstr "追加规则提供者"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:43
|
||||
msgid "Auto"
|
||||
msgstr "自动"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:396
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:406
|
||||
msgid "Behavior"
|
||||
msgstr "行为"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:202
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:205
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:69
|
||||
msgid "Block Mode"
|
||||
msgstr "黑名单模式"
|
||||
@ -130,31 +126,31 @@ msgstr "核心版本"
|
||||
msgid "Cron Expression"
|
||||
msgstr "Cron 表达式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:174
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:175
|
||||
msgid "DNS Config"
|
||||
msgstr "DNS 配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:180
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:177
|
||||
msgid "DNS Listen"
|
||||
msgstr "DNS 监听"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:186
|
||||
msgid "DNS Mode"
|
||||
msgstr "DNS 模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:176
|
||||
msgid "DNS Port"
|
||||
msgstr "DNS 端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/log.js:93
|
||||
msgid "Debug Log"
|
||||
msgstr "调试日志"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:432
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:441
|
||||
msgid "Destination IP"
|
||||
msgstr "目标 IP"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:436
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:445
|
||||
msgid "Destination IP Geo"
|
||||
msgstr "目标 IP(Geo)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:433
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:442
|
||||
msgid "Destination Port"
|
||||
msgstr "目标端口"
|
||||
|
||||
@ -166,15 +162,31 @@ msgstr "要代理的 TCP 目标端口"
|
||||
msgid "Destination UDP Port to Proxy"
|
||||
msgstr "要代理的 UDP 目标端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:140
|
||||
msgid "Device"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:141
|
||||
msgid "Device Name"
|
||||
msgstr "设备名称"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:40
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:37
|
||||
msgid "Direct Mode"
|
||||
msgstr "直连模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:45
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:50
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:55
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:60
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:91
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:98
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:155
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:163
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:183
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:210
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:215
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:220
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:225
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:298
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:303
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:308
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:485
|
||||
msgid "Disable"
|
||||
msgstr "禁用"
|
||||
|
||||
@ -194,60 +206,60 @@ msgstr "禁用回环检测"
|
||||
msgid "Disable Safe Path Check"
|
||||
msgstr "禁用安全路径检查"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:214
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:218
|
||||
msgid "DoH Prefer HTTP/3"
|
||||
msgstr "DoH 优先 HTTP/3"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:428
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:247
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:437
|
||||
msgid "Domain Name"
|
||||
msgstr "域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:435
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:444
|
||||
msgid "Domain Name Geo"
|
||||
msgstr "域名(Geo)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:430
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:439
|
||||
msgid "Domain Name Keyword"
|
||||
msgstr "域名(关键字)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:431
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:440
|
||||
msgid "Domain Name Regex"
|
||||
msgstr "域名(正则表达式)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:429
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:438
|
||||
msgid "Domain Name Suffix"
|
||||
msgstr "域名(后缀)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:120
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:121
|
||||
msgid "Edit Authentications"
|
||||
msgstr "编辑身份验证"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:164
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:169
|
||||
msgid "Edit DNS Hijacks"
|
||||
msgstr "编辑 DNS 劫持"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:196
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:199
|
||||
msgid "Edit Fake-IP Filters"
|
||||
msgstr "编辑 Fake-IP 过滤列表"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:236
|
||||
msgid "Edit Hosts"
|
||||
msgstr "编辑 Hosts"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:278
|
||||
msgid "Edit Nameserver Policies"
|
||||
msgstr "编辑 DNS 服务器查询策略"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:248
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:255
|
||||
msgid "Edit Nameservers"
|
||||
msgstr "编辑 DNS 服务器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:343
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:353
|
||||
msgid "Edit Rule Providers"
|
||||
msgstr "编辑规则提供者"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:412
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:422
|
||||
msgid "Edit Rules"
|
||||
msgstr "编辑规则"
|
||||
|
||||
@ -261,22 +273,37 @@ msgid "Editor"
|
||||
msgstr "编辑器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:95
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:23
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:44
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:128
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:237
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:256
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:323
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:351
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:420
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:487
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:51
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:56
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:61
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:92
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:99
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:129
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:156
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:164
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:184
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:211
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:216
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:221
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:231
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:244
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:296
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:299
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:304
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:309
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:333
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:361
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:430
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:486
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:493
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:31
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:171
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:161
|
||||
msgid "Endpoint Independent NAT"
|
||||
msgstr "独立于端点的 NAT"
|
||||
|
||||
@ -284,23 +311,23 @@ msgstr "独立于端点的 NAT"
|
||||
msgid "Expire At"
|
||||
msgstr "到期时间"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:67
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:69
|
||||
msgid "External Control Config"
|
||||
msgstr "外部控制配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208
|
||||
msgid "Fake-IP Cache"
|
||||
msgstr "Fake-IP 缓存"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:203
|
||||
msgid "Fake-IP Filter Mode"
|
||||
msgstr "Fake-IP 过滤模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:55
|
||||
msgid "Fake-IP Ping Hijack"
|
||||
msgstr "Fake-IP Ping 劫持"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:206
|
||||
msgid "Fake-IP Cache"
|
||||
msgstr "Fake-IP 缓存"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:200
|
||||
msgid "Fake-IP Filter Mode"
|
||||
msgstr "Fake-IP 过滤模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:185
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:190
|
||||
msgid "Fake-IP Range"
|
||||
msgstr "Fake-IP 范围"
|
||||
|
||||
@ -308,15 +335,15 @@ msgstr "Fake-IP 范围"
|
||||
msgid "Fast Reload"
|
||||
msgstr "快速重载"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:400
|
||||
msgid "File Format"
|
||||
msgstr "文件格式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:384
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:394
|
||||
msgid "File Path"
|
||||
msgstr "文件路径"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:378
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:388
|
||||
msgid "File Size Limit"
|
||||
msgstr "文件大小限制"
|
||||
|
||||
@ -337,19 +364,19 @@ msgstr "IPv6 保留地址"
|
||||
msgid "File:"
|
||||
msgstr "文件:"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:304
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:314
|
||||
msgid "Force Sniff Domain Name"
|
||||
msgstr "强制嗅探的域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:152
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:153
|
||||
msgid "GSO"
|
||||
msgstr "通用分段卸载"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:155
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:158
|
||||
msgid "GSO Max Size"
|
||||
msgstr "分段最大长度"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:28
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:23
|
||||
msgid "General Config"
|
||||
msgstr "全局配置"
|
||||
|
||||
@ -357,43 +384,43 @@ msgstr "全局配置"
|
||||
msgid "Generate & Download"
|
||||
msgstr "生成并下载"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:460
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:470
|
||||
msgid "GeoData Loader"
|
||||
msgstr "GeoData 加载器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:456
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:465
|
||||
msgid "GeoIP Format"
|
||||
msgstr "GeoIP 格式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:481
|
||||
msgid "GeoIP(ASN) Url"
|
||||
msgstr "GeoIP(ASN) 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:470
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:479
|
||||
msgid "GeoIP(DAT) Url"
|
||||
msgstr "GeoIP(DAT) 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:467
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:477
|
||||
msgid "GeoIP(MMDB) Url"
|
||||
msgstr "GeoIP(MMDB) 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:464
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:475
|
||||
msgid "GeoSite Url"
|
||||
msgstr "GeoSite 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:476
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:483
|
||||
msgid "GeoX Auto Update"
|
||||
msgstr "定时更新GeoX文件"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:454
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:463
|
||||
msgid "GeoX Config"
|
||||
msgstr "GeoX 配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:479
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:488
|
||||
msgid "GeoX Update Interval"
|
||||
msgstr "GeoX 文件更新间隔"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:38
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:35
|
||||
msgid "Global Mode"
|
||||
msgstr "全局模式"
|
||||
|
||||
@ -401,7 +428,7 @@ msgstr "全局模式"
|
||||
msgid "Grant access to nikki procedures"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:97
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:101
|
||||
msgid "HTTP Port"
|
||||
msgstr "HTTP 端口"
|
||||
|
||||
@ -409,7 +436,7 @@ msgstr "HTTP 端口"
|
||||
msgid "How To Use"
|
||||
msgstr "使用说明"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:243
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:250
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
@ -421,8 +448,8 @@ msgstr "IPv4 DNS 劫持"
|
||||
msgid "IPv4 Proxy"
|
||||
msgstr "IPv4 代理"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:50
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:217
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:48
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:181
|
||||
msgid "IPv6"
|
||||
msgstr ""
|
||||
|
||||
@ -434,11 +461,11 @@ msgstr "IPv6 DNS 劫持"
|
||||
msgid "IPv6 Proxy"
|
||||
msgstr "IPv6 代理"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:310
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:320
|
||||
msgid "Ignore Sniff Domain Name"
|
||||
msgstr "忽略嗅探的域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:92
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:94
|
||||
msgid "Inbound Config"
|
||||
msgstr "入站配置"
|
||||
|
||||
@ -459,55 +486,54 @@ msgstr "本地"
|
||||
msgid "Log"
|
||||
msgstr "日志"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:30
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:25
|
||||
msgid "Log Level"
|
||||
msgstr "日志级别"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:148
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:150
|
||||
msgid "MTU"
|
||||
msgstr "最大传输单元"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:42
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:39
|
||||
msgid "Match Process"
|
||||
msgstr "匹配进程"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:282
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:438
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
|
||||
msgid "Matcher"
|
||||
msgstr "匹配"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:462
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473
|
||||
msgid "Memory Conservative Loader"
|
||||
msgstr "为内存受限设备优化的加载器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:105
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:107
|
||||
msgid "Mixed Port"
|
||||
msgstr "混合端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:21
|
||||
#: applications/luci-app-nikki/root/usr/share/luci/menu.d/luci-app-nikki.json:29
|
||||
msgid "Mixin Config"
|
||||
msgstr "混入配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:485
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:491
|
||||
msgid "Mixin File Content"
|
||||
msgstr "混入文件内容"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:26
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:21
|
||||
msgid "Mixin Option"
|
||||
msgstr "混入选项"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:37
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:33
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
|
||||
msgid "Mode"
|
||||
msgstr "模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:357
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:367
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:266
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292
|
||||
msgid "Nameserver"
|
||||
msgstr "DNS 服务器"
|
||||
|
||||
@ -516,12 +542,12 @@ msgstr "DNS 服务器"
|
||||
msgid "Nikki"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:448
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:457
|
||||
msgid "No Resolve"
|
||||
msgstr "不解析"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:441
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:381
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:450
|
||||
msgid "Node"
|
||||
msgstr "节点"
|
||||
|
||||
@ -533,60 +559,59 @@ msgstr "未在运行"
|
||||
msgid "Open Dashboard"
|
||||
msgstr "打开面板"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:47
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:45
|
||||
msgid "Outbound Interface"
|
||||
msgstr "出站接口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:117
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:118
|
||||
msgid "Overwrite Authentication"
|
||||
msgstr "覆盖身份验证"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:161
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:166
|
||||
msgid "Overwrite DNS Hijack"
|
||||
msgstr "覆盖 DNS 劫持"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:298
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:345
|
||||
msgid "Overwrite Destination"
|
||||
msgstr "将嗅探结果作为连接目标"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:191
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:196
|
||||
msgid "Overwrite Fake-IP Filter"
|
||||
msgstr "覆盖 Fake-IP 过滤列表"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:301
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:311
|
||||
msgid "Overwrite Force Sniff Domain Name"
|
||||
msgstr "覆盖强制嗅探的域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:233
|
||||
msgid "Overwrite Hosts"
|
||||
msgstr "覆盖 Hosts"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:307
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:317
|
||||
msgid "Overwrite Ignore Sniff Domain Name"
|
||||
msgstr "覆盖忽略嗅探的域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:245
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252
|
||||
msgid "Overwrite Nameserver"
|
||||
msgstr "覆盖 DNS 服务器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:268
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275
|
||||
msgid "Overwrite Nameserver Policy"
|
||||
msgstr "覆盖 DNS 服务器查询策略"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:313
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:323
|
||||
msgid "Overwrite Sniff By Protocol"
|
||||
msgstr "覆盖按协议嗅探"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:134
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:135
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:487
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:493
|
||||
msgid "Please go to the editor tab to edit the file for mixin"
|
||||
msgstr "请前往编辑器标签编辑用于混入的文件"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:332
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:342
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
@ -594,7 +619,7 @@ msgstr "端口"
|
||||
msgid "Prefer"
|
||||
msgstr "优先"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:434
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:443
|
||||
msgid "Process Name"
|
||||
msgstr "进程名"
|
||||
|
||||
@ -607,7 +632,7 @@ msgstr "配置文件"
|
||||
msgid "Profile for Startup"
|
||||
msgstr "用于启动的配置文件"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:326
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:336
|
||||
msgid "Protocol"
|
||||
msgstr "协议"
|
||||
|
||||
@ -624,7 +649,7 @@ msgstr "代理提供者:"
|
||||
msgid "Redirect Mode"
|
||||
msgstr "Redirect 模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:109
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:110
|
||||
msgid "Redirect Port"
|
||||
msgstr "Redirect 端口"
|
||||
|
||||
@ -636,7 +661,7 @@ msgstr "重载服务"
|
||||
msgid "Remote"
|
||||
msgstr "远程"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:211
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:213
|
||||
msgid "Respect Rules"
|
||||
msgstr "遵循分流规则"
|
||||
|
||||
@ -648,11 +673,11 @@ msgstr "重启服务"
|
||||
msgid "Router Proxy"
|
||||
msgstr "路由器代理"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:338
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:348
|
||||
msgid "Rule Config"
|
||||
msgstr "规则配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:39
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:36
|
||||
msgid "Rule Mode"
|
||||
msgstr "规则模式"
|
||||
|
||||
@ -660,7 +685,7 @@ msgstr "规则模式"
|
||||
msgid "Rule Provider:"
|
||||
msgstr "规则提供者:"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:427
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:436
|
||||
msgid "Rule Set"
|
||||
msgstr "规则集"
|
||||
|
||||
@ -668,7 +693,7 @@ msgstr "规则集"
|
||||
msgid "Running"
|
||||
msgstr "运行中"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:101
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:104
|
||||
msgid "SOCKS Port"
|
||||
msgstr "SOCKS 端口"
|
||||
|
||||
@ -685,27 +710,27 @@ msgstr "定时重启"
|
||||
msgid "Scroll To Bottom"
|
||||
msgstr "滚动到底部"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:316
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:326
|
||||
msgid "Sniff By Protocol"
|
||||
msgstr "按协议嗅探"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:306
|
||||
msgid "Sniff Pure IP"
|
||||
msgstr "嗅探纯 IP 连接"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:301
|
||||
msgid "Sniff Redir-Host"
|
||||
msgstr "嗅探 Redir-Host 流量"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:294
|
||||
msgid "Sniffer Config"
|
||||
msgstr "嗅探器配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:143
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:144
|
||||
msgid "Stack"
|
||||
msgstr "栈"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:461
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:472
|
||||
msgid "Standard Loader"
|
||||
msgstr "标准加载器"
|
||||
|
||||
@ -734,15 +759,15 @@ msgstr "订阅链接"
|
||||
msgid "Subscription:"
|
||||
msgstr "订阅:"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:56
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:58
|
||||
msgid "TCP Concurrent"
|
||||
msgstr "TCP 并发"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:59
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:63
|
||||
msgid "TCP Keep Alive Idle"
|
||||
msgstr "TCP Keep Alive 空闲"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:63
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:66
|
||||
msgid "TCP Keep Alive Interval"
|
||||
msgstr "TCP Keep Alive 间隔"
|
||||
|
||||
@ -755,11 +780,11 @@ msgstr "TCP 代理模式"
|
||||
msgid "TPROXY Mode"
|
||||
msgstr "TPROXY 模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:113
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:114
|
||||
msgid "TPROXY Port"
|
||||
msgstr "TPROXY 端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:138
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:139
|
||||
msgid "TUN Config"
|
||||
msgstr "TUN 配置"
|
||||
|
||||
@ -784,9 +809,9 @@ msgstr "透明代理"
|
||||
msgid "Transparent Proxy with Mihomo on OpenWrt."
|
||||
msgstr "在 OpenWrt 上使用 Mihomo 进行透明代理。"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:424
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:266
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:434
|
||||
msgid "Type"
|
||||
msgstr "类型"
|
||||
|
||||
@ -794,15 +819,15 @@ msgstr "类型"
|
||||
msgid "UDP Proxy Mode"
|
||||
msgstr "UDP 代理模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:72
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:74
|
||||
msgid "UI Name"
|
||||
msgstr "UI 名称"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:69
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:71
|
||||
msgid "UI Path"
|
||||
msgstr "UI 路径"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:74
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:76
|
||||
msgid "UI Url"
|
||||
msgstr "UI 下载地址"
|
||||
|
||||
@ -822,7 +847,7 @@ msgstr "更新时间"
|
||||
msgid "Update Dashboard"
|
||||
msgstr "更新面板"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:403
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:413
|
||||
msgid "Update Interval"
|
||||
msgstr "更新间隔"
|
||||
|
||||
@ -830,15 +855,15 @@ msgstr "更新间隔"
|
||||
msgid "Upload Profile"
|
||||
msgstr "上传配置文件"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376
|
||||
msgid "Url"
|
||||
msgstr "下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:223
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:228
|
||||
msgid "Use Hosts"
|
||||
msgstr "使用 Hosts"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:220
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:223
|
||||
msgid "Use System Hosts"
|
||||
msgstr "使用系统的 Hosts"
|
||||
|
||||
@ -850,6 +875,6 @@ msgstr "已使用"
|
||||
msgid "User Agent"
|
||||
msgstr "用户代理(UA)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:131
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:132
|
||||
msgid "Username"
|
||||
msgstr "用户名"
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import { popen } from 'fs';
|
||||
import { access, popen } from 'fs';
|
||||
|
||||
const methods = {
|
||||
version: {
|
||||
@ -28,15 +28,29 @@ const methods = {
|
||||
core = trim(process.read('all'));
|
||||
process.close();
|
||||
}
|
||||
return { success: true, app: app, core: core };
|
||||
return { app: app, core: core };
|
||||
}
|
||||
},
|
||||
profile: {
|
||||
call: function() {
|
||||
let profile = {};
|
||||
const filepath = '/etc/nikki/run/config.yaml';
|
||||
if (access(filepath, 'r')) {
|
||||
const process = popen(`yq -p yaml -o json < ${filepath}`);
|
||||
if (process != null) {
|
||||
profile = json(process.read('all'));
|
||||
process.close();
|
||||
}
|
||||
}
|
||||
return profile;
|
||||
}
|
||||
},
|
||||
update_subscription: {
|
||||
args: { section_id: 'section_id' },
|
||||
call: function(req) {
|
||||
let success = false;
|
||||
if (req.args?.section_id) {
|
||||
const section_id = req.args?.section_id;
|
||||
const section_id = req.args?.section_id;
|
||||
if (section_id) {
|
||||
success = system(['service', 'nikki', 'update_subscription', section_id]) == 0;
|
||||
}
|
||||
return { success: success };
|
||||
|
@ -54,7 +54,6 @@
|
||||
border-radius: 3px; /* Add slight rounding */
|
||||
background-color: #fff; /* Set background color */
|
||||
vertical-align: middle; /* Align vertically in the middle */
|
||||
appearance: none; /* Remove default styling */
|
||||
position: relative; /* Ensure relative positioning */
|
||||
}
|
||||
|
||||
|
@ -10,8 +10,8 @@ THEME_TITLE:=Kucat Theme
|
||||
PKG_NAME:=luci-theme-$(THEME_NAME)
|
||||
LUCI_TITLE:=Kucat Theme by sirpdboy
|
||||
LUCI_DEPENDS:=
|
||||
PKG_VERSION:=2.5.5
|
||||
PKG_RELEASE:=20250301
|
||||
PKG_VERSION:=2.5.6
|
||||
PKG_RELEASE:=20250304
|
||||
|
||||
define Package/luci-theme-$(THEME_NAME)/postinst
|
||||
#!/bin/sh
|
||||
|
@ -27,7 +27,7 @@
|
||||
--radius1: 0.375rem;
|
||||
--radius2: 0.25rem;
|
||||
--primary-solid: #fd8c73;
|
||||
--menu-hover-barbgcolor: rgba(255, 255, 255, 0.3)
|
||||
--menu-hover-barbgcolor: rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
[data-theme='light'] {
|
||||
@ -37,6 +37,7 @@
|
||||
--menu-hover-color: #fff;
|
||||
--menu-item-titlebg-color: rgba(var(--primary-rgbm), 0.22);
|
||||
--menu-barbgcolor: rgba(var(--primary-rgbm), var(--primary-rgbm-ts));
|
||||
--title-color: #65656b;
|
||||
--body-text-color: #3c4655;
|
||||
--body-color: #65656b;
|
||||
--body-hover-bgcolor: rgba(50, 50, 50, 0.05);
|
||||
@ -48,28 +49,29 @@
|
||||
--input-boxhovercolor: rgba(0, 0, 0, 0.22);
|
||||
--input-checkcolor: rgba(var(--primary-rgbm), 1);
|
||||
--font-apple: -apple-system, "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif";
|
||||
--font-sans: "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"
|
||||
--font-sans: "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB";
|
||||
}
|
||||
|
||||
[data-theme="dark"] {
|
||||
--primarytextcolor: #bbb;
|
||||
--primary-title-color: #ddd;
|
||||
--menu-color: #d3d3d3;
|
||||
--menu-color: #ccc;
|
||||
--menu-hover-color: #eee;
|
||||
--menu-item-titlebg-color: rgba(var(--primary-rgbm), 0.4);
|
||||
--menu-barbgcolor: rgba(var(--primary-rgbm), var(--primary-rgbm-ts));
|
||||
--body-text-color: #ccc;
|
||||
--title-color: #f5f5f5;
|
||||
--body-text-color: #bbb;
|
||||
--body-color: #bbb;
|
||||
--body-hover-bgcolor: rgba(255, 255, 255, 0.05);
|
||||
--inputbg-color: rgba(255, 255, 255, 0.11);
|
||||
--inputtext-color: #bbb;
|
||||
--inputtext-color: #ccc;
|
||||
--inputborder-color: rgba(255, 255, 255, 0.2);
|
||||
--input-bgcolor: rgba(50, 50, 50, 0.2);
|
||||
--input-boxcolor: rgba(255, 255, 255, 0.15);
|
||||
--input-boxhovercolor: rgba(255, 255, 255, 0.22);
|
||||
--input-checkcolor: rgba(255, 255, 255, 0.7);
|
||||
--font-apple: -apple-system, "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif";
|
||||
--font-sans: "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB"
|
||||
--font-sans: "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB";
|
||||
}
|
||||
|
||||
.tr {
|
||||
@ -840,7 +842,7 @@ span[data-indicator="poll-status"],
|
||||
.success {
|
||||
background-color: #1a8361 !important;
|
||||
color: #eee;
|
||||
width: 12rem !important
|
||||
width: 14rem !important
|
||||
}
|
||||
|
||||
#log_textarea {
|
||||
@ -925,7 +927,7 @@ span[data-indicator="poll-status"],
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
transition: all .2s;
|
||||
position: relative
|
||||
position: relative;
|
||||
font-size: var(--font-z)
|
||||
}
|
||||
|
||||
@ -2075,11 +2077,11 @@ button:active{
|
||||
line-height: 1;
|
||||
width: 2.5rem !important;
|
||||
padding: 5px !important;
|
||||
color: var(--inputtext-color);
|
||||
color:#E91E63;
|
||||
border: 0px solid var(--inputborder-color);
|
||||
border-right: 1px solid var(--inputborder-color);
|
||||
border-top: 1px solid var(--inputborder-color);
|
||||
border-bottom: 1px solid var(--inputborder-color);
|
||||
border-right: 1px solid var(--inputborder-color);
|
||||
border-top: 1px solid var(--inputborder-color);
|
||||
border-bottom: 1px solid var(--inputborder-color);
|
||||
border-radius: 0 var(--radius2) var(--radius2) 0;
|
||||
outline: 0;
|
||||
background-color: var(--inputbg-color);
|
||||
@ -2563,12 +2565,12 @@ input {
|
||||
|
||||
.modal>pre,
|
||||
.modal>textarea {
|
||||
font-size: var(--font-z);
|
||||
font-size-adjust: .35;
|
||||
font-size: var(--font-x);
|
||||
overflow: auto;
|
||||
margin-bottom: .5em;
|
||||
padding: 8.5px;
|
||||
cursor: auto;
|
||||
white-space: pre-wrap;
|
||||
outline: 0;
|
||||
|
||||
}
|
||||
@ -2813,7 +2815,7 @@ td > .ifacebadge,
|
||||
|
||||
.cbi-section em {
|
||||
font-weight: 600;
|
||||
color: var(--body-color);
|
||||
color: var(--title-color);
|
||||
text-align: center
|
||||
}
|
||||
|
||||
@ -2867,7 +2869,6 @@ textarea {
|
||||
border-radius: var(--radius2);
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
margin: 0.5rem
|
||||
}
|
||||
|
||||
.cbi-input-textarea:focus,
|
||||
@ -2905,6 +2906,7 @@ textarea:focus {
|
||||
display: block;
|
||||
padding: 2px;
|
||||
text-decoration: none;
|
||||
color:#666;
|
||||
background-color: #cfc
|
||||
}
|
||||
|
||||
@ -2922,8 +2924,9 @@ textarea:focus {
|
||||
font-style: normal;
|
||||
display: block;
|
||||
padding: 2px;
|
||||
|
||||
background-color: rgba(255, 255, 255, 0.1) ;
|
||||
text-decoration: none;
|
||||
background-color: #eee
|
||||
}
|
||||
|
||||
.uci-change-list var ins,
|
||||
@ -2998,7 +3001,8 @@ textarea:focus {
|
||||
min-width: 7rem;
|
||||
background-color: rgba(var(--primary-rgbm), 0.2);
|
||||
transform: translate(-50, -50%);
|
||||
color: var(--body-color) text-align:center !important
|
||||
color: var(--title-color);
|
||||
text-align:center !important
|
||||
}
|
||||
|
||||
.ifacebox-head.active {
|
||||
@ -3017,19 +3021,15 @@ textarea:focus {
|
||||
.zonebadge {
|
||||
padding: .2rem !important;
|
||||
display: inline-block;
|
||||
|
||||
min-width: 13rem
|
||||
}
|
||||
|
||||
.zonebadge strong {
|
||||
font-size: var(--font-x);
|
||||
color: var(--body-color)
|
||||
}
|
||||
|
||||
.zonebadge .ifacebadge {
|
||||
margin: .1rem .2rem;
|
||||
color: var(--menu-color);
|
||||
/* background-color: #bbb;
|
||||
border: 1px solid var(--input-boxhovercolor); */
|
||||
color: var(--title-color);
|
||||
background-color: #bbb;
|
||||
border: 1px solid var(--input-boxhovercolor);
|
||||
}
|
||||
|
||||
.zonebadge>input[type="text"] {
|
||||
@ -3040,12 +3040,19 @@ textarea:focus {
|
||||
padding: .16rem 1rem;
|
||||
}
|
||||
|
||||
.zonebadge>span,
|
||||
.zonebadge>em,
|
||||
.zonebadge>strong {
|
||||
color: #777;
|
||||
font-size: var(--font-x);
|
||||
display: inline-block;
|
||||
margin: 0 .2rem
|
||||
}
|
||||
|
||||
.zonebadge-empty>strong {
|
||||
color: var(--title-color) ;
|
||||
}
|
||||
|
||||
.cbi-value-field .cbi-input-checkbox,
|
||||
.cbi-value-field .cbi-input-radio {
|
||||
margin-top: .1rem
|
||||
@ -3968,8 +3975,9 @@ body.lang_pl.node-main-login .cbi-value-title {
|
||||
[data-page="admin-services-vssr"]>.main .block,
|
||||
.main .block {
|
||||
color: var(--body-color);
|
||||
background-color: var(--inputbg-color) !important;
|
||||
box-shadow: 0 0 4px var(--inputborder-color);
|
||||
background-color: var(--input-bgcolor) !important;
|
||||
box-shadow: 0 0 1px var(--inputborder-color);
|
||||
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.32), 0 1px 5px 0 rgba(0, 0, 0, 0.2)
|
||||
}
|
||||
|
||||
[data-page="admin-services-shadowsocksr"]>.block:active,
|
||||
@ -3980,7 +3988,7 @@ body.lang_pl.node-main-login .cbi-value-title {
|
||||
.block:hover,
|
||||
[data-page="admin-services-bypass"]>.main .block:hover,
|
||||
.main .block:hover {
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 4px 6px var(--input-boxhovercolor);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 4px 6px rgba(0, 0, 0, 0.35);
|
||||
background-color: var(--input-boxhovercolor) !important;
|
||||
}
|
||||
|
||||
@ -4147,6 +4155,21 @@ pre.command-output {
|
||||
display: block
|
||||
}
|
||||
|
||||
[data-page="admin-store-pages"] .cbi-section>.tags-container>.tags-value,
|
||||
[data-page="admin-store-pages"] .cbi-section>.sort-container>.sort-value {
|
||||
flex: none;
|
||||
}
|
||||
|
||||
[data-page="admin-store-pages"] .app-container .app-btns .app-btn {
|
||||
padding: 0.5rem;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
|
||||
[data-page="admin-system-package-manager"] .modal>textarea {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.main>.main-left,
|
||||
.cbi-section,
|
||||
[data-tab-title],
|
||||
@ -4219,7 +4242,7 @@ div#service_status {
|
||||
div#add_link_div {
|
||||
position: fixed;
|
||||
transform: translate(-50%, -50%);
|
||||
background-color: #fff;
|
||||
background-color: rgba(var(--primary-rgbbody), 1);
|
||||
padding: 0px;
|
||||
box-shadow: darkgrey 1px 5px 20px 0px;
|
||||
border-radius: 9px
|
||||
@ -4370,7 +4393,7 @@ div#add_link_div {
|
||||
|
||||
@media screen and (max-width:992px) {
|
||||
.main .main-left .nav .slide .slide-menu .active a {
|
||||
font-size: var(--font-z)
|
||||
font-size: var(--font-x)
|
||||
}
|
||||
|
||||
|
||||
@ -4395,7 +4418,7 @@ div#add_link_div {
|
||||
#diag-rc-output>pre,
|
||||
#command-rc-output>pre,
|
||||
[data-page="admin-services-wol"] .notice code {
|
||||
font-size: var(--font-z)
|
||||
font-size: var(--font-x)
|
||||
}
|
||||
|
||||
.main-left {
|
||||
@ -4508,7 +4531,7 @@ div#add_link_div {
|
||||
|
||||
.cbi-section>h3:first-child,
|
||||
.panel-title {
|
||||
font-size: var(--font-d);
|
||||
font-size: var(--font-z);
|
||||
padding-bottom: 0.5rem
|
||||
}
|
||||
|
||||
@ -4637,7 +4660,8 @@ div#add_link_div {
|
||||
padding-left: 0.3rem;
|
||||
padding-top: 0.8rem;
|
||||
width: 100%;
|
||||
font-weight: 700;
|
||||
margin-bottom: 0.2rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.cbi-section {
|
||||
@ -4661,7 +4685,7 @@ div#add_link_div {
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: var(--font-x);
|
||||
font-size: var(--font-z);
|
||||
line-height: 1.2rem !important;
|
||||
letter-spacing: 0.02rem
|
||||
}
|
||||
@ -4683,30 +4707,38 @@ div#add_link_div {
|
||||
.hide-xs:not([data-title="MAC-Address"]) {
|
||||
display: none
|
||||
}
|
||||
|
||||
[data-page="admin-status-overview"] >.main #view td:nth-child(1),
|
||||
.cbi-value-title {
|
||||
display: block;
|
||||
min-width: 0 !important;
|
||||
text-align: left
|
||||
|
||||
[data-page="admin-system-admin-password"] .control-group{
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.cbi-value-title,
|
||||
.cbi-value-description,
|
||||
.cbi-value-field,
|
||||
.cbi-value-field .cbi-dropdown,
|
||||
.cbi-value-field .cbi-input-select,
|
||||
.cbi-value input[type="text"] {
|
||||
width: 100%;
|
||||
}
|
||||
.cbi-input-textarea,
|
||||
textarea,
|
||||
.cbi-value-description,
|
||||
.cbi-value-field,
|
||||
.cbi-value-field .cbi-dropdown,
|
||||
.cbi-value-field .cbi-input-select,
|
||||
.cbi-value input[type="text"],
|
||||
.cbi-value input[type="password"] {
|
||||
width:16rem;
|
||||
text-align: left;
|
||||
min-width: 8rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[data-page="admin-status-overview"] .main #view td:nth-child(1) {
|
||||
width: 5rem;
|
||||
padding-right: 0.4rem
|
||||
}
|
||||
|
||||
|
||||
.cbi-value-title,
|
||||
.cbi-value-field {
|
||||
padding: 0 !important;
|
||||
line-height: 1
|
||||
display: inline-block;
|
||||
line-height: 1;
|
||||
text-align: left;
|
||||
}
|
||||
.cbi-value-description {
|
||||
display: none !important
|
||||
}
|
||||
|
||||
.cbi-value-field>div {
|
||||
@ -4717,11 +4749,8 @@ div#add_link_div {
|
||||
#diag-rc-output > pre,
|
||||
#command-rc-output > pre,
|
||||
[data-page="admin-services-wol"] .notice code {
|
||||
font-size: .8rem !important;
|
||||
font-size: var(--font-x) !important;
|
||||
}
|
||||
.cbi-value-description {
|
||||
display: none !important
|
||||
}
|
||||
|
||||
.cbi-dynlist p {
|
||||
padding: 0.5rem 1rem
|
||||
@ -4756,12 +4785,6 @@ div#add_link_div {
|
||||
padding-right: 0.2rem
|
||||
}
|
||||
|
||||
|
||||
.cbi-value-description {
|
||||
width: 100%;
|
||||
display: block
|
||||
}
|
||||
|
||||
.Diagnostics form .cbi-map .cbi-section div {
|
||||
width: 100% !important
|
||||
}
|
||||
@ -4776,7 +4799,7 @@ div#add_link_div {
|
||||
|
||||
select,
|
||||
input {
|
||||
font-size: var(--font-z);
|
||||
font-size: var(--font-x);
|
||||
box-sizing: border-box;
|
||||
min-width: unset
|
||||
}
|
||||
@ -4869,3 +4892,38 @@ div#add_link_div {
|
||||
margin-left: 16rem
|
||||
}
|
||||
}
|
||||
|
||||
/* luci-mod-dashboard */
|
||||
.Dashboard .dashboard-bg {
|
||||
|
||||
background-color: rgba(var(--primary-rgbm), var(--primary-rgbs-ts));
|
||||
background-color: rgba(var(--primary-rgbbody), 1)important;
|
||||
}
|
||||
|
||||
.Dashboard h3 {
|
||||
color: var(--primary-title-color)important;
|
||||
border-radius: 0 0 16px 16px;
|
||||
}
|
||||
|
||||
.Dashboard:not(.some-other-class) {
|
||||
color: #666a88 !important;
|
||||
}
|
||||
|
||||
.Dashboard .title {
|
||||
background-color: rgba(var(--primary-rgbm), 0.1) !important;
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.Dashboard span.label.label-success {
|
||||
background-color: #55bb55;
|
||||
}
|
||||
|
||||
.Dashboard .devices-list .devices-info, .Dashboard .router-status-wifi .wifi-info > hr:last-child {
|
||||
margin-top: 0.575rem;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 600px) {
|
||||
div#content-filemanager {
|
||||
overflow-x: auto;
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,13 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=nikki
|
||||
PKG_RELEASE:=7
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git
|
||||
PKG_SOURCE_DATE:=2025-02-21
|
||||
PKG_SOURCE_VERSION:=5830afcbdeeb6c05a3faa56d33353282b8d1f50c
|
||||
PKG_MIRROR_HASH:=3f5c8aaad3959f77ab3099e0a3d76ca7329e073e1f877720b7c42360c66954c9
|
||||
PKG_SOURCE_DATE:=2025-03-02
|
||||
PKG_SOURCE_VERSION:=a7e56f1c431b8f17f98eb4d81bfc784a5f1ebc4c
|
||||
PKG_MIRROR_HASH:=e6ffc7355fadff8ae93151d016df9b61a618cd4a7125d06f8e1f63f3e70d7b74
|
||||
|
||||
PKG_LICENSE:=GPL3.0+
|
||||
PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com>
|
||||
@ -16,7 +16,7 @@ PKG_BUILD_DEPENDS:=golang/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_BUILD_FLAGS:=no-mips16
|
||||
|
||||
PKG_BUILD_VERSION:=alpha-5830afc
|
||||
PKG_BUILD_VERSION:=alpha-a7e56f1
|
||||
PKG_BUILD_TIME:=$(shell date -u -Iseconds)
|
||||
|
||||
GO_PKG:=github.com/metacubex/mihomo
|
||||
|
@ -8,7 +8,6 @@ config config 'config'
|
||||
option 'scheduled_restart' '0'
|
||||
option 'cron_expression' '0 3 * * *'
|
||||
option 'test_profile' '1'
|
||||
option 'mixin' '1'
|
||||
|
||||
config proxy 'proxy'
|
||||
option 'transparent_proxy' '1'
|
||||
@ -17,8 +16,8 @@ config proxy 'proxy'
|
||||
option 'ipv4_dns_hijack' '1'
|
||||
option 'ipv6_dns_hijack' '1'
|
||||
option 'ipv4_proxy' '1'
|
||||
option 'ipv6_proxy' '0'
|
||||
option 'fake_ip_ping_hijack' '0'
|
||||
option 'ipv6_proxy' '1'
|
||||
option 'fake_ip_ping_hijack' '1'
|
||||
option 'router_proxy' '1'
|
||||
option 'lan_proxy' '1'
|
||||
option 'access_control_mode' 'all'
|
||||
@ -55,17 +54,10 @@ config mixin 'mixin'
|
||||
option 'log_level' 'warning'
|
||||
option 'mode' 'rule'
|
||||
option 'match_process' 'off'
|
||||
option 'outbound_interface' ''
|
||||
option 'ipv6' '0'
|
||||
option 'unify_delay' '1'
|
||||
option 'tcp_concurrent' '1'
|
||||
option 'tcp_keep_alive_idle' '600'
|
||||
option 'tcp_keep_alive_interval' '15'
|
||||
option 'ipv6' '1'
|
||||
option 'ui_path' 'ui'
|
||||
option 'ui_name' ''
|
||||
option 'ui_url' 'https://github.com/Zephyruso/zashboard/archive/refs/heads/gh-pages.zip'
|
||||
option 'api_port' '9090'
|
||||
option 'api_secret' ''
|
||||
option 'api_listen' '[::]:9090'
|
||||
option 'selection_cache' '1'
|
||||
option 'allow_lan' '1'
|
||||
option 'http_port' '8080'
|
||||
@ -76,14 +68,10 @@ config mixin 'mixin'
|
||||
option 'authentication' '1'
|
||||
option 'tun_device' 'nikki'
|
||||
option 'tun_stack' 'system'
|
||||
option 'tun_mtu' '9000'
|
||||
option 'tun_gso' '1'
|
||||
option 'tun_gso_max_size' '65536'
|
||||
option 'tun_dns_hijack' '0'
|
||||
list 'tun_dns_hijacks' 'tcp://any:53'
|
||||
list 'tun_dns_hijacks' 'udp://any:53'
|
||||
option 'tun_endpoint_independent_nat' '0'
|
||||
option 'dns_port' '1053'
|
||||
option 'dns_listen' '[::]:1053'
|
||||
option 'dns_ipv6' '1'
|
||||
option 'dns_mode' 'fake-ip'
|
||||
option 'fake_ip_range' '198.18.0.1/16'
|
||||
@ -91,32 +79,14 @@ config mixin 'mixin'
|
||||
list 'fake_ip_filters' '+.lan'
|
||||
list 'fake_ip_filters' '+.local'
|
||||
option 'fake_ip_cache' '1'
|
||||
option 'dns_respect_rules' '0'
|
||||
option 'dns_doh_prefer_http3' '0'
|
||||
option 'dns_system_hosts' '0'
|
||||
option 'dns_hosts' '1'
|
||||
option 'hosts' '0'
|
||||
option 'dns_nameserver' '0'
|
||||
option 'dns_nameserver_policy' '0'
|
||||
option 'sniffer' '0'
|
||||
option 'sniffer_sniff_dns_mapping' '1'
|
||||
option 'sniffer_sniff_pure_ip' '1'
|
||||
option 'sniffer_overwrite_destination' '0'
|
||||
option 'sniffer_force_domain_name' '0'
|
||||
option 'sniffer_force_domain_names' ''
|
||||
option 'sniffer_ignore_domain_name' '0'
|
||||
option 'sniffer_ignore_domain_names' ''
|
||||
option 'sniffer_sniff' '0'
|
||||
option 'rule' '0'
|
||||
option 'rule_provider' '0'
|
||||
option 'geoip_format' 'dat'
|
||||
option 'geodata_loader' 'memconservative'
|
||||
option 'geosite_url' 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat'
|
||||
option 'geoip_mmdb_url' 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.metadb'
|
||||
option 'geoip_dat_url' 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat'
|
||||
option 'geoip_asn_url' 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb'
|
||||
option 'geox_auto_update' '0'
|
||||
option 'geox_update_interval' '24'
|
||||
option 'mixin_file_content' '0'
|
||||
|
||||
config env 'env'
|
||||
|
@ -44,11 +44,10 @@ start_service() {
|
||||
log "App" "Start."
|
||||
# get config
|
||||
## app config
|
||||
local scheduled_restart cron_expression profile mixin test_profile fast_reload
|
||||
local scheduled_restart cron_expression profile test_profile fast_reload
|
||||
config_get_bool scheduled_restart "config" "scheduled_restart" 0
|
||||
config_get cron_expression "config" "cron_expression"
|
||||
config_get profile "config" "profile"
|
||||
config_get_bool mixin "config" "mixin" 0
|
||||
config_get_bool test_profile "config" "test_profile" 0
|
||||
config_get_bool fast_reload "config" "fast_reload" 0
|
||||
## mixin config
|
||||
@ -94,13 +93,7 @@ start_service() {
|
||||
return
|
||||
fi
|
||||
# mixin
|
||||
if [ "$mixin" == 0 ]; then
|
||||
log "Mixin" "Disabled."
|
||||
log "Mixin" "Mixin neccesary config."
|
||||
else
|
||||
log "Mixin" "Enabled."
|
||||
log "Mixin" "Mixin all config."
|
||||
fi
|
||||
log "Mixin" "Mixin config."
|
||||
if [ "$mixin_file_content" == 0 ]; then
|
||||
ucode -S "$MIXIN_UC" | yq -M -p json -o yaml | yq -M -i ea '... comments="" | . as $item ireduce ({}; . * $item ) | .rules = .nikki-rules + .rules | del(.nikki-rules)' "$RUN_PROFILE_PATH" -
|
||||
elif [ "$mixin_file_content" == 1 ]; then
|
||||
@ -110,9 +103,9 @@ start_service() {
|
||||
if [ "$test_profile" == 1 ]; then
|
||||
log "Profile" "Testing..."
|
||||
if ($PROG -d "$RUN_DIR" -t >> "$CORE_LOG_PATH" 2>&1); then
|
||||
log "Profile" "Test passed!"
|
||||
log "Profile" "Test passed."
|
||||
else
|
||||
log "Profile" "Test failed!"
|
||||
log "Profile" "Test failed."
|
||||
log "Profile" "Please check the core log to find out the problem."
|
||||
log "App" "Exit."
|
||||
return
|
||||
@ -166,26 +159,11 @@ service_started() {
|
||||
config_get tun_device "mixin" "tun_device" "nikki"
|
||||
## proxy config
|
||||
### transparent proxy
|
||||
local tcp_transparent_proxy_mode udp_transparent_proxy_mode ipv4_dns_hijack ipv6_dns_hijack ipv4_proxy ipv6_proxy router_proxy lan_proxy
|
||||
local tcp_transparent_proxy_mode udp_transparent_proxy_mode ipv4_proxy ipv6_proxy
|
||||
config_get tcp_transparent_proxy_mode "proxy" "tcp_transparent_proxy_mode" "redirect"
|
||||
config_get udp_transparent_proxy_mode "proxy" "udp_transparent_proxy_mode" "tun"
|
||||
config_get_bool ipv4_dns_hijack "proxy" "ipv4_dns_hijack" 0
|
||||
config_get_bool ipv6_dns_hijack "proxy" "ipv6_dns_hijack" 0
|
||||
config_get_bool ipv4_proxy "proxy" "ipv4_proxy" 0
|
||||
config_get_bool ipv6_proxy "proxy" "ipv6_proxy" 0
|
||||
config_get_bool router_proxy "proxy" "router_proxy" 0
|
||||
config_get_bool lan_proxy "proxy" "lan_proxy" 0
|
||||
### access control
|
||||
local access_control_mode
|
||||
config_get access_control_mode "proxy" "access_control_mode"
|
||||
### bypass
|
||||
local bypass_user bypass_group bypass_china_mainland_ip proxy_tcp_dport proxy_udp_dport bypass_dscp
|
||||
config_get bypass_user "proxy" "bypass_user"
|
||||
config_get bypass_group "proxy" "bypass_group"
|
||||
config_get_bool bypass_china_mainland_ip "proxy" "bypass_china_mainland_ip" 0
|
||||
config_get proxy_tcp_dport "proxy" "proxy_tcp_dport" "0-65535"
|
||||
config_get proxy_udp_dport "proxy" "proxy_udp_dport" "0-65535"
|
||||
config_get bypass_dscp "proxy" "bypass_dscp"
|
||||
# prepare
|
||||
local tproxy_enable; tproxy_enable=0
|
||||
if [[ "$tcp_transparent_proxy_mode" == "tproxy" || "$udp_transparent_proxy_mode" == "tproxy" ]]; then
|
||||
@ -197,12 +175,10 @@ service_started() {
|
||||
fi
|
||||
# transparent proxy
|
||||
log "Transparent Proxy" "Enabled."
|
||||
log "Transparent Proxy" "TCP Mode: $tcp_transparent_proxy_mode."
|
||||
log "Transparent Proxy" "UDP Mode: $udp_transparent_proxy_mode."
|
||||
# wait for tun device online
|
||||
if [ "$tun_enable" == 1 ]; then
|
||||
log "Transparent Proxy" "Waiting for tun device online..."
|
||||
local tun_timeout; tun_timeout=60
|
||||
local tun_timeout; tun_timeout=15
|
||||
local tun_interval; tun_interval=1
|
||||
while [ "$tun_timeout" -gt 0 ]; do
|
||||
if (ip link show dev "$tun_device" > /dev/null 2>&1); then
|
||||
@ -242,51 +218,14 @@ service_started() {
|
||||
fi
|
||||
$FIREWALL_INCLUDE_SH
|
||||
fi
|
||||
# hijack
|
||||
utpl -D nikki_group="$NIKKI_GROUP" -D tproxy_fw_mark="$TPROXY_FW_MARK" -D tun_fw_mark="$TUN_FW_MARK" -S "$HIJACK_UT" | nft -f -
|
||||
# dns hijack
|
||||
if [ "$ipv4_dns_hijack" == 1 ]; then
|
||||
log "Transparent Proxy" "Hijack IPv4 dns request."
|
||||
fi
|
||||
if [ "$ipv6_dns_hijack" == 1 ]; then
|
||||
log "Transparent Proxy" "Hijack IPv6 dns request."
|
||||
fi
|
||||
# proxy
|
||||
if [ "$ipv4_proxy" == 1 ]; then
|
||||
log "Transparent Proxy" "Proxy IPv4 traffic."
|
||||
fi
|
||||
if [ "$ipv6_proxy" == 1 ]; then
|
||||
log "Transparent Proxy" "Proxy IPv6 traffic."
|
||||
fi
|
||||
# bypass
|
||||
if [ -n "$bypass_user" ]; then
|
||||
log "Transparent Proxy" "Bypass user: $bypass_user."
|
||||
fi
|
||||
if [ -n "$bypass_group" ]; then
|
||||
log "Transparent Proxy" "Bypass group: $bypass_group."
|
||||
fi
|
||||
if [ "$bypass_china_mainland_ip" == 1 ]; then
|
||||
log "Transparent Proxy" "Bypass china mainland ip."
|
||||
fi
|
||||
log "Transparent Proxy" "Destination TCP Port to Proxy: $proxy_tcp_dport."
|
||||
log "Transparent Proxy" "Destination UDP Port to Proxy: $proxy_udp_dport."
|
||||
if [ -n "$bypass_dscp" ]; then
|
||||
log "Transparent Proxy" "Bypass DSCP: $bypass_dscp."
|
||||
fi
|
||||
# router proxy
|
||||
if [ "$router_proxy" == 1 ]; then
|
||||
log "Transparent Proxy" "Set proxy for router."
|
||||
fi
|
||||
# lan proxy
|
||||
if [ "$lan_proxy" == 1 ]; then
|
||||
log "Transparent Proxy" "Set proxy for lan."
|
||||
# access control
|
||||
if [ "$access_control_mode" == "all" ]; then
|
||||
log "Transparent Proxy" "Access Control is using all mode, set proxy for all client."
|
||||
elif [ "$access_control_mode" == "allow" ]; then
|
||||
log "Transparent Proxy" "Access Control is using allow mode, set proxy for client which is in acl."
|
||||
elif [ "$access_control_mode" == "block" ]; then
|
||||
log "Transparent Proxy" "Access Control is using block mode, set proxy for client which is not in acl."
|
||||
fi
|
||||
# check hijack
|
||||
if (nft list tables | grep -q nikki); then
|
||||
log "Transparent Proxy" "Hijack successful."
|
||||
else
|
||||
log "Transparent Proxy" "Hijack failed."
|
||||
log "App" "Exit."
|
||||
fi
|
||||
# fix compatible between tproxy and dockerd (kmod-br-netfilter)
|
||||
if [ "$tproxy_enable" == 1 ] && (lsmod | grep -q br_netfilter); then
|
||||
|
@ -16,7 +16,52 @@ uci show nikki | grep -E 'nikki.@rule\[[[:digit:]]+\].match=' | sed 's/nikki.@ru
|
||||
|
||||
# since v1.19.1
|
||||
|
||||
fake_ip_ping_hijack=$(uci -q get nikki.proxy.fake_ip_ping_hijack); [ -z "$fake_ip_ping_hijack" ] && uci set nikki.proxy.fake_ip_ping_hijack=0
|
||||
proxy_fake_ip_ping_hijack=$(uci -q get nikki.proxy.fake_ip_ping_hijack); [ -z "$proxy_fake_ip_ping_hijack" ] && uci set nikki.proxy.fake_ip_ping_hijack=0
|
||||
|
||||
# since v1.20.0
|
||||
|
||||
mixin=$(uci -q get nikki.config.mixin); [ -n "$mixin" ] && {
|
||||
uci del nikki.config.mixin
|
||||
[ "$mixin" == "0" ] && {
|
||||
uci del nikki.mixin.unify_delay
|
||||
uci del nikki.mixin.tcp_concurrent
|
||||
uci del nikki.mixin.tcp_keep_alive_idle
|
||||
uci del nikki.mixin.tcp_keep_alive_interval
|
||||
uci set nikki.mixin.fake_ip_filter=0
|
||||
uci del nikki.mixin.fake_ip_filter_mode
|
||||
uci del nikki.mixin.dns_respect_rules
|
||||
uci del nikki.mixin.dns_doh_prefer_http3
|
||||
uci del nikki.mixin.dns_system_hosts
|
||||
uci del nikki.mixin.dns_hosts
|
||||
uci set nikki.mixin.hosts=0
|
||||
uci set nikki.mixin.dns_nameserver=0
|
||||
uci set nikki.mixin.dns_nameserver_policy=0
|
||||
uci del nikki.mixin.sniffer
|
||||
uci del nikki.mixin.sniffer_sniff_dns_mapping
|
||||
uci del nikki.mixin.sniffer_sniff_pure_ip
|
||||
uci set nikki.mixin.sniffer_force_domain_name=0
|
||||
uci set nikki.mixin.sniffer_ignore_domain_name=0
|
||||
uci set nikki.mixin.sniffer_sniff=0
|
||||
uci del nikki.mixin.geoip_format
|
||||
uci del nikki.mixin.geodata_loader
|
||||
uci del nikki.mixin.geosite_url
|
||||
uci del nikki.mixin.geoip_mmdb_url
|
||||
uci del nikki.mixin.geoip_dat_url
|
||||
uci del nikki.mixin.geoip_asn_url
|
||||
uci del nikki.mixin.geox_auto_update
|
||||
uci del nikki.mixin.geox_update_interval
|
||||
}
|
||||
}
|
||||
|
||||
mixin_api_port=$(uci -q get nikki.mixin.api_port); [ -n "$mixin_api_port" ] && {
|
||||
uci del nikki.mixin.api_port
|
||||
uci set nikki.mixin.api_listen=[::]:$mixin_api_port
|
||||
}
|
||||
|
||||
mixin_dns_port=$(uci -q get nikki.mixin.dns_port); [ -n "$mixin_dns_port" ] && {
|
||||
uci del nikki.mixin.dns_port
|
||||
uci set nikki.mixin.dns_listen=[::]:$mixin_dns_port
|
||||
}
|
||||
|
||||
# commit
|
||||
uci commit nikki
|
||||
|
@ -8,8 +8,8 @@
|
||||
import { connect } from 'ubus';
|
||||
import { uci_bool, uci_array } from '/etc/nikki/ucode/include.uc';
|
||||
|
||||
let users = map(split(readfile('/etc/passwd'), '\n'), (x) => split(x, ':')[0]);
|
||||
let groups = map(split(readfile('/etc/group'), '\n'), (x) => split(x, ':')[0]);
|
||||
const users = map(split(readfile('/etc/passwd'), '\n'), (x) => split(x, ':')[0]);
|
||||
const groups = map(split(readfile('/etc/group'), '\n'), (x) => split(x, ':')[0]);
|
||||
|
||||
const uci = cursor();
|
||||
const ubus = connect();
|
||||
@ -19,7 +19,8 @@
|
||||
const redir_port = uci.get('nikki', 'mixin', 'redir_port');
|
||||
const tproxy_port = uci.get('nikki', 'mixin', 'tproxy_port');
|
||||
|
||||
const dns_port = uci.get('nikki', 'mixin', 'dns_port');
|
||||
const dns_listen = uci.get('nikki', 'mixin', 'dns_listen');
|
||||
const dns_port = substr(dns_listen, rindex(dns_listen, ':') + 1);
|
||||
const fake_ip_range = uci.get('nikki', 'mixin', 'fake_ip_range');
|
||||
|
||||
const tun_device = uci.get('nikki', 'mixin', 'tun_device');
|
||||
|
@ -1,5 +1,9 @@
|
||||
export function uci_bool(obj) {
|
||||
return obj == '1';
|
||||
return obj == null ? null : obj == '1';
|
||||
};
|
||||
|
||||
export function uci_int(obj) {
|
||||
return obj == null ? null : int(obj);
|
||||
};
|
||||
|
||||
export function uci_array(obj) {
|
||||
@ -36,7 +40,7 @@ export function trim_all(obj) {
|
||||
delete obj[key];
|
||||
}
|
||||
}
|
||||
if (length(obj_keys) == 0) {
|
||||
if (length(keys(obj)) == 0) {
|
||||
return null;
|
||||
}
|
||||
return obj;
|
||||
|
@ -4,39 +4,35 @@
|
||||
|
||||
import { cursor } from 'uci';
|
||||
import { connect } from 'ubus';
|
||||
import { uci_bool, uci_array, trim_all } from '/etc/nikki/ucode/include.uc';
|
||||
import { uci_bool, uci_int, uci_array, trim_all } from '/etc/nikki/ucode/include.uc';
|
||||
|
||||
const uci = cursor();
|
||||
const ubus = connect();
|
||||
|
||||
const config = {};
|
||||
|
||||
const mixin = uci_bool(uci.get('nikki', 'config', 'mixin'));
|
||||
|
||||
config['log-level'] = uci.get('nikki', 'mixin', 'log_level') ?? 'info';
|
||||
config['mode'] = uci.get('nikki', 'mixin', 'mode') ?? 'rule';
|
||||
config['find-process-mode'] = uci.get('nikki', 'mixin', 'match_process') ?? 'off';
|
||||
config['interface-name'] = ubus.call('network.interface', 'status', {'interface': uci.get('nikki', 'mixin', 'outbound_interface')})?.l3_device ?? '';
|
||||
config['log-level'] = uci.get('nikki', 'mixin', 'log_level');
|
||||
config['mode'] = uci.get('nikki', 'mixin', 'mode');
|
||||
config['find-process-mode'] = uci.get('nikki', 'mixin', 'match_process');
|
||||
config['interface-name'] = ubus.call('network.interface', 'status', {'interface': uci.get('nikki', 'mixin', 'outbound_interface')})?.l3_device;
|
||||
config['ipv6'] = uci_bool(uci.get('nikki', 'mixin', 'ipv6'));
|
||||
if (mixin) {
|
||||
config['unified-delay'] = uci_bool(uci.get('nikki', 'mixin', 'unify_delay'));
|
||||
config['tcp-concurrent'] = uci_bool(uci.get('nikki', 'mixin', 'tcp_concurrent'));
|
||||
config['keep-alive-idle'] = int(uci.get('nikki', 'mixin', 'tcp_keep_alive_idle') ?? '600');
|
||||
config['keep-alive-interval'] = int(uci.get('nikki', 'mixin', 'tcp_keep_alive_interval') ?? '15');
|
||||
}
|
||||
config['unified-delay'] = uci_bool(uci.get('nikki', 'mixin', 'unify_delay'));
|
||||
config['tcp-concurrent'] = uci_bool(uci.get('nikki', 'mixin', 'tcp_concurrent'));
|
||||
config['keep-alive-idle'] = uci_int(uci.get('nikki', 'mixin', 'tcp_keep_alive_idle'));
|
||||
config['keep-alive-interval'] = uci_int(uci.get('nikki', 'mixin', 'tcp_keep_alive_interval'));
|
||||
|
||||
config['external-ui'] = uci.get('nikki', 'mixin', 'ui_path') ?? 'ui';
|
||||
config['external-ui-name'] = uci.get('nikki', 'mixin', 'ui_name') ?? '';
|
||||
config['external-ui'] = uci.get('nikki', 'mixin', 'ui_path');
|
||||
config['external-ui-name'] = uci.get('nikki', 'mixin', 'ui_name');
|
||||
config['external-ui-url'] = uci.get('nikki', 'mixin', 'ui_url');
|
||||
config['external-controller'] = '0.0.0.0' + ':' + (uci.get('nikki', 'mixin', 'api_port') ?? '9090');
|
||||
config['secret'] = uci.get('nikki', 'mixin', 'api_secret') ?? '666666';
|
||||
config['external-controller'] = uci.get('nikki', 'mixin', 'api_listen');
|
||||
config['secret'] = uci.get('nikki', 'mixin', 'api_secret');
|
||||
|
||||
config['allow-lan'] = uci_bool(uci.get('nikki', 'mixin', 'allow_lan'));
|
||||
config['port'] = int(uci.get('nikki', 'mixin', 'http_port') ?? '8080');
|
||||
config['socks-port'] = int(uci.get('nikki', 'mixin', 'socks_port') ?? '1080');
|
||||
config['mixed-port'] = int(uci.get('nikki', 'mixin', 'mixed_port') ?? '7890');
|
||||
config['redir-port'] = int(uci.get('nikki', 'mixin', 'redir_port') ?? '7891');
|
||||
config['tproxy-port'] = int(uci.get('nikki', 'mixin', 'tproxy_port') ?? '7892');
|
||||
config['port'] = uci_int(uci.get('nikki', 'mixin', 'http_port'));
|
||||
config['socks-port'] = uci_int(uci.get('nikki', 'mixin', 'socks_port'));
|
||||
config['mixed-port'] = uci_int(uci.get('nikki', 'mixin', 'mixed_port'));
|
||||
config['redir-port'] = uci_int(uci.get('nikki', 'mixin', 'redir_port'));
|
||||
config['tproxy-port'] = uci_int(uci.get('nikki', 'mixin', 'tproxy_port'));
|
||||
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'authentication'))) {
|
||||
config['authentication'] = [];
|
||||
@ -54,11 +50,11 @@ if (uci.get('nikki', 'proxy', 'tcp_transparent_proxy_mode') == 'tun' || uci.get(
|
||||
config['tun']['auto-route'] = false;
|
||||
config['tun']['auto-redirect'] = false;
|
||||
config['tun']['auto-detect-interface'] = false;
|
||||
config['tun']['device'] = uci.get('nikki', 'mixin', 'tun_device') ?? 'nikki';
|
||||
config['tun']['stack'] = uci.get('nikki', 'mixin', 'tun_stack') ?? 'system';
|
||||
config['tun']['mtu'] = int(uci.get('nikki', 'mixin', 'tun_mtu') ?? '9000');
|
||||
config['tun']['device'] = uci.get('nikki', 'mixin', 'tun_device');
|
||||
config['tun']['stack'] = uci.get('nikki', 'mixin', 'tun_stack');
|
||||
config['tun']['mtu'] = uci_int(uci.get('nikki', 'mixin', 'tun_mtu'));
|
||||
config['tun']['gso'] = uci_bool(uci.get('nikki', 'mixin', 'tun_gso'));
|
||||
config['tun']['gso-max-size'] = int(uci.get('nikki', 'mixin', 'tun_gso_max_size') ?? '65536');
|
||||
config['tun']['gso-max-size'] = uci_int(uci.get('nikki', 'mixin', 'tun_gso_max_size'));
|
||||
config['tun']['endpoint-independent-nat'] = uci_bool(uci.get('nikki', 'mixin', 'tun_endpoint_independent_nat'));
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'tun_dns_hijack'))) {
|
||||
config['tun']['dns-hijack'] = uci_array(uci.get('nikki', 'mixin', 'tun_dns_hijacks'));
|
||||
@ -69,77 +65,73 @@ if (uci.get('nikki', 'proxy', 'tcp_transparent_proxy_mode') == 'tun' || uci.get(
|
||||
|
||||
config['dns'] = {};
|
||||
config['dns']['enable'] = true;
|
||||
config['dns']['listen'] = '0.0.0.0' + ':' + (uci.get('nikki', 'mixin', 'dns_port') ?? '1053');
|
||||
config['dns']['listen'] = uci.get('nikki', 'mixin', 'dns_listen');
|
||||
config['dns']['ipv6'] = uci_bool(uci.get('nikki', 'mixin', 'dns_ipv6'));
|
||||
config['dns']['enhanced-mode'] = uci.get('nikki', 'mixin', 'dns_mode') ?? 'redir-host';
|
||||
config['dns']['fake-ip-range'] = uci.get('nikki', 'mixin', 'fake_ip_range') ?? '198.18.0.1/16';
|
||||
config['dns']['enhanced-mode'] = uci.get('nikki', 'mixin', 'dns_mode');
|
||||
config['dns']['fake-ip-range'] = uci.get('nikki', 'mixin', 'fake_ip_range');
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'fake_ip_filter'))) {
|
||||
config['dns']['fake-ip-filter'] = uci_array(uci.get('nikki', 'mixin', 'fake_ip_filters'));
|
||||
config['dns']['fake-ip-filter-mode'] = uci.get('nikki', 'mixin', 'fake_ip_filter_mode') ?? 'blacklist';
|
||||
}
|
||||
if (mixin) {
|
||||
config['dns']['respect-rules'] = uci_bool(uci.get('nikki', 'mixin', 'dns_respect_rules'));
|
||||
config['dns']['prefer-h3'] = uci_bool(uci.get('nikki', 'mixin', 'dns_doh_prefer_http3'));
|
||||
config['dns']['use-system-hosts'] = uci_bool(uci.get('nikki', 'mixin', 'dns_system_hosts'));
|
||||
config['dns']['use-hosts'] = uci_bool(uci.get('nikki', 'mixin', 'dns_hosts'));
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'hosts'))) {
|
||||
config['hosts'] = {};
|
||||
uci.foreach('nikki', 'hosts', (section) => {
|
||||
if (!uci_bool(section.enabled)) {
|
||||
return;
|
||||
}
|
||||
config['hosts'][section.domain_name] = uci_array(section.ip);
|
||||
});
|
||||
}
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'dns_nameserver'))) {
|
||||
config['dns']['default-nameserver'] = [];
|
||||
config['dns']['proxy-server-nameserver'] = [];
|
||||
config['dns']['direct-nameserver'] = [];
|
||||
config['dns']['nameserver'] = [];
|
||||
config['dns']['fallback'] = [];
|
||||
uci.foreach('nikki', 'nameserver', (section) => {
|
||||
if (!uci_bool(section.enabled)) {
|
||||
return;
|
||||
}
|
||||
push(config['dns'][section.type], ...uci_array(section.nameserver));
|
||||
})
|
||||
}
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'dns_nameserver_policy'))) {
|
||||
config['dns']['nameserver-policy'] = {};
|
||||
uci.foreach('nikki', 'nameserver_policy', (section) => {
|
||||
if (!uci_bool(section.enabled)) {
|
||||
return;
|
||||
}
|
||||
config['dns']['nameserver-policy'][section.matcher] = uci_array(section.nameserver);
|
||||
});
|
||||
}
|
||||
config['dns']['fake-ip-filter-mode'] = uci.get('nikki', 'mixin', 'fake_ip_filter_mode');
|
||||
|
||||
config['dns']['respect-rules'] = uci_bool(uci.get('nikki', 'mixin', 'dns_respect_rules'));
|
||||
config['dns']['prefer-h3'] = uci_bool(uci.get('nikki', 'mixin', 'dns_doh_prefer_http3'));
|
||||
config['dns']['use-system-hosts'] = uci_bool(uci.get('nikki', 'mixin', 'dns_system_hosts'));
|
||||
config['dns']['use-hosts'] = uci_bool(uci.get('nikki', 'mixin', 'dns_hosts'));
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'hosts'))) {
|
||||
config['hosts'] = {};
|
||||
uci.foreach('nikki', 'hosts', (section) => {
|
||||
if (!uci_bool(section.enabled)) {
|
||||
return;
|
||||
}
|
||||
config['hosts'][section.domain_name] = uci_array(section.ip);
|
||||
});
|
||||
}
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'dns_nameserver'))) {
|
||||
config['dns']['default-nameserver'] = [];
|
||||
config['dns']['proxy-server-nameserver'] = [];
|
||||
config['dns']['direct-nameserver'] = [];
|
||||
config['dns']['nameserver'] = [];
|
||||
config['dns']['fallback'] = [];
|
||||
uci.foreach('nikki', 'nameserver', (section) => {
|
||||
if (!uci_bool(section.enabled)) {
|
||||
return;
|
||||
}
|
||||
push(config['dns'][section.type], ...uci_array(section.nameserver));
|
||||
})
|
||||
}
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'dns_nameserver_policy'))) {
|
||||
config['dns']['nameserver-policy'] = {};
|
||||
uci.foreach('nikki', 'nameserver_policy', (section) => {
|
||||
if (!uci_bool(section.enabled)) {
|
||||
return;
|
||||
}
|
||||
config['dns']['nameserver-policy'][section.matcher] = uci_array(section.nameserver);
|
||||
});
|
||||
}
|
||||
|
||||
if (mixin) {
|
||||
config['sniffer'] = {};
|
||||
config['sniffer']['enable'] = uci_bool(uci.get('nikki', 'mixin', 'sniffer'));
|
||||
config['sniffer']['force-dns-mapping'] = uci_bool(uci.get('nikki', 'mixin', 'sniffer_sniff_dns_mapping'));
|
||||
config['sniffer']['parse-pure-ip'] = uci_bool(uci.get('nikki', 'mixin', 'sniffer_sniff_pure_ip'));
|
||||
config['sniffer']['override-destination'] = uci_bool(uci.get('nikki', 'mixin', 'sniffer_overwrite_destination'));
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'sniffer_force_domain_name'))) {
|
||||
config['sniffer']['force-domain'] = uci_array(uci.get('nikki', 'mixin', 'sniffer_force_domain_names'));
|
||||
}
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'sniffer_ignore_domain_name'))) {
|
||||
config['sniffer']['skip-domain'] = uci_array(uci.get('nikki', 'mixin', 'sniffer_ignore_domain_names'));
|
||||
}
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'sniffer_sniff'))) {
|
||||
config['sniffer']['sniff'] = {};
|
||||
config['sniffer']['sniff']['HTTP'] = {};
|
||||
config['sniffer']['sniff']['TLS'] = {};
|
||||
config['sniffer']['sniff']['QUIC'] = {};
|
||||
uci.foreach('nikki', 'sniff', (section) => {
|
||||
if (!uci_bool(section.enabled)) {
|
||||
return;
|
||||
}
|
||||
config['sniffer']['sniff'][section.protocol]['port'] = uci_array(section.port);
|
||||
config['sniffer']['sniff'][section.protocol]['override-destination'] = uci_bool(section.overwrite_destination);
|
||||
});
|
||||
}
|
||||
config['sniffer'] = {};
|
||||
config['sniffer']['enable'] = uci_bool(uci.get('nikki', 'mixin', 'sniffer'));
|
||||
config['sniffer']['force-dns-mapping'] = uci_bool(uci.get('nikki', 'mixin', 'sniffer_sniff_dns_mapping'));
|
||||
config['sniffer']['parse-pure-ip'] = uci_bool(uci.get('nikki', 'mixin', 'sniffer_sniff_pure_ip'));
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'sniffer_force_domain_name'))) {
|
||||
config['sniffer']['force-domain'] = uci_array(uci.get('nikki', 'mixin', 'sniffer_force_domain_names'));
|
||||
}
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'sniffer_ignore_domain_name'))) {
|
||||
config['sniffer']['skip-domain'] = uci_array(uci.get('nikki', 'mixin', 'sniffer_ignore_domain_names'));
|
||||
}
|
||||
if (uci_bool(uci.get('nikki', 'mixin', 'sniffer_sniff'))) {
|
||||
config['sniffer']['sniff'] = {};
|
||||
config['sniffer']['sniff']['HTTP'] = {};
|
||||
config['sniffer']['sniff']['TLS'] = {};
|
||||
config['sniffer']['sniff']['QUIC'] = {};
|
||||
uci.foreach('nikki', 'sniff', (section) => {
|
||||
if (!uci_bool(section.enabled)) {
|
||||
return;
|
||||
}
|
||||
config['sniffer']['sniff'][section.protocol]['port'] = uci_array(section.port);
|
||||
config['sniffer']['sniff'][section.protocol]['override-destination'] = uci_bool(section.overwrite_destination);
|
||||
});
|
||||
}
|
||||
|
||||
config['profile'] = {};
|
||||
@ -178,29 +170,19 @@ if (uci_bool(uci.get('nikki', 'mixin', 'rule'))) {
|
||||
if (!uci_bool(section.enabled)) {
|
||||
return;
|
||||
}
|
||||
let rule;
|
||||
if (length(section.type) > 0) {
|
||||
rule = `${section.type},${section.matcher},${section.node}`;
|
||||
} else {
|
||||
rule = `${section.matcher},${section.node}`;
|
||||
}
|
||||
if (uci_bool(section.no_resolve)) {
|
||||
rule += ',no_resolve';
|
||||
}
|
||||
push(config['nikki-rules'], rule);
|
||||
push(config['nikki-rules'], `${section.type},${section.matcher},${section.node}` + (uci_bool(section.no_resolve) ? ',no_resolve' : ''));
|
||||
})
|
||||
}
|
||||
|
||||
if (mixin) {
|
||||
config['geodata-mode'] = uci.get('nikki', 'mixin', 'geoip_format') == 'dat';
|
||||
config['geodata-loader'] = uci.get('nikki', 'mixin', 'geodata_loader') ?? 'memconservative';
|
||||
config['geox-url'] = {};
|
||||
config['geox-url']['geosite'] = uci.get('nikki', 'mixin', 'geosite_url');
|
||||
config['geox-url']['mmdb'] = uci.get('nikki', 'mixin', 'geoip_mmdb_url');
|
||||
config['geox-url']['geoip'] = uci.get('nikki', 'mixin', 'geoip_dat_url');
|
||||
config['geox-url']['asn'] = uci.get('nikki', 'mixin', 'geoip_asn_url');
|
||||
config['geo-auto-update'] = uci_bool(uci.get('nikki', 'mixin', 'geox_auto_update'));
|
||||
config['geo-update-interval'] = int(uci.get('nikki', 'mixin', 'geox_update_interval') ?? '24');
|
||||
}
|
||||
const geoip_format = uci.get('nikki', 'mixin', 'geoip_format');
|
||||
config['geodata-mode'] = geoip_format == null ? null : geoip_format == 'dat';
|
||||
config['geodata-loader'] = uci.get('nikki', 'mixin', 'geodata_loader');
|
||||
config['geox-url'] = {};
|
||||
config['geox-url']['geosite'] = uci.get('nikki', 'mixin', 'geosite_url');
|
||||
config['geox-url']['mmdb'] = uci.get('nikki', 'mixin', 'geoip_mmdb_url');
|
||||
config['geox-url']['geoip'] = uci.get('nikki', 'mixin', 'geoip_dat_url');
|
||||
config['geox-url']['asn'] = uci.get('nikki', 'mixin', 'geoip_asn_url');
|
||||
config['geo-auto-update'] = uci_bool(uci.get('nikki', 'mixin', 'geox_auto_update'));
|
||||
config['geo-update-interval'] = uci_int(uci.get('nikki', 'mixin', 'geox_update_interval'));
|
||||
|
||||
print(trim_all(config));
|
@ -649,23 +649,26 @@ static int handle_get_class_list(struct ubus_context *ctx, struct ubus_object *o
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MAX_APPFILTER_STR_LEN 8192
|
||||
static int handle_get_app_filter(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
struct ubus_request_data *req, const char *method,
|
||||
struct blob_attr *msg) {
|
||||
struct json_object *response = json_object_new_object();
|
||||
struct json_object *app_list = json_object_new_array();
|
||||
|
||||
int i;
|
||||
struct uci_context *uci_ctx = uci_alloc_context();
|
||||
if (!uci_ctx) {
|
||||
printf("Failed to allocate UCI context\n");
|
||||
return 0;
|
||||
}
|
||||
char app_filter_str[1024] = {0};
|
||||
app_filter_str[0] = '\0';
|
||||
af_uci_get_list_value(uci_ctx, "appfilter.rule.app_list", app_filter_str, sizeof(app_filter_str), " ");
|
||||
printf("app_filter_str: %s\n", app_filter_str);
|
||||
char *app_id_str = strtok(app_filter_str, " ");
|
||||
char *appfilter_buf = (char *)malloc(MAX_APPFILTER_STR_LEN);
|
||||
if (!appfilter_buf){
|
||||
return 0;
|
||||
}
|
||||
appfilter_buf[0] = '\0';
|
||||
struct json_object *response = json_object_new_object();
|
||||
struct json_object *app_list = json_object_new_array();
|
||||
af_uci_get_list_value(uci_ctx, "appfilter.rule.app_list", appfilter_buf, MAX_APPFILTER_STR_LEN - 1, " ");
|
||||
char *app_id_str = strtok(appfilter_buf, " ");
|
||||
while (app_id_str) {
|
||||
json_object_array_add(app_list, json_object_new_int(atoi(app_id_str)));
|
||||
app_id_str = strtok(NULL, " ");
|
||||
@ -677,6 +680,7 @@ static int handle_get_app_filter(struct ubus_context *ctx, struct ubus_object *o
|
||||
blobmsg_add_object(&b, response);
|
||||
ubus_send_reply(ctx, req, b.head);
|
||||
blob_buf_free(&b);
|
||||
free(appfilter_buf);
|
||||
json_object_put(response);
|
||||
return 0;
|
||||
}
|
||||
|
@ -5,12 +5,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=smartdns
|
||||
PKG_VERSION:=46
|
||||
PKG_VERSION:=46.1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/pymumu/smartdns/tar.gz/Release$(PKG_VERSION)?
|
||||
PKG_HASH:=6594d21c0e354b67d4b5918e11eff21e6314e247b9e6e28be1ece4168c368fc1
|
||||
PKG_HASH:=6307503fa409b9c6b87556d1b1f8eaf99c7be5b06a9d479ec3589c875391a6b3
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-Release$(PKG_VERSION)
|
||||
|
||||
PKG_MAINTAINER:=Nick Peng <pymumu@gmail.com>
|
||||
|
Loading…
x
Reference in New Issue
Block a user