mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-11-05 01:44:24 +08:00
update 2026-09-26 11:07:27
This commit is contained in:
1 parent
7b88b273d0
commit
97ae9f68da
4898 files changed
-1712274
No files matched your search
@@ -1,10 +0,0 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_VERSION:=1.2.1
|
||||
|
||||
LUCI_TITLE:=LuCI Support for momo
|
||||
LUCI_DEPENDS:=+luci-base +momo
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -1,186 +0,0 @@
|
||||
'use strict';
|
||||
'require baseclass';
|
||||
'require uci';
|
||||
'require fs';
|
||||
'require rpc';
|
||||
'require request';
|
||||
|
||||
const callRCList = rpc.declare({
|
||||
object: 'rc',
|
||||
method: 'list',
|
||||
params: ['name'],
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callRCInit = rpc.declare({
|
||||
object: 'rc',
|
||||
method: 'init',
|
||||
params: ['name', 'action'],
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callFileWrite = rpc.declare({
|
||||
object: 'file',
|
||||
method: 'write',
|
||||
params: ['path', 'data', 'append', 'mode']
|
||||
});
|
||||
|
||||
const callMomoGetPaths = rpc.declare({
|
||||
object: 'luci.momo',
|
||||
method: 'get_paths',
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callMomoVersion = rpc.declare({
|
||||
object: 'luci.momo',
|
||||
method: 'version',
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callMomoProfile = rpc.declare({
|
||||
object: 'luci.momo',
|
||||
method: 'profile',
|
||||
params: ['defaults'],
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callMomoUpdateSubscription = rpc.declare({
|
||||
object: 'luci.momo',
|
||||
method: 'update_subscription',
|
||||
params: ['section_id'],
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callMomoAPI = rpc.declare({
|
||||
object: 'luci.momo',
|
||||
method: 'api',
|
||||
params: ['method', 'path', 'query', 'body'],
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callMomoGetIdentifiers = rpc.declare({
|
||||
object: 'luci.momo',
|
||||
method: 'get_identifiers',
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
const callMomoDebug = rpc.declare({
|
||||
object: 'luci.momo',
|
||||
method: 'debug',
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
return baseclass.extend({
|
||||
getPaths: async function () {
|
||||
return callMomoGetPaths();
|
||||
},
|
||||
|
||||
status: async function () {
|
||||
return (await callRCList('momo'))?.momo?.running;
|
||||
},
|
||||
|
||||
reload: function () {
|
||||
return callRCInit('momo', 'reload');
|
||||
},
|
||||
|
||||
restart: function () {
|
||||
return callRCInit('momo', 'restart');
|
||||
},
|
||||
|
||||
writefile: function (path, data, mode) {
|
||||
data = (data != null) ? String(data) : '';
|
||||
mode = (mode != null) ? mode : 0o644;
|
||||
|
||||
const encoder = new TextEncoder();
|
||||
const decoder = new TextDecoder();
|
||||
const chunkSize = 8 * 1024;
|
||||
|
||||
const bytes = encoder.encode(data);
|
||||
|
||||
if (bytes.length <= chunkSize) {
|
||||
return callFileWrite(path, data, false, mode);
|
||||
}
|
||||
|
||||
let promise = Promise.resolve();
|
||||
for(let offset = 0; offset < bytes.length; offset += chunkSize) {
|
||||
const chunkStart = offset;
|
||||
const chunkEnd = Math.min(offset + chunkSize, bytes.length);
|
||||
const isLastChunk = chunkEnd === bytes.length;
|
||||
const chunkBytes = bytes.slice(chunkStart, chunkEnd);
|
||||
const chunk = decoder.decode(chunkBytes, { stream: !isLastChunk });
|
||||
const append = offset > 0;
|
||||
promise = promise.then(() => callFileWrite(path, chunk, append, mode));
|
||||
}
|
||||
|
||||
return promise;
|
||||
},
|
||||
|
||||
version: function () {
|
||||
return callMomoVersion();
|
||||
},
|
||||
|
||||
profile: function (defaults) {
|
||||
return callMomoProfile(defaults);
|
||||
},
|
||||
|
||||
updateSubscription: function (section_id) {
|
||||
return callMomoUpdateSubscription(section_id);
|
||||
},
|
||||
|
||||
updateDashboard: function () {
|
||||
return callMomoAPI('POST', '/upgrade/ui');
|
||||
},
|
||||
|
||||
openDashboard: async function () {
|
||||
const profile = await callMomoProfile({ 'experimental': { 'clash_api': { 'external_controller': null, 'secret': null } } });
|
||||
const apiListen = profile?.['experimental']?.['clash_api']?.['external_controller'];
|
||||
const apiSecret = profile?.['experimental']?.['clash_api']?.['secret'] ?? '';
|
||||
if (!apiListen) {
|
||||
return Promise.reject('Clash API has not been configured');
|
||||
}
|
||||
const apiPort = apiListen.substring(apiListen.lastIndexOf(':') + 1);
|
||||
const params = {
|
||||
host: window.location.hostname,
|
||||
hostname: window.location.hostname,
|
||||
port: apiPort,
|
||||
secret: apiSecret
|
||||
};
|
||||
const query = new URLSearchParams(params).toString();
|
||||
const url = `http://${window.location.hostname}:${apiPort}/ui/?${query}`;
|
||||
setTimeout(function () { window.open(url, '_blank') }, 0);
|
||||
return Promise.resolve();
|
||||
},
|
||||
|
||||
getIdentifiers: function () {
|
||||
return callMomoGetIdentifiers();
|
||||
},
|
||||
|
||||
listProfiles: async function () {
|
||||
const paths = await this.getPaths();
|
||||
return L.resolveDefault(fs.list(paths.profiles_dir), []);
|
||||
},
|
||||
|
||||
getAppLog: async function () {
|
||||
const paths = await this.getPaths();
|
||||
return L.resolveDefault(fs.read_direct(paths.app_log_path));
|
||||
},
|
||||
|
||||
getCoreLog: async function () {
|
||||
const paths = await this.getPaths();
|
||||
return L.resolveDefault(fs.read_direct(paths.core_log_path));
|
||||
},
|
||||
|
||||
clearAppLog: async function () {
|
||||
const paths = await this.getPaths();
|
||||
return this.writefile(paths.app_log_path);
|
||||
},
|
||||
|
||||
clearCoreLog: async function () {
|
||||
const paths = await this.getPaths();
|
||||
return this.writefile(paths.core_log_path);
|
||||
},
|
||||
|
||||
debug: function () {
|
||||
return callMomoDebug();
|
||||
},
|
||||
})
|
||||
@@ -1,185 +0,0 @@
|
||||
'use strict';
|
||||
'require form';
|
||||
'require view';
|
||||
'require uci';
|
||||
'require poll';
|
||||
'require tools.momo as momo';
|
||||
|
||||
function renderStatus(running) {
|
||||
return updateStatus(E('input', { id: 'core_status', style: 'border: unset; font-style: italic; font-weight: bold;', readonly: '' }), running);
|
||||
}
|
||||
|
||||
function updateStatus(element, running) {
|
||||
if (element) {
|
||||
element.style.color = running ? 'green' : 'red';
|
||||
element.value = running ? _('Running') : _('Not Running');
|
||||
}
|
||||
return element;
|
||||
}
|
||||
|
||||
return view.extend({
|
||||
load: function () {
|
||||
return Promise.all([
|
||||
uci.load('momo'),
|
||||
momo.version(),
|
||||
momo.status(),
|
||||
momo.listProfiles()
|
||||
]);
|
||||
},
|
||||
render: function (data) {
|
||||
const subscriptions = uci.sections('momo', 'subscription');
|
||||
const appVersion = data[1].app ?? '';
|
||||
const coreVersion = data[1].core ?? '';
|
||||
const running = data[2];
|
||||
const profiles = data[3];
|
||||
|
||||
let m, s, o;
|
||||
|
||||
m = new form.Map('momo', _('Momo'), `${_('Transparent Proxy with sing-box on OpenWrt.')} <a href="https://github.com/nikkinikki-org/OpenWrt-momo/wiki" target="_blank">${_('How To Use')}</a>`);
|
||||
|
||||
s = m.section(form.TableSection, 'placeholder', _('Status'));
|
||||
s.anonymous = true;
|
||||
|
||||
o = s.option(form.Value, '_app_version', _('App Version'));
|
||||
o.readonly = true;
|
||||
o.load = function () {
|
||||
return appVersion;
|
||||
};
|
||||
o.write = function () { };
|
||||
|
||||
o = s.option(form.Value, '_core_version', _('Core Version'));
|
||||
o.readonly = true;
|
||||
o.load = function () {
|
||||
return coreVersion;
|
||||
};
|
||||
o.write = function () { };
|
||||
|
||||
o = s.option(form.DummyValue, '_core_status', _('Core Status'));
|
||||
o.cfgvalue = function () {
|
||||
return renderStatus(running);
|
||||
};
|
||||
poll.add(function () {
|
||||
return L.resolveDefault(momo.status()).then(function (running) {
|
||||
updateStatus(document.getElementById('core_status'), running);
|
||||
});
|
||||
});
|
||||
|
||||
o = s.option(form.Button, 'reload');
|
||||
o.inputstyle = 'action';
|
||||
o.inputtitle = _('Reload Service');
|
||||
o.onclick = function () {
|
||||
return momo.reload();
|
||||
};
|
||||
|
||||
o = s.option(form.Button, 'restart');
|
||||
o.inputstyle = 'negative';
|
||||
o.inputtitle = _('Restart Service');
|
||||
o.onclick = function () {
|
||||
return momo.restart();
|
||||
};
|
||||
|
||||
o = s.option(form.Button, 'update_dashboard');
|
||||
o.inputstyle = 'positive';
|
||||
o.inputtitle = _('Update Dashboard');
|
||||
o.onclick = function () {
|
||||
return momo.updateDashboard();
|
||||
};
|
||||
|
||||
o = s.option(form.Button, 'open_dashboard');
|
||||
o.inputtitle = _('Open Dashboard');
|
||||
o.onclick = function () {
|
||||
return momo.openDashboard();
|
||||
};
|
||||
|
||||
s = m.section(form.NamedSection, 'config', 'config', _('App Config'));
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enable'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.ListValue, 'profile', _('Choose Profile'));
|
||||
o.optional = true;
|
||||
|
||||
for (const profile of profiles) {
|
||||
o.value('file:' + profile.name, _('File:') + profile.name);
|
||||
};
|
||||
|
||||
for (const subscription of subscriptions) {
|
||||
o.value('subscription:' + subscription['.name'], _('Subscription:') + subscription.name);
|
||||
};
|
||||
|
||||
o = s.option(form.Value, 'start_delay', _('Start Delay'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Start Immidiately');
|
||||
|
||||
o = s.option(form.Flag, 'scheduled_restart', _('Scheduled Restart'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'scheduled_restart_cron', _('Scheduled Restart Cron'));
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
o.depends('scheduled_restart', '1');
|
||||
|
||||
o = s.option(form.Flag, 'test_profile', _('Test Profile'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Flag, 'core_only', _('Core Only'));
|
||||
o.rmempty = false;
|
||||
|
||||
s = m.section(form.NamedSection, 'procd', 'procd', _('procd Config'));
|
||||
|
||||
s.tab('general', _('General Config'));
|
||||
|
||||
o = s.taboption('general', form.Flag, 'fast_reload', _('Fast Reload'));
|
||||
o.rmempty = false;
|
||||
|
||||
s.tab('rlimit', _('RLIMIT Config'));
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_nproc_soft', _('Number of Processes Soft Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_nproc_hard', _('Number of Processes Hard Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_address_space_soft', _('Address Space Size Soft Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_address_space_hard', _('Address Space Size Hard Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_data_soft', _('Heap Size Soft Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_data_hard', _('Heap Size Hard Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_stack_soft', _('Stack Size Soft Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_stack_hard', _('Stack Size Hard Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_nofile_soft', _('Number of Open Files Soft Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
|
||||
o = s.taboption('rlimit', form.Value, 'rlimit_nofile_hard', _('Number of Open Files Hard Limit'));
|
||||
o.datatype = 'uinteger';
|
||||
|
||||
s.tab('environment_variable', _('Environment Variable Config'));
|
||||
|
||||
o = s.taboption('environment_variable', form.Value, 'env_go_max_procs', 'GOMAXPROCS');
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
o = s.taboption('environment_variable', form.Value, 'env_go_mem_limit', 'GOMEMLIMIT');
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unlimited');
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
||||
@@ -1,69 +0,0 @@
|
||||
'use strict';
|
||||
'require form';
|
||||
'require view';
|
||||
'require uci';
|
||||
'require fs';
|
||||
'require tools.momo as momo'
|
||||
|
||||
return view.extend({
|
||||
load: function () {
|
||||
return Promise.all([
|
||||
uci.load('momo'),
|
||||
momo.getPaths(),
|
||||
momo.listProfiles(),
|
||||
]);
|
||||
},
|
||||
render: function (data) {
|
||||
const subscriptions = uci.sections('momo', 'subscription');
|
||||
const paths = data[1];
|
||||
const profiles = data[2];
|
||||
|
||||
let m, s, o;
|
||||
|
||||
m = new form.Map('momo');
|
||||
|
||||
s = m.section(form.NamedSection, 'placeholder', 'placeholder', _('Editor'));
|
||||
|
||||
o = s.option(form.ListValue, '_file', _('Choose File'));
|
||||
o.optional = true;
|
||||
|
||||
for (const profile of profiles) {
|
||||
o.value(paths.profiles_dir + '/' + profile.name, _('File:') + profile.name);
|
||||
};
|
||||
|
||||
for (const subscription of subscriptions) {
|
||||
o.value(paths.subscriptions_dir + '/' + subscription['.name'] + '.json', _('Subscription:') + subscription.name);
|
||||
};
|
||||
|
||||
o.value(paths.run_profile_path, _('Profile for Startup'));
|
||||
|
||||
o.write = function (section_id, formvalue) {
|
||||
return true;
|
||||
};
|
||||
o.onchange = function (event, section_id, value) {
|
||||
return L.resolveDefault(fs.read_direct(value), '').then(function (content) {
|
||||
m.lookupOption('_file_content', section_id)[0].getUIElement(section_id).setValue(content);
|
||||
});
|
||||
};
|
||||
|
||||
o = s.option(form.TextValue, '_file_content',);
|
||||
o.rows = 25;
|
||||
o.wrap = false;
|
||||
o.write = function (section_id, formvalue) {
|
||||
const path = m.lookupOption('_file', section_id)[0].formvalue(section_id);
|
||||
return momo.writefile(path, formvalue);
|
||||
};
|
||||
o.remove = function (section_id) {
|
||||
const path = m.lookupOption('_file', section_id)[0].formvalue(section_id);
|
||||
return momo.writefile(path);
|
||||
};
|
||||
|
||||
return m.render();
|
||||
},
|
||||
handleSaveApply: function (ev, mode) {
|
||||
return this.handleSave(ev).finally(function () {
|
||||
return mode === '0' ? momo.reload() : momo.restart();
|
||||
});
|
||||
},
|
||||
handleReset: null
|
||||
});
|
||||
@@ -1,150 +0,0 @@
|
||||
'use strict';
|
||||
'require form';
|
||||
'require view';
|
||||
'require uci';
|
||||
'require fs';
|
||||
'require poll';
|
||||
'require tools.momo as momo';
|
||||
|
||||
return view.extend({
|
||||
load: function () {
|
||||
return Promise.all([
|
||||
uci.load('momo'),
|
||||
momo.getPaths(),
|
||||
momo.getAppLog(),
|
||||
momo.getCoreLog()
|
||||
]);
|
||||
},
|
||||
render: function (data) {
|
||||
const paths = data[1];
|
||||
const appLog = data[2];
|
||||
const coreLog = data[3];
|
||||
|
||||
let m, s, o;
|
||||
|
||||
m = new form.Map('momo');
|
||||
|
||||
s = m.section(form.NamedSection, 'log', 'log', _('Log'));
|
||||
|
||||
s.tab('log_config', _('Log Config'));
|
||||
|
||||
o = s.taboption('log_config', form.Flag, 'clear_at_stop', _('Clear At Stop'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('log_config', form.Flag, 'scheduled_clear', _('Scheduled Clear'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('log_config', form.Value, 'scheduled_clear_cron', _('Scheduled Clear Cron'));
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
o.depends('scheduled_clear', '1');
|
||||
|
||||
o = s.taboption('log_config', form.Value, 'scheduled_clear_size_limit', _('Scheduled Clear Size Limit'));
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
o.datatype = 'uinteger';
|
||||
o.depends('scheduled_clear', '1');
|
||||
|
||||
o = s.taboption('log_config', form.ListValue, 'scheduled_clear_size_limit_unit', _('Scheduled Clear Size Limit Unit'));
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
o.depends('scheduled_clear', '1');
|
||||
o.value('KB', 'KB');
|
||||
o.value('MB', 'MB');
|
||||
o.value('GB', 'GB');
|
||||
|
||||
s.tab('app_log', _('App Log'));
|
||||
|
||||
o = s.taboption('app_log', form.Button, 'clear_app_log');
|
||||
o.inputstyle = 'negative';
|
||||
o.inputtitle = _('Clear Log');
|
||||
o.onclick = function (_, section_id) {
|
||||
m.lookupOption('_app_log', section_id)[0].getUIElement(section_id).setValue('');
|
||||
return momo.clearAppLog();
|
||||
};
|
||||
|
||||
o = s.taboption('app_log', form.TextValue, '_app_log');
|
||||
o.rows = 25;
|
||||
o.wrap = false;
|
||||
o.load = function (section_id) {
|
||||
return appLog;
|
||||
};
|
||||
o.write = function (section_id, formvalue) {
|
||||
return true;
|
||||
};
|
||||
poll.add(L.bind(function () {
|
||||
const option = this;
|
||||
return L.resolveDefault(momo.getAppLog()).then(function (log) {
|
||||
option.getUIElement('log').setValue(log);
|
||||
});
|
||||
}, o));
|
||||
|
||||
o = s.taboption('app_log', form.Button, 'scroll_app_log_to_bottom');
|
||||
o.inputtitle = _('Scroll To Bottom');
|
||||
o.onclick = function (_, section_id) {
|
||||
const element = m.lookupOption('_app_log', section_id)[0].getUIElement(section_id).node.firstChild;
|
||||
element.scrollTop = element.scrollHeight;
|
||||
};
|
||||
|
||||
s.tab('core_log', _('Core Log'));
|
||||
|
||||
o = s.taboption('core_log', form.Button, 'clear_core_log');
|
||||
o.inputstyle = 'negative';
|
||||
o.inputtitle = _('Clear Log');
|
||||
o.onclick = function (_, section_id) {
|
||||
m.lookupOption('_core_log', section_id)[0].getUIElement(section_id).setValue('');
|
||||
return momo.clearCoreLog();
|
||||
};
|
||||
|
||||
o = s.taboption('core_log', form.TextValue, '_core_log');
|
||||
o.rows = 25;
|
||||
o.wrap = false;
|
||||
o.load = function (section_id) {
|
||||
return coreLog;
|
||||
};
|
||||
o.write = function (section_id, formvalue) {
|
||||
return true;
|
||||
};
|
||||
poll.add(L.bind(function () {
|
||||
const option = this;
|
||||
return L.resolveDefault(momo.getCoreLog()).then(function (log) {
|
||||
option.getUIElement('log').setValue(log);
|
||||
});
|
||||
}, o));
|
||||
|
||||
o = s.taboption('core_log', form.Button, 'scroll_core_log_to_bottom');
|
||||
o.inputtitle = _('Scroll To Bottom');
|
||||
o.onclick = function (_, section_id) {
|
||||
const element = m.lookupOption('_core_log', section_id)[0].getUIElement(section_id).node.firstChild;
|
||||
element.scrollTop = element.scrollHeight;
|
||||
};
|
||||
|
||||
s.tab('debug_log', _('Debug Log'));
|
||||
|
||||
o = s.taboption('debug_log', form.Button, '_generate_download_debug_log');
|
||||
o.inputstyle = 'negative';
|
||||
o.inputtitle = _('Generate & Download');
|
||||
o.onclick = function () {
|
||||
return momo.debug().then(function () {
|
||||
fs.read_direct(paths.debug_log_path, 'blob').then(function (data) {
|
||||
// create url
|
||||
const url = window.URL.createObjectURL(data, { type: 'text/markdown' });
|
||||
// create link
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
link.download = 'debug.log';
|
||||
// append to body
|
||||
document.body.appendChild(link);
|
||||
// download
|
||||
link.click();
|
||||
// remove from body
|
||||
document.body.removeChild(link);
|
||||
// revoke url
|
||||
window.URL.revokeObjectURL(url);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
||||
@@ -1,154 +0,0 @@
|
||||
'use strict';
|
||||
'require form';
|
||||
'require view';
|
||||
'require uci';
|
||||
'require fs';
|
||||
'require network';
|
||||
'require poll';
|
||||
'require tools.widgets as widgets';
|
||||
'require tools.momo as momo';
|
||||
|
||||
return view.extend({
|
||||
load: function () {
|
||||
return Promise.all([
|
||||
uci.load('momo'),
|
||||
]);
|
||||
},
|
||||
render: function (data) {
|
||||
let m, s, o;
|
||||
|
||||
m = new form.Map('momo');
|
||||
|
||||
s = m.section(form.NamedSection, 'mixin', 'mixin', _('Mixin Option'));
|
||||
|
||||
s.tab('log', _('Log Config'));
|
||||
|
||||
o = s.taboption('log', form.ListValue, 'log_disabled', _('Log Disabled'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('log', form.ListValue, 'log_level', _('Log Level'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('panic');
|
||||
o.value('fatal');
|
||||
o.value('error');
|
||||
o.value('warn');
|
||||
o.value('info');
|
||||
o.value('debug');
|
||||
o.value('trace');
|
||||
|
||||
o = s.taboption('log', form.ListValue, 'log_timestamp', _('Log Timestamp'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('log', form.Value, 'log_output', _('Log Output'));
|
||||
o.placeholder = _('Unmodified');
|
||||
|
||||
s.tab('dns', _('DNS Config'));
|
||||
|
||||
o = s.taboption('dns', form.ListValue, 'dns_strategy', _('DNS Strategy'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('prefer_ipv4', _('Prefer IPv4'));
|
||||
o.value('prefer_ipv6', _('Prefer IPv6'));
|
||||
o.value('ipv4_only', _('IPv4 Only'));
|
||||
o.value('ipv6_only', _('IPv6 Only'));
|
||||
|
||||
o = s.taboption('dns', form.ListValue, 'dns_disable_cache', _('DNS Disable Cache'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('dns', form.ListValue, 'dns_disable_expire', _('DNS Disable Expire'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('dns', form.ListValue, 'dns_independent_cache', _('DNS Independent Cache'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('dns', form.Value, 'dns_cache_capacity', _('DNS Cache Capacity'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = _('Unmodified');
|
||||
|
||||
o = s.taboption('dns', form.ListValue, 'dns_reverse_mapping', _('DNS Reverse Mapping'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
s.tab('ntp', _('NTP Config'));
|
||||
|
||||
o = s.taboption('ntp', form.ListValue, 'ntp_enabled', _('NTP Enabled'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('ntp', form.Value, 'ntp_server', _('NTP Server'));
|
||||
o.placeholder = _('Unmodified');
|
||||
|
||||
o = s.taboption('ntp', form.Value, 'ntp_server_port', _('NTP Server Port'));
|
||||
o.datatype = 'port';
|
||||
o.placeholder = _('Unmodified');
|
||||
|
||||
o = s.taboption('ntp', form.Value, 'ntp_interval', _('NTP Interval'));
|
||||
o.placeholder = _('Unmodified');
|
||||
|
||||
s.tab('cache', _('Cache Config'));
|
||||
|
||||
o = s.taboption('cache', form.ListValue, 'cache_enabled', _('Cache Enabled'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('cache', form.Value, 'cache_path', _('Cache Path'));
|
||||
o.placeholder = _('Unmodified');
|
||||
|
||||
o = s.taboption('cache', form.ListValue, 'cache_store_fakeip', _('Cache Store FakeIP'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
o = s.taboption('cache', form.ListValue, 'cache_store_rdrc', _('Cache Store RDRC'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
o.value('1', _('Enable'));
|
||||
|
||||
s.tab('external_control', _('External Control Config'));
|
||||
|
||||
o = s.taboption('external_control', form.Value, 'external_control_ui_path', _('UI Path'));
|
||||
o.placeholder = _('Unmodified');
|
||||
|
||||
o = s.taboption('external_control', form.Value, 'external_control_ui_download_url', _('UI Download Url'));
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip', 'Zashboard (CDN Fonts)');
|
||||
o.value('https://github.com/Zephyruso/zashboard/releases/latest/download/dist.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, 'external_control_api_listen', _('API Listen'));
|
||||
o.datatype = 'ipaddrport(1)';
|
||||
o.placeholder = _('Unmodified');
|
||||
|
||||
o = s.taboption('external_control', form.Value, 'external_control_api_secret', _('API Secret'));
|
||||
o.password = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
||||
@@ -1,90 +0,0 @@
|
||||
'use strict';
|
||||
'require form';
|
||||
'require view';
|
||||
'require uci';
|
||||
'require tools.momo as momo';
|
||||
|
||||
return view.extend({
|
||||
load: function () {
|
||||
return Promise.all([
|
||||
uci.load('momo'),
|
||||
momo.getPaths(),
|
||||
]);
|
||||
},
|
||||
render: function (data) {
|
||||
const paths = data[1];
|
||||
|
||||
let m, s, o, so;
|
||||
|
||||
m = new form.Map('momo');
|
||||
|
||||
s = m.section(form.NamedSection, 'config', 'config', _('Profile'));
|
||||
|
||||
o = s.option(form.FileUpload, '_upload_profile', _('Upload Profile'));
|
||||
o.browser = true;
|
||||
o.enable_download = true;
|
||||
o.root_directory = paths.profiles_dir;
|
||||
o.write = function (section_id, formvalue) {
|
||||
return true;
|
||||
};
|
||||
|
||||
s = m.section(form.GridSection, 'subscription', _('Subscription'));
|
||||
s.addremove = true;
|
||||
s.anonymous = true;
|
||||
s.sortable = true;
|
||||
s.modaltitle = _('Edit Subscription');
|
||||
|
||||
o = s.option(form.Value, 'name', _('Subscription Name'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'used', _('Used'));
|
||||
o.modalonly = false;
|
||||
o.optional = true;
|
||||
o.readonly = true;
|
||||
|
||||
o = s.option(form.Value, 'total', _('Total'));
|
||||
o.modalonly = false;
|
||||
o.optional = true;
|
||||
o.readonly = true;
|
||||
|
||||
o = s.option(form.Value, 'expire', _('Expire At'));
|
||||
o.modalonly = false;
|
||||
o.optional = true;
|
||||
o.readonly = true;
|
||||
|
||||
o = s.option(form.Value, 'update', _('Update At'));
|
||||
o.modalonly = false;
|
||||
o.optional = true;
|
||||
o.readonly = true;
|
||||
|
||||
o = s.option(form.Button, 'update_subscription');
|
||||
o.editable = true;
|
||||
o.inputstyle = 'positive';
|
||||
o.inputtitle = _('Update');
|
||||
o.modalonly = false;
|
||||
o.onclick = function (_, section_id) {
|
||||
return momo.updateSubscription(section_id);
|
||||
};
|
||||
|
||||
o = s.option(form.Value, 'info_url', _('Subscription Info Url'));
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.option(form.Value, 'url', _('Subscription Url'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'user_agent', _('User Agent'));
|
||||
o.default = 'sing-box';
|
||||
o.modalonly = true;
|
||||
o.rmempty = false;
|
||||
o.value('sing-box');
|
||||
|
||||
o = s.option(form.ListValue, 'prefer', _('Prefer'));
|
||||
o.default = 'remote';
|
||||
o.modalonly = true;
|
||||
o.value('remote', _('Remote'));
|
||||
o.value('local', _('Local'));
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
||||
@@ -1,212 +0,0 @@
|
||||
'use strict';
|
||||
'require form';
|
||||
'require view';
|
||||
'require uci';
|
||||
'require network';
|
||||
'require tools.widgets as widgets';
|
||||
'require tools.momo as momo';
|
||||
|
||||
return view.extend({
|
||||
load: function () {
|
||||
return Promise.all([
|
||||
uci.load('momo'),
|
||||
network.getHostHints(),
|
||||
network.getNetworks(),
|
||||
momo.getIdentifiers(),
|
||||
]);
|
||||
},
|
||||
render: function (data) {
|
||||
const hosts = data[1].hosts;
|
||||
const networks = data[2];
|
||||
const users = data[3]?.users ?? [];
|
||||
const groups = data[3]?.groups ?? [];
|
||||
const cgroups = data[3]?.cgroups ?? [];
|
||||
|
||||
let m, s, o, so;
|
||||
|
||||
m = new form.Map('momo');
|
||||
|
||||
s = m.section(form.NamedSection, 'proxy', 'proxy', _('Proxy Config'));
|
||||
|
||||
s.tab('proxy', _('Proxy Config'));
|
||||
|
||||
o = s.taboption('proxy', form.Flag, 'enabled', _('Enable'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('proxy', form.Flag, 'ipv4_dns_hijack', _('IPv4 DNS Hijack'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('proxy', form.Flag, 'ipv6_dns_hijack', _('IPv6 DNS Hijack'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('proxy', form.Flag, 'ipv4_proxy', _('IPv4 Proxy'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('proxy', form.Flag, 'ipv6_proxy', _('IPv6 Proxy'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('proxy', form.Flag, 'fake_ip_ping_hijack', _('Fake-IP Ping Hijack'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('proxy', form.ListValue, 'tcp_mode', _('TCP Mode'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Disable');
|
||||
o.value('redirect', _('Redirect Mode'));
|
||||
o.value('tproxy', _('TPROXY Mode'));
|
||||
o.value('tun', _('TUN Mode'));
|
||||
|
||||
o = s.taboption('proxy', form.ListValue, 'udp_mode', _('UDP Mode'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Disable');
|
||||
o.value('tproxy', _('TPROXY Mode'));
|
||||
o.value('tun', _('TUN Mode'));
|
||||
|
||||
s.tab('router', _('Router Proxy'));
|
||||
|
||||
o = s.taboption('router', form.Flag, 'router_proxy', _('Enable'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('router', form.SectionValue, '_router_access_control', form.TableSection, 'router_access_control', _('Access Control'));
|
||||
o.retain = true;
|
||||
o.depends('router_proxy', '1');
|
||||
|
||||
o.subsection.addremove = true;
|
||||
o.subsection.anonymous = true;
|
||||
o.subsection.sortable = true;
|
||||
|
||||
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
||||
so.default = '1';
|
||||
so.rmempty = false;
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'user', _('User'));
|
||||
|
||||
for (const user of users) {
|
||||
so.value(user);
|
||||
};
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'group', _('Group'));
|
||||
|
||||
for (const group of groups) {
|
||||
so.value(group);
|
||||
};
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'cgroup', _('CGroup'));
|
||||
|
||||
for (const cgroup of cgroups) {
|
||||
so.value(cgroup);
|
||||
};
|
||||
|
||||
so = o.subsection.option(form.Flag, 'dns', _('DNS'));
|
||||
so.rmempty = false;
|
||||
|
||||
so = o.subsection.option(form.Flag, 'proxy', _('Proxy'));
|
||||
so.rmempty = false;
|
||||
|
||||
s.tab('lan', _('LAN Proxy'));
|
||||
|
||||
o = s.taboption('lan', form.Flag, 'lan_proxy', _('Enable'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('lan', form.DynamicList, 'lan_inbound_interface', _('Inbound Interface'));
|
||||
o.retain = true;
|
||||
o.rmempty = false;
|
||||
o.depends('lan_proxy', '1');
|
||||
|
||||
for (const network of networks) {
|
||||
if (network.getName() === 'loopback') {
|
||||
continue;
|
||||
}
|
||||
o.value(network.getName());
|
||||
}
|
||||
|
||||
o = s.taboption('lan', form.SectionValue, '_lan_access_control', form.TableSection, 'lan_access_control', _('Access Control'));
|
||||
o.retain = true;
|
||||
o.depends('lan_proxy', '1');
|
||||
|
||||
o.subsection.addremove = true;
|
||||
o.subsection.anonymous = true;
|
||||
o.subsection.sortable = true;
|
||||
|
||||
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
||||
so.default = '1';
|
||||
so.rmempty = false;
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'ip', 'IP');
|
||||
so.datatype = 'ip4addr';
|
||||
|
||||
for (const mac in hosts) {
|
||||
const host = hosts[mac];
|
||||
for (const ip of host.ipaddrs) {
|
||||
const hint = host.name ?? mac;
|
||||
so.value(ip, hint ? '%s (%s)'.format(ip, hint) : ip);
|
||||
};
|
||||
};
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'ip6', 'IP6');
|
||||
so.datatype = 'ip6addr';
|
||||
|
||||
for (const mac in hosts) {
|
||||
const host = hosts[mac];
|
||||
for (const ip of host.ip6addrs) {
|
||||
const hint = host.name ?? mac;
|
||||
so.value(ip, hint ? '%s (%s)'.format(ip, hint) : ip);
|
||||
};
|
||||
};
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'mac', 'MAC');
|
||||
so.datatype = 'macaddr';
|
||||
|
||||
for (const mac in hosts) {
|
||||
const host = hosts[mac];
|
||||
const hint = host.name ?? host.ipaddrs[0];
|
||||
so.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac);
|
||||
};
|
||||
|
||||
so = o.subsection.option(form.Flag, 'dns', _('DNS'));
|
||||
so.rmempty = false;
|
||||
|
||||
so = o.subsection.option(form.Flag, 'proxy', _('Proxy'));
|
||||
so.rmempty = false;
|
||||
|
||||
s.tab('bypass', _('Bypass'));
|
||||
|
||||
o = s.taboption('bypass', form.Flag, 'bypass_china_mainland_ip', _('Bypass China Mainland IP'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('bypass', form.Flag, 'bypass_china_mainland_ip6', _('Bypass China Mainland IP6'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('bypass', form.Value, 'proxy_tcp_dport', _('Destination TCP Port to Proxy'));
|
||||
o.rmempty = false;
|
||||
o.value('0-65535', _('All Port'));
|
||||
o.value('21 22 80 110 143 194 443 465 853 993 995 8080 8443', _('Commonly Used Port'));
|
||||
|
||||
o = s.taboption('bypass', form.Value, 'proxy_udp_dport', _('Destination UDP Port to Proxy'));
|
||||
o.rmempty = false;
|
||||
o.value('0-65535', _('All Port'));
|
||||
o.value('123 443 8443', _('Commonly Used Port'));
|
||||
|
||||
o = s.taboption('bypass', form.DynamicList, 'bypass_dscp', _('Bypass DSCP'));
|
||||
o.datatype = 'range(0, 63)';
|
||||
|
||||
o = s.taboption('bypass', form.DynamicList, 'bypass_fwmark', _('Bypass FWMark'));
|
||||
|
||||
s.tab('misc', _('Misc'));
|
||||
|
||||
o = s.taboption('misc', form.DynamicList, 'reserved_ip', _('Reserved IP'));
|
||||
o.datatype = 'ip4addr';
|
||||
|
||||
o = s.taboption('misc', form.DynamicList, 'reserved_ip6', _('Reserved IP6'));
|
||||
o.datatype = 'ip6addr';
|
||||
|
||||
o = s.taboption('misc', form.Value, 'tun_timeout', _('TUN Timeout'));
|
||||
o.datatype = 'uinteger';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('misc', form.Value, 'tun_interval', _('TUN Interval'));
|
||||
o.datatype = 'uinteger';
|
||||
o.rmempty = false;
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
||||
@@ -1,639 +0,0 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:144
|
||||
msgid "API Listen"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:148
|
||||
msgid "API Secret"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:69
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:122
|
||||
msgid "Access Control"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:147
|
||||
msgid "Address Space Size Hard Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:143
|
||||
msgid "Address Space Size Soft Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:181
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:186
|
||||
msgid "All Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:94
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:13
|
||||
msgid "App Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:56
|
||||
msgid "App Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:43
|
||||
msgid "App Version"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:171
|
||||
msgid "Bypass"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:173
|
||||
msgid "Bypass China Mainland IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:176
|
||||
msgid "Bypass China Mainland IP6"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:189
|
||||
msgid "Bypass DSCP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:192
|
||||
msgid "Bypass FWMark"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:93
|
||||
msgid "CGroup"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:108
|
||||
msgid "Cache Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:110
|
||||
msgid "Cache Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:116
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:119
|
||||
msgid "Cache Store FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:125
|
||||
msgid "Cache Store RDRC"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:27
|
||||
msgid "Choose File"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:99
|
||||
msgid "Choose Profile"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:31
|
||||
msgid "Clear At Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:60
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:93
|
||||
msgid "Clear Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:182
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:187
|
||||
msgid "Commonly Used Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:89
|
||||
msgid "Core Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:125
|
||||
msgid "Core Only"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:57
|
||||
msgid "Core Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:50
|
||||
msgid "Core Version"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:99
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:165
|
||||
msgid "DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:80
|
||||
msgid "DNS Cache Capacity"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:52
|
||||
msgid "DNS Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:62
|
||||
msgid "DNS Disable Cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:68
|
||||
msgid "DNS Disable Expire"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:74
|
||||
msgid "DNS Independent Cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:84
|
||||
msgid "DNS Reverse Mapping"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:54
|
||||
msgid "DNS Strategy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:122
|
||||
msgid "Debug Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:179
|
||||
msgid "Destination TCP Port to Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:184
|
||||
msgid "Destination UDP Port to Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:29
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:46
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:65
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:71
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:77
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:87
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:95
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:113
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:122
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:128
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:53
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:60
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:35
|
||||
msgid "Edit Subscription"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:25
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:45
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:96
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:30
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:47
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:66
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:72
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:78
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:88
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:96
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:114
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:123
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:129
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:33
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:66
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:77
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:107
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:130
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:173
|
||||
msgid "Environment Variable Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:50
|
||||
msgid "Expire At"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:131
|
||||
msgid "External Control Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:48
|
||||
msgid "Fake-IP Ping Hijack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:132
|
||||
msgid "Fast Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:103
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:31
|
||||
msgid "File:"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:130
|
||||
msgid "General Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:126
|
||||
msgid "Generate & Download"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/root/usr/share/rpcd/acl.d/luci-app-momo.json:3
|
||||
msgid "Grant access to momo procedures"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:87
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:155
|
||||
msgid "Heap Size Hard Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:151
|
||||
msgid "Heap Size Soft Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:38
|
||||
msgid "How To Use"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:36
|
||||
msgid "IPv4 DNS Hijack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:59
|
||||
msgid "IPv4 Only"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:42
|
||||
msgid "IPv4 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:39
|
||||
msgid "IPv6 DNS Hijack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:60
|
||||
msgid "IPv6 Only"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:45
|
||||
msgid "IPv6 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:110
|
||||
msgid "Inbound Interface"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:105
|
||||
msgid "LAN Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:86
|
||||
msgid "Local"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:27
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:53
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:29
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:24
|
||||
msgid "Log Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:26
|
||||
msgid "Log Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:32
|
||||
msgid "Log Level"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:49
|
||||
msgid "Log Output"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:43
|
||||
msgid "Log Timestamp"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:194
|
||||
msgid "Misc"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:29
|
||||
msgid "Mixin Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:22
|
||||
msgid "Mixin Option"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:38
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:3
|
||||
msgid "Momo"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:90
|
||||
msgid "NTP Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:92
|
||||
msgid "NTP Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:105
|
||||
msgid "NTP Interval"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:98
|
||||
msgid "NTP Server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:101
|
||||
msgid "NTP Server Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:15
|
||||
msgid "Not Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:170
|
||||
msgid "Number of Open Files Hard Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:167
|
||||
msgid "Number of Open Files Soft Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:140
|
||||
msgid "Number of Processes Hard Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:137
|
||||
msgid "Number of Processes Soft Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:89
|
||||
msgid "Open Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:82
|
||||
msgid "Prefer"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:57
|
||||
msgid "Prefer IPv4"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:58
|
||||
msgid "Prefer IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:21
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:21
|
||||
msgid "Profile"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:38
|
||||
msgid "Profile for Startup"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:102
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:168
|
||||
msgid "Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:29
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:31
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:37
|
||||
msgid "Proxy Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:135
|
||||
msgid "RLIMIT Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:54
|
||||
msgid "Redirect Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:69
|
||||
msgid "Reload Service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:85
|
||||
msgid "Remote"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:196
|
||||
msgid "Reserved IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:199
|
||||
msgid "Reserved IP6"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:76
|
||||
msgid "Restart Service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:64
|
||||
msgid "Router Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:15
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:34
|
||||
msgid "Scheduled Clear"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:37
|
||||
msgid "Scheduled Clear Cron"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:42
|
||||
msgid "Scheduled Clear Size Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:48
|
||||
msgid "Scheduled Clear Size Limit Unit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:114
|
||||
msgid "Scheduled Restart"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:117
|
||||
msgid "Scheduled Restart Cron"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:83
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:116
|
||||
msgid "Scroll To Bottom"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:163
|
||||
msgid "Stack Size Hard Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:159
|
||||
msgid "Stack Size Soft Limit"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:110
|
||||
msgid "Start Delay"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:112
|
||||
msgid "Start Immidiately"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:40
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:31
|
||||
msgid "Subscription"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:69
|
||||
msgid "Subscription Info Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:37
|
||||
msgid "Subscription Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:72
|
||||
msgid "Subscription Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:107
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:35
|
||||
msgid "Subscription:"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:51
|
||||
msgid "TCP Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:55
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:61
|
||||
msgid "TPROXY Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:206
|
||||
msgid "TUN Interval"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:56
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:62
|
||||
msgid "TUN Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:202
|
||||
msgid "TUN Timeout"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:122
|
||||
msgid "Test Profile"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:45
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:38
|
||||
msgid "Transparent Proxy with sing-box on OpenWrt."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:58
|
||||
msgid "UDP Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:136
|
||||
msgid "UI Download Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:133
|
||||
msgid "UI Path"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:145
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:149
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:153
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:157
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:161
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:165
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:177
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:181
|
||||
msgid "Unlimited"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:28
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:34
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:45
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:50
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:56
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:64
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:70
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:76
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:82
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:86
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:94
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:99
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:103
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:106
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:112
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:117
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:121
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:127
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:134
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:137
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:146
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:150
|
||||
msgid "Unmodified"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:63
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:55
|
||||
msgid "Update At"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:83
|
||||
msgid "Update Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:23
|
||||
msgid "Upload Profile"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:40
|
||||
msgid "Used"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:81
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:76
|
||||
msgid "User Agent"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:128
|
||||
msgid "procd Config"
|
||||
msgstr ""
|
||||
@@ -1,646 +0,0 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: zh_Hans\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:144
|
||||
msgid "API Listen"
|
||||
msgstr "API 监听"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:148
|
||||
msgid "API Secret"
|
||||
msgstr "API 密码"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:69
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:122
|
||||
msgid "Access Control"
|
||||
msgstr "访问控制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:147
|
||||
msgid "Address Space Size Hard Limit"
|
||||
msgstr "地址空间大小硬限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:143
|
||||
msgid "Address Space Size Soft Limit"
|
||||
msgstr "地址空间大小软限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:181
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:186
|
||||
msgid "All Port"
|
||||
msgstr "全部端口"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:94
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:13
|
||||
msgid "App Config"
|
||||
msgstr "插件配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:56
|
||||
msgid "App Log"
|
||||
msgstr "插件日志"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:43
|
||||
msgid "App Version"
|
||||
msgstr "插件版本"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:171
|
||||
msgid "Bypass"
|
||||
msgstr "绕过"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:173
|
||||
msgid "Bypass China Mainland IP"
|
||||
msgstr "绕过中国大陆 IP"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:176
|
||||
msgid "Bypass China Mainland IP6"
|
||||
msgstr "绕过中国大陆 IP6"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:189
|
||||
msgid "Bypass DSCP"
|
||||
msgstr "绕过 DSCP"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:192
|
||||
msgid "Bypass FWMark"
|
||||
msgstr "绕过 FWMark"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:93
|
||||
msgid "CGroup"
|
||||
msgstr "控制组"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:108
|
||||
msgid "Cache Config"
|
||||
msgstr "缓存配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:110
|
||||
msgid "Cache Enabled"
|
||||
msgstr "启用缓存"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:116
|
||||
msgid "Cache Path"
|
||||
msgstr "缓存文件路径"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:119
|
||||
msgid "Cache Store FakeIP"
|
||||
msgstr "缓存 FakeIP"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:125
|
||||
msgid "Cache Store RDRC"
|
||||
msgstr "缓存 RDRC"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:27
|
||||
msgid "Choose File"
|
||||
msgstr "选择文件"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:99
|
||||
msgid "Choose Profile"
|
||||
msgstr "选择配置文件"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:31
|
||||
msgid "Clear At Stop"
|
||||
msgstr "停止时清空"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:60
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:93
|
||||
msgid "Clear Log"
|
||||
msgstr "清空日志"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:182
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:187
|
||||
msgid "Commonly Used Port"
|
||||
msgstr "常用端口"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:89
|
||||
msgid "Core Log"
|
||||
msgstr "核心日志"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:125
|
||||
msgid "Core Only"
|
||||
msgstr "仅核心"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:57
|
||||
msgid "Core Status"
|
||||
msgstr "核心状态"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:50
|
||||
msgid "Core Version"
|
||||
msgstr "核心版本"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:99
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:165
|
||||
msgid "DNS"
|
||||
msgstr "DNS"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:80
|
||||
msgid "DNS Cache Capacity"
|
||||
msgstr "DNS 缓存容量"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:52
|
||||
msgid "DNS Config"
|
||||
msgstr "DNS 配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:62
|
||||
msgid "DNS Disable Cache"
|
||||
msgstr "禁用 DNS 缓存"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:68
|
||||
msgid "DNS Disable Expire"
|
||||
msgstr "禁用 DNS 过期"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:74
|
||||
msgid "DNS Independent Cache"
|
||||
msgstr "DNS 独立缓存"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:84
|
||||
msgid "DNS Reverse Mapping"
|
||||
msgstr "DNS 反向映射"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:54
|
||||
msgid "DNS Strategy"
|
||||
msgstr "DNS 策略"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:122
|
||||
msgid "Debug Log"
|
||||
msgstr "调试日志"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:179
|
||||
msgid "Destination TCP Port to Proxy"
|
||||
msgstr "要代理的 TCP 目标端口"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:184
|
||||
msgid "Destination UDP Port to Proxy"
|
||||
msgstr "要代理的 UDP 目标端口"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:29
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:46
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:65
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:71
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:77
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:87
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:95
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:113
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:122
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:128
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:53
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:60
|
||||
msgid "Disable"
|
||||
msgstr "禁用"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:35
|
||||
msgid "Edit Subscription"
|
||||
msgstr "编辑订阅"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:25
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:45
|
||||
msgid "Editor"
|
||||
msgstr "编辑器"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:96
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:30
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:47
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:66
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:72
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:78
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:88
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:96
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:114
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:123
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:129
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:33
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:66
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:77
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:107
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:130
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:173
|
||||
msgid "Environment Variable Config"
|
||||
msgstr "环境变量配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:50
|
||||
msgid "Expire At"
|
||||
msgstr "到期时间"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:131
|
||||
msgid "External Control Config"
|
||||
msgstr "外部控制配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:48
|
||||
msgid "Fake-IP Ping Hijack"
|
||||
msgstr "Fake-IP Ping 劫持"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:132
|
||||
msgid "Fast Reload"
|
||||
msgstr "快速重载"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:103
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:31
|
||||
msgid "File:"
|
||||
msgstr "文件:"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:130
|
||||
msgid "General Config"
|
||||
msgstr "全局配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:126
|
||||
msgid "Generate & Download"
|
||||
msgstr "生成并下载"
|
||||
|
||||
#: applications/luci-app-momo/root/usr/share/rpcd/acl.d/luci-app-momo.json:3
|
||||
msgid "Grant access to momo procedures"
|
||||
msgstr "授予访问 momo 程序的权限"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:87
|
||||
msgid "Group"
|
||||
msgstr "用户组"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:155
|
||||
msgid "Heap Size Hard Limit"
|
||||
msgstr "堆大小硬限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:151
|
||||
msgid "Heap Size Soft Limit"
|
||||
msgstr "堆大小软限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:38
|
||||
msgid "How To Use"
|
||||
msgstr "使用说明"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:36
|
||||
msgid "IPv4 DNS Hijack"
|
||||
msgstr "IPv4 DNS 劫持"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:59
|
||||
msgid "IPv4 Only"
|
||||
msgstr "仅 IPv4"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:42
|
||||
msgid "IPv4 Proxy"
|
||||
msgstr "IPv4 代理"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:39
|
||||
msgid "IPv6 DNS Hijack"
|
||||
msgstr "IPv6 DNS 劫持"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:60
|
||||
msgid "IPv6 Only"
|
||||
msgstr "仅 IPv6"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:45
|
||||
msgid "IPv6 Proxy"
|
||||
msgstr "IPv6 代理"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:110
|
||||
msgid "Inbound Interface"
|
||||
msgstr "入站接口"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:105
|
||||
msgid "LAN Proxy"
|
||||
msgstr "局域网代理"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:86
|
||||
msgid "Local"
|
||||
msgstr "本地"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:27
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:53
|
||||
msgid "Log"
|
||||
msgstr "日志"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:29
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:24
|
||||
msgid "Log Config"
|
||||
msgstr "日志配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:26
|
||||
msgid "Log Disabled"
|
||||
msgstr "禁用日志"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:32
|
||||
msgid "Log Level"
|
||||
msgstr "日志级别"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:49
|
||||
msgid "Log Output"
|
||||
msgstr "日志输出文件路径"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:43
|
||||
msgid "Log Timestamp"
|
||||
msgstr "打印时间戳"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:194
|
||||
msgid "Misc"
|
||||
msgstr "杂项"
|
||||
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:29
|
||||
msgid "Mixin Config"
|
||||
msgstr "混入配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:22
|
||||
msgid "Mixin Option"
|
||||
msgstr "混入选项"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:38
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:3
|
||||
msgid "Momo"
|
||||
msgstr "Momo"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:90
|
||||
msgid "NTP Config"
|
||||
msgstr "NTP 配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:92
|
||||
msgid "NTP Enabled"
|
||||
msgstr "启用 NTP"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:105
|
||||
msgid "NTP Interval"
|
||||
msgstr "NTP 时间同步间隔"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:98
|
||||
msgid "NTP Server"
|
||||
msgstr "NTP 服务地址"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:101
|
||||
msgid "NTP Server Port"
|
||||
msgstr "NTP 服务端口"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:15
|
||||
msgid "Not Running"
|
||||
msgstr "未在运行"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:170
|
||||
msgid "Number of Open Files Hard Limit"
|
||||
msgstr "打开文件数量硬限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:167
|
||||
msgid "Number of Open Files Soft Limit"
|
||||
msgstr "打开文件数量软限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:140
|
||||
msgid "Number of Processes Hard Limit"
|
||||
msgstr "进程数硬限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:137
|
||||
msgid "Number of Processes Soft Limit"
|
||||
msgstr "进程数软限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:89
|
||||
msgid "Open Dashboard"
|
||||
msgstr "打开面板"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:82
|
||||
msgid "Prefer"
|
||||
msgstr "优先"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:57
|
||||
msgid "Prefer IPv4"
|
||||
msgstr "优先 IPv4"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:58
|
||||
msgid "Prefer IPv6"
|
||||
msgstr "优先 IPv6"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:21
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:21
|
||||
msgid "Profile"
|
||||
msgstr "配置文件"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:38
|
||||
msgid "Profile for Startup"
|
||||
msgstr "用于启动的配置文件"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:102
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:168
|
||||
msgid "Proxy"
|
||||
msgstr "代理"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:29
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:31
|
||||
#: applications/luci-app-momo/root/usr/share/luci/menu.d/luci-app-momo.json:37
|
||||
msgid "Proxy Config"
|
||||
msgstr "代理配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:135
|
||||
msgid "RLIMIT Config"
|
||||
msgstr "资源限制配置"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:54
|
||||
msgid "Redirect Mode"
|
||||
msgstr "Redirect 模式"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:69
|
||||
msgid "Reload Service"
|
||||
msgstr "重载服务"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:85
|
||||
msgid "Remote"
|
||||
msgstr "远程"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:196
|
||||
msgid "Reserved IP"
|
||||
msgstr "IPv4 保留地址"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:199
|
||||
msgid "Reserved IP6"
|
||||
msgstr "IPv6 保留地址"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:76
|
||||
msgid "Restart Service"
|
||||
msgstr "重启服务"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:64
|
||||
msgid "Router Proxy"
|
||||
msgstr "路由器代理"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:15
|
||||
msgid "Running"
|
||||
msgstr "运行中"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:34
|
||||
msgid "Scheduled Clear"
|
||||
msgstr "定时清空"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:37
|
||||
msgid "Scheduled Clear Cron"
|
||||
msgstr "Cron 表达式"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:42
|
||||
msgid "Scheduled Clear Size Limit"
|
||||
msgstr "日志大小上限"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:48
|
||||
msgid "Scheduled Clear Size Limit Unit"
|
||||
msgstr "日志大小上限单位"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:114
|
||||
msgid "Scheduled Restart"
|
||||
msgstr "定时重启"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:117
|
||||
msgid "Scheduled Restart Cron"
|
||||
msgstr "Cron 表达式"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:83
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/log.js:116
|
||||
msgid "Scroll To Bottom"
|
||||
msgstr "滚动到底部"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:163
|
||||
msgid "Stack Size Hard Limit"
|
||||
msgstr "栈大小硬限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:159
|
||||
msgid "Stack Size Soft Limit"
|
||||
msgstr "栈大小软限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:110
|
||||
msgid "Start Delay"
|
||||
msgstr "启动延迟"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:112
|
||||
msgid "Start Immidiately"
|
||||
msgstr "立即启动"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:40
|
||||
msgid "Status"
|
||||
msgstr "状态"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:31
|
||||
msgid "Subscription"
|
||||
msgstr "订阅"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:69
|
||||
msgid "Subscription Info Url"
|
||||
msgstr "订阅信息链接"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:37
|
||||
msgid "Subscription Name"
|
||||
msgstr "订阅名称"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:72
|
||||
msgid "Subscription Url"
|
||||
msgstr "订阅链接"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:107
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/editor.js:35
|
||||
msgid "Subscription:"
|
||||
msgstr "订阅:"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:51
|
||||
msgid "TCP Mode"
|
||||
msgstr "TCP 模式"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:55
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:61
|
||||
msgid "TPROXY Mode"
|
||||
msgstr "TPROXY 模式"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:206
|
||||
msgid "TUN Interval"
|
||||
msgstr "TUN 等待间隔"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:56
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:62
|
||||
msgid "TUN Mode"
|
||||
msgstr "TUN 模式"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:202
|
||||
msgid "TUN Timeout"
|
||||
msgstr "TUN 等待超时"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:122
|
||||
msgid "Test Profile"
|
||||
msgstr "检查配置文件"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:45
|
||||
msgid "Total"
|
||||
msgstr "总量"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:38
|
||||
msgid "Transparent Proxy with sing-box on OpenWrt."
|
||||
msgstr "在 OpenWrt 上使用 sing-box 进行透明代理"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:58
|
||||
msgid "UDP Mode"
|
||||
msgstr "UDP 模式"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:136
|
||||
msgid "UI Download Url"
|
||||
msgstr "UI 下载地址"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:133
|
||||
msgid "UI Path"
|
||||
msgstr "UI 路径"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:145
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:149
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:153
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:157
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:161
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:165
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:177
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:181
|
||||
msgid "Unlimited"
|
||||
msgstr "无限制"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:28
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:34
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:45
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:50
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:56
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:64
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:70
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:76
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:82
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:86
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:94
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:99
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:103
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:106
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:112
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:117
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:121
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:127
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:134
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:137
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:146
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/mixin.js:150
|
||||
msgid "Unmodified"
|
||||
msgstr "不修改"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:63
|
||||
msgid "Update"
|
||||
msgstr "更新"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:55
|
||||
msgid "Update At"
|
||||
msgstr "更新时间"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:83
|
||||
msgid "Update Dashboard"
|
||||
msgstr "更新面板"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:23
|
||||
msgid "Upload Profile"
|
||||
msgstr "上传配置文件"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:40
|
||||
msgid "Used"
|
||||
msgstr "已使用"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/proxy.js:81
|
||||
msgid "User"
|
||||
msgstr "用户"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/profile.js:76
|
||||
msgid "User Agent"
|
||||
msgstr "用户代理(UA)"
|
||||
|
||||
#: applications/luci-app-momo/htdocs/luci-static/resources/view/momo/app.js:128
|
||||
msgid "procd Config"
|
||||
msgstr "procd 配置"
|
||||
@@ -1,60 +0,0 @@
|
||||
{
|
||||
"admin/services/momo": {
|
||||
"title": "Momo",
|
||||
"action": {
|
||||
"type": "firstchild"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [ "luci-app-momo" ],
|
||||
"uci": { "momo": true }
|
||||
}
|
||||
},
|
||||
"admin/services/momo/config": {
|
||||
"title": "App Config",
|
||||
"order": 10,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "momo/app"
|
||||
}
|
||||
},
|
||||
"admin/services/momo/profile": {
|
||||
"title": "Profile",
|
||||
"order": 20,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "momo/profile"
|
||||
}
|
||||
},
|
||||
"admin/services/momo/mixin": {
|
||||
"title": "Mixin Config",
|
||||
"order": 30,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "momo/mixin"
|
||||
}
|
||||
},
|
||||
"admin/services/momo/proxy": {
|
||||
"title": "Proxy Config",
|
||||
"order": 40,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "momo/proxy"
|
||||
}
|
||||
},
|
||||
"admin/services/momo/editor": {
|
||||
"title": "Editor",
|
||||
"order": 50,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "momo/editor"
|
||||
}
|
||||
},
|
||||
"admin/services/momo/log": {
|
||||
"title": "Log",
|
||||
"order": 60,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "momo/log"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"luci-app-momo": {
|
||||
"description": "Grant access to momo procedures",
|
||||
"read": {
|
||||
"uci": [ "momo" ],
|
||||
"ubus": {
|
||||
"rc": [ "*" ],
|
||||
"luci.momo": [ "*" ]
|
||||
},
|
||||
"file": {
|
||||
"/etc/momo/profiles/*.json": ["read"],
|
||||
"/etc/momo/subscriptions/*.json": ["read"],
|
||||
"/etc/momo/run/config.json": ["read"],
|
||||
"/var/log/momo/*.log": ["read"],
|
||||
"/tmp/log/momo/*.log": ["read"]
|
||||
}
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "momo" ],
|
||||
"file": {
|
||||
"/etc/momo/profiles/*.json": ["write"],
|
||||
"/etc/momo/subscriptions/*.json": ["write"],
|
||||
"/etc/momo/run/config.json": ["write"],
|
||||
"/var/log/momo/*.log": ["write"],
|
||||
"/tmp/log/momo/*.log": ["write"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,105 +0,0 @@
|
||||
#!/usr/bin/ucode
|
||||
|
||||
'use strict';
|
||||
|
||||
import { popen } from 'fs';
|
||||
import { get_paths, merge_exists, get_users, get_groups, get_cgroups, load_profile } from '/etc/momo/ucode/include.uc';
|
||||
|
||||
const methods = {
|
||||
get_paths: {
|
||||
call: function() {
|
||||
return get_paths();
|
||||
}
|
||||
},
|
||||
version: {
|
||||
call: function() {
|
||||
let process;
|
||||
let app = '';
|
||||
if (system('command -v opkg') == 0) {
|
||||
process = popen(`opkg list-installed luci-app-momo | cut -d ' ' -f 3`);
|
||||
if (process) {
|
||||
app = trim(process.read('all'));
|
||||
process.close();
|
||||
}
|
||||
} else if (system('command -v apk') == 0) {
|
||||
process = popen(`apk list -I luci-app-momo | cut -d ' ' -f 1 | cut -d '-' -f 4`);
|
||||
if (process) {
|
||||
app = trim(process.read('all'));
|
||||
process.close();
|
||||
}
|
||||
}
|
||||
let core = '';
|
||||
process = popen(`sing-box version | grep sing-box | cut -d ' ' -f 3`);
|
||||
if (process) {
|
||||
core = trim(process.read('all'));
|
||||
process.close();
|
||||
}
|
||||
return { app: app, core: core };
|
||||
}
|
||||
},
|
||||
profile: {
|
||||
args: { defaults: {} },
|
||||
call: function(req) {
|
||||
const defaults = req.args?.defaults ?? {};
|
||||
const profile = load_profile();
|
||||
return merge_exists(defaults, profile);
|
||||
}
|
||||
},
|
||||
update_subscription: {
|
||||
args: { section_id: 'section_id' },
|
||||
call: function(req) {
|
||||
let success = false;
|
||||
const section_id = req.args?.section_id;
|
||||
if (section_id) {
|
||||
success = system(['service', 'momo', 'update_subscription', section_id]) == 0;
|
||||
}
|
||||
return { success: success };
|
||||
}
|
||||
},
|
||||
api: {
|
||||
args: { method: 'method', path: 'path', query: 'query', body: 'body' },
|
||||
call: function(req) {
|
||||
let result = {};
|
||||
|
||||
const method = req.args?.method;
|
||||
const path = req.args?.path;
|
||||
const query = req.args?.query;
|
||||
const body = req.args?.body;
|
||||
|
||||
const profile = load_profile();
|
||||
const api_listen = profile['experimental']['clash_api']['external_controller'];
|
||||
const api_secret = profile['experimental']['clash_api']['secret'];
|
||||
|
||||
if (!api_listen) {
|
||||
return result;
|
||||
}
|
||||
|
||||
const url = api_listen + path;
|
||||
|
||||
const process = popen(`curl --request '${method}' --oauth2-bearer '${api_secret}' --url-query '${query}' --data '${body}' '${url}'`);
|
||||
if (process) {
|
||||
result = json(process);
|
||||
process.close();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
},
|
||||
get_identifiers: {
|
||||
call: function() {
|
||||
const users = filter(get_users(), (x) => x != '');
|
||||
const groups = filter(get_groups(), (x) => x != '');
|
||||
const cgroups = filter(get_cgroups(), (x) => x != '' && index(x, 'services/momo') < 0);
|
||||
return { users: users, groups: groups, cgroups: cgroups };
|
||||
}
|
||||
},
|
||||
debug: {
|
||||
call: function() {
|
||||
const paths = get_paths();
|
||||
const success = system(`${paths.debug_sh} > ${paths.debug_log_path}`) == 0;
|
||||
return { success: success };
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return { 'luci.momo': methods };
|
||||
Reference in new issue
Block a user