mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-03 21:43:56 +08:00
🎉 Sync 2026-07-23 18:16:40
This commit is contained in:
1 parent
4e2583c9a2
commit
aecee003c5
19 files changed
+2559
-941
No files matched your search
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=luci-app-openlist2
|
PKG_NAME:=luci-app-openlist2
|
||||||
PKG_VERSION:=1.0.2
|
PKG_VERSION:=1.0.2
|
||||||
PKG_RELEASE:=3
|
PKG_RELEASE:=4
|
||||||
|
|
||||||
LUCI_TITLE:=LuCI support for openlist
|
LUCI_TITLE:=LuCI support for openlist
|
||||||
LUCI_DEPENDS:=+openlist2
|
LUCI_DEPENDS:=+openlist2
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
'require dom';
|
||||||
'require form';
|
'require form';
|
||||||
'require fs';
|
'require fs';
|
||||||
'require poll';
|
'require poll';
|
||||||
@@ -23,24 +24,128 @@ const getServiceStatus = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderStatus = (isRunning, protocol, webport, site_url) => {
|
const getWebInterfaceUrl = (protocol, webport, site_url) => {
|
||||||
const spanTemp = '<em><span style="color:%s"><strong>%s %s</strong></span></em>';
|
const fallbackUrl = `${protocol}//${window.location.hostname}:${webport}/`;
|
||||||
let renderHTML;
|
const configuredUrl = (site_url || '').trim();
|
||||||
if (isRunning) {
|
if (configuredUrl) {
|
||||||
let buttonUrl = '';
|
try {
|
||||||
if (site_url && site_url.trim() !== '') {
|
const url = new URL(configuredUrl, fallbackUrl);
|
||||||
buttonUrl = site_url;
|
if (url.protocol === 'http:' || url.protocol === 'https:')
|
||||||
} else {
|
return url.href;
|
||||||
buttonUrl = `${protocol}//${window.location.hostname}:${webport}/`;
|
} catch (e) { }
|
||||||
}
|
|
||||||
const button = String.format('<input class="cbi-button-reload" type="button" style="margin-left: 50px" value="%s" onclick="window.open(\'%s\')">',
|
|
||||||
_('Open Web Interface'), buttonUrl);
|
|
||||||
renderHTML = spanTemp.format('green', 'OpenList', _('RUNNING')) + button;
|
|
||||||
} else {
|
|
||||||
renderHTML = spanTemp.format('red', 'OpenList', _('NOT RUNNING'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return renderHTML;
|
return fallbackUrl;
|
||||||
|
};
|
||||||
|
|
||||||
|
const renderStatus = (isRunning, protocol, webport, site_url) => {
|
||||||
|
const status = E('em', {}, E('span', { 'style': `color:${isRunning ? 'green' : 'red'}` },
|
||||||
|
E('strong', {}, ['OpenList ', isRunning ? _('RUNNING') : _('NOT RUNNING')])));
|
||||||
|
|
||||||
|
if (isRunning && webport) {
|
||||||
|
const buttonUrl = getWebInterfaceUrl(protocol, webport, site_url);
|
||||||
|
const button = E('input', {
|
||||||
|
'class': 'cbi-button-reload',
|
||||||
|
'type': 'button',
|
||||||
|
'style': 'margin-left: 50px',
|
||||||
|
'value': _('Open Web Interface')
|
||||||
|
});
|
||||||
|
button.addEventListener('click', () => window.open(buttonUrl, '_blank', 'noopener'));
|
||||||
|
|
||||||
|
return E('span', {}, [status, button]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
};
|
||||||
|
|
||||||
|
const isSafeLogPath = value => /^\/var\/log\/openlist2(?:[._-][A-Za-z0-9._-]+)?$/.test(value || '');
|
||||||
|
|
||||||
|
const isEnabledPort = value => {
|
||||||
|
const port = (value || '').trim();
|
||||||
|
return port !== '' && port !== '-1';
|
||||||
|
};
|
||||||
|
|
||||||
|
const HTTPS_ENABLED_PORT = /^[1-9][0-9]*$/;
|
||||||
|
|
||||||
|
const getListenPortValue = (section_id, option, fallback) => {
|
||||||
|
const value = uci.get('openlist2', section_id, option);
|
||||||
|
return value == null || String(value).trim() === '' ? fallback : value;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getHttpsPortValue = (section_id, httpsPortOption) => {
|
||||||
|
const value = httpsPortOption.formvalue(section_id);
|
||||||
|
return value == null || String(value).trim() === ''
|
||||||
|
? getListenPortValue(section_id, 'listen_https_port', '-1')
|
||||||
|
: value;
|
||||||
|
};
|
||||||
|
|
||||||
|
const validateHttpsRequiredFile = (section_id, httpsPortOption, value, message) => {
|
||||||
|
if (!HTTPS_ENABLED_PORT.test(String(getHttpsPortValue(section_id, httpsPortOption)).trim()))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return (value || '').trim() ? true : message;
|
||||||
|
};
|
||||||
|
|
||||||
|
const validateListenPort = value => {
|
||||||
|
const port = (value || '').trim();
|
||||||
|
if (port === '-1')
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (/^\d+$/.test(port)) {
|
||||||
|
const number = Number(port);
|
||||||
|
if (number >= 1 && number <= 65535)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _('Port must be -1 or a valid port number from 1 to 65535.');
|
||||||
|
};
|
||||||
|
|
||||||
|
const isHttpUrl = value => {
|
||||||
|
try {
|
||||||
|
const url = new URL(value);
|
||||||
|
return !!url.hostname && (url.protocol === 'http:' || url.protocol === 'https:');
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const validateSiteUrl = value => {
|
||||||
|
const url = (value || '').trim();
|
||||||
|
if (!url)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (isHttpUrl(url) && !url.endsWith('/'))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return _('Site URL must start with http:// or https:// and must not end with /.');
|
||||||
|
};
|
||||||
|
|
||||||
|
const validateCorsOrigins = value => {
|
||||||
|
const origins = (value || '').split(',')
|
||||||
|
.map(origin => origin.trim())
|
||||||
|
.filter(Boolean);
|
||||||
|
|
||||||
|
for (const origin of origins) {
|
||||||
|
if (origin === '*' || isHttpUrl(origin))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return _('CORS origins must be * or include http:// or https://.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getEffectiveWebEndpoint = config => {
|
||||||
|
const httpPort = uci.get(config, '@openlist2[0]', 'listen_http_port') || '5244';
|
||||||
|
const httpsPort = uci.get(config, '@openlist2[0]', 'listen_https_port') || '-1';
|
||||||
|
|
||||||
|
if (isEnabledPort(httpsPort))
|
||||||
|
return { protocol: 'https:', port: httpsPort };
|
||||||
|
|
||||||
|
if (isEnabledPort(httpPort))
|
||||||
|
return { protocol: 'http:', port: httpPort };
|
||||||
|
|
||||||
|
return { protocol: 'http:', port: '' };
|
||||||
};
|
};
|
||||||
|
|
||||||
return view.extend({
|
return view.extend({
|
||||||
@@ -69,19 +174,15 @@ return view.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
render(data) {
|
render(data) {
|
||||||
let m, s, o;
|
let m, s, o, httpsPortOption;
|
||||||
const webport = uci.get(data[0], '@openlist2[0]', 'port') || '5244';
|
const endpoint = getEffectiveWebEndpoint(data[0]);
|
||||||
const ssl = uci.get(data[0], '@openlist2[0]', 'ssl') || '0';
|
const webport = endpoint.port;
|
||||||
let protocol;
|
const protocol = endpoint.protocol;
|
||||||
if (ssl === '0') {
|
|
||||||
protocol = 'http:';
|
|
||||||
} else if (ssl === '1') {
|
|
||||||
protocol = 'https:';
|
|
||||||
}
|
|
||||||
const site_url = uci.get(data[0], '@openlist2[0]', 'site_url') || '';
|
const site_url = uci.get(data[0], '@openlist2[0]', 'site_url') || '';
|
||||||
|
|
||||||
m = new form.Map('openlist2', _('OpenList'),
|
m = new form.Map('openlist2', _('OpenList'),
|
||||||
_('A file list program that supports multiple storage.'));
|
_('A file list program that supports multiple storage.') + '<br />' +
|
||||||
|
_('Initial login username is "%s" and password is "%s". Change it immediately after first login.').format('admin', 'admin'));
|
||||||
|
|
||||||
s = m.section(form.TypedSection);
|
s = m.section(form.TypedSection);
|
||||||
s.anonymous = true;
|
s.anonymous = true;
|
||||||
@@ -92,7 +193,7 @@ return view.extend({
|
|||||||
return L.resolveDefault(getServiceStatus()).then(res => {
|
return L.resolveDefault(getServiceStatus()).then(res => {
|
||||||
const view = document.getElementById('service_status');
|
const view = document.getElementById('service_status');
|
||||||
if (view)
|
if (view)
|
||||||
view.innerHTML = renderStatus(res, protocol, webport, site_url);
|
dom.content(view, renderStatus(res, protocol, webport, site_url));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -107,6 +208,7 @@ return view.extend({
|
|||||||
s.tab('global', _('Global Settings'));
|
s.tab('global', _('Global Settings'));
|
||||||
s.tab('log', _('Logs'));
|
s.tab('log', _('Logs'));
|
||||||
s.tab('database', _('Database'));
|
s.tab('database', _('Database'));
|
||||||
|
s.tab('search', _('Search'));
|
||||||
s.tab('scheme', _('Web Protocol'));
|
s.tab('scheme', _('Web Protocol'));
|
||||||
s.tab('tasks', _('Task threads'));
|
s.tab('tasks', _('Task threads'));
|
||||||
s.tab('cors', _('CORS Settings'));
|
s.tab('cors', _('CORS Settings'));
|
||||||
@@ -119,9 +221,8 @@ return view.extend({
|
|||||||
o.default = o.disabled;
|
o.default = o.disabled;
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('basic', form.Value, 'port', _('Port'));
|
o = s.taboption('basic', form.Flag, 'debug', _('Debug logging'),
|
||||||
o.datatype = 'and(port,min(1))';
|
_('Pass --debug to OpenList and send stderr to procd logs.'));
|
||||||
o.default = '5244';
|
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('basic', form.Value, 'delayed_start', _('Delayed Start (seconds)'));
|
o = s.taboption('basic', form.Value, 'delayed_start', _('Delayed Start (seconds)'));
|
||||||
@@ -153,6 +254,9 @@ return view.extend({
|
|||||||
|
|
||||||
o = s.taboption('global', form.Value, 'site_url', _('Site URL'),
|
o = s.taboption('global', form.Value, 'site_url', _('Site URL'),
|
||||||
_('When the web is reverse proxied to a subdirectory, this option must be filled out to ensure proper functioning of the web. Do not include \'/\' at the end of the URL'));
|
_('When the web is reverse proxied to a subdirectory, this option must be filled out to ensure proper functioning of the web. Do not include \'/\' at the end of the URL'));
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
return validateSiteUrl(value);
|
||||||
|
};
|
||||||
|
|
||||||
o = s.taboption('global', form.Value, 'cdn', _('CDN URL'));
|
o = s.taboption('global', form.Value, 'cdn', _('CDN URL'));
|
||||||
o.default = '';
|
o.default = '';
|
||||||
@@ -165,6 +269,28 @@ return view.extend({
|
|||||||
o.default = '48';
|
o.default = '48';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('global', form.Value, 'proxy_address', _('Proxy address'),
|
||||||
|
_('HTTP, HTTPS, SOCKS4, SOCKS5 or SOCKS5HOSTNAME proxy used by OpenList outbound requests.'));
|
||||||
|
o.default = '';
|
||||||
|
|
||||||
|
o = s.taboption('global', form.Value, 'auto_memory_limit', _('Auto memory limit (MB)'),
|
||||||
|
_('0 disables the automatic memory limit. The upstream default is 4 MB.'));
|
||||||
|
o.default = '4';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('global', form.Value, 'min_free_memory', _('Minimum free memory (MB)'),
|
||||||
|
_('Values below 16 let OpenList calculate a default; negative values disable memory cache.'));
|
||||||
|
o.default = '0';
|
||||||
|
o.datatype = 'integer';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('global', form.Value, 'max_block_limit', _('Maximum block size (MB)'),
|
||||||
|
_('Values below 4 let OpenList calculate a default.'));
|
||||||
|
o.default = '0';
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('global', form.Value, 'max_connections', _('Max Connections'),
|
o = s.taboption('global', form.Value, 'max_connections', _('Max Connections'),
|
||||||
_('0 is unlimited, It is recommend to set a low number of concurrency (10-20) for poor performance device'));
|
_('0 is unlimited, It is recommend to set a low number of concurrency (10-20) for poor performance device'));
|
||||||
o.default = '0';
|
o.default = '0';
|
||||||
@@ -172,13 +298,14 @@ return view.extend({
|
|||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('global', form.Value, 'max_concurrency', _('Max concurrency of local proxies'),
|
o = s.taboption('global', form.Value, 'max_concurrency', _('Max concurrency of local proxies'),
|
||||||
_('0 is unlimited, Limit the maximum concurrency of local agents. The default value is 64'));
|
_('0 is unlimited, Limit the maximum concurrency of local agents. The default value is 64'));
|
||||||
o.default = '0';
|
o.default = '64';
|
||||||
o.datatype = 'uinteger';
|
o.datatype = 'uinteger';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('global', form.Flag, 'tls_insecure_skip_verify', _('Disable TLS Verify'));
|
o = s.taboption('global', form.Flag, 'tls_insecure_skip_verify', _('Disable TLS Verify'),
|
||||||
o.default = true;
|
_('Skip remote TLS certificate verification (not recommended).'));
|
||||||
|
o.default = false;
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
// Logs
|
// Logs
|
||||||
@@ -190,16 +317,22 @@ return view.extend({
|
|||||||
o.default = '/var/log/openlist2.log';
|
o.default = '/var/log/openlist2.log';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.depends('log', '1');
|
o.depends('log', '1');
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
if (isSafeLogPath(value))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return _('Log path must be /var/log/openlist2* without subdirectories.');
|
||||||
|
};
|
||||||
|
|
||||||
o = s.taboption('log', form.Value, 'log_max_size', _('Max Size (MB)'));
|
o = s.taboption('log', form.Value, 'log_max_size', _('Max Size (MB)'));
|
||||||
o.datatype = 'uinteger';
|
o.datatype = 'uinteger';
|
||||||
o.default = '10';
|
o.default = '50';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.depends('log', '1');
|
o.depends('log', '1');
|
||||||
|
|
||||||
o = s.taboption('log', form.Value, 'log_max_backups', _('Max backups'));
|
o = s.taboption('log', form.Value, 'log_max_backups', _('Max backups'));
|
||||||
o.datatype = 'uinteger';
|
o.datatype = 'uinteger';
|
||||||
o.default = '5';
|
o.default = '30';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.depends('log', '1');
|
o.depends('log', '1');
|
||||||
|
|
||||||
@@ -214,6 +347,20 @@ return view.extend({
|
|||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.depends('log', '1');
|
o.depends('log', '1');
|
||||||
|
|
||||||
|
o = s.taboption('log', form.Flag, 'log_filter', _('Enable common log filters'),
|
||||||
|
_('Filter noisy access logs such as health checks, HEAD requests and WebDAV PROPFIND.'));
|
||||||
|
o.rmempty = false;
|
||||||
|
o.depends('log', '1');
|
||||||
|
|
||||||
|
o = s.taboption('log', form.Value, 'log_filter_cidr', _('Custom log filter CIDR'));
|
||||||
|
o.depends('log_filter', '1');
|
||||||
|
|
||||||
|
o = s.taboption('log', form.Value, 'log_filter_path', _('Custom log filter path'));
|
||||||
|
o.depends('log_filter', '1');
|
||||||
|
|
||||||
|
o = s.taboption('log', form.Value, 'log_filter_method', _('Custom log filter method'));
|
||||||
|
o.depends('log_filter', '1');
|
||||||
|
|
||||||
// database
|
// database
|
||||||
o = s.taboption('database', form.ListValue, 'database_type', _('Database Type'));
|
o = s.taboption('database', form.ListValue, 'database_type', _('Database Type'));
|
||||||
o.default = 'sqlite3';
|
o.default = 'sqlite3';
|
||||||
@@ -225,9 +372,10 @@ return view.extend({
|
|||||||
o.depends('database_type', 'mysql');
|
o.depends('database_type', 'mysql');
|
||||||
o.depends('database_type', 'postgres');
|
o.depends('database_type', 'postgres');
|
||||||
|
|
||||||
o = s.taboption('database', form.Value, 'mysql_port', _('Database Port'));
|
o = s.taboption('database', form.Value, 'mysql_port', _('Database Port'),
|
||||||
|
_('Use 0 to apply the usual default for the selected database: 3306 for MySQL, 5432 for PostgreSQL.'));
|
||||||
o.datatype = 'port';
|
o.datatype = 'port';
|
||||||
o.default = '3306';
|
o.default = '0';
|
||||||
o.depends('database_type', 'mysql');
|
o.depends('database_type', 'mysql');
|
||||||
o.depends('database_type', 'postgres');
|
o.depends('database_type', 'postgres');
|
||||||
|
|
||||||
@@ -256,23 +404,71 @@ return view.extend({
|
|||||||
o.depends('database_type', 'mysql');
|
o.depends('database_type', 'mysql');
|
||||||
o.depends('database_type', 'postgres');
|
o.depends('database_type', 'postgres');
|
||||||
|
|
||||||
// scheme
|
o = s.taboption('search', form.Value, 'meilisearch_host', _('Meilisearch Host'));
|
||||||
o = s.taboption('scheme', form.Flag, 'ssl', _('Enable SSL'));
|
o.default = 'http://localhost:7700';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('search', form.Value, 'meilisearch_api_key', _('Meilisearch API Key'));
|
||||||
|
o.password = true;
|
||||||
|
|
||||||
|
o = s.taboption('search', form.Value, 'meilisearch_index', _('Meilisearch Index'));
|
||||||
|
o.default = 'openlist';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
// scheme
|
||||||
|
o = s.taboption('scheme', form.Value, 'listen_addr', _('Listen address'));
|
||||||
|
o.default = '0.0.0.0';
|
||||||
|
o.datatype = 'ipaddr';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('scheme', form.Value, 'listen_http_port', _('HTTP listen port'),
|
||||||
|
_('The upstream default is 5244. Set to -1 to disable HTTP.'));
|
||||||
|
o.datatype = 'integer';
|
||||||
|
o.default = '5244';
|
||||||
|
o.rmempty = false;
|
||||||
|
o.cfgvalue = section_id => getListenPortValue(section_id, 'listen_http_port', '5244');
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
return validateListenPort(value);
|
||||||
|
};
|
||||||
|
|
||||||
|
httpsPortOption = o = s.taboption('scheme', form.Value, 'listen_https_port', _('HTTPS listen port'),
|
||||||
|
_('The upstream default is -1 (disabled). Set a valid port number to enable HTTPS.'));
|
||||||
|
o.datatype = 'integer';
|
||||||
|
o.default = '-1';
|
||||||
|
o.rmempty = false;
|
||||||
|
o.cfgvalue = section_id => getListenPortValue(section_id, 'listen_https_port', '-1');
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
return validateListenPort(value);
|
||||||
|
};
|
||||||
|
|
||||||
o = s.taboption('scheme', form.Flag, 'force_https', _('Force HTTPS'));
|
o = s.taboption('scheme', form.Flag, 'force_https', _('Force HTTPS'));
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.depends('ssl', '1');
|
|
||||||
|
|
||||||
o = s.taboption('scheme', form.Value, 'ssl_cert', _('SSL cert'),
|
o = s.taboption('scheme', form.Value, 'ssl_cert', _('SSL cert'),
|
||||||
_('SSL certificate file path'));
|
_('SSL certificate file path'));
|
||||||
o.rmempty = false;
|
o.validate = function(section_id, value) {
|
||||||
o.depends('ssl', '1');
|
return validateHttpsRequiredFile(section_id, httpsPortOption, value,
|
||||||
|
_('SSL certificate file path is required when HTTPS is enabled.'));
|
||||||
|
};
|
||||||
|
|
||||||
o = s.taboption('scheme', form.Value, 'ssl_key', _('SSL key'),
|
o = s.taboption('scheme', form.Value, 'ssl_key', _('SSL key'),
|
||||||
_('SSL key file path'));
|
_('SSL key file path'));
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
return validateHttpsRequiredFile(section_id, httpsPortOption, value,
|
||||||
|
_('SSL key file path is required when HTTPS is enabled.'));
|
||||||
|
};
|
||||||
|
|
||||||
|
o = s.taboption('scheme', form.Value, 'listen_unix_file', _('Unix socket file'));
|
||||||
|
|
||||||
|
o = s.taboption('scheme', form.Value, 'listen_unix_file_perm', _('Unix socket permission'));
|
||||||
|
|
||||||
|
o = s.taboption('scheme', form.Flag, 'listen_enable_h2c', _('Enable H2C'),
|
||||||
|
_('Enable cleartext HTTP/2 for reverse proxies that use grpc_pass.'));
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('scheme', form.Flag, 'listen_enable_h3', _('Enable HTTP/3/QUIC'),
|
||||||
|
_('Enable HTTP/3 over QUIC on the HTTPS listen port. HTTPS must be enabled and certificate files must be configured.'));
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.depends('ssl', '1');
|
|
||||||
|
|
||||||
// tasks
|
// tasks
|
||||||
o = s.taboption('tasks', form.Value, 'download_workers', _('Download Workers'));
|
o = s.taboption('tasks', form.Value, 'download_workers', _('Download Workers'));
|
||||||
@@ -285,6 +481,9 @@ return view.extend({
|
|||||||
o.default = '1';
|
o.default = '1';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Flag, 'download_task_persistant', _('Download Task Persistence'));
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('tasks', form.Value, 'transfer_workers', _('Transfer Workers'));
|
o = s.taboption('tasks', form.Value, 'transfer_workers', _('Transfer Workers'));
|
||||||
o.datatype = 'uinteger';
|
o.datatype = 'uinteger';
|
||||||
o.default = '5';
|
o.default = '5';
|
||||||
@@ -295,6 +494,9 @@ return view.extend({
|
|||||||
o.default = '2';
|
o.default = '2';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Flag, 'transfer_task_persistant', _('Transfer Task Persistence'));
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('tasks', form.Value, 'upload_workers', _('Upload Workers'));
|
o = s.taboption('tasks', form.Value, 'upload_workers', _('Upload Workers'));
|
||||||
o.datatype = 'uinteger';
|
o.datatype = 'uinteger';
|
||||||
o.default = '5';
|
o.default = '5';
|
||||||
@@ -305,6 +507,9 @@ return view.extend({
|
|||||||
o.default = '0';
|
o.default = '0';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Flag, 'upload_task_persistant', _('Upload Task Persistence'));
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('tasks', form.Value, 'copy_workers', _('Copy Workers'));
|
o = s.taboption('tasks', form.Value, 'copy_workers', _('Copy Workers'));
|
||||||
o.datatype = 'uinteger';
|
o.datatype = 'uinteger';
|
||||||
o.default = '5';
|
o.default = '5';
|
||||||
@@ -315,16 +520,67 @@ return view.extend({
|
|||||||
o.default = '2';
|
o.default = '2';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Flag, 'copy_task_persistant', _('Copy Task Persistence'));
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Value, 'move_workers', _('Move Workers'));
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.default = '5';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Value, 'move_max_retry', _('Move Max Retry'));
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.default = '2';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Flag, 'move_task_persistant', _('Move Task Persistence'));
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Value, 'decompress_workers', _('Decompress Workers'));
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.default = '5';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Value, 'decompress_max_retry', _('Decompress Max Retry'));
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.default = '2';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Flag, 'decompress_task_persistant', _('Decompress Task Persistence'));
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Value, 'decompress_upload_workers', _('Decompress Upload Workers'));
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.default = '5';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Value, 'decompress_upload_max_retry', _('Decompress Upload Max Retry'));
|
||||||
|
o.datatype = 'uinteger';
|
||||||
|
o.default = '2';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Flag, 'decompress_upload_task_persistant', _('Decompress Upload Task Persistence'));
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('tasks', form.Flag, 'allow_retry_canceled', _('Allow retry canceled tasks'));
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
// cors
|
// cors
|
||||||
o = s.taboption('cors', form.Value, 'cors_allow_origins', _('Allow Origins'));
|
o = s.taboption('cors', form.Value, 'cors_allow_origins', _('Allow Origins'),
|
||||||
|
_('Comma-separated list. Use * to allow any value.'));
|
||||||
|
o.default = '*';
|
||||||
|
o.rmempty = false;
|
||||||
|
o.validate = function(section_id, value) {
|
||||||
|
return validateCorsOrigins(value);
|
||||||
|
};
|
||||||
|
|
||||||
|
o = s.taboption('cors', form.Value, 'cors_allow_methods', _('Allow Methods'),
|
||||||
|
_('Comma-separated list. Use * to allow any value.'));
|
||||||
o.default = '*';
|
o.default = '*';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('cors', form.Value, 'cors_allow_methods', _('Allow Methods'));
|
o = s.taboption('cors', form.Value, 'cors_allow_headers', _('Allow Headers'),
|
||||||
o.default = '*';
|
_('Comma-separated list. Use * to allow any value.'));
|
||||||
o.rmempty = false;
|
|
||||||
|
|
||||||
o = s.taboption('cors', form.Value, 'cors_allow_headers', _('Allow Headers'));
|
|
||||||
o.default = '*';
|
o.default = '*';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
@@ -364,7 +620,7 @@ return view.extend({
|
|||||||
|
|
||||||
o = s.taboption('ftp', form.Value, 'connection_timeout', _('Connection timeout (seconds)'));
|
o = s.taboption('ftp', form.Value, 'connection_timeout', _('Connection timeout (seconds)'));
|
||||||
o.datatype = 'uinteger';
|
o.datatype = 'uinteger';
|
||||||
o.default = '900';
|
o.default = '30';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('ftp', form.Flag, 'disable_active_mode', _('Disable active transfer mode'));
|
o = s.taboption('ftp', form.Flag, 'disable_active_mode', _('Disable active transfer mode'));
|
||||||
@@ -374,9 +630,11 @@ return view.extend({
|
|||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('ftp', form.Flag, 'enable_active_conn_ip_check', _('Client IP check in active transfer mode'));
|
o = s.taboption('ftp', form.Flag, 'enable_active_conn_ip_check', _('Client IP check in active transfer mode'));
|
||||||
|
o.default = '1';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('ftp', form.Flag, 'enable_pasv_conn_ip_check', _('Client IP check in passive transfer mode'));
|
o = s.taboption('ftp', form.Flag, 'enable_pasv_conn_ip_check', _('Client IP check in passive transfer mode'));
|
||||||
|
o.default = '1';
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
// sftp
|
// sftp
|
||||||
|
|||||||
@@ -1,42 +1,60 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
'require dom';
|
|
||||||
'require fs';
|
'require fs';
|
||||||
'require poll';
|
'require poll';
|
||||||
'require uci';
|
'require uci';
|
||||||
|
'require ui';
|
||||||
'require view';
|
'require view';
|
||||||
|
|
||||||
|
const DEFAULT_LOG_PATH = '/var/log/openlist2.log';
|
||||||
|
|
||||||
let scrollPosition = 0;
|
let scrollPosition = 0;
|
||||||
let userScrolled = false;
|
let userScrolled = false;
|
||||||
let logTextarea;
|
let logTextarea;
|
||||||
let log_path;
|
let log_path = DEFAULT_LOG_PATH;
|
||||||
|
|
||||||
uci.load('openlist2').then(() => {
|
const isSafeLogPath = value => /^\/var\/log\/openlist2(?:[._-][A-Za-z0-9._-]+)?$/.test(value || '');
|
||||||
log_path = uci.get('openlist2', '@openlist2[0]', 'log_path') || '/var/log/openlist2.log';
|
|
||||||
});
|
const formatLog = res => {
|
||||||
|
const log = (res || '').trim().replace(/\u001b\[[0-9;]*m/g, '');
|
||||||
|
|
||||||
|
return log || _('No log data.');
|
||||||
|
};
|
||||||
|
|
||||||
const pollLog = () => {
|
const pollLog = () => {
|
||||||
return Promise.all([
|
if (!logTextarea)
|
||||||
fs.read_direct(log_path, 'text').then(res => {
|
return Promise.resolve();
|
||||||
return res.trim().split(/\n/).join('\n').replace(/\u001b\[33mWARN\u001b\[0m/g, '').replace(/\u001b\[36mINFO\u001b\[0m/g, '').replace(/\u001b\[31mERRO\u001b\[0m/g, '');
|
|
||||||
}),
|
|
||||||
]).then(data => {
|
|
||||||
logTextarea.value = data[0] || _('No log data.');
|
|
||||||
|
|
||||||
if (!userScrolled) {
|
return fs.read_direct(log_path, 'text')
|
||||||
logTextarea.scrollTop = logTextarea.scrollHeight;
|
.then(formatLog)
|
||||||
} else {
|
.catch(() => _('No log data.'))
|
||||||
logTextarea.scrollTop = scrollPosition;
|
.then(log => {
|
||||||
}
|
logTextarea.value = log;
|
||||||
});
|
|
||||||
|
if (!userScrolled) {
|
||||||
|
logTextarea.scrollTop = logTextarea.scrollHeight;
|
||||||
|
} else {
|
||||||
|
logTextarea.scrollTop = scrollPosition;
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
return view.extend({
|
return view.extend({
|
||||||
|
load() {
|
||||||
|
return uci.load('openlist2');
|
||||||
|
},
|
||||||
|
|
||||||
handleCleanLogs() {
|
handleCleanLogs() {
|
||||||
return fs.write(log_path, '')
|
return fs.write(log_path, '')
|
||||||
.catch(e => { ui.addNotification(null, E('p', e.message)) });
|
.then(pollLog)
|
||||||
|
.catch(e => {
|
||||||
|
ui.addNotification(null, E('p', e.message));
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
const configuredLogPath = uci.get('openlist2', '@openlist2[0]', 'log_path');
|
||||||
|
log_path = isSafeLogPath(configuredLogPath) ? configuredLogPath : DEFAULT_LOG_PATH;
|
||||||
|
|
||||||
logTextarea = E('textarea', {
|
logTextarea = E('textarea', {
|
||||||
'id': 'log_content',
|
'id': 'log_content',
|
||||||
'class': 'cbi-input-textarea',
|
'class': 'cbi-input-textarea',
|
||||||
|
|||||||
@@ -1,384 +1,623 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:169
|
|
||||||
msgid ""
|
|
||||||
"0 is unlimited, It is recommend to set a low number of concurrency (10-20) "
|
|
||||||
"for poor performance device"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:175
|
|
||||||
msgid ""
|
|
||||||
"0 is unlimited, Limit the maximum concurrency of local agents. The default "
|
|
||||||
"value is 64"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:84
|
|
||||||
msgid "A file list program that supports multiple storage."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:327
|
|
||||||
msgid "Allow Headers"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:323
|
|
||||||
msgid "Allow Methods"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:319
|
|
||||||
msgid "Allow Origins"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:106
|
|
||||||
msgid "Basic Settings"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:157
|
|
||||||
msgid "CDN URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:112
|
|
||||||
msgid "CORS Settings"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:138
|
|
||||||
msgid "Cache directory"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:59
|
|
||||||
msgid "Clear logs"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:376
|
|
||||||
msgid "Client IP check in active transfer mode"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:379
|
|
||||||
msgid "Client IP check in passive transfer mode"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:360
|
|
||||||
msgid "Client idle timeout (seconds)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:100
|
|
||||||
msgid "Collecting data..."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:365
|
|
||||||
msgid "Connection timeout (seconds)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:313
|
|
||||||
msgid "Copy Max Retry"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:308
|
|
||||||
msgid "Copy Workers"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:135
|
|
||||||
msgid "Data directory"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:109
|
|
||||||
msgid "Database"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:255
|
|
||||||
msgid "Database DSN"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:224
|
|
||||||
msgid "Database Host"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:242
|
|
||||||
msgid "Database Name"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:238
|
|
||||||
msgid "Database Password"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:228
|
|
||||||
msgid "Database Port"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:251
|
|
||||||
msgid "Database SSL Mode"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:246
|
|
||||||
msgid "Database Table Prefix"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:218
|
|
||||||
msgid "Database Type"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:234
|
|
||||||
msgid "Database Username"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:127
|
|
||||||
msgid "Delayed Start (seconds)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:180
|
|
||||||
msgid "Disable TLS Verify"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:370
|
|
||||||
msgid "Disable active transfer mode"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:283
|
|
||||||
msgid "Download Max Retry"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:278
|
|
||||||
msgid "Download Workers"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:185
|
|
||||||
msgid "Enable Logs"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:260
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:340
|
|
||||||
msgid "Enable SSL"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Project-Id-Version: luci-app-openlist2\n"
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:373
|
"Report-Msgid-Bugs-To: \n"
|
||||||
msgid "Enable binary transfer mode"
|
"POT-Creation-Date: 2026-06-27 09:57+0800\n"
|
||||||
msgstr ""
|
"PO-Revision-Date: 2026-06-26 00:00+0800\n"
|
||||||
|
"Last-Translator: Automatically generated\n"
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:357
|
"Language-Team: none\n"
|
||||||
msgid "Enable non-20 port for active transfer"
|
"Language: en\n"
|
||||||
msgstr ""
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:118
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
msgid "Enabled"
|
|
||||||
msgstr ""
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:43
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:344
|
|
||||||
msgid "Enabled FTP"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:332
|
|
||||||
msgid "Enabled S3"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:383
|
|
||||||
msgid "Enabled SFTP"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:114
|
|
||||||
msgid "FTP"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:347
|
|
||||||
msgid "FTP Port"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:263
|
|
||||||
msgid "Force HTTPS"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:149
|
|
||||||
msgid "Force read config"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:143
|
|
||||||
msgid "Generate a new random password."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:107
|
|
||||||
msgid "Global Settings"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/root/usr/share/rpcd/acl.d/luci-app-openlist2.json:3
|
|
||||||
msgid "Grant UCI access for luci-app-openlist2"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:160
|
|
||||||
msgid "JWT Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:212
|
|
||||||
msgid "Log Compress"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:189
|
|
||||||
msgid "Log path"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:163
|
|
||||||
msgid "Login Validity Period (hours)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:108
|
|
||||||
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:21
|
|
||||||
msgid "Logs"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:168
|
|
||||||
msgid "Max Connections"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:194
|
|
||||||
msgid "Max Size (MB)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:206
|
|
||||||
msgid "Max age"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:200
|
|
||||||
msgid "Max backups"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:174
|
|
||||||
msgid "Max concurrency of local proxies"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:352
|
|
||||||
msgid "Max retries on port conflict during passive transfer"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:221
|
|
||||||
msgid "MySQL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:40
|
|
||||||
msgid "NOT RUNNING"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:65
|
|
||||||
msgid "New Password:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:65
|
|
||||||
msgid "New password has been copied to clipboard."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:23
|
|
||||||
msgid "No log data."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:113
|
|
||||||
msgid "Object Storage"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:37
|
|
||||||
msgid "Open Web Interface"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:132
|
|
||||||
msgid "Open firewall port"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:83
|
|
||||||
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:3
|
|
||||||
msgid "OpenList"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:122
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:335
|
|
||||||
msgid "Port"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:222
|
|
||||||
msgid "PostgreSQL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:38
|
|
||||||
msgid "RUNNING"
|
msgid "RUNNING"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:68
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:43
|
||||||
msgid "Refresh every %s seconds."
|
msgid "NOT RUNNING"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:142
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:51
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:144
|
msgid "Open Web Interface"
|
||||||
msgid "Reset Password"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:115
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:100
|
||||||
msgid "SFTP"
|
msgid "Port must be -1 or a valid port number from 1 to 65535."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:386
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:120
|
||||||
msgid "SFTP Port"
|
msgid "Site URL must start with http:// or https:// and must not end with /."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:132
|
||||||
msgid "SQLite"
|
msgid "CORS origins must be * or include http:// or https://."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:267
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:170
|
||||||
msgid "SSL cert"
|
msgid "Username:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:268
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:170
|
||||||
msgid "SSL certificate file path"
|
msgid "New Password:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:272
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:170
|
||||||
msgid "SSL key"
|
msgid "New password has been copied to clipboard."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:273
|
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:3
|
||||||
msgid "SSL key file path"
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:183
|
||||||
|
msgid "OpenList"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:184
|
||||||
|
msgid "A file list program that supports multiple storage."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:185
|
||||||
|
#, javascript-format
|
||||||
|
msgid ""
|
||||||
|
"Initial login username is \"%s\" and password is \"%s\". Change it "
|
||||||
|
"immediately after first login."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:201
|
||||||
|
msgid "Collecting data..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:207
|
||||||
|
msgid "Basic Settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:208
|
||||||
|
msgid "Global Settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:13
|
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:13
|
||||||
msgid "Setting"
|
msgid "Setting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:150
|
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:21
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:209
|
||||||
|
msgid "Logs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:210
|
||||||
|
msgid "Database"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:211
|
||||||
|
msgid "Search"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:212
|
||||||
|
msgid "Web Protocol"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:213
|
||||||
|
msgid "Task threads"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:214
|
||||||
|
msgid "CORS Settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:215
|
||||||
|
msgid "Object Storage"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:216
|
||||||
|
msgid "FTP"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:217
|
||||||
|
msgid "SFTP"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
|
||||||
|
msgid "Enabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:224
|
||||||
|
msgid "Debug logging"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:225
|
||||||
|
msgid "Pass --debug to OpenList and send stderr to procd logs."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:228
|
||||||
|
msgid "Delayed Start (seconds)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:233
|
||||||
|
msgid "Open firewall port"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:236
|
||||||
|
msgid "Data directory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:239
|
||||||
|
msgid "Cache directory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:243
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:245
|
||||||
|
msgid "Reset Password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:244
|
||||||
|
msgid "Generate a new random password."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:250
|
||||||
|
msgid "Force read config"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:251
|
||||||
msgid ""
|
msgid ""
|
||||||
"Setting this to true will force the program to read the configuration file, "
|
"Setting this to true will force the program to read the configuration file, "
|
||||||
"ignoring environment variables."
|
"ignoring environment variables."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:154
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:255
|
||||||
msgid "Site URL"
|
msgid "Site URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:111
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:256
|
||||||
msgid "Task threads"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:293
|
|
||||||
msgid "Transfer Max Retry"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:288
|
|
||||||
msgid "Transfer Workers"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:303
|
|
||||||
msgid "Upload Max Retry"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:298
|
|
||||||
msgid "Upload Workers"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:65
|
|
||||||
msgid "Username:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:110
|
|
||||||
msgid "Web Protocol"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:155
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"When the web is reverse proxied to a subdirectory, this option must be "
|
"When the web is reverse proxied to a subdirectory, this option must be "
|
||||||
"filled out to ensure proper functioning of the web. Do not include '/' at "
|
"filled out to ensure proper functioning of the web. Do not include '/' at "
|
||||||
"the end of the URL"
|
"the end of the URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:261
|
||||||
|
msgid "CDN URL"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:264
|
||||||
|
msgid "JWT Key"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:267
|
||||||
|
msgid "Login Validity Period (hours)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:272
|
||||||
|
msgid "Proxy address"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:273
|
||||||
|
msgid ""
|
||||||
|
"HTTP, HTTPS, SOCKS4, SOCKS5 or SOCKS5HOSTNAME proxy used by OpenList "
|
||||||
|
"outbound requests."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:276
|
||||||
|
msgid "Auto memory limit (MB)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:277
|
||||||
|
msgid "0 disables the automatic memory limit. The upstream default is 4 MB."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:282
|
||||||
|
msgid "Minimum free memory (MB)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:283
|
||||||
|
msgid ""
|
||||||
|
"Values below 16 let OpenList calculate a default; negative values disable "
|
||||||
|
"memory cache."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:288
|
||||||
|
msgid "Maximum block size (MB)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:289
|
||||||
|
msgid "Values below 4 let OpenList calculate a default."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:294
|
||||||
|
msgid "Max Connections"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:295
|
||||||
|
msgid ""
|
||||||
|
"0 is unlimited, It is recommend to set a low number of concurrency (10-20) "
|
||||||
|
"for poor performance device"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:300
|
||||||
|
msgid "Max concurrency of local proxies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:301
|
||||||
|
msgid ""
|
||||||
|
"0 is unlimited, Limit the maximum concurrency of local agents. The default "
|
||||||
|
"value is 64"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:306
|
||||||
|
msgid "Disable TLS Verify"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:307
|
||||||
|
msgid "Skip remote TLS certificate verification (not recommended)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:312
|
||||||
|
msgid "Enable Logs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:316
|
||||||
|
msgid "Log path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:324
|
||||||
|
msgid "Log path must be /var/log/openlist2* without subdirectories."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:327
|
||||||
|
msgid "Max Size (MB)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:333
|
||||||
|
msgid "Max backups"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:339
|
||||||
|
msgid "Max age"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:345
|
||||||
|
msgid "Log Compress"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:350
|
||||||
|
msgid "Enable common log filters"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:351
|
||||||
|
msgid ""
|
||||||
|
"Filter noisy access logs such as health checks, HEAD requests and WebDAV "
|
||||||
|
"PROPFIND."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:355
|
||||||
|
msgid "Custom log filter CIDR"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:358
|
||||||
|
msgid "Custom log filter path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:361
|
||||||
|
msgid "Custom log filter method"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:365
|
||||||
|
msgid "Database Type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:367
|
||||||
|
msgid "SQLite"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:368
|
||||||
|
msgid "MySQL"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:369
|
||||||
|
msgid "PostgreSQL"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:371
|
||||||
|
msgid "Database Host"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:375
|
||||||
|
msgid "Database Port"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:376
|
||||||
|
msgid ""
|
||||||
|
"Use 0 to apply the usual default for the selected database: 3306 for MySQL, "
|
||||||
|
"5432 for PostgreSQL."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:382
|
||||||
|
msgid "Database Username"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:386
|
||||||
|
msgid "Database Password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:390
|
||||||
|
msgid "Database Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:394
|
||||||
|
msgid "Database Table Prefix"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:399
|
||||||
|
msgid "Database SSL Mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:403
|
||||||
|
msgid "Database DSN"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:407
|
||||||
|
msgid "Meilisearch Host"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:411
|
||||||
|
msgid "Meilisearch API Key"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:414
|
||||||
|
msgid "Meilisearch Index"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:419
|
||||||
|
msgid "Listen address"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:424
|
||||||
|
msgid "HTTP listen port"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:425
|
||||||
|
msgid "The upstream default is 5244. Set to -1 to disable HTTP."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:434
|
||||||
|
msgid "HTTPS listen port"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:435
|
||||||
|
msgid ""
|
||||||
|
"The upstream default is -1 (disabled). Set a valid port number to enable "
|
||||||
|
"HTTPS."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:444
|
||||||
|
msgid "Force HTTPS"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:447
|
||||||
|
msgid "SSL cert"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:448
|
||||||
|
msgid "SSL certificate file path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:451
|
||||||
|
msgid "SSL certificate file path is required when HTTPS is enabled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:454
|
||||||
|
msgid "SSL key"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:455
|
||||||
|
msgid "SSL key file path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:458
|
||||||
|
msgid "SSL key file path is required when HTTPS is enabled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:461
|
||||||
|
msgid "Unix socket file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:463
|
||||||
|
msgid "Unix socket permission"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:465
|
||||||
|
msgid "Enable H2C"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:466
|
||||||
|
msgid "Enable cleartext HTTP/2 for reverse proxies that use grpc_pass."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:469
|
||||||
|
msgid "Enable HTTP/3/QUIC"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:470
|
||||||
|
msgid ""
|
||||||
|
"Enable HTTP/3 over QUIC on the HTTPS listen port. HTTPS must be enabled and "
|
||||||
|
"certificate files must be configured."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:474
|
||||||
|
msgid "Download Workers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:479
|
||||||
|
msgid "Download Max Retry"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:484
|
||||||
|
msgid "Download Task Persistence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:487
|
||||||
|
msgid "Transfer Workers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:492
|
||||||
|
msgid "Transfer Max Retry"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:497
|
||||||
|
msgid "Transfer Task Persistence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:500
|
||||||
|
msgid "Upload Workers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:505
|
||||||
|
msgid "Upload Max Retry"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:510
|
||||||
|
msgid "Upload Task Persistence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:513
|
||||||
|
msgid "Copy Workers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:518
|
||||||
|
msgid "Copy Max Retry"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:523
|
||||||
|
msgid "Copy Task Persistence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:526
|
||||||
|
msgid "Move Workers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:531
|
||||||
|
msgid "Move Max Retry"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:536
|
||||||
|
msgid "Move Task Persistence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:539
|
||||||
|
msgid "Decompress Workers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:544
|
||||||
|
msgid "Decompress Max Retry"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:549
|
||||||
|
msgid "Decompress Task Persistence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:552
|
||||||
|
msgid "Decompress Upload Workers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:557
|
||||||
|
msgid "Decompress Upload Max Retry"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:562
|
||||||
|
msgid "Decompress Upload Task Persistence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:565
|
||||||
|
msgid "Allow retry canceled tasks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:569
|
||||||
|
msgid "Allow Origins"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:570
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:578
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:583
|
||||||
|
msgid "Comma-separated list. Use * to allow any value."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:577
|
||||||
|
msgid "Allow Methods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:582
|
||||||
|
msgid "Allow Headers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:588
|
||||||
|
msgid "Enabled S3"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:591
|
||||||
|
msgid "Port"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:596
|
||||||
|
msgid "Enable SSL"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:600
|
||||||
|
msgid "Enabled FTP"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:603
|
||||||
|
msgid "FTP Port"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:608
|
||||||
|
msgid "Max retries on port conflict during passive transfer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:613
|
||||||
|
msgid "Enable non-20 port for active transfer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:616
|
||||||
|
msgid "Client idle timeout (seconds)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:621
|
||||||
|
msgid "Connection timeout (seconds)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:626
|
||||||
|
msgid "Disable active transfer mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:629
|
||||||
|
msgid "Enable binary transfer mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:632
|
||||||
|
msgid "Client IP check in active transfer mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:636
|
||||||
|
msgid "Client IP check in passive transfer mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:641
|
||||||
|
msgid "Enabled SFTP"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:644
|
||||||
|
msgid "SFTP Port"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:20
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:29
|
||||||
|
msgid "No log data."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:77
|
||||||
|
msgid "Clear logs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:86
|
||||||
|
#, javascript-format
|
||||||
|
msgid "Refresh every %s seconds."
|
||||||
|
msgstr ""
|
||||||
@@ -1,389 +1,174 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: luci-app-openlist2\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2026-06-27 09:57+0800\n"
|
||||||
|
"PO-Revision-Date: 2026-06-25 00:00+0800\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: Automatically generated\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: none\n"
|
||||||
"Language: zh_Hans\n"
|
"Language: zh_Hans\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:169
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:43
|
||||||
msgid ""
|
|
||||||
"0 is unlimited, It is recommend to set a low number of concurrency (10-20) "
|
|
||||||
"for poor performance device"
|
|
||||||
msgstr "默认 0 不限制,低性能设备建议设置较低的并发数(10-20)"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:175
|
|
||||||
msgid ""
|
|
||||||
"0 is unlimited, Limit the maximum concurrency of local agents. The default "
|
|
||||||
"value is 64"
|
|
||||||
msgstr "限制本地代理最大并发数,值为 0 表示不限制,默认值 64"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:84
|
|
||||||
msgid "A file list program that supports multiple storage."
|
|
||||||
msgstr "一款支持多种存储的目录文件列表程序。"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:327
|
|
||||||
msgid "Allow Headers"
|
|
||||||
msgstr "允许标头(Headers)"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:323
|
|
||||||
msgid "Allow Methods"
|
|
||||||
msgstr "允许方法(Methods)"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:319
|
|
||||||
msgid "Allow Origins"
|
|
||||||
msgstr "允许来源(Origins)"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:106
|
|
||||||
msgid "Basic Settings"
|
|
||||||
msgstr "基本设置"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:157
|
|
||||||
msgid "CDN URL"
|
|
||||||
msgstr "CDN 地址"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:112
|
|
||||||
msgid "CORS Settings"
|
|
||||||
msgstr "跨域设置"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:138
|
|
||||||
msgid "Cache directory"
|
|
||||||
msgstr "缓存目录"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:59
|
|
||||||
msgid "Clear logs"
|
|
||||||
msgstr "清空日志"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:376
|
|
||||||
msgid "Client IP check in active transfer mode"
|
|
||||||
msgstr "主动传输模式下对客户端进行 IP 检查"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:379
|
|
||||||
msgid "Client IP check in passive transfer mode"
|
|
||||||
msgstr "被动传输模式下对客户端进行 IP 检查"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:360
|
|
||||||
msgid "Client idle timeout (seconds)"
|
|
||||||
msgstr "客户端空闲超时(秒)"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:100
|
|
||||||
msgid "Collecting data..."
|
|
||||||
msgstr "收集数据..."
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:365
|
|
||||||
msgid "Connection timeout (seconds)"
|
|
||||||
msgstr "连接超时(秒)"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:313
|
|
||||||
msgid "Copy Max Retry"
|
|
||||||
msgstr "复制任务重试次数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:308
|
|
||||||
msgid "Copy Workers"
|
|
||||||
msgstr "复制任务线程数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:135
|
|
||||||
msgid "Data directory"
|
|
||||||
msgstr "数据目录"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:109
|
|
||||||
msgid "Database"
|
|
||||||
msgstr "数据库"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:255
|
|
||||||
msgid "Database DSN"
|
|
||||||
msgstr "DSN"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:224
|
|
||||||
msgid "Database Host"
|
|
||||||
msgstr "主机"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:242
|
|
||||||
msgid "Database Name"
|
|
||||||
msgstr "数据库名"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:238
|
|
||||||
msgid "Database Password"
|
|
||||||
msgstr "密码"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:228
|
|
||||||
msgid "Database Port"
|
|
||||||
msgstr "端口"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:251
|
|
||||||
msgid "Database SSL Mode"
|
|
||||||
msgstr "SSL模式"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:246
|
|
||||||
msgid "Database Table Prefix"
|
|
||||||
msgstr "数据库表前缀"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:218
|
|
||||||
msgid "Database Type"
|
|
||||||
msgstr "数据库类型"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:234
|
|
||||||
msgid "Database Username"
|
|
||||||
msgstr "用户名"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:127
|
|
||||||
msgid "Delayed Start (seconds)"
|
|
||||||
msgstr "开机延时启动(秒)"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:180
|
|
||||||
msgid "Disable TLS Verify"
|
|
||||||
msgstr "禁用 TLS 验证"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:370
|
|
||||||
msgid "Disable active transfer mode"
|
|
||||||
msgstr "禁用主动传输模式"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:283
|
|
||||||
msgid "Download Max Retry"
|
|
||||||
msgstr "下载任务重试次数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:278
|
|
||||||
msgid "Download Workers"
|
|
||||||
msgstr "下载任务线程数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:185
|
|
||||||
msgid "Enable Logs"
|
|
||||||
msgstr "启用日志"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:260
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:340
|
|
||||||
msgid "Enable SSL"
|
|
||||||
msgstr "启用 SSL"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:373
|
|
||||||
msgid "Enable binary transfer mode"
|
|
||||||
msgstr "启用二进制传输模式"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:357
|
|
||||||
msgid "Enable non-20 port for active transfer"
|
|
||||||
msgstr "启用非 20 端口进行主动传输"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:118
|
|
||||||
msgid "Enabled"
|
|
||||||
msgstr "启用"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:344
|
|
||||||
msgid "Enabled FTP"
|
|
||||||
msgstr "启用 FTP"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:332
|
|
||||||
msgid "Enabled S3"
|
|
||||||
msgstr "启用 S3"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:383
|
|
||||||
msgid "Enabled SFTP"
|
|
||||||
msgstr "启用 SFTP"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:114
|
|
||||||
msgid "FTP"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:347
|
|
||||||
msgid "FTP Port"
|
|
||||||
msgstr "FTP 端口"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:263
|
|
||||||
msgid "Force HTTPS"
|
|
||||||
msgstr "强制 HTTPS"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:149
|
|
||||||
msgid "Force read config"
|
|
||||||
msgstr "强制读取配置"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:143
|
|
||||||
msgid "Generate a new random password."
|
|
||||||
msgstr "随机生成一个新密码。"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:107
|
|
||||||
msgid "Global Settings"
|
|
||||||
msgstr "全局设置"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/root/usr/share/rpcd/acl.d/luci-app-openlist2.json:3
|
|
||||||
msgid "Grant UCI access for luci-app-openlist2"
|
|
||||||
msgstr "授予 luci-app-openlist2 的 UCI 访问权限"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:160
|
|
||||||
msgid "JWT Key"
|
|
||||||
msgstr "JWT 密钥"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:212
|
|
||||||
msgid "Log Compress"
|
|
||||||
msgstr "日志压缩"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:189
|
|
||||||
msgid "Log path"
|
|
||||||
msgstr "日志文件路径"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:163
|
|
||||||
msgid "Login Validity Period (hours)"
|
|
||||||
msgstr "登录有效期(小时)"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:108
|
|
||||||
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:21
|
|
||||||
msgid "Logs"
|
|
||||||
msgstr "日志"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:168
|
|
||||||
msgid "Max Connections"
|
|
||||||
msgstr "最大并发连接数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:194
|
|
||||||
msgid "Max Size (MB)"
|
|
||||||
msgstr "日志文件大小(MB)"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:206
|
|
||||||
msgid "Max age"
|
|
||||||
msgstr "日志保存天数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:200
|
|
||||||
msgid "Max backups"
|
|
||||||
msgstr "日志备份数量"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:174
|
|
||||||
msgid "Max concurrency of local proxies"
|
|
||||||
msgstr "本地代理最大并发数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:352
|
|
||||||
msgid "Max retries on port conflict during passive transfer"
|
|
||||||
msgstr "被动传输端口冲突时最大重试次数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:221
|
|
||||||
msgid "MySQL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:40
|
|
||||||
msgid "NOT RUNNING"
|
|
||||||
msgstr "未运行"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:65
|
|
||||||
msgid "New Password:"
|
|
||||||
msgstr "新密码:"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:65
|
|
||||||
msgid "New password has been copied to clipboard."
|
|
||||||
msgstr "新密码已复制到剪贴板。"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:23
|
|
||||||
msgid "No log data."
|
|
||||||
msgstr "无日志数据。"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:113
|
|
||||||
msgid "Object Storage"
|
|
||||||
msgstr "对象存储"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:37
|
|
||||||
msgid "Open Web Interface"
|
|
||||||
msgstr "打开 Web 界面"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:132
|
|
||||||
msgid "Open firewall port"
|
|
||||||
msgstr "打开防火墙端口"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:83
|
|
||||||
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:3
|
|
||||||
msgid "OpenList"
|
|
||||||
msgstr "OpenList"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:122
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:335
|
|
||||||
msgid "Port"
|
|
||||||
msgstr "端口"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:222
|
|
||||||
msgid "PostgreSQL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:38
|
|
||||||
msgid "RUNNING"
|
msgid "RUNNING"
|
||||||
msgstr "运行中"
|
msgstr "运行中"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:68
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:43
|
||||||
msgid "Refresh every %s seconds."
|
msgid "NOT RUNNING"
|
||||||
msgstr "每 %s 秒刷新。"
|
msgstr "未运行"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:142
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:51
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:144
|
msgid "Open Web Interface"
|
||||||
msgid "Reset Password"
|
msgstr "打开 Web 界面"
|
||||||
msgstr "重置密码"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:115
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:100
|
||||||
msgid "SFTP"
|
msgid "Port must be -1 or a valid port number from 1 to 65535."
|
||||||
msgstr ""
|
msgstr "端口必须为 -1,或 1 到 65535 之间的有效端口号。"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:386
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:120
|
||||||
msgid "SFTP Port"
|
msgid "Site URL must start with http:// or https:// and must not end with /."
|
||||||
msgstr "SFTP 端口"
|
msgstr "站点 URL 必须以 http:// 或 https:// 开头,且末尾不能带 /。"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:132
|
||||||
msgid "SQLite"
|
msgid "CORS origins must be * or include http:// or https://."
|
||||||
msgstr ""
|
msgstr "CORS 来源必须为 *,或包含 http:// / https://。"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:267
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:170
|
||||||
msgid "SSL cert"
|
msgid "Username:"
|
||||||
msgstr "SSL 证书"
|
msgstr "用户名:"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:268
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:170
|
||||||
msgid "SSL certificate file path"
|
msgid "New Password:"
|
||||||
msgstr "SSL 证书文件路径"
|
msgstr "新密码:"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:272
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:170
|
||||||
msgid "SSL key"
|
msgid "New password has been copied to clipboard."
|
||||||
msgstr "SSL 密钥"
|
msgstr "新密码已复制到剪贴板。"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:273
|
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:3
|
||||||
msgid "SSL key file path"
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:183
|
||||||
msgstr "SSL 密钥文件路径"
|
msgid "OpenList"
|
||||||
|
msgstr "OpenList"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:184
|
||||||
|
msgid "A file list program that supports multiple storage."
|
||||||
|
msgstr "一款支持多种存储的目录文件列表程序。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:185
|
||||||
|
#, javascript-format
|
||||||
|
msgid ""
|
||||||
|
"Initial login username is \"%s\" and password is \"%s\". Change it "
|
||||||
|
"immediately after first login."
|
||||||
|
msgstr "初始登录用户名为「%s」,密码为「%s」。首次登录后请立即修改。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:201
|
||||||
|
msgid "Collecting data..."
|
||||||
|
msgstr "收集数据..."
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:207
|
||||||
|
msgid "Basic Settings"
|
||||||
|
msgstr "基本设置"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:208
|
||||||
|
msgid "Global Settings"
|
||||||
|
msgstr "全局设置"
|
||||||
|
|
||||||
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:13
|
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:13
|
||||||
msgid "Setting"
|
msgid "Setting"
|
||||||
msgstr "设置"
|
msgstr "设置"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:150
|
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:21
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:209
|
||||||
|
msgid "Logs"
|
||||||
|
msgstr "日志"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:210
|
||||||
|
msgid "Database"
|
||||||
|
msgstr "数据库"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:211
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "搜索"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:212
|
||||||
|
msgid "Web Protocol"
|
||||||
|
msgstr "Web 协议"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:213
|
||||||
|
msgid "Task threads"
|
||||||
|
msgstr "任务线程"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:214
|
||||||
|
msgid "CORS Settings"
|
||||||
|
msgstr "跨域设置"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:215
|
||||||
|
msgid "Object Storage"
|
||||||
|
msgstr "对象存储"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:216
|
||||||
|
msgid "FTP"
|
||||||
|
msgstr "FTP"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:217
|
||||||
|
msgid "SFTP"
|
||||||
|
msgstr "SFTP"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
|
||||||
|
msgid "Enabled"
|
||||||
|
msgstr "启用"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:224
|
||||||
|
msgid "Debug logging"
|
||||||
|
msgstr "调试日志"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:225
|
||||||
|
msgid "Pass --debug to OpenList and send stderr to procd logs."
|
||||||
|
msgstr "向 OpenList 传递 --debug,并将 stderr 发送到 procd 日志。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:228
|
||||||
|
msgid "Delayed Start (seconds)"
|
||||||
|
msgstr "开机延时启动(秒)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:233
|
||||||
|
msgid "Open firewall port"
|
||||||
|
msgstr "打开防火墙端口"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:236
|
||||||
|
msgid "Data directory"
|
||||||
|
msgstr "数据目录"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:239
|
||||||
|
msgid "Cache directory"
|
||||||
|
msgstr "缓存目录"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:243
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:245
|
||||||
|
msgid "Reset Password"
|
||||||
|
msgstr "重置密码"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:244
|
||||||
|
msgid "Generate a new random password."
|
||||||
|
msgstr "随机生成一个新密码。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:250
|
||||||
|
msgid "Force read config"
|
||||||
|
msgstr "强制读取配置"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:251
|
||||||
msgid ""
|
msgid ""
|
||||||
"Setting this to true will force the program to read the configuration file, "
|
"Setting this to true will force the program to read the configuration file, "
|
||||||
"ignoring environment variables."
|
"ignoring environment variables."
|
||||||
msgstr "将此设置为 true 可以强制程序读取配置文件,而忽略环境变量"
|
msgstr "将此设置为 true 可以强制程序读取配置文件,而忽略环境变量"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:154
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:255
|
||||||
msgid "Site URL"
|
msgid "Site URL"
|
||||||
msgstr "站点地址"
|
msgstr "站点地址"
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:111
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:256
|
||||||
msgid "Task threads"
|
|
||||||
msgstr "任务线程"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:293
|
|
||||||
msgid "Transfer Max Retry"
|
|
||||||
msgstr "中转任务下载重试次数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:288
|
|
||||||
msgid "Transfer Workers"
|
|
||||||
msgstr "中转任务线程数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:303
|
|
||||||
msgid "Upload Max Retry"
|
|
||||||
msgstr "上传任务重试次数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:298
|
|
||||||
msgid "Upload Workers"
|
|
||||||
msgstr "上传任务线程数"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:65
|
|
||||||
msgid "Username:"
|
|
||||||
msgstr "用户名:"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:110
|
|
||||||
msgid "Web Protocol"
|
|
||||||
msgstr "Web 协议"
|
|
||||||
|
|
||||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:155
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"When the web is reverse proxied to a subdirectory, this option must be "
|
"When the web is reverse proxied to a subdirectory, this option must be "
|
||||||
"filled out to ensure proper functioning of the web. Do not include '/' at "
|
"filled out to ensure proper functioning of the web. Do not include '/' at "
|
||||||
@@ -391,3 +176,457 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Web 被反向代理到二级目录时,必须填写该选项以确保 Web 正常工作。URL 结尾请勿携"
|
"Web 被反向代理到二级目录时,必须填写该选项以确保 Web 正常工作。URL 结尾请勿携"
|
||||||
"带 '/'"
|
"带 '/'"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:261
|
||||||
|
msgid "CDN URL"
|
||||||
|
msgstr "CDN 地址"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:264
|
||||||
|
msgid "JWT Key"
|
||||||
|
msgstr "JWT 密钥"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:267
|
||||||
|
msgid "Login Validity Period (hours)"
|
||||||
|
msgstr "登录有效期(小时)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:272
|
||||||
|
msgid "Proxy address"
|
||||||
|
msgstr "代理地址"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:273
|
||||||
|
msgid ""
|
||||||
|
"HTTP, HTTPS, SOCKS4, SOCKS5 or SOCKS5HOSTNAME proxy used by OpenList "
|
||||||
|
"outbound requests."
|
||||||
|
msgstr ""
|
||||||
|
"OpenList 出站请求使用的 HTTP、HTTPS、SOCKS4、SOCKS5 或 SOCKS5HOSTNAME 代理。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:276
|
||||||
|
msgid "Auto memory limit (MB)"
|
||||||
|
msgstr "自动内存限制(MB)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:277
|
||||||
|
msgid "0 disables the automatic memory limit. The upstream default is 4 MB."
|
||||||
|
msgstr "0 表示禁用自动内存限制。上游默认值为 4 MB。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:282
|
||||||
|
msgid "Minimum free memory (MB)"
|
||||||
|
msgstr "最小可用内存(MB)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:283
|
||||||
|
msgid ""
|
||||||
|
"Values below 16 let OpenList calculate a default; negative values disable "
|
||||||
|
"memory cache."
|
||||||
|
msgstr "低于 16 时由 OpenList 自动计算默认值;负数表示禁用内存缓存。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:288
|
||||||
|
msgid "Maximum block size (MB)"
|
||||||
|
msgstr "最大块大小(MB)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:289
|
||||||
|
msgid "Values below 4 let OpenList calculate a default."
|
||||||
|
msgstr "低于 4 时由 OpenList 自动计算默认值。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:294
|
||||||
|
msgid "Max Connections"
|
||||||
|
msgstr "最大并发连接数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:295
|
||||||
|
msgid ""
|
||||||
|
"0 is unlimited, It is recommend to set a low number of concurrency (10-20) "
|
||||||
|
"for poor performance device"
|
||||||
|
msgstr "默认 0 不限制,低性能设备建议设置较低的并发数(10-20)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:300
|
||||||
|
msgid "Max concurrency of local proxies"
|
||||||
|
msgstr "本地代理最大并发数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:301
|
||||||
|
msgid ""
|
||||||
|
"0 is unlimited, Limit the maximum concurrency of local agents. The default "
|
||||||
|
"value is 64"
|
||||||
|
msgstr "限制本地代理最大并发数,值为 0 表示不限制,默认值 64"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:306
|
||||||
|
msgid "Disable TLS Verify"
|
||||||
|
msgstr "禁用 TLS 验证"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:307
|
||||||
|
msgid "Skip remote TLS certificate verification (not recommended)."
|
||||||
|
msgstr "跳过远程 TLS 证书校验(不推荐)。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:312
|
||||||
|
msgid "Enable Logs"
|
||||||
|
msgstr "启用日志"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:316
|
||||||
|
msgid "Log path"
|
||||||
|
msgstr "日志文件路径"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:324
|
||||||
|
msgid "Log path must be /var/log/openlist2* without subdirectories."
|
||||||
|
msgstr "日志路径必须为 /var/log/openlist2*,且不得包含子目录。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:327
|
||||||
|
msgid "Max Size (MB)"
|
||||||
|
msgstr "日志文件大小(MB)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:333
|
||||||
|
msgid "Max backups"
|
||||||
|
msgstr "日志备份数量"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:339
|
||||||
|
msgid "Max age"
|
||||||
|
msgstr "日志保存天数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:345
|
||||||
|
msgid "Log Compress"
|
||||||
|
msgstr "日志压缩"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:350
|
||||||
|
msgid "Enable common log filters"
|
||||||
|
msgstr "启用常用日志过滤"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:351
|
||||||
|
msgid ""
|
||||||
|
"Filter noisy access logs such as health checks, HEAD requests and WebDAV "
|
||||||
|
"PROPFIND."
|
||||||
|
msgstr "过滤健康检查、HEAD 请求和 WebDAV PROPFIND 等噪声访问日志。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:355
|
||||||
|
msgid "Custom log filter CIDR"
|
||||||
|
msgstr "自定义日志过滤 CIDR"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:358
|
||||||
|
msgid "Custom log filter path"
|
||||||
|
msgstr "自定义日志过滤路径"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:361
|
||||||
|
msgid "Custom log filter method"
|
||||||
|
msgstr "自定义日志过滤方法"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:365
|
||||||
|
msgid "Database Type"
|
||||||
|
msgstr "数据库类型"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:367
|
||||||
|
msgid "SQLite"
|
||||||
|
msgstr "SQLite"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:368
|
||||||
|
msgid "MySQL"
|
||||||
|
msgstr "MySQL"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:369
|
||||||
|
msgid "PostgreSQL"
|
||||||
|
msgstr "PostgreSQL"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:371
|
||||||
|
msgid "Database Host"
|
||||||
|
msgstr "主机"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:375
|
||||||
|
msgid "Database Port"
|
||||||
|
msgstr "端口"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:376
|
||||||
|
msgid ""
|
||||||
|
"Use 0 to apply the usual default for the selected database: 3306 for MySQL, "
|
||||||
|
"5432 for PostgreSQL."
|
||||||
|
msgstr ""
|
||||||
|
"使用 0 时会按所选数据库使用常见默认端口:MySQL 为 3306,PostgreSQL 为 5432。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:382
|
||||||
|
msgid "Database Username"
|
||||||
|
msgstr "用户名"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:386
|
||||||
|
msgid "Database Password"
|
||||||
|
msgstr "密码"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:390
|
||||||
|
msgid "Database Name"
|
||||||
|
msgstr "数据库名"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:394
|
||||||
|
msgid "Database Table Prefix"
|
||||||
|
msgstr "数据库表前缀"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:399
|
||||||
|
msgid "Database SSL Mode"
|
||||||
|
msgstr "SSL模式"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:403
|
||||||
|
msgid "Database DSN"
|
||||||
|
msgstr "DSN"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:407
|
||||||
|
msgid "Meilisearch Host"
|
||||||
|
msgstr "Meilisearch 主机"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:411
|
||||||
|
msgid "Meilisearch API Key"
|
||||||
|
msgstr "Meilisearch API 密钥"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:414
|
||||||
|
msgid "Meilisearch Index"
|
||||||
|
msgstr "Meilisearch 索引"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:419
|
||||||
|
msgid "Listen address"
|
||||||
|
msgstr "监听地址"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:424
|
||||||
|
msgid "HTTP listen port"
|
||||||
|
msgstr "HTTP 监听端口"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:425
|
||||||
|
msgid "The upstream default is 5244. Set to -1 to disable HTTP."
|
||||||
|
msgstr "上游默认值为 5244。设为 -1 可禁用 HTTP。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:434
|
||||||
|
msgid "HTTPS listen port"
|
||||||
|
msgstr "HTTPS 监听端口"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:435
|
||||||
|
msgid ""
|
||||||
|
"The upstream default is -1 (disabled). Set a valid port number to enable "
|
||||||
|
"HTTPS."
|
||||||
|
msgstr "上游默认值为 -1(禁用)。设为有效端口号可启用 HTTPS。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:444
|
||||||
|
msgid "Force HTTPS"
|
||||||
|
msgstr "强制 HTTPS"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:447
|
||||||
|
msgid "SSL cert"
|
||||||
|
msgstr "SSL 证书"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:448
|
||||||
|
msgid "SSL certificate file path"
|
||||||
|
msgstr "SSL 证书文件路径"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:451
|
||||||
|
msgid "SSL certificate file path is required when HTTPS is enabled."
|
||||||
|
msgstr "启用 HTTPS 时必须填写 SSL 证书文件路径。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:454
|
||||||
|
msgid "SSL key"
|
||||||
|
msgstr "SSL 密钥"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:455
|
||||||
|
msgid "SSL key file path"
|
||||||
|
msgstr "SSL 密钥文件路径"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:458
|
||||||
|
msgid "SSL key file path is required when HTTPS is enabled."
|
||||||
|
msgstr "启用 HTTPS 时必须填写 SSL 密钥文件路径。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:461
|
||||||
|
msgid "Unix socket file"
|
||||||
|
msgstr "Unix Socket 文件"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:463
|
||||||
|
msgid "Unix socket permission"
|
||||||
|
msgstr "Unix Socket 权限"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:465
|
||||||
|
msgid "Enable H2C"
|
||||||
|
msgstr "启用 H2C"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:466
|
||||||
|
msgid "Enable cleartext HTTP/2 for reverse proxies that use grpc_pass."
|
||||||
|
msgstr "为使用 grpc_pass 的反向代理启用明文 HTTP/2。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:469
|
||||||
|
msgid "Enable HTTP/3/QUIC"
|
||||||
|
msgstr "启用 HTTP/3/QUIC"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:470
|
||||||
|
msgid ""
|
||||||
|
"Enable HTTP/3 over QUIC on the HTTPS listen port. HTTPS must be enabled and "
|
||||||
|
"certificate files must be configured."
|
||||||
|
msgstr ""
|
||||||
|
"在 HTTPS 监听端口上启用基于 QUIC 的 HTTP/3。必须先启用 HTTPS 并配置证书文件。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:474
|
||||||
|
msgid "Download Workers"
|
||||||
|
msgstr "下载任务线程数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:479
|
||||||
|
msgid "Download Max Retry"
|
||||||
|
msgstr "下载任务重试次数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:484
|
||||||
|
msgid "Download Task Persistence"
|
||||||
|
msgstr "下载任务持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:487
|
||||||
|
msgid "Transfer Workers"
|
||||||
|
msgstr "中转任务线程数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:492
|
||||||
|
msgid "Transfer Max Retry"
|
||||||
|
msgstr "中转任务下载重试次数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:497
|
||||||
|
msgid "Transfer Task Persistence"
|
||||||
|
msgstr "中转任务持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:500
|
||||||
|
msgid "Upload Workers"
|
||||||
|
msgstr "上传任务线程数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:505
|
||||||
|
msgid "Upload Max Retry"
|
||||||
|
msgstr "上传任务重试次数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:510
|
||||||
|
msgid "Upload Task Persistence"
|
||||||
|
msgstr "上传任务持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:513
|
||||||
|
msgid "Copy Workers"
|
||||||
|
msgstr "复制任务线程数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:518
|
||||||
|
msgid "Copy Max Retry"
|
||||||
|
msgstr "复制任务重试次数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:523
|
||||||
|
msgid "Copy Task Persistence"
|
||||||
|
msgstr "复制任务持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:526
|
||||||
|
msgid "Move Workers"
|
||||||
|
msgstr "移动任务线程数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:531
|
||||||
|
msgid "Move Max Retry"
|
||||||
|
msgstr "移动任务重试次数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:536
|
||||||
|
msgid "Move Task Persistence"
|
||||||
|
msgstr "移动任务持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:539
|
||||||
|
msgid "Decompress Workers"
|
||||||
|
msgstr "解压任务线程数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:544
|
||||||
|
msgid "Decompress Max Retry"
|
||||||
|
msgstr "解压任务重试次数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:549
|
||||||
|
msgid "Decompress Task Persistence"
|
||||||
|
msgstr "解压任务持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:552
|
||||||
|
msgid "Decompress Upload Workers"
|
||||||
|
msgstr "解压上传任务线程数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:557
|
||||||
|
msgid "Decompress Upload Max Retry"
|
||||||
|
msgstr "解压上传任务重试次数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:562
|
||||||
|
msgid "Decompress Upload Task Persistence"
|
||||||
|
msgstr "解压上传任务持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:565
|
||||||
|
msgid "Allow retry canceled tasks"
|
||||||
|
msgstr "允许重试已取消的任务"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:569
|
||||||
|
msgid "Allow Origins"
|
||||||
|
msgstr "允许来源(Origins)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:570
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:578
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:583
|
||||||
|
msgid "Comma-separated list. Use * to allow any value."
|
||||||
|
msgstr "使用英文逗号分隔。使用 * 表示允许任意值。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:577
|
||||||
|
msgid "Allow Methods"
|
||||||
|
msgstr "允许方法(Methods)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:582
|
||||||
|
msgid "Allow Headers"
|
||||||
|
msgstr "允许标头(Headers)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:588
|
||||||
|
msgid "Enabled S3"
|
||||||
|
msgstr "启用 S3"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:591
|
||||||
|
msgid "Port"
|
||||||
|
msgstr "端口"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:596
|
||||||
|
msgid "Enable SSL"
|
||||||
|
msgstr "启用 SSL"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:600
|
||||||
|
msgid "Enabled FTP"
|
||||||
|
msgstr "启用 FTP"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:603
|
||||||
|
msgid "FTP Port"
|
||||||
|
msgstr "FTP 端口"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:608
|
||||||
|
msgid "Max retries on port conflict during passive transfer"
|
||||||
|
msgstr "被动传输端口冲突时最大重试次数"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:613
|
||||||
|
msgid "Enable non-20 port for active transfer"
|
||||||
|
msgstr "启用非 20 端口进行主动传输"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:616
|
||||||
|
msgid "Client idle timeout (seconds)"
|
||||||
|
msgstr "客户端空闲超时(秒)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:621
|
||||||
|
msgid "Connection timeout (seconds)"
|
||||||
|
msgstr "连接超时(秒)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:626
|
||||||
|
msgid "Disable active transfer mode"
|
||||||
|
msgstr "禁用主动传输模式"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:629
|
||||||
|
msgid "Enable binary transfer mode"
|
||||||
|
msgstr "启用二进制传输模式"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:632
|
||||||
|
msgid "Client IP check in active transfer mode"
|
||||||
|
msgstr "主动传输模式下对客户端进行 IP 检查"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:636
|
||||||
|
msgid "Client IP check in passive transfer mode"
|
||||||
|
msgstr "被动传输模式下对客户端进行 IP 检查"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:641
|
||||||
|
msgid "Enabled SFTP"
|
||||||
|
msgstr "启用 SFTP"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:644
|
||||||
|
msgid "SFTP Port"
|
||||||
|
msgstr "SFTP 端口"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:20
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:29
|
||||||
|
msgid "No log data."
|
||||||
|
msgstr "无日志数据。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:77
|
||||||
|
msgid "Clear logs"
|
||||||
|
msgstr "清空日志"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:86
|
||||||
|
#, javascript-format
|
||||||
|
msgid "Refresh every %s seconds."
|
||||||
|
msgstr "每 %s 秒刷新。"
|
||||||
|
|
||||||
|
#~ msgid "Grant UCI access for luci-app-openlist2"
|
||||||
|
#~ msgstr "授予 luci-app-openlist2 的 UCI 访问权限"
|
||||||
@@ -0,0 +1,634 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: luci-app-openlist2\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2026-06-27 09:57+0800\n"
|
||||||
|
"PO-Revision-Date: 2026-06-25 00:00+0800\n"
|
||||||
|
"Last-Translator: Automatically generated\n"
|
||||||
|
"Language-Team: none\n"
|
||||||
|
"Language: zh_Hant\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:43
|
||||||
|
msgid "RUNNING"
|
||||||
|
msgstr "執行中"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:43
|
||||||
|
msgid "NOT RUNNING"
|
||||||
|
msgstr "未執行"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:51
|
||||||
|
msgid "Open Web Interface"
|
||||||
|
msgstr "開啟 Web 介面"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:100
|
||||||
|
msgid "Port must be -1 or a valid port number from 1 to 65535."
|
||||||
|
msgstr "埠必須為 -1,或 1 到 65535 之間的有效埠號。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:120
|
||||||
|
msgid "Site URL must start with http:// or https:// and must not end with /."
|
||||||
|
msgstr "站點 URL 必須以 http:// 或 https:// 開頭,且末尾不能帶 /。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:132
|
||||||
|
msgid "CORS origins must be * or include http:// or https://."
|
||||||
|
msgstr "CORS 來源必須為 *,或包含 http:// / https://。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:170
|
||||||
|
msgid "Username:"
|
||||||
|
msgstr "使用者名稱:"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:170
|
||||||
|
msgid "New Password:"
|
||||||
|
msgstr "新密碼:"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:170
|
||||||
|
msgid "New password has been copied to clipboard."
|
||||||
|
msgstr "新密碼已複製到剪貼簿。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:3
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:183
|
||||||
|
msgid "OpenList"
|
||||||
|
msgstr "OpenList"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:184
|
||||||
|
msgid "A file list program that supports multiple storage."
|
||||||
|
msgstr "一款支援多種儲存的目錄檔案列表程式。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:185
|
||||||
|
#, javascript-format
|
||||||
|
msgid ""
|
||||||
|
"Initial login username is \"%s\" and password is \"%s\". Change it "
|
||||||
|
"immediately after first login."
|
||||||
|
msgstr "初始登入使用者名稱為「%s」,密碼為「%s」。首次登入後請立即修改。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:201
|
||||||
|
msgid "Collecting data..."
|
||||||
|
msgstr "收集資料..."
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:207
|
||||||
|
msgid "Basic Settings"
|
||||||
|
msgstr "基本設定"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:208
|
||||||
|
msgid "Global Settings"
|
||||||
|
msgstr "全域性設定"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:13
|
||||||
|
msgid "Setting"
|
||||||
|
msgstr "設定"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:21
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:209
|
||||||
|
msgid "Logs"
|
||||||
|
msgstr "日誌"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:210
|
||||||
|
msgid "Database"
|
||||||
|
msgstr "資料庫"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:211
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "搜尋"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:212
|
||||||
|
msgid "Web Protocol"
|
||||||
|
msgstr "Web 協議"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:213
|
||||||
|
msgid "Task threads"
|
||||||
|
msgstr "任務執行緒"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:214
|
||||||
|
msgid "CORS Settings"
|
||||||
|
msgstr "跨域設定"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:215
|
||||||
|
msgid "Object Storage"
|
||||||
|
msgstr "物件儲存"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:216
|
||||||
|
msgid "FTP"
|
||||||
|
msgstr "FTP"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:217
|
||||||
|
msgid "SFTP"
|
||||||
|
msgstr "SFTP"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
|
||||||
|
msgid "Enabled"
|
||||||
|
msgstr "啟用"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:224
|
||||||
|
msgid "Debug logging"
|
||||||
|
msgstr "偵錯日誌"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:225
|
||||||
|
msgid "Pass --debug to OpenList and send stderr to procd logs."
|
||||||
|
msgstr "向 OpenList 傳遞 --debug,並將 stderr 傳送到 procd 日誌。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:228
|
||||||
|
msgid "Delayed Start (seconds)"
|
||||||
|
msgstr "開機延時啟動(秒)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:233
|
||||||
|
msgid "Open firewall port"
|
||||||
|
msgstr "開啟防火牆埠"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:236
|
||||||
|
msgid "Data directory"
|
||||||
|
msgstr "資料目錄"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:239
|
||||||
|
msgid "Cache directory"
|
||||||
|
msgstr "快取目錄"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:243
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:245
|
||||||
|
msgid "Reset Password"
|
||||||
|
msgstr "重置密碼"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:244
|
||||||
|
msgid "Generate a new random password."
|
||||||
|
msgstr "隨機生成一個新密碼。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:250
|
||||||
|
msgid "Force read config"
|
||||||
|
msgstr "強制讀取配置"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:251
|
||||||
|
msgid ""
|
||||||
|
"Setting this to true will force the program to read the configuration file, "
|
||||||
|
"ignoring environment variables."
|
||||||
|
msgstr "將此設定為 true 可以強制程式讀取配置檔案,而忽略環境變數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:255
|
||||||
|
msgid "Site URL"
|
||||||
|
msgstr "站點地址"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:256
|
||||||
|
msgid ""
|
||||||
|
"When the web is reverse proxied to a subdirectory, this option must be "
|
||||||
|
"filled out to ensure proper functioning of the web. Do not include '/' at "
|
||||||
|
"the end of the URL"
|
||||||
|
msgstr ""
|
||||||
|
"Web 被反向代理到二級目錄時,必須填寫該選項以確保 Web 正常工作。URL 結尾請勿攜"
|
||||||
|
"帶 '/'"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:261
|
||||||
|
msgid "CDN URL"
|
||||||
|
msgstr "CDN 地址"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:264
|
||||||
|
msgid "JWT Key"
|
||||||
|
msgstr "JWT 金鑰"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:267
|
||||||
|
msgid "Login Validity Period (hours)"
|
||||||
|
msgstr "登入有效期(小時)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:272
|
||||||
|
msgid "Proxy address"
|
||||||
|
msgstr "代理地址"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:273
|
||||||
|
msgid ""
|
||||||
|
"HTTP, HTTPS, SOCKS4, SOCKS5 or SOCKS5HOSTNAME proxy used by OpenList "
|
||||||
|
"outbound requests."
|
||||||
|
msgstr ""
|
||||||
|
"OpenList 出站請求使用的 HTTP、HTTPS、SOCKS4、SOCKS5 或 SOCKS5HOSTNAME 代理。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:276
|
||||||
|
msgid "Auto memory limit (MB)"
|
||||||
|
msgstr "自動記憶體限制(MB)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:277
|
||||||
|
msgid "0 disables the automatic memory limit. The upstream default is 4 MB."
|
||||||
|
msgstr "0 表示停用自動記憶體限制。上游預設值為 4 MB。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:282
|
||||||
|
msgid "Minimum free memory (MB)"
|
||||||
|
msgstr "最小可用記憶體(MB)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:283
|
||||||
|
msgid ""
|
||||||
|
"Values below 16 let OpenList calculate a default; negative values disable "
|
||||||
|
"memory cache."
|
||||||
|
msgstr "低於 16 時由 OpenList 自動計算預設值;負數表示停用記憶體快取。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:288
|
||||||
|
msgid "Maximum block size (MB)"
|
||||||
|
msgstr "最大區塊大小(MB)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:289
|
||||||
|
msgid "Values below 4 let OpenList calculate a default."
|
||||||
|
msgstr "低於 4 時由 OpenList 自動計算預設值。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:294
|
||||||
|
msgid "Max Connections"
|
||||||
|
msgstr "最大併發連線數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:295
|
||||||
|
msgid ""
|
||||||
|
"0 is unlimited, It is recommend to set a low number of concurrency (10-20) "
|
||||||
|
"for poor performance device"
|
||||||
|
msgstr "預設 0 不限制,低效能裝置建議設定較低的併發數(10-20)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:300
|
||||||
|
msgid "Max concurrency of local proxies"
|
||||||
|
msgstr "本地代理最大併發數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:301
|
||||||
|
msgid ""
|
||||||
|
"0 is unlimited, Limit the maximum concurrency of local agents. The default "
|
||||||
|
"value is 64"
|
||||||
|
msgstr "限制本地代理最大併發數,值為 0 表示不限制,預設值 64"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:306
|
||||||
|
msgid "Disable TLS Verify"
|
||||||
|
msgstr "停用 TLS 驗證"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:307
|
||||||
|
msgid "Skip remote TLS certificate verification (not recommended)."
|
||||||
|
msgstr "跳過遠端 TLS 憑證驗證(不建議)。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:312
|
||||||
|
msgid "Enable Logs"
|
||||||
|
msgstr "啟用日誌"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:316
|
||||||
|
msgid "Log path"
|
||||||
|
msgstr "日誌檔案路徑"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:324
|
||||||
|
msgid "Log path must be /var/log/openlist2* without subdirectories."
|
||||||
|
msgstr "日誌路徑必須為 /var/log/openlist2*,且不得包含子目錄。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:327
|
||||||
|
msgid "Max Size (MB)"
|
||||||
|
msgstr "日誌檔案大小(MB)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:333
|
||||||
|
msgid "Max backups"
|
||||||
|
msgstr "日誌備份數量"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:339
|
||||||
|
msgid "Max age"
|
||||||
|
msgstr "日誌儲存天數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:345
|
||||||
|
msgid "Log Compress"
|
||||||
|
msgstr "日誌壓縮"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:350
|
||||||
|
msgid "Enable common log filters"
|
||||||
|
msgstr "啟用常用日誌過濾"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:351
|
||||||
|
msgid ""
|
||||||
|
"Filter noisy access logs such as health checks, HEAD requests and WebDAV "
|
||||||
|
"PROPFIND."
|
||||||
|
msgstr "過濾健康檢查、HEAD 請求和 WebDAV PROPFIND 等噪聲存取日誌。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:355
|
||||||
|
msgid "Custom log filter CIDR"
|
||||||
|
msgstr "自訂日誌過濾 CIDR"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:358
|
||||||
|
msgid "Custom log filter path"
|
||||||
|
msgstr "自訂日誌過濾路徑"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:361
|
||||||
|
msgid "Custom log filter method"
|
||||||
|
msgstr "自訂日誌過濾方法"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:365
|
||||||
|
msgid "Database Type"
|
||||||
|
msgstr "資料庫型別"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:367
|
||||||
|
msgid "SQLite"
|
||||||
|
msgstr "SQLite"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:368
|
||||||
|
msgid "MySQL"
|
||||||
|
msgstr "MySQL"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:369
|
||||||
|
msgid "PostgreSQL"
|
||||||
|
msgstr "PostgreSQL"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:371
|
||||||
|
msgid "Database Host"
|
||||||
|
msgstr "主機"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:375
|
||||||
|
msgid "Database Port"
|
||||||
|
msgstr "埠"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:376
|
||||||
|
msgid ""
|
||||||
|
"Use 0 to apply the usual default for the selected database: 3306 for MySQL, "
|
||||||
|
"5432 for PostgreSQL."
|
||||||
|
msgstr ""
|
||||||
|
"使用 0 時會依所選資料庫使用常見預設連接埠:MySQL 為 3306,PostgreSQL 為 "
|
||||||
|
"5432。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:382
|
||||||
|
msgid "Database Username"
|
||||||
|
msgstr "使用者名稱"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:386
|
||||||
|
msgid "Database Password"
|
||||||
|
msgstr "密碼"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:390
|
||||||
|
msgid "Database Name"
|
||||||
|
msgstr "資料庫名"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:394
|
||||||
|
msgid "Database Table Prefix"
|
||||||
|
msgstr "資料庫表字首"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:399
|
||||||
|
msgid "Database SSL Mode"
|
||||||
|
msgstr "SSL模式"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:403
|
||||||
|
msgid "Database DSN"
|
||||||
|
msgstr "DSN"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:407
|
||||||
|
msgid "Meilisearch Host"
|
||||||
|
msgstr "Meilisearch 主機"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:411
|
||||||
|
msgid "Meilisearch API Key"
|
||||||
|
msgstr "Meilisearch API 金鑰"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:414
|
||||||
|
msgid "Meilisearch Index"
|
||||||
|
msgstr "Meilisearch 索引"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:419
|
||||||
|
msgid "Listen address"
|
||||||
|
msgstr "監聽地址"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:424
|
||||||
|
msgid "HTTP listen port"
|
||||||
|
msgstr "HTTP 監聽埠"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:425
|
||||||
|
msgid "The upstream default is 5244. Set to -1 to disable HTTP."
|
||||||
|
msgstr "上游預設值為 5244。設為 -1 可停用 HTTP。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:434
|
||||||
|
msgid "HTTPS listen port"
|
||||||
|
msgstr "HTTPS 監聽埠"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:435
|
||||||
|
msgid ""
|
||||||
|
"The upstream default is -1 (disabled). Set a valid port number to enable "
|
||||||
|
"HTTPS."
|
||||||
|
msgstr "上游預設值為 -1(停用)。設為有效埠號可啟用 HTTPS。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:444
|
||||||
|
msgid "Force HTTPS"
|
||||||
|
msgstr "強制 HTTPS"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:447
|
||||||
|
msgid "SSL cert"
|
||||||
|
msgstr "SSL 證書"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:448
|
||||||
|
msgid "SSL certificate file path"
|
||||||
|
msgstr "SSL 證書檔案路徑"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:451
|
||||||
|
msgid "SSL certificate file path is required when HTTPS is enabled."
|
||||||
|
msgstr "啟用 HTTPS 時必須填寫 SSL 證書檔案路徑。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:454
|
||||||
|
msgid "SSL key"
|
||||||
|
msgstr "SSL 金鑰"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:455
|
||||||
|
msgid "SSL key file path"
|
||||||
|
msgstr "SSL 金鑰檔案路徑"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:458
|
||||||
|
msgid "SSL key file path is required when HTTPS is enabled."
|
||||||
|
msgstr "啟用 HTTPS 時必須填寫 SSL 金鑰檔案路徑。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:461
|
||||||
|
msgid "Unix socket file"
|
||||||
|
msgstr "Unix Socket 檔案"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:463
|
||||||
|
msgid "Unix socket permission"
|
||||||
|
msgstr "Unix Socket 權限"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:465
|
||||||
|
msgid "Enable H2C"
|
||||||
|
msgstr "啟用 H2C"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:466
|
||||||
|
msgid "Enable cleartext HTTP/2 for reverse proxies that use grpc_pass."
|
||||||
|
msgstr "為使用 grpc_pass 的反向代理啟用明文 HTTP/2。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:469
|
||||||
|
msgid "Enable HTTP/3/QUIC"
|
||||||
|
msgstr "啟用 HTTP/3/QUIC"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:470
|
||||||
|
msgid ""
|
||||||
|
"Enable HTTP/3 over QUIC on the HTTPS listen port. HTTPS must be enabled and "
|
||||||
|
"certificate files must be configured."
|
||||||
|
msgstr ""
|
||||||
|
"在 HTTPS 監聽連接埠上啟用基於 QUIC 的 HTTP/3。必須先啟用 HTTPS 並配置憑證檔"
|
||||||
|
"案。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:474
|
||||||
|
msgid "Download Workers"
|
||||||
|
msgstr "下載任務執行緒數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:479
|
||||||
|
msgid "Download Max Retry"
|
||||||
|
msgstr "下載任務重試次數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:484
|
||||||
|
msgid "Download Task Persistence"
|
||||||
|
msgstr "下載任務持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:487
|
||||||
|
msgid "Transfer Workers"
|
||||||
|
msgstr "中轉任務執行緒數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:492
|
||||||
|
msgid "Transfer Max Retry"
|
||||||
|
msgstr "中轉任務下載重試次數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:497
|
||||||
|
msgid "Transfer Task Persistence"
|
||||||
|
msgstr "中轉任務持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:500
|
||||||
|
msgid "Upload Workers"
|
||||||
|
msgstr "上傳任務執行緒數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:505
|
||||||
|
msgid "Upload Max Retry"
|
||||||
|
msgstr "上傳任務重試次數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:510
|
||||||
|
msgid "Upload Task Persistence"
|
||||||
|
msgstr "上傳任務持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:513
|
||||||
|
msgid "Copy Workers"
|
||||||
|
msgstr "複製任務執行緒數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:518
|
||||||
|
msgid "Copy Max Retry"
|
||||||
|
msgstr "複製任務重試次數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:523
|
||||||
|
msgid "Copy Task Persistence"
|
||||||
|
msgstr "複製任務持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:526
|
||||||
|
msgid "Move Workers"
|
||||||
|
msgstr "移動任務執行緒數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:531
|
||||||
|
msgid "Move Max Retry"
|
||||||
|
msgstr "移動任務重試次數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:536
|
||||||
|
msgid "Move Task Persistence"
|
||||||
|
msgstr "移動任務持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:539
|
||||||
|
msgid "Decompress Workers"
|
||||||
|
msgstr "解壓縮任務執行緒數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:544
|
||||||
|
msgid "Decompress Max Retry"
|
||||||
|
msgstr "解壓縮任務重試次數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:549
|
||||||
|
msgid "Decompress Task Persistence"
|
||||||
|
msgstr "解壓縮任務持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:552
|
||||||
|
msgid "Decompress Upload Workers"
|
||||||
|
msgstr "解壓縮上傳任務執行緒數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:557
|
||||||
|
msgid "Decompress Upload Max Retry"
|
||||||
|
msgstr "解壓縮上傳任務重試次數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:562
|
||||||
|
msgid "Decompress Upload Task Persistence"
|
||||||
|
msgstr "解壓縮上傳任務持久化"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:565
|
||||||
|
msgid "Allow retry canceled tasks"
|
||||||
|
msgstr "允許重試已取消的任務"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:569
|
||||||
|
msgid "Allow Origins"
|
||||||
|
msgstr "允許來源(Origins)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:570
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:578
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:583
|
||||||
|
msgid "Comma-separated list. Use * to allow any value."
|
||||||
|
msgstr "使用英文逗號分隔。使用 * 表示允許任意值。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:577
|
||||||
|
msgid "Allow Methods"
|
||||||
|
msgstr "允許方法(Methods)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:582
|
||||||
|
msgid "Allow Headers"
|
||||||
|
msgstr "允許標頭(Headers)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:588
|
||||||
|
msgid "Enabled S3"
|
||||||
|
msgstr "啟用 S3"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:591
|
||||||
|
msgid "Port"
|
||||||
|
msgstr "埠"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:596
|
||||||
|
msgid "Enable SSL"
|
||||||
|
msgstr "啟用 SSL"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:600
|
||||||
|
msgid "Enabled FTP"
|
||||||
|
msgstr "啟用 FTP"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:603
|
||||||
|
msgid "FTP Port"
|
||||||
|
msgstr "FTP 埠"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:608
|
||||||
|
msgid "Max retries on port conflict during passive transfer"
|
||||||
|
msgstr "被動傳輸埠衝突時最大重試次數"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:613
|
||||||
|
msgid "Enable non-20 port for active transfer"
|
||||||
|
msgstr "啟用非 20 埠進行主動傳輸"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:616
|
||||||
|
msgid "Client idle timeout (seconds)"
|
||||||
|
msgstr "客戶端空閒超時(秒)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:621
|
||||||
|
msgid "Connection timeout (seconds)"
|
||||||
|
msgstr "連線超時(秒)"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:626
|
||||||
|
msgid "Disable active transfer mode"
|
||||||
|
msgstr "停用主動傳輸模式"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:629
|
||||||
|
msgid "Enable binary transfer mode"
|
||||||
|
msgstr "啟用二進位制傳輸模式"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:632
|
||||||
|
msgid "Client IP check in active transfer mode"
|
||||||
|
msgstr "主動傳輸模式下對客戶端進行 IP 檢查"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:636
|
||||||
|
msgid "Client IP check in passive transfer mode"
|
||||||
|
msgstr "被動傳輸模式下對客戶端進行 IP 檢查"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:641
|
||||||
|
msgid "Enabled SFTP"
|
||||||
|
msgstr "啟用 SFTP"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:644
|
||||||
|
msgid "SFTP Port"
|
||||||
|
msgstr "SFTP 埠"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:20
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:29
|
||||||
|
msgid "No log data."
|
||||||
|
msgstr "無日誌資料。"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:77
|
||||||
|
msgid "Clear logs"
|
||||||
|
msgstr "清空日誌"
|
||||||
|
|
||||||
|
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:86
|
||||||
|
#, javascript-format
|
||||||
|
msgid "Refresh every %s seconds."
|
||||||
|
msgstr "每 %s 秒重新整理。"
|
||||||
|
|
||||||
|
#~ msgid "Grant UCI access for luci-app-openlist2"
|
||||||
|
#~ msgstr "授予 luci-app-openlist2 的 UCI 訪問許可權"
|
||||||
@@ -4,7 +4,8 @@
|
|||||||
"read": {
|
"read": {
|
||||||
"file": {
|
"file": {
|
||||||
"/usr/bin/openlist2": [ "exec" ],
|
"/usr/bin/openlist2": [ "exec" ],
|
||||||
"/*": [ "read" ]
|
"/var/log/openlist2.log": [ "read" ],
|
||||||
|
"/var/log/openlist2*": [ "read" ]
|
||||||
},
|
},
|
||||||
"ubus": {
|
"ubus": {
|
||||||
"service": [ "list" ]
|
"service": [ "list" ]
|
||||||
@@ -13,7 +14,8 @@
|
|||||||
},
|
},
|
||||||
"write": {
|
"write": {
|
||||||
"file": {
|
"file": {
|
||||||
"/*": [ "write" ]
|
"/var/log/openlist2.log": [ "write" ],
|
||||||
|
"/var/log/openlist2*": [ "write" ]
|
||||||
},
|
},
|
||||||
"uci": [ "openlist2" ]
|
"uci": [ "openlist2" ]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=luci-app-passwall
|
PKG_NAME:=luci-app-passwall
|
||||||
PKG_VERSION:=26.7.16
|
PKG_VERSION:=26.7.16
|
||||||
PKG_RELEASE:=191
|
PKG_RELEASE:=192
|
||||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
PKG_CONFIG_DEPENDS:= \
|
||||||
|
|||||||
@@ -112,10 +112,12 @@ o.rewrite_option = o.option
|
|||||||
o = s:option(Value, _n("recv_window_conn"), translate("QUIC connection receive window"))
|
o = s:option(Value, _n("recv_window_conn"), translate("QUIC connection receive window"))
|
||||||
o.rewrite_option = o.option
|
o.rewrite_option = o.option
|
||||||
|
|
||||||
o = s:option(Value, _n("idle_timeout"), translate("Idle Timeout"), translate("Example:") .. "30s (4s~120s)")
|
o = s:option(Value, _n("idle_timeout"), translate("Idle Timeout"), translate("Units:seconds") .. " (4~120)")
|
||||||
|
o.datatype = "range(4,120)"
|
||||||
o.rewrite_option = o.option
|
o.rewrite_option = o.option
|
||||||
|
|
||||||
o = s:option(Value, _n("keep_alive_period"), translate("QUIC KeepAlive interval"), translate("Example:") .. "10s (2s~60s)")
|
o = s:option(Value, _n("keep_alive_period"), translate("QUIC KeepAlive interval"), translate("Units:seconds") .. " (2~60)")
|
||||||
|
o.datatype = "range(2,60)"
|
||||||
o.rewrite_option = o.option
|
o.rewrite_option = o.option
|
||||||
|
|
||||||
o = s:option(Flag, _n("disable_mtu_discovery"), translate("Disable MTU detection"))
|
o = s:option(Flag, _n("disable_mtu_discovery"), translate("Disable MTU detection"))
|
||||||
|
|||||||
@@ -395,10 +395,12 @@ o:depends({ [_n("protocol")] = "hysteria2" })
|
|||||||
o = s:option(Value, _n("hysteria2_down_mbps"), translate("Max download Mbps"))
|
o = s:option(Value, _n("hysteria2_down_mbps"), translate("Max download Mbps"))
|
||||||
o:depends({ [_n("protocol")] = "hysteria2" })
|
o:depends({ [_n("protocol")] = "hysteria2" })
|
||||||
|
|
||||||
o = s:option(Value, _n("hysteria2_idle_timeout"), translate("Idle Timeout"), translate("Example:") .. "30s (4s~120s)")
|
o = s:option(Value, _n("hysteria2_idle_timeout"), translate("Idle Timeout"), translate("Units:seconds") .. " (4~120)")
|
||||||
|
o.datatype = "range(4,120)"
|
||||||
o:depends({ [_n("protocol")] = "hysteria2"})
|
o:depends({ [_n("protocol")] = "hysteria2"})
|
||||||
|
|
||||||
o = s:option(Value, _n("hysteria2_keep_alive_period"), translate("QUIC KeepAlive interval"), translate("Example:") .. "10s (2s~60s)")
|
o = s:option(Value, _n("hysteria2_keep_alive_period"), translate("QUIC KeepAlive interval"), translate("Units:seconds") .. " (2~60)")
|
||||||
|
o.datatype = "range(2,60)"
|
||||||
o:depends({ [_n("protocol")] = "hysteria2"})
|
o:depends({ [_n("protocol")] = "hysteria2"})
|
||||||
|
|
||||||
o = s:option(Flag, _n("hysteria2_disable_mtu_discovery"), translate("Disable MTU detection"))
|
o = s:option(Flag, _n("hysteria2_disable_mtu_discovery"), translate("Disable MTU detection"))
|
||||||
|
|||||||
@@ -419,10 +419,12 @@ if singbox_tags:find("with_quic") then
|
|||||||
o = s:option(Value, _n("hysteria2_down_mbps"), translate("Max download Mbps"))
|
o = s:option(Value, _n("hysteria2_down_mbps"), translate("Max download Mbps"))
|
||||||
o:depends({ [_n("protocol")] = "hysteria2" })
|
o:depends({ [_n("protocol")] = "hysteria2" })
|
||||||
|
|
||||||
o = s:option(Value, _n("hysteria2_idle_timeout"), translate("Idle Timeout"), translate("Example:") .. "30s (4s~120s)")
|
o = s:option(Value, _n("hysteria2_idle_timeout"), translate("Idle Timeout"), translate("Units:seconds") .. " (4~120)")
|
||||||
|
o.datatype = "range(4,120)"
|
||||||
o:depends({ [_n("protocol")] = "hysteria2"})
|
o:depends({ [_n("protocol")] = "hysteria2"})
|
||||||
|
|
||||||
o = s:option(Value, _n("hysteria2_keep_alive_period"), translate("QUIC KeepAlive interval"), translate("Example:") .. "10s (2s~60s)")
|
o = s:option(Value, _n("hysteria2_keep_alive_period"), translate("QUIC KeepAlive interval"), translate("Units:seconds") .. " (2~60)")
|
||||||
|
o.datatype = "range(2,60)"
|
||||||
o:depends({ [_n("protocol")] = "hysteria2"})
|
o:depends({ [_n("protocol")] = "hysteria2"})
|
||||||
|
|
||||||
o = s:option(Flag, _n("hysteria2_disable_mtu_discovery"), translate("Disable MTU detection"))
|
o = s:option(Flag, _n("hysteria2_disable_mtu_discovery"), translate("Disable MTU detection"))
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ local function encode_vless(node)
|
|||||||
link = link .. "?" .. table.concat(p, "&")
|
link = link .. "?" .. table.concat(p, "&")
|
||||||
end
|
end
|
||||||
|
|
||||||
return link .. "#" .. urlencode(o.name or "")
|
return 0, link .. "#" .. urlencode(o.name or "")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Trojan
|
-- Trojan
|
||||||
@@ -273,7 +273,7 @@ local function encode_trojan(node)
|
|||||||
link = link .. "?" .. table.concat(p, "&")
|
link = link .. "?" .. table.concat(p, "&")
|
||||||
end
|
end
|
||||||
|
|
||||||
return link .. "#" .. urlencode(o.name or "")
|
return 0, link .. "#" .. urlencode(o.name or "")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- VMess
|
-- VMess
|
||||||
@@ -307,11 +307,19 @@ local function encode_vmess(node)
|
|||||||
obj.path = o.transport.serviceName or ""
|
obj.path = o.transport.serviceName or ""
|
||||||
end
|
end
|
||||||
|
|
||||||
return "vmess://" .. base64(json.stringify(obj))
|
return 0, "vmess://" .. base64(json.stringify(obj))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- SS
|
-- SS
|
||||||
local function encode_ss(node)
|
local function encode_ss(node)
|
||||||
|
local ss_method = {
|
||||||
|
["none"]=1, ["aes-128-gcm"]=1, ["aes-192-gcm"]=1, ["aes-256-gcm"]=1, ["chacha20-ietf-poly1305"]=1, ["xchacha20-ietf-poly1305"]=1, ["2022-blake3-aes-128-gcm"]=1, ["2022-blake3-aes-256-gcm"]=1, ["2022-blake3-chacha20-poly1305"]=1,
|
||||||
|
["aes-128-ctr"]=1, ["aes-192-ctr"]=1, ["aes-256-ctr"]=1, ["aes-128-cfb"]=1, ["aes-192-cfb"]=1, ["aes-256-cfb"]=1, ["rc4-md5"]=1, ["chacha20-ietf"]=1, ["xchacha20"]=1,
|
||||||
|
}
|
||||||
|
if not ss_method[node.cipher or ""] then
|
||||||
|
return 1, "订阅转换 → 丢弃 SS 节点:" .. (node.name or "") .. ",因 Core 不支持 " .. (node.cipher or "") .. " 加密方式"
|
||||||
|
end
|
||||||
|
|
||||||
local userinfo = node.cipher .. ":" .. node.password
|
local userinfo = node.cipher .. ":" .. node.password
|
||||||
local base = userinfo .. "@" .. host_format(node.server) .. ":" .. node.port
|
local base = userinfo .. "@" .. host_format(node.server) .. ":" .. node.port
|
||||||
local link = "ss://" .. base64(base)
|
local link = "ss://" .. base64(base)
|
||||||
@@ -326,7 +334,7 @@ local function encode_ss(node)
|
|||||||
if plugin == "shadow-tls" then
|
if plugin == "shadow-tls" then
|
||||||
local shadow_tls = base64(json.stringify(node["plugin-opts"] or {}))
|
local shadow_tls = base64(json.stringify(node["plugin-opts"] or {}))
|
||||||
table.insert(p, "shadow-tls=" .. urlencode(shadow_tls))
|
table.insert(p, "shadow-tls=" .. urlencode(shadow_tls))
|
||||||
else
|
elseif plugin == "obfs-local" or plugin == "v2ray-plugin" then
|
||||||
local opts = {}
|
local opts = {}
|
||||||
for k, v in pairs(node["plugin-opts"] or {}) do
|
for k, v in pairs(node["plugin-opts"] or {}) do
|
||||||
if plugin == "obfs-local" then
|
if plugin == "obfs-local" then
|
||||||
@@ -341,10 +349,6 @@ local function encode_ss(node)
|
|||||||
end
|
end
|
||||||
v = nil
|
v = nil
|
||||||
end
|
end
|
||||||
elseif plugin == "gost-plugin" then
|
|
||||||
if k == "mode" and v == "websocket" then v = "ws" end
|
|
||||||
if k == "host" then k = "serverName" end
|
|
||||||
if k == "headers" then v = nil end
|
|
||||||
end
|
end
|
||||||
if v ~= nil then
|
if v ~= nil then
|
||||||
if type(v) == "boolean" then
|
if type(v) == "boolean" then
|
||||||
@@ -355,6 +359,8 @@ local function encode_ss(node)
|
|||||||
end
|
end
|
||||||
if #opts > 0 then plugin = plugin .. ";" .. table.concat(opts, ";") end
|
if #opts > 0 then plugin = plugin .. ";" .. table.concat(opts, ";") end
|
||||||
table.insert(p, "plugin=" .. urlencode(plugin))
|
table.insert(p, "plugin=" .. urlencode(plugin))
|
||||||
|
else
|
||||||
|
return 1, "订阅转换 → 丢弃 SS 节点:" .. (node.name or "") .. ",因 Core 不支持 " .. plugin .. " 插件"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -362,7 +368,7 @@ local function encode_ss(node)
|
|||||||
link = link .. "?" .. table.concat(p, "&")
|
link = link .. "?" .. table.concat(p, "&")
|
||||||
end
|
end
|
||||||
|
|
||||||
return link .. "#" .. urlencode(node.name or "")
|
return 0, link .. "#" .. urlencode(node.name or "")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Hysteria
|
-- Hysteria
|
||||||
@@ -387,7 +393,7 @@ local function encode_hysteria2(node)
|
|||||||
link = link .. "?" .. table.concat(p, "&")
|
link = link .. "?" .. table.concat(p, "&")
|
||||||
end
|
end
|
||||||
|
|
||||||
return link .. "#" .. urlencode(node.name or "")
|
return 0, link .. "#" .. urlencode(node.name or "")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Hysteria2
|
-- Hysteria2
|
||||||
@@ -411,7 +417,7 @@ local function encode_hysteria2(node)
|
|||||||
link = link .. "?" .. table.concat(p, "&")
|
link = link .. "?" .. table.concat(p, "&")
|
||||||
end
|
end
|
||||||
|
|
||||||
return link .. "#" .. urlencode(node.name or "")
|
return 0, link .. "#" .. urlencode(node.name or "")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- TUIC
|
-- TUIC
|
||||||
@@ -436,11 +442,24 @@ local function encode_tuic(node)
|
|||||||
link = link .. "?" .. table.concat(p, "&")
|
link = link .. "?" .. table.concat(p, "&")
|
||||||
end
|
end
|
||||||
|
|
||||||
return link .. "#" .. urlencode(node.name or "")
|
return 0, link .. "#" .. urlencode(node.name or "")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- AnyTLS
|
-- AnyTLS
|
||||||
local function encode_anytls(node)
|
local function encode_anytls(node)
|
||||||
|
local err_msg
|
||||||
|
if node["shadow-tls-opts"] then
|
||||||
|
err_msg = "ShadowTLS"
|
||||||
|
elseif node["restls-opts"] then
|
||||||
|
err_msg = "ResTLS"
|
||||||
|
elseif node["jls-opts"] then
|
||||||
|
err_msg = "JLS"
|
||||||
|
end
|
||||||
|
if err_msg then
|
||||||
|
err_msg = "订阅转换 → 丢弃 AnyTLS 节点:" .. (node.name or "") .. ",因 Sing-Box 不支持 AnyTLS + " .. err_msg
|
||||||
|
return 1, err_msg
|
||||||
|
end
|
||||||
|
|
||||||
local o = build_common(node)
|
local o = build_common(node)
|
||||||
|
|
||||||
local link = "anytls://" .. (node.password or "") .. "@" .. host_format(node.server) .. ":" .. node.port
|
local link = "anytls://" .. (node.password or "") .. "@" .. host_format(node.server) .. ":" .. node.port
|
||||||
@@ -465,7 +484,7 @@ local function encode_anytls(node)
|
|||||||
link = link .. "?" .. table.concat(p, "&")
|
link = link .. "?" .. table.concat(p, "&")
|
||||||
end
|
end
|
||||||
|
|
||||||
return link .. "#" .. urlencode(node.name or "")
|
return 0, link .. "#" .. urlencode(node.name or "")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- SSR
|
-- SSR
|
||||||
@@ -482,7 +501,7 @@ local function encode_ssr(node)
|
|||||||
link = link .. "?" .. table.concat(p, "&")
|
link = link .. "?" .. table.concat(p, "&")
|
||||||
end
|
end
|
||||||
|
|
||||||
return "ssr://" .. base64(link)
|
return 0, "ssr://" .. base64(link)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function encode_node(node)
|
local function encode_node(node)
|
||||||
@@ -516,8 +535,10 @@ function parseClashNode(raw, remark)
|
|||||||
|
|
||||||
local links = {}
|
local links = {}
|
||||||
for _, node in ipairs(data.proxies) do
|
for _, node in ipairs(data.proxies) do
|
||||||
local link = encode_node(node)
|
local err, link = encode_node(node)
|
||||||
if link then
|
if err == 1 and link then
|
||||||
|
api.log(link)
|
||||||
|
elseif link then
|
||||||
table.insert(links, link)
|
table.insert(links, link)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ THEME_TITLE:=Alpha
|
|||||||
|
|
||||||
PKG_NAME:=luci-theme-$(THEME_NAME)
|
PKG_NAME:=luci-theme-$(THEME_NAME)
|
||||||
PKG_VERSION:=3.9.7_beta2
|
PKG_VERSION:=3.9.7_beta2
|
||||||
PKG_RELEASE:=5
|
PKG_RELEASE:=6
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
[discord-badge]: https://img.shields.io/badge/visit_Discord-Comunity-blue
|
[discord-badge]: https://img.shields.io/badge/visit_Discord-Comunity-blue
|
||||||
[paypal]: https://www.paypal.com/paypalme/derisamedia
|
[paypal]: https://www.paypal.com/paypalme/derisamedia
|
||||||
[paypal-badge]: https://img.shields.io/badge/Donate-Paypal_me-blue
|
[paypal-badge]: https://img.shields.io/badge/Donate-Paypal_me-blue
|
||||||
[new-release]: https://github.com/derisamedia/luci-theme-alpha-reborn
|
[new-release]: https://github.com/derisamedia/luci-theme-Arwi
|
||||||
[new-release-badge]: https://img.shields.io/badge/New_Release-AlphaOS_Reborn_v4-red
|
[new-release-badge]: https://img.shields.io/badge/New_Release-luci_theme_Arwi-red
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+20
-16
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Copyright (C) 2015-2016 OpenWrt.org
|
# Copyright (C) 2015-2016 OpenWrt.org
|
||||||
#
|
#
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
# This is free software, licensed under the GNU Affero General Public License v3.
|
||||||
#
|
#
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
PKG_NAME:=openlist2
|
PKG_NAME:=openlist2
|
||||||
PKG_VERSION:=4.2.3
|
PKG_VERSION:=4.2.3
|
||||||
PKG_WEB_VERSION:=4.2.3
|
PKG_WEB_VERSION:=4.2.3
|
||||||
PKG_RELEASE:=8
|
PKG_RELEASE:=9
|
||||||
|
|
||||||
PKG_SOURCE:=openlist-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=openlist-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/OpenListTeam/OpenList/tar.gz/v$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/OpenListTeam/OpenList/tar.gz/v$(PKG_VERSION)?
|
||||||
@@ -17,29 +17,31 @@ PKG_HASH:=skip
|
|||||||
|
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/OpenList-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/OpenList-$(PKG_VERSION)
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-3.0
|
PKG_LICENSE:=AGPL-3.0-only
|
||||||
PKG_LICENSE_FILE:=LICENSE
|
PKG_LICENSE_FILES:=LICENSE
|
||||||
PKG_MAINTAINER:=sbwml <admin@cooluc.com>
|
PKG_MAINTAINER:=sbwml <admin@cooluc.com>
|
||||||
|
PKG_CPE_ID:=cpe:/a:oplist:openlist
|
||||||
|
|
||||||
define Download/openlist-frontend
|
define Download/openlist-frontend
|
||||||
FILE:=openlist-frontend-dist-lite-v$(PKG_WEB_VERSION).tar.gz
|
FILE:=openlist-frontend-dist-v$(PKG_WEB_VERSION).tar.gz
|
||||||
URL:=https://github.com/OpenListTeam/OpenList-Frontend/releases/download/v$(PKG_WEB_VERSION)/
|
URL:=https://github.com/OpenListTeam/OpenList-Frontend/releases/download/v$(PKG_WEB_VERSION)/
|
||||||
HASH:=skip
|
HASH:=skip
|
||||||
endef
|
endef
|
||||||
|
|
||||||
PKG_BUILD_DEPENDS:=golang/host
|
PKG_BUILD_DEPENDS:=golang/host fuse
|
||||||
PKG_BUILD_PARALLEL:=1
|
PKG_BUILD_PARALLEL:=1
|
||||||
PKG_USE_MIPS16:=0
|
PKG_USE_MIPS16:=0
|
||||||
PKG_BUILD_FLAGS:=no-mips16
|
PKG_BUILD_FLAGS:=no-mips16
|
||||||
|
|
||||||
GO_PKG:=github.com/OpenListTeam/OpenList
|
GO_PKG:=github.com/OpenListTeam/OpenList/v4
|
||||||
GO_PKG_LDFLAGS:= \
|
GO_PKG_LDFLAGS:= \
|
||||||
-X '$(GO_PKG)/v4/internal/conf.BuiltAt=$(shell date '+%Y-%m-%d %H:%M:%S %z')' \
|
-s -w \
|
||||||
-X '$(GO_PKG)/v4/internal/conf.GoVersion=$(shell $(STAGING_DIR_HOSTPKG)/bin/go version | sed 's/go version //')' \
|
-X '$(GO_PKG)/internal/conf.BuiltAt=$(shell date '+%Y-%m-%d %H:%M:%S %z')' \
|
||||||
-X '$(GO_PKG)/v4/internal/conf.GitAuthor=The OpenList Projects Contributors <noreply@openlist.team>' \
|
-X '$(GO_PKG)/internal/conf.GoVersion=$(shell $(STAGING_DIR_HOSTPKG)/bin/go version | sed 's/go version //')' \
|
||||||
-X '$(GO_PKG)/v4/internal/conf.GitCommit=tarball/$(shell echo $(PKG_HASH) | cut -c 1-7)' \
|
-X '$(GO_PKG)/internal/conf.GitAuthor=The OpenList Projects Contributors <noreply@openlist.team>' \
|
||||||
-X '$(GO_PKG)/v4/internal/conf.Version=v$(PKG_VERSION) (OpenWrt $(ARCH_PACKAGES))' \
|
-X '$(GO_PKG)/internal/conf.GitCommit=tarball/$(shell echo $(PKG_HASH) | cut -c 1-7)' \
|
||||||
-X '$(GO_PKG)/v4/internal/conf.WebVersion=v$(PKG_WEB_VERSION)'
|
-X '$(GO_PKG)/internal/conf.Version=v$(PKG_VERSION) (OpenWrt $(ARCH_PACKAGES))' \
|
||||||
|
-X '$(GO_PKG)/internal/conf.WebVersion=v$(PKG_WEB_VERSION)'
|
||||||
ifneq ($(CONFIG_ARCH_64BIT),y)
|
ifneq ($(CONFIG_ARCH_64BIT),y)
|
||||||
GO_PKG_EXCLUDES:=drivers/lark
|
GO_PKG_EXCLUDES:=drivers/lark
|
||||||
endif
|
endif
|
||||||
@@ -52,12 +54,12 @@ define Package/openlist2
|
|||||||
CATEGORY:=Network
|
CATEGORY:=Network
|
||||||
SUBMENU:=Web Servers/Proxies
|
SUBMENU:=Web Servers/Proxies
|
||||||
TITLE:=A file list program that supports multiple storage
|
TITLE:=A file list program that supports multiple storage
|
||||||
URL:=https://openlist.team/
|
URL:=https://doc.oplist.org/
|
||||||
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle
|
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/openlist2/conffiles
|
define Package/openlist2/conffiles
|
||||||
/etc/openlist2
|
/etc/openlist2/
|
||||||
/etc/config/openlist2
|
/etc/config/openlist2
|
||||||
endef
|
endef
|
||||||
|
|
||||||
@@ -79,9 +81,11 @@ endif
|
|||||||
|
|
||||||
define Build/Prepare
|
define Build/Prepare
|
||||||
$(call Build/Prepare/Default)
|
$(call Build/Prepare/Default)
|
||||||
$(TAR) --strip-components=1 -C $(PKG_BUILD_DIR)/public/dist -xzf $(DL_DIR)/openlist-frontend-dist-lite-v$(PKG_WEB_VERSION).tar.gz
|
mkdir -p $(PKG_BUILD_DIR)/public/dist
|
||||||
|
$(TAR) --strip-components=1 -C $(PKG_BUILD_DIR)/public/dist -xzf $(DL_DIR)/openlist-frontend-dist-v$(PKG_WEB_VERSION).tar.gz
|
||||||
$(SED) 's_https://res.oplist.org/logo_/assets_g' $(PKG_BUILD_DIR)/public/dist/index.html
|
$(SED) 's_https://res.oplist.org/logo_/assets_g' $(PKG_BUILD_DIR)/public/dist/index.html
|
||||||
$(SED) 's_https://res.oplist.org/logo_/assets_g' $(PKG_BUILD_DIR)/public/dist/static/manifest.json
|
$(SED) 's_https://res.oplist.org/logo_/assets_g' $(PKG_BUILD_DIR)/public/dist/static/manifest.json
|
||||||
|
find $(PKG_BUILD_DIR)/public/dist/assets -type f -name '*.js' -exec $(SED) 's_https://res.oplist.org/logo_/assets_g' {} +
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/openlist2/install
|
define Package/openlist2/install
|
||||||
|
|||||||
@@ -1,32 +1,78 @@
|
|||||||
|
|
||||||
config openlist2
|
config openlist2
|
||||||
option enabled '0'
|
option enabled '0'
|
||||||
option port '5244'
|
option debug '0'
|
||||||
option delayed_start '0'
|
option delayed_start '0'
|
||||||
option allow_wan '0'
|
option allow_wan '0'
|
||||||
option force '1'
|
option force '1'
|
||||||
option token_expires_in '48'
|
option token_expires_in '48'
|
||||||
|
option proxy_address ''
|
||||||
|
option auto_memory_limit '4'
|
||||||
|
option min_free_memory '0'
|
||||||
|
option max_block_limit '0'
|
||||||
option max_connections '0'
|
option max_connections '0'
|
||||||
option tls_insecure_skip_verify '1'
|
option max_concurrency '64'
|
||||||
|
option tls_insecure_skip_verify '0'
|
||||||
option data_dir '/etc/openlist2'
|
option data_dir '/etc/openlist2'
|
||||||
option temp_dir '/tmp/openlist2'
|
option temp_dir '/tmp/openlist2'
|
||||||
option log '1'
|
option log '1'
|
||||||
option log_max_size '10'
|
option log_path '/var/log/openlist2.log'
|
||||||
option log_max_backups '5'
|
option log_max_size '50'
|
||||||
|
option log_max_backups '30'
|
||||||
option log_max_age '28'
|
option log_max_age '28'
|
||||||
option log_compress '0'
|
option log_compress '0'
|
||||||
|
option log_filter '0'
|
||||||
|
option log_filter_cidr ''
|
||||||
|
option log_filter_path ''
|
||||||
|
option log_filter_method ''
|
||||||
option database_type 'sqlite3'
|
option database_type 'sqlite3'
|
||||||
option ssl '0'
|
option meilisearch_host 'http://localhost:7700'
|
||||||
|
option meilisearch_api_key ''
|
||||||
|
option meilisearch_index 'openlist'
|
||||||
|
option listen_addr '0.0.0.0'
|
||||||
|
option listen_http_port '5244'
|
||||||
|
option listen_https_port '-1'
|
||||||
|
option listen_unix_file ''
|
||||||
|
option listen_unix_file_perm ''
|
||||||
|
option listen_enable_h2c '0'
|
||||||
|
option listen_enable_h3 '0'
|
||||||
option download_workers '5'
|
option download_workers '5'
|
||||||
option download_max_retry '1'
|
option download_max_retry '1'
|
||||||
|
option download_task_persistant '0'
|
||||||
option transfer_workers '5'
|
option transfer_workers '5'
|
||||||
option transfer_max_retry '2'
|
option transfer_max_retry '2'
|
||||||
|
option transfer_task_persistant '0'
|
||||||
option upload_workers '5'
|
option upload_workers '5'
|
||||||
option upload_max_retry '0'
|
option upload_max_retry '0'
|
||||||
|
option upload_task_persistant '0'
|
||||||
option copy_workers '5'
|
option copy_workers '5'
|
||||||
option copy_max_retry '2'
|
option copy_max_retry '2'
|
||||||
|
option copy_task_persistant '0'
|
||||||
|
option move_workers '5'
|
||||||
|
option move_max_retry '2'
|
||||||
|
option move_task_persistant '0'
|
||||||
|
option decompress_workers '5'
|
||||||
|
option decompress_max_retry '2'
|
||||||
|
option decompress_task_persistant '0'
|
||||||
|
option decompress_upload_workers '5'
|
||||||
|
option decompress_upload_max_retry '2'
|
||||||
|
option decompress_upload_task_persistant '0'
|
||||||
|
option allow_retry_canceled '0'
|
||||||
option cors_allow_origins '*'
|
option cors_allow_origins '*'
|
||||||
option cors_allow_methods '*'
|
option cors_allow_methods '*'
|
||||||
option cors_allow_headers '*'
|
option cors_allow_headers '*'
|
||||||
option s3 '0'
|
option s3 '0'
|
||||||
|
option s3_port '5246'
|
||||||
|
option s3_ssl '0'
|
||||||
|
option ftp '0'
|
||||||
|
option ftp_port '5221'
|
||||||
|
option find_pasv_port_attempts '50'
|
||||||
|
option active_transfer_port_non_20 '0'
|
||||||
|
option idle_timeout '900'
|
||||||
|
option connection_timeout '30'
|
||||||
|
option disable_active_mode '0'
|
||||||
|
option default_transfer_binary '0'
|
||||||
|
option enable_active_conn_ip_check '1'
|
||||||
|
option enable_pasv_conn_ip_check '1'
|
||||||
|
option sftp '0'
|
||||||
|
option sftp_port '5222'
|
||||||
+273
-99
@@ -6,104 +6,233 @@ START=99
|
|||||||
USE_PROCD=1
|
USE_PROCD=1
|
||||||
PROG=/usr/bin/openlist2
|
PROG=/usr/bin/openlist2
|
||||||
|
|
||||||
get_config() {
|
is_safe_log_path() {
|
||||||
config_get_bool enabled $1 enabled 1
|
local path="$1"
|
||||||
config_get port $1 port 5244
|
local base="${path##*/}"
|
||||||
config_get allow_wan $1 allow_wan 0
|
|
||||||
config_get delayed_start $1 delayed_start 0
|
|
||||||
|
|
||||||
config_get force $1 force 1
|
case "$path" in
|
||||||
config_get site_url $1 site_url ""
|
/var/log/*) ;;
|
||||||
config_get cdn $1 cdn ""
|
*) return 1 ;;
|
||||||
config_get jwt_secret $1 jwt_secret ""
|
esac
|
||||||
config_get data_dir $1 data_dir "/etc/openlist2"
|
|
||||||
config_get temp_dir $1 temp_dir "/tmp/openlist2"
|
[ "$path" = "/var/log/$base" ] || return 1
|
||||||
config_get token_expires_in $1 token_expires_in 48
|
|
||||||
config_get max_connections $1 max_connections 0
|
printf '%s\n' "$base" | grep -Eq '^openlist2([._-][A-Za-z0-9._-]+)?$'
|
||||||
config_get max_concurrency $1 max_concurrency 64
|
}
|
||||||
config_get tls_insecure_skip_verify $1 tls_insecure_skip_verify 1
|
|
||||||
|
append_dest_port() {
|
||||||
|
local value="$1"
|
||||||
|
|
||||||
|
[ -n "$value" ] && [ "$value" != "-1" ] || return 0
|
||||||
|
dest_ports="${dest_ports:+$dest_ports }$value"
|
||||||
|
}
|
||||||
|
|
||||||
|
json_add_filter_object() {
|
||||||
|
json_add_object ""
|
||||||
|
json_add_string "cidr" "$1"
|
||||||
|
json_add_string "path" "$2"
|
||||||
|
json_add_string "method" "$3"
|
||||||
|
json_close_object
|
||||||
|
}
|
||||||
|
|
||||||
|
json_add_csv_array() {
|
||||||
|
local name="$1"
|
||||||
|
local values="$2"
|
||||||
|
local oldifs="$IFS"
|
||||||
|
local noglob_set=0
|
||||||
|
local item
|
||||||
|
local count=0
|
||||||
|
|
||||||
|
json_add_array "$name"
|
||||||
|
case "$-" in
|
||||||
|
*f*) noglob_set=1 ;;
|
||||||
|
*) set -f ;;
|
||||||
|
esac
|
||||||
|
IFS=','
|
||||||
|
for item in $values; do
|
||||||
|
IFS="$oldifs"
|
||||||
|
item="$(printf '%s' "$item" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
|
||||||
|
IFS=','
|
||||||
|
if [ -n "$item" ]; then
|
||||||
|
json_add_string "" "$item"
|
||||||
|
count=$((count + 1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$oldifs"
|
||||||
|
[ "$noglob_set" = "1" ] || set +f
|
||||||
|
[ "$count" -eq 0 ] && json_add_string "" "*"
|
||||||
|
json_close_array
|
||||||
|
}
|
||||||
|
|
||||||
|
get_config() {
|
||||||
|
uci_changed=0
|
||||||
|
|
||||||
|
config_get_bool enabled "$1" enabled 1
|
||||||
|
config_get debug "$1" debug 0
|
||||||
|
config_get allow_wan "$1" allow_wan 0
|
||||||
|
config_get delayed_start "$1" delayed_start 0
|
||||||
|
|
||||||
|
config_get force "$1" force 1
|
||||||
|
config_get site_url "$1" site_url ""
|
||||||
|
config_get cdn "$1" cdn ""
|
||||||
|
config_get jwt_secret "$1" jwt_secret ""
|
||||||
|
config_get data_dir "$1" data_dir "/etc/openlist2"
|
||||||
|
config_get temp_dir "$1" temp_dir "/tmp/openlist2"
|
||||||
|
config_get token_expires_in "$1" token_expires_in 48
|
||||||
|
config_get proxy_address "$1" proxy_address ""
|
||||||
|
config_get auto_memory_limit "$1" auto_memory_limit 4
|
||||||
|
config_get min_free_memory "$1" min_free_memory 0
|
||||||
|
config_get max_block_limit "$1" max_block_limit 0
|
||||||
|
config_get max_connections "$1" max_connections 0
|
||||||
|
config_get max_concurrency "$1" max_concurrency 64
|
||||||
|
config_get tls_insecure_skip_verify "$1" tls_insecure_skip_verify 0
|
||||||
|
|
||||||
# log
|
# log
|
||||||
config_get log $1 log 1
|
config_get log "$1" log 1
|
||||||
config_get log_path $1 log_path '/var/log/openlist2.log'
|
config_get log_path "$1" log_path '/var/log/openlist2.log'
|
||||||
config_get log_max_size $1 log_max_size 10
|
if ! is_safe_log_path "$log_path"; then
|
||||||
config_get log_max_backups $1 log_max_backups 5
|
log_path='/var/log/openlist2.log'
|
||||||
config_get log_max_age $1 log_max_age 28
|
uci -q set openlist2.@openlist2[0].log_path="$log_path"
|
||||||
config_get log_compress $1 log_compress 0
|
uci_changed=1
|
||||||
|
fi
|
||||||
|
config_get log_max_size "$1" log_max_size 50
|
||||||
|
config_get log_max_backups "$1" log_max_backups 30
|
||||||
|
config_get log_max_age "$1" log_max_age 28
|
||||||
|
config_get log_compress "$1" log_compress 0
|
||||||
|
config_get log_filter "$1" log_filter 0
|
||||||
|
config_get log_filter_cidr "$1" log_filter_cidr ""
|
||||||
|
config_get log_filter_path "$1" log_filter_path ""
|
||||||
|
config_get log_filter_method "$1" log_filter_method ""
|
||||||
|
|
||||||
# scheme
|
# scheme
|
||||||
config_get ssl $1 ssl 0
|
config_get force_https "$1" force_https 0
|
||||||
config_get force_https $1 force_https 0
|
config_get ssl_cert "$1" ssl_cert ""
|
||||||
config_get ssl_cert $1 ssl_cert ""
|
config_get ssl_key "$1" ssl_key ""
|
||||||
config_get ssl_key $1 ssl_key ""
|
config_get listen_addr "$1" listen_addr "0.0.0.0"
|
||||||
|
config_get listen_http_port "$1" listen_http_port "5244"
|
||||||
|
config_get listen_https_port "$1" listen_https_port "-1"
|
||||||
|
config_get listen_unix_file "$1" listen_unix_file ""
|
||||||
|
config_get listen_unix_file_perm "$1" listen_unix_file_perm ""
|
||||||
|
config_get listen_enable_h2c "$1" listen_enable_h2c 0
|
||||||
|
config_get listen_enable_h3 "$1" listen_enable_h3 0
|
||||||
|
|
||||||
# database
|
# database
|
||||||
config_get database_type $1 database_type "sqlite3"
|
config_get database_type "$1" database_type "sqlite3"
|
||||||
config_get mysql_host $1 mysql_host ""
|
config_get mysql_host "$1" mysql_host ""
|
||||||
config_get mysql_port $1 mysql_port "3306"
|
config_get mysql_port "$1" mysql_port "0"
|
||||||
config_get mysql_username $1 mysql_username ""
|
case "$database_type:$mysql_port" in
|
||||||
config_get mysql_password $1 mysql_password ""
|
mysql:|mysql:0) mysql_port="3306" ;;
|
||||||
config_get mysql_database $1 mysql_database ""
|
postgres:|postgres:0) mysql_port="5432" ;;
|
||||||
config_get mysql_table_prefix $1 mysql_table_prefix "x_"
|
esac
|
||||||
config_get mysql_ssl_mode $1 mysql_ssl_mode ""
|
config_get mysql_username "$1" mysql_username ""
|
||||||
config_get mysql_dsn $1 mysql_dsn ""
|
config_get mysql_password "$1" mysql_password ""
|
||||||
|
config_get mysql_database "$1" mysql_database ""
|
||||||
|
config_get mysql_table_prefix "$1" mysql_table_prefix "x_"
|
||||||
|
config_get mysql_ssl_mode "$1" mysql_ssl_mode ""
|
||||||
|
config_get mysql_dsn "$1" mysql_dsn ""
|
||||||
|
config_get meilisearch_host "$1" meilisearch_host "http://localhost:7700"
|
||||||
|
config_get meilisearch_api_key "$1" meilisearch_api_key ""
|
||||||
|
config_get meilisearch_index "$1" meilisearch_index "openlist"
|
||||||
|
|
||||||
# tasks
|
# tasks
|
||||||
config_get download_workers $1 download_workers 5
|
config_get download_workers "$1" download_workers 5
|
||||||
config_get download_max_retry $1 download_max_retry 1
|
config_get download_max_retry "$1" download_max_retry 1
|
||||||
config_get transfer_workers $1 transfer_workers 5
|
config_get download_task_persistant "$1" download_task_persistant 0
|
||||||
config_get transfer_max_retry $1 transfer_max_retry 2
|
config_get transfer_workers "$1" transfer_workers 5
|
||||||
config_get upload_workers $1 upload_workers 5
|
config_get transfer_max_retry "$1" transfer_max_retry 2
|
||||||
config_get upload_max_retry $1 upload_max_retry 0
|
config_get transfer_task_persistant "$1" transfer_task_persistant 0
|
||||||
config_get copy_workers $1 copy_workers 5
|
config_get upload_workers "$1" upload_workers 5
|
||||||
config_get copy_max_retry $1 copy_max_retry 2
|
config_get upload_max_retry "$1" upload_max_retry 0
|
||||||
|
config_get upload_task_persistant "$1" upload_task_persistant 0
|
||||||
|
config_get copy_workers "$1" copy_workers 5
|
||||||
|
config_get copy_max_retry "$1" copy_max_retry 2
|
||||||
|
config_get copy_task_persistant "$1" copy_task_persistant 0
|
||||||
|
config_get move_workers "$1" move_workers 5
|
||||||
|
config_get move_max_retry "$1" move_max_retry 2
|
||||||
|
config_get move_task_persistant "$1" move_task_persistant 0
|
||||||
|
config_get decompress_workers "$1" decompress_workers 5
|
||||||
|
config_get decompress_max_retry "$1" decompress_max_retry 2
|
||||||
|
config_get decompress_task_persistant "$1" decompress_task_persistant 0
|
||||||
|
config_get decompress_upload_workers "$1" decompress_upload_workers 5
|
||||||
|
config_get decompress_upload_max_retry "$1" decompress_upload_max_retry 2
|
||||||
|
config_get decompress_upload_task_persistant "$1" decompress_upload_task_persistant 0
|
||||||
|
config_get allow_retry_canceled "$1" allow_retry_canceled 0
|
||||||
|
|
||||||
# cors
|
# cors
|
||||||
config_get cors_allow_origins $1 cors_allow_origins '*'
|
config_get cors_allow_origins "$1" cors_allow_origins '*'
|
||||||
config_get cors_allow_methods $1 cors_allow_methods '*'
|
config_get cors_allow_methods "$1" cors_allow_methods '*'
|
||||||
config_get cors_allow_headers $1 cors_allow_headers '*'
|
config_get cors_allow_headers "$1" cors_allow_headers '*'
|
||||||
|
|
||||||
# s3
|
# s3
|
||||||
config_get s3 $1 s3 0
|
config_get s3 "$1" s3 0
|
||||||
config_get s3_port $1 s3_port 5246
|
config_get s3_port "$1" s3_port 5246
|
||||||
config_get s3_ssl $1 s3_ssl 0
|
config_get s3_ssl "$1" s3_ssl 0
|
||||||
|
|
||||||
# ftp
|
# ftp
|
||||||
config_get ftp $1 ftp 0
|
config_get ftp "$1" ftp 0
|
||||||
config_get ftp_port $1 ftp_port 5221
|
config_get ftp_port "$1" ftp_port 5221
|
||||||
config_get find_pasv_port_attempts $1 find_pasv_port_attempts 50
|
config_get find_pasv_port_attempts "$1" find_pasv_port_attempts 50
|
||||||
config_get active_transfer_port_non_20 $1 active_transfer_port_non_20 0
|
config_get active_transfer_port_non_20 "$1" active_transfer_port_non_20 0
|
||||||
config_get idle_timeout $1 idle_timeout 900
|
config_get idle_timeout "$1" idle_timeout 900
|
||||||
config_get connection_timeout $1 connection_timeout 30
|
config_get connection_timeout "$1" connection_timeout 30
|
||||||
config_get disable_active_mode $1 disable_active_mode 0
|
config_get disable_active_mode "$1" disable_active_mode 0
|
||||||
config_get default_transfer_binary $1 default_transfer_binary 0
|
config_get default_transfer_binary "$1" default_transfer_binary 0
|
||||||
config_get enable_active_conn_ip_check $1 enable_active_conn_ip_check 1
|
config_get enable_active_conn_ip_check "$1" enable_active_conn_ip_check 1
|
||||||
config_get enable_pasv_conn_ip_check $1 enable_pasv_conn_ip_check 1
|
config_get enable_pasv_conn_ip_check "$1" enable_pasv_conn_ip_check 1
|
||||||
|
|
||||||
# sftp
|
# sftp
|
||||||
config_get sftp $1 sftp 0
|
config_get sftp "$1" sftp 0
|
||||||
config_get sftp_port $1 sftp_port 5222
|
config_get sftp_port "$1" sftp_port 5222
|
||||||
|
|
||||||
# init jwt_secret
|
# init jwt_secret
|
||||||
[ -z "$jwt_secret" ] && jwt_secret=$(tr -cd "a-zA-Z0-9" < "/dev/urandom" | head -c16)
|
if [ -z "$jwt_secret" ]; then
|
||||||
uci -q set openlist2.@openlist2[0].jwt_secret="$jwt_secret"
|
jwt_secret=$(tr -cd "a-zA-Z0-9" < "/dev/urandom" | head -c16)
|
||||||
uci commit openlist2
|
uci -q set openlist2.@openlist2[0].jwt_secret="$jwt_secret"
|
||||||
|
uci_changed=1
|
||||||
|
fi
|
||||||
|
[ "$uci_changed" = "1" ] && uci commit openlist2
|
||||||
}
|
}
|
||||||
|
|
||||||
set_firewall() {
|
set_firewall() {
|
||||||
if [ "$external_access" = "allow" ]; then
|
if [ "$external_access" = "allow" ]; then
|
||||||
|
dest_ports=""
|
||||||
|
append_dest_port "$http_port"
|
||||||
|
append_dest_port "$https_port"
|
||||||
|
[ "$s3" = "1" ] && append_dest_port "$s3_port"
|
||||||
|
[ "$ftp" = "1" ] && append_dest_port "$ftp_port"
|
||||||
|
[ "$sftp" = "1" ] && append_dest_port "$sftp_port"
|
||||||
|
|
||||||
uci -q delete firewall.openlist
|
uci -q delete firewall.openlist
|
||||||
uci set firewall.openlist=rule
|
uci -q delete firewall.openlist2
|
||||||
uci set firewall.openlist.name="openlist"
|
uci -q delete firewall.openlist2_quic
|
||||||
uci set firewall.openlist.target="ACCEPT"
|
if [ -z "$dest_ports" ]; then
|
||||||
uci set firewall.openlist.src="wan"
|
uci commit firewall
|
||||||
uci set firewall.openlist.proto="tcp"
|
/etc/init.d/firewall reload >/dev/null 2>&1
|
||||||
uci set firewall.openlist.dest_port="$port $ftp_port $sftp_port"
|
return 0
|
||||||
uci set firewall.openlist.enabled="1"
|
fi
|
||||||
|
|
||||||
|
uci set firewall.openlist2=rule
|
||||||
|
uci set firewall.openlist2.name="openlist2"
|
||||||
|
uci set firewall.openlist2.target="ACCEPT"
|
||||||
|
uci set firewall.openlist2.src="wan"
|
||||||
|
uci set firewall.openlist2.proto="tcp"
|
||||||
|
uci set firewall.openlist2.dest_port="$dest_ports"
|
||||||
|
uci set firewall.openlist2.enabled="1"
|
||||||
|
if [ "$listen_enable_h3" = "1" ] && [ -n "$https_port" ] && [ "$https_port" != "-1" ]; then
|
||||||
|
uci set firewall.openlist2_quic=rule
|
||||||
|
uci set firewall.openlist2_quic.name="openlist2 QUIC"
|
||||||
|
uci set firewall.openlist2_quic.target="ACCEPT"
|
||||||
|
uci set firewall.openlist2_quic.src="wan"
|
||||||
|
uci set firewall.openlist2_quic.proto="udp"
|
||||||
|
uci set firewall.openlist2_quic.dest_port="$https_port"
|
||||||
|
uci set firewall.openlist2_quic.enabled="1"
|
||||||
|
fi
|
||||||
uci commit firewall
|
uci commit firewall
|
||||||
/etc/init.d/firewall reload >/dev/null 2>&1
|
/etc/init.d/firewall reload >/dev/null 2>&1
|
||||||
elif [ "$external_access" = "deny" ]; then
|
elif [ "$external_access" = "deny" ]; then
|
||||||
uci -q delete firewall.openlist
|
uci -q delete firewall.openlist
|
||||||
|
uci -q delete firewall.openlist2
|
||||||
|
uci -q delete firewall.openlist2_quic
|
||||||
uci commit firewall
|
uci commit firewall
|
||||||
/etc/init.d/firewall reload >/dev/null 2>&1
|
/etc/init.d/firewall reload >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
@@ -116,19 +245,29 @@ start_service() {
|
|||||||
# Remove firewall rules when stopping openlist process via uci
|
# Remove firewall rules when stopping openlist process via uci
|
||||||
external_access="deny" set_firewall
|
external_access="deny" set_firewall
|
||||||
|
|
||||||
[ $enabled -ne 1 ] && return 1
|
[ "$enabled" -ne 1 ] && return 1
|
||||||
mkdir -p "$temp_dir" "$data_dir"
|
mkdir -p "$temp_dir" "$data_dir"
|
||||||
[ "$ssl" -eq 1 ] && https_port=$port http_port="-1" || https_port="-1" http_port=$port
|
[ -n "$listen_http_port" ] || listen_http_port="5244"
|
||||||
|
[ -n "$listen_https_port" ] || listen_https_port="-1"
|
||||||
|
http_port="$listen_http_port"
|
||||||
|
https_port="$listen_https_port"
|
||||||
if [ -e /proc/uptime ]; then
|
if [ -e /proc/uptime ]; then
|
||||||
[ $(awk -F. '{print $1}' /proc/uptime) -lt "120" ] && delayed_start=$delayed_start || delayed_start=0
|
boot_uptime="$(awk -F. '{print $1}' /proc/uptime)"
|
||||||
else
|
[ "$boot_uptime" -lt "120" ] || delayed_start=0
|
||||||
delayed_start=$delayed_start
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ "$allow_wan" -eq "1" ] && external_access="allow" || external_access="deny"
|
[ "$allow_wan" -eq "1" ] && external_access="allow" || external_access="deny"
|
||||||
|
|
||||||
set_firewall
|
set_firewall
|
||||||
> "$log_path"
|
|
||||||
|
log_dir="${log_path%/*}"
|
||||||
|
[ "$log_dir" != "$log_path" ] && mkdir -p "$log_dir"
|
||||||
|
: > "$log_path"
|
||||||
|
|
||||||
|
last_launched_version=""
|
||||||
|
if command -v jsonfilter >/dev/null 2>&1 && [ -s "$data_dir/config.json" ]; then
|
||||||
|
last_launched_version="$(jsonfilter -qi "$data_dir/config.json" -e '@.last_launched_version' 2>/dev/null)"
|
||||||
|
fi
|
||||||
|
|
||||||
# init config
|
# init config
|
||||||
json_init
|
json_init
|
||||||
@@ -154,21 +293,23 @@ start_service() {
|
|||||||
|
|
||||||
# meilisearch
|
# meilisearch
|
||||||
json_add_object "meilisearch"
|
json_add_object "meilisearch"
|
||||||
json_add_string "host" "http://localhost:7700"
|
json_add_string "host" "$meilisearch_host"
|
||||||
json_add_string "api_key" ""
|
json_add_string "api_key" "$meilisearch_api_key"
|
||||||
json_add_string "index_prefix" ""
|
json_add_string "index" "$meilisearch_index"
|
||||||
json_close_object
|
json_close_object
|
||||||
|
|
||||||
# scheme
|
# scheme
|
||||||
json_add_object "scheme"
|
json_add_object "scheme"
|
||||||
json_add_string "address" "0.0.0.0"
|
json_add_string "address" "$listen_addr"
|
||||||
json_add_int "http_port" "$http_port"
|
json_add_int "http_port" "$http_port"
|
||||||
json_add_int "https_port" "$https_port"
|
json_add_int "https_port" "$https_port"
|
||||||
json_add_boolean "force_https" "$force_https"
|
json_add_boolean "force_https" "$force_https"
|
||||||
json_add_string "cert_file" "$ssl_cert"
|
json_add_string "cert_file" "$ssl_cert"
|
||||||
json_add_string "key_file" "$ssl_key"
|
json_add_string "key_file" "$ssl_key"
|
||||||
json_add_string "unix_file" ""
|
json_add_string "unix_file" "$listen_unix_file"
|
||||||
json_add_string "unix_file_perm" ""
|
json_add_string "unix_file_perm" "$listen_unix_file_perm"
|
||||||
|
json_add_boolean "enable_h2c" "$listen_enable_h2c"
|
||||||
|
json_add_boolean "enable_h3" "$listen_enable_h3"
|
||||||
json_close_object
|
json_close_object
|
||||||
|
|
||||||
json_add_string "temp_dir" "$temp_dir"
|
json_add_string "temp_dir" "$temp_dir"
|
||||||
@@ -183,9 +324,23 @@ start_service() {
|
|||||||
json_add_int "max_backups" "$log_max_backups"
|
json_add_int "max_backups" "$log_max_backups"
|
||||||
json_add_int "max_age" "$log_max_age"
|
json_add_int "max_age" "$log_max_age"
|
||||||
json_add_boolean "compress" "$log_compress"
|
json_add_boolean "compress" "$log_compress"
|
||||||
|
json_add_object "filter"
|
||||||
|
json_add_boolean "enable" "$log_filter"
|
||||||
|
json_add_array "filters"
|
||||||
|
json_add_filter_object "" "/ping" ""
|
||||||
|
json_add_filter_object "" "" "HEAD"
|
||||||
|
json_add_filter_object "" "/dav/" "PROPFIND"
|
||||||
|
if [ -n "$log_filter_cidr" ] || [ -n "$log_filter_path" ] || [ -n "$log_filter_method" ]; then
|
||||||
|
json_add_filter_object "$log_filter_cidr" "$log_filter_path" "$log_filter_method"
|
||||||
|
fi
|
||||||
|
json_close_array
|
||||||
|
json_close_object
|
||||||
json_close_object
|
json_close_object
|
||||||
|
|
||||||
json_add_int "delayed_start" "$delayed_start"
|
json_add_int "delayed_start" "$delayed_start"
|
||||||
|
json_add_int "auto_memory_limit" "$auto_memory_limit"
|
||||||
|
json_add_int "min_free_memory" "$min_free_memory"
|
||||||
|
json_add_int "max_block_limit" "$max_block_limit"
|
||||||
json_add_int "max_connections" "$max_connections"
|
json_add_int "max_connections" "$max_connections"
|
||||||
json_add_int "max_concurrency" "$max_concurrency"
|
json_add_int "max_concurrency" "$max_concurrency"
|
||||||
json_add_boolean "tls_insecure_skip_verify" "$tls_insecure_skip_verify"
|
json_add_boolean "tls_insecure_skip_verify" "$tls_insecure_skip_verify"
|
||||||
@@ -195,32 +350,46 @@ start_service() {
|
|||||||
json_add_object "download"
|
json_add_object "download"
|
||||||
json_add_int "workers" "$download_workers"
|
json_add_int "workers" "$download_workers"
|
||||||
json_add_int "max_retry" "$download_max_retry"
|
json_add_int "max_retry" "$download_max_retry"
|
||||||
|
json_add_boolean "task_persistant" "$download_task_persistant"
|
||||||
json_close_object
|
json_close_object
|
||||||
json_add_object "transfer"
|
json_add_object "transfer"
|
||||||
json_add_int "workers" "$transfer_workers"
|
json_add_int "workers" "$transfer_workers"
|
||||||
json_add_int "max_retry" "$transfer_max_retry"
|
json_add_int "max_retry" "$transfer_max_retry"
|
||||||
|
json_add_boolean "task_persistant" "$transfer_task_persistant"
|
||||||
json_close_object
|
json_close_object
|
||||||
json_add_object "upload"
|
json_add_object "upload"
|
||||||
json_add_int "workers" "$upload_workers"
|
json_add_int "workers" "$upload_workers"
|
||||||
json_add_int "max_retry" "$upload_max_retry"
|
json_add_int "max_retry" "$upload_max_retry"
|
||||||
|
json_add_boolean "task_persistant" "$upload_task_persistant"
|
||||||
json_close_object
|
json_close_object
|
||||||
json_add_object "copy"
|
json_add_object "copy"
|
||||||
json_add_int "workers" "$copy_workers"
|
json_add_int "workers" "$copy_workers"
|
||||||
json_add_int "max_retry" "$copy_max_retry"
|
json_add_int "max_retry" "$copy_max_retry"
|
||||||
|
json_add_boolean "task_persistant" "$copy_task_persistant"
|
||||||
json_close_object
|
json_close_object
|
||||||
|
json_add_object "move"
|
||||||
|
json_add_int "workers" "$move_workers"
|
||||||
|
json_add_int "max_retry" "$move_max_retry"
|
||||||
|
json_add_boolean "task_persistant" "$move_task_persistant"
|
||||||
|
json_close_object
|
||||||
|
json_add_object "decompress"
|
||||||
|
json_add_int "workers" "$decompress_workers"
|
||||||
|
json_add_int "max_retry" "$decompress_max_retry"
|
||||||
|
json_add_boolean "task_persistant" "$decompress_task_persistant"
|
||||||
|
json_close_object
|
||||||
|
json_add_object "decompress_upload"
|
||||||
|
json_add_int "workers" "$decompress_upload_workers"
|
||||||
|
json_add_int "max_retry" "$decompress_upload_max_retry"
|
||||||
|
json_add_boolean "task_persistant" "$decompress_upload_task_persistant"
|
||||||
|
json_close_object
|
||||||
|
json_add_boolean "allow_retry_canceled" "$allow_retry_canceled"
|
||||||
json_close_object
|
json_close_object
|
||||||
|
|
||||||
# cors
|
# cors
|
||||||
json_add_object "cors"
|
json_add_object "cors"
|
||||||
json_add_array "allow_origins"
|
json_add_csv_array "allow_origins" "$cors_allow_origins"
|
||||||
json_add_string "" "$cors_allow_origins"
|
json_add_csv_array "allow_methods" "$cors_allow_methods"
|
||||||
json_close_array
|
json_add_csv_array "allow_headers" "$cors_allow_headers"
|
||||||
json_add_array "allow_methods"
|
|
||||||
json_add_string "" "$cors_allow_methods"
|
|
||||||
json_close_array
|
|
||||||
json_add_array "allow_headers"
|
|
||||||
json_add_string "" "$cors_allow_headers"
|
|
||||||
json_close_array
|
|
||||||
json_close_object
|
json_close_object
|
||||||
|
|
||||||
# s3
|
# s3
|
||||||
@@ -250,6 +419,9 @@ start_service() {
|
|||||||
json_add_string "listen" ":$sftp_port"
|
json_add_string "listen" ":$sftp_port"
|
||||||
json_close_object
|
json_close_object
|
||||||
|
|
||||||
|
json_add_string "last_launched_version" "$last_launched_version"
|
||||||
|
json_add_string "proxy_address" "$proxy_address"
|
||||||
|
|
||||||
json_dump > "$data_dir/config.json"
|
json_dump > "$data_dir/config.json"
|
||||||
|
|
||||||
procd_open_instance openlist2
|
procd_open_instance openlist2
|
||||||
@@ -257,9 +429,9 @@ start_service() {
|
|||||||
procd_set_param command $PROG
|
procd_set_param command $PROG
|
||||||
procd_append_param command server
|
procd_append_param command server
|
||||||
procd_append_param command --data "$data_dir"
|
procd_append_param command --data "$data_dir"
|
||||||
procd_set_param file "$data_dir/config.json"
|
procd_append_param command --no-prefix
|
||||||
procd_set_param stdout 0
|
[ "$debug" = "1" ] && procd_append_param command --debug
|
||||||
procd_set_param stderr 0
|
[ "$debug" = "1" ] && procd_set_param stderr 1
|
||||||
procd_set_param respawn
|
procd_set_param respawn
|
||||||
procd_set_param limits core="unlimited"
|
procd_set_param limits core="unlimited"
|
||||||
procd_set_param limits nofile="200000 200000"
|
procd_set_param limits nofile="200000 200000"
|
||||||
@@ -270,11 +442,13 @@ service_triggers() {
|
|||||||
procd_add_reload_trigger "openlist2"
|
procd_add_reload_trigger "openlist2"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reload_service() {
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
stop_service() {
|
stop_service() {
|
||||||
external_access="deny"
|
external_access="deny"
|
||||||
set_firewall
|
set_firewall
|
||||||
}
|
}
|
||||||
|
|
||||||
reload_service() {
|
|
||||||
restart
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/* Polyfill service v3.111.0
|
|
||||||
* Disable minification (remove `.min` from URL path) for more info */
|
|
||||||
|
|
||||||
(function(self, undefined) {function ArrayCreate(r){if(1/r==-Infinity&&(r=0),r>Math.pow(2,32)-1)throw new RangeError("Invalid array length");var n=[];return n.length=r,n}function Call(t,l){var n=arguments.length>2?arguments[2]:[];if(!1===IsCallable(t))throw new TypeError(Object.prototype.toString.call(t)+"is not a function.");return t.apply(l,n)}function Get(n,t){return n[t]}function HasOwnProperty(r,t){return Object.prototype.hasOwnProperty.call(r,t)}function HasProperty(n,r){return r in n}function IsArray(r){return"[object Array]"===Object.prototype.toString.call(r)}function IsCallable(n){return"function"==typeof n}function RequireObjectCoercible(e){if(null===e||e===undefined)throw TypeError(Object.prototype.toString.call(e)+" is not coercible to Object.");return e}function SameValueNonNumber(e,n){return e===n}function ToBoolean(o){return Boolean(o)}function ToObject(e){if(null===e||e===undefined)throw TypeError();return Object(e)}function GetV(t,e){return ToObject(t)[e]}function GetMethod(e,n){var r=GetV(e,n);if(null===r||r===undefined)return undefined;if(!1===IsCallable(r))throw new TypeError("Method not callable: "+n);return r}function Type(e){switch(typeof e){case"undefined":return"undefined";case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"symbol":return"symbol";default:return null===e?"null":"Symbol"in self&&(e instanceof self.Symbol||e.constructor===self.Symbol)?"symbol":"object"}}function GetPrototypeFromConstructor(t,o){var r=Get(t,"prototype");return"object"!==Type(r)&&(r=o),r}var GetSubstitution=function(){function e(e){return/^[0-9]$/.test(e)}return function t(n,r,l,i,a,f){for(var s=n.length,h=r.length,c=l+s,u=i.length,v="",g=0;g<f.length;g+=1){var o=f.charAt(g),$=g+1>=f.length,d=g+2>=f.length;if("$"!==o||$)v+=f.charAt(g);else{var p=f.charAt(g+1);if("$"===p)v+="$",g+=1;else if("&"===p)v+=n,g+=1;else if("`"===p)v+=0===l?"":r.slice(0,l-1),g+=1;else if("'"===p)v+=c>=h?"":r.slice(c),g+=1;else{var A=d?null:f.charAt(g+2);if(!e(p)||"0"===p||!d&&e(A))if(e(p)&&(d||e(A))){var y=p+A,I=parseInt(y,10)-1;v+=y<=u&&"Undefined"===Type(i[I])?"":i[I],g+=2}else v+="$";else{var T=parseInt(p,10);v+=T<=u&&"Undefined"===Type(i[T-1])?"":i[T-1],g+=1}}}}return v}}();function IsConstructor(t){return"object"===Type(t)&&("function"==typeof t&&!!t.prototype)}function IsRegExp(e){if("object"!==Type(e))return!1;var n="Symbol"in self&&"match"in self.Symbol?Get(e,self.Symbol.match):undefined;if(n!==undefined)return ToBoolean(n);try{var t=e.lastIndex;return e.lastIndex=0,RegExp.prototype.exec.call(e),!0}catch(l){}finally{e.lastIndex=t}return!1}function OrdinaryToPrimitive(r,t){if("string"===t)var e=["toString","valueOf"];else e=["valueOf","toString"];for(var i=0;i<e.length;++i){var n=e[i],a=Get(r,n);if(IsCallable(a)){var o=Call(a,r);if("object"!==Type(o))return o}}throw new TypeError("Cannot convert to primitive.")}function SameValueZero(n,e){return Type(n)===Type(e)&&("number"===Type(n)?!(!isNaN(n)||!isNaN(e))||(1/n===Infinity&&1/e==-Infinity||(1/n==-Infinity&&1/e===Infinity||n===e)):SameValueNonNumber(n,e))}function StringIndexOf(r,n,e){var f=r.length;if(""===n&&e<=f)return e;for(var t=n.length,a=e,i=-1;a+t<=f;){for(var g=!0,o=0;o<t;o+=1)if(r[a+o]!==n[o]){g=!1;break}if(g){i=a;break}a+=1}return i}function ToInteger(n){if("symbol"===Type(n))throw new TypeError("Cannot convert a Symbol value to a number");var t=Number(n);return isNaN(t)?0:1/t===Infinity||1/t==-Infinity||t===Infinity||t===-Infinity?t:(t<0?-1:1)*Math.floor(Math.abs(t))}function ToLength(n){var t=ToInteger(n);return t<=0?0:Math.min(t,Math.pow(2,53)-1)}function ToPrimitive(e){var t=arguments.length>1?arguments[1]:undefined;if("object"===Type(e)){if(arguments.length<2)var i="default";else t===String?i="string":t===Number&&(i="number");var r="function"==typeof self.Symbol&&"symbol"==typeof self.Symbol.toPrimitive?GetMethod(e,self.Symbol.toPrimitive):undefined;if(r!==undefined){var n=Call(r,e,[i]);if("object"!==Type(n))return n;throw new TypeError("Cannot convert exotic object to primitive.")}return"default"===i&&(i="number"),OrdinaryToPrimitive(e,i)}return e}function ToString(t){switch(Type(t)){case"symbol":throw new TypeError("Cannot convert a Symbol value to a string");case"object":return ToString(ToPrimitive(t,String));default:return String(t)}}function ToPropertyKey(r){var i=ToPrimitive(r,String);return"symbol"===Type(i)?i:ToString(i)}if (!("defineProperty"in Object&&function(){try{var e={}
|
|
||||||
return Object.defineProperty(e,"test",{value:42}),!0}catch(t){return!1}}()
|
|
||||||
)) {!function(e){var t=Object.prototype.hasOwnProperty.call(Object.prototype,"__defineGetter__"),r="A property cannot both have accessors and be writable or have a value";Object.defineProperty=function n(o,i,f){if(e&&(o===window||o===document||o===Element.prototype||o instanceof Element))return e(o,i,f);if(null===o||!(o instanceof Object||"object"==typeof o))throw new TypeError("Object.defineProperty called on non-object");if(!(f instanceof Object))throw new TypeError("Property description must be an object");var c=String(i),a="value"in f||"writable"in f,p="get"in f&&typeof f.get,s="set"in f&&typeof f.set;if(p){if(p===undefined)return o;if("function"!==p)throw new TypeError("Getter must be a function");if(!t)throw new TypeError("Getters & setters cannot be defined on this javascript engine");if(a)throw new TypeError(r);Object.__defineGetter__.call(o,c,f.get)}else o[c]=f.value;if(s){if(s===undefined)return o;if("function"!==s)throw new TypeError("Setter must be a function");if(!t)throw new TypeError("Getters & setters cannot be defined on this javascript engine");if(a)throw new TypeError(r);Object.__defineSetter__.call(o,c,f.set)}return"value"in f&&(o[c]=f.value),o}}(Object.defineProperty);}function CreateDataProperty(e,r,t){var a={value:t,writable:!0,enumerable:!0,configurable:!0};try{return Object.defineProperty(e,r,a),!0}catch(n){return!1}}function CreateDataPropertyOrThrow(t,r,o){var e=CreateDataProperty(t,r,o);if(!e)throw new TypeError("Cannot assign value `"+Object.prototype.toString.call(o)+"` to property `"+Object.prototype.toString.call(r)+"` on object `"+Object.prototype.toString.call(t)+"`");return e}function CreateMethodProperty(e,r,t){var a={value:t,writable:!0,enumerable:!1,configurable:!0};Object.defineProperty(e,r,a)}if (!("forEach"in Array.prototype
|
|
||||||
)) {CreateMethodProperty(Array.prototype,"forEach",function r(t){var e=ToObject(this),n=e instanceof String?e.split(""):e,o=ToLength(Get(e,"length"));if(!1===IsCallable(t))throw new TypeError(t+" is not a function");for(var a=arguments.length>1?arguments[1]:undefined,i=0;i<o;){var f=ToString(i);if(HasProperty(n,f)){var l=Get(n,f);Call(t,a,[l,i,e])}i+=1}return undefined});}if (!("includes"in Array.prototype
|
|
||||||
)) {CreateMethodProperty(Array.prototype,"includes",function e(r){"use strict";var t=ToObject(this),o=ToLength(Get(t,"length"));if(0===o)return!1;var n=ToInteger(arguments[1]);if(n>=0)var a=n;else(a=o+n)<0&&(a=0);for(;a<o;){var i=Get(t,ToString(a));if(SameValueZero(r,i))return!0;a+=1}return!1});}if (!("indexOf"in Array.prototype
|
|
||||||
)) {CreateMethodProperty(Array.prototype,"indexOf",function r(t){var e=ToObject(this),n=ToLength(Get(e,"length"));if(0===n)return-1;var i=ToInteger(arguments[1]);if(i>=n)return-1;if(i>=0)var o=1/i==-Infinity?0:i;else(o=n+i)<0&&(o=0);for(;o<n;){if(HasProperty(e,ToString(o))){if(t===Get(e,ToString(o)))return o}o+=1}return-1});}if (!("bind"in Function.prototype
|
|
||||||
)) {CreateMethodProperty(Function.prototype,"bind",function t(n){var r=Array,o=Object,e=r.prototype,l=function g(){},p=e.slice,a=e.concat,i=e.push,c=Math.max,u=this;if(!IsCallable(u))throw new TypeError("Function.prototype.bind called on incompatible "+u);for(var y,h=p.call(arguments,1),s=function(){if(this instanceof y){var t=u.apply(this,a.call(h,p.call(arguments)));return o(t)===t?t:this}return u.apply(n,a.call(h,p.call(arguments)))},f=c(0,u.length-h.length),b=[],d=0;d<f;d++)i.call(b,"$"+d);return y=Function("binder","return function ("+b.join(",")+"){ return binder.apply(this, arguments); }")(s),u.prototype&&(l.prototype=u.prototype,y.prototype=new l,l.prototype=null),y});}if (!("freeze"in Object
|
|
||||||
)) {CreateMethodProperty(Object,"freeze",function e(r){return r});}if (!("getOwnPropertyDescriptor"in Object&&"function"==typeof Object.getOwnPropertyDescriptor&&function(){try{return"3"===Object.getOwnPropertyDescriptor("13.7",1).value}catch(t){return!1}}()
|
|
||||||
)) {!function(){var e=Object.getOwnPropertyDescriptor,t=function(){try{return 1===Object.defineProperty(document.createElement("div"),"one",{get:function(){return 1}}).one}catch(e){return!1}},r={}.toString,n="".split;CreateMethodProperty(Object,"getOwnPropertyDescriptor",function c(o,i){var a=ToObject(o);a=("string"===Type(a)||a instanceof String)&&"[object String]"==r.call(o)?n.call(o,""):Object(o);var u=ToPropertyKey(i);if(t)try{return e(a,u)}catch(l){}if(HasOwnProperty(a,u))return{enumerable:!0,configurable:!0,writable:!0,value:a[u]}})}();}if (!("getPrototypeOf"in Object
|
|
||||||
)) {CreateMethodProperty(Object,"getPrototypeOf",function t(o){if(o!==Object(o))throw new TypeError("Object.getPrototypeOf called on non-object");var e=o.__proto__;return e||null===e?e:"function"==typeof o.constructor&&o instanceof o.constructor?o.constructor.prototype:o instanceof Object?Object.prototype:null});}if (!("keys"in Object&&function(){return 2===Object.keys(arguments).length}(1,2)&&function(){try{return Object.keys(""),!0}catch(t){return!1}}()
|
|
||||||
)) {CreateMethodProperty(Object,"keys",function(){"use strict";function t(){var t;try{t=Object.create({})}catch(r){return!0}return o.call(t,"__proto__")}function r(t){var r=n.call(t),e="[object Arguments]"===r;return e||(e="[object Array]"!==r&&null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&"[object Function]"===n.call(t.callee)),e}var e=Object.prototype.hasOwnProperty,n=Object.prototype.toString,o=Object.prototype.propertyIsEnumerable,c=!o.call({toString:null},"toString"),l=o.call(function(){},"prototype"),i=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],u=function(t){var r=t.constructor;return r&&r.prototype===t},a={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},f=function(){if("undefined"==typeof window)return!1;for(var t in window)try{if(!a["$"+t]&&e.call(window,t)&&null!==window[t]&&"object"==typeof window[t])try{u(window[t])}catch(r){return!0}}catch(r){return!0}return!1}(),p=function(t){if("undefined"==typeof window||!f)return u(t);try{return u(t)}catch(r){return!1}};return function s(o){var u="[object Function]"===n.call(o),a=r(o),f="[object String]"===n.call(o),s=[];if(o===undefined||null===o)throw new TypeError("Cannot convert undefined or null to object");var y=l&&u;if(f&&o.length>0&&!e.call(o,0))for(var h=0;h<o.length;++h)s.push(String(h));if(a&&o.length>0)for(var g=0;g<o.length;++g)s.push(String(g));else for(var w in o)t()&&"__proto__"===w||y&&"prototype"===w||!e.call(o,w)||s.push(String(w));if(c)for(var d=p(o),$=0;$<i.length;++$)d&&"constructor"===i[$]||!e.call(o,i[$])||s.push(i[$]);return s}}());}if (!("defineProperties"in Object
|
|
||||||
)) {CreateMethodProperty(Object,"defineProperties",function e(r,t){if("object"!==Type(r))throw new TypeError("Object.defineProperties called on non-object");for(var o=ToObject(t),n=Object.keys(o),c=[],i=0;i<n.length;i++){var b=n[i],f=Object.getOwnPropertyDescriptor(o,b);if(f!==undefined&&f.enumerable){var p=Get(o,b),a=p;c.push([b,a])}}for(var j=0;j<c.length;j++){var d=c[j][0];a=c[j][1],Object.defineProperty(r,d,a)}return r});}if (!("create"in Object
|
|
||||||
)) {!function(){function e(){}if({__proto__:null}instanceof Object)t=function(){var e=document.createElement("iframe");e.style.display="none";var o=document.body||document.documentElement;o.appendChild(e),e.src="javascript:";var n=e.contentWindow.Object.prototype;o.removeChild(e),e=null,delete n.constructor,delete n.hasOwnProperty,delete n.propertyIsEnumerable,delete n.isPrototypeOf,delete n.toLocaleString,delete n.toString,delete n.valueOf;var r=function l(){};return r.prototype=n,t=function(){return new r},new r};else var t=function(){return{__proto__:null}};CreateMethodProperty(Object,"create",function o(n,r){if("object"!==Type(n)&&"null"!==Type(n))throw new TypeError("Object prototype may only be an Object or null");if("null"===Type(n))var l=t();else e.prototype=n,l=new e,l.__proto__=n,l.constructor.prototype=n,l.__proto__=n;return 1 in arguments?Object.defineProperties(l,r):l})}();}function OrdinaryCreateFromConstructor(r,e){var t=arguments[2]||{},o=GetPrototypeFromConstructor(r,e),a=Object.create(o);for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&Object.defineProperty(a,n,{configurable:!0,enumerable:!1,writable:!0,value:t[n]});return a}function Construct(r){var t=arguments.length>2?arguments[2]:r,o=arguments.length>1?arguments[1]:[];if(!IsConstructor(r))throw new TypeError("F must be a constructor.");if(!IsConstructor(t))throw new TypeError("newTarget must be a constructor.");if(t===r)return new(Function.prototype.bind.apply(r,[null].concat(o)));var n=OrdinaryCreateFromConstructor(t,Object.prototype);return Call(r,n,o)}function ArraySpeciesCreate(e,r){if(0===r&&1/r==-Infinity&&(r=0),!1===IsArray(e))return ArrayCreate(r);var n=Get(e,"constructor");if("object"===Type(n)&&null===(n="Symbol"in self&&"species"in self.Symbol?Get(n,self.Symbol.species):undefined)&&(n=undefined),n===undefined)return ArrayCreate(r);if(!IsConstructor(n))throw new TypeError("C must be a constructor");return Construct(n,[r])}if (!("filter"in Array.prototype
|
|
||||||
)) {CreateMethodProperty(Array.prototype,"filter",function r(e){var t=ToObject(this),o=ToLength(Get(t,"length"));if(!1===IsCallable(e))throw new TypeError(e+" is not a function");for(var a=arguments.length>1?arguments[1]:undefined,n=ArraySpeciesCreate(t,0),i=0,l=0;i<o;){var f=ToString(i);if(HasProperty(t,f)){var h=Get(t,f);ToBoolean(Call(e,a,[h,i,t]))&&(CreateDataPropertyOrThrow(n,ToString(l),h),l+=1)}i+=1}return n});}if (!("map"in Array.prototype
|
|
||||||
)) {CreateMethodProperty(Array.prototype,"map",function r(e){var t=ToObject(this),a=ToLength(Get(t,"length"));if(!1===IsCallable(e))throw new TypeError(e+" is not a function");for(var o=arguments.length>1?arguments[1]:undefined,n=ArraySpeciesCreate(t,a),i=0;i<a;){var p=ToString(i);if(HasProperty(t,p)){var h=Get(t,p),l=Call(e,o,[h,i,t]);CreateDataPropertyOrThrow(n,p,l)}i+=1}return n});}if (!("getOwnPropertyNames"in Object&&function(){try{return Object.getOwnPropertyNames(1),!0}catch(t){return!1}}()
|
|
||||||
)) {!function(){var t={}.toString,e="".split,r=[].concat,o=Object.prototype.hasOwnProperty,c=Object.getOwnPropertyNames||Object.keys,n="object"==typeof self?c(self):[];CreateMethodProperty(Object,"getOwnPropertyNames",function l(a){var p=ToObject(a);if("[object Window]"===t.call(p))try{return c(p)}catch(j){return r.call([],n)}p="[object String]"==t.call(p)?e.call(p,""):Object(p);for(var i=c(p),s=["length","prototype"],O=0;O<s.length;O++){var b=s[O];o.call(p,b)&&!i.includes(b)&&i.push(b)}if(i.includes("__proto__")){var f=i.indexOf("__proto__");i.splice(f,1)}return i})}();}if (!("flags"in RegExp.prototype
|
|
||||||
)) {Object.defineProperty(RegExp.prototype,"flags",{configurable:!0,enumerable:!1,get:function(){var e=this;if("object"!==Type(e))throw new TypeError("Method called on incompatible type: must be an object.");var o="";return ToBoolean(Get(e,"global"))&&(o+="g"),ToBoolean(Get(e,"ignoreCase"))&&(o+="i"),ToBoolean(Get(e,"multiline"))&&(o+="m"),ToBoolean(Get(e,"unicode"))&&(o+="u"),ToBoolean(Get(e,"sticky"))&&(o+="y"),o}});}if (!("Symbol"in self&&0===self.Symbol.length
|
|
||||||
)) {!function(e,r,n){"use strict";function t(e){if("symbol"===Type(e))return e;throw TypeError(e+" is not a symbol")}var u,o=function(){try{var r={};return e.defineProperty(r,"t",{configurable:!0,enumerable:!1,get:function(){return!0},set:undefined}),!!r.t}catch(n){return!1}}(),i=0,a=""+Math.random(),c="__symbol:",l=c.length,f="__symbol@@"+a,s={},v="defineProperty",y="defineProperties",b="getOwnPropertyNames",p="getOwnPropertyDescriptor",h="propertyIsEnumerable",m=e.prototype,d=m.hasOwnProperty,g=m[h],w=m.toString,S=Array.prototype.concat,P=e.getOwnPropertyNames?e.getOwnPropertyNames(self):[],O=e[b],j=function $(e){if("[object Window]"===w.call(e))try{return O(e)}catch(r){return S.call([],P)}return O(e)},E=e[p],N=e.create,T=e.keys,_=e.freeze||e,k=e[v],F=e[y],I=E(e,b),x=function(e,r,n){if(!d.call(e,f))try{k(e,f,{enumerable:!1,configurable:!1,writable:!1,value:{}})}catch(t){e[f]={}}e[f]["@@"+r]=n},z=function(e,r){var n=N(e);return j(r).forEach(function(e){q.call(r,e)&&L(n,e,r[e])}),n},A=function(e){var r=N(e);return r.enumerable=!1,r},D=function ee(){},M=function(e){return e!=f&&!d.call(H,e)},W=function(e){return e!=f&&d.call(H,e)},q=function re(e){var r=""+e;return W(r)?d.call(this,r)&&this[f]&&this[f]["@@"+r]:g.call(this,e)},B=function(r){var n={enumerable:!1,configurable:!0,get:D,set:function(e){u(this,r,{enumerable:!1,configurable:!0,writable:!0,value:e}),x(this,r,!0)}};try{k(m,r,n)}catch(o){m[r]=n.value}H[r]=k(e(r),"constructor",J);var t=E(G.prototype,"description");return t&&k(H[r],"description",t),_(H[r])},C=function(e){var r=t(e);if(Y){var n=V(r);if(""!==n)return n.slice(1,-1)}if(s[r]!==undefined)return s[r];var u=r.toString(),o=u.lastIndexOf("0.");return u=u.slice(10,o),""===u?undefined:u},G=function ne(){var r=arguments[0];if(this instanceof ne)throw new TypeError("Symbol is not a constructor");var n=c.concat(r||"",a,++i);r===undefined||null!==r&&!isNaN(r)&&""!==String(r)||(s[n]=String(r));var t=B(n);return o||e.defineProperty(t,"description",{configurable:!0,enumerable:!1,value:C(t)}),t},H=N(null),J={value:G},K=function(e){return H[e]},L=function te(e,r,n){var t=""+r;return W(t)?(u(e,t,n.enumerable?A(n):n),x(e,t,!!n.enumerable)):k(e,r,n),e},Q=function(e){return function(r){return d.call(e,f)&&d.call(e[f],"@@"+r)}},R=function ue(e){return j(e).filter(e===m?Q(e):W).map(K)};I.value=L,k(e,v,I),I.value=R,k(e,"getOwnPropertySymbols",I),I.value=function oe(e){return j(e).filter(M)},k(e,b,I),I.value=function ie(e,r){var n=R(r);return n.length?T(r).concat(n).forEach(function(n){q.call(r,n)&&L(e,n,r[n])}):F(e,r),e},k(e,y,I),I.value=q,k(m,h,I),I.value=G,k(n,"Symbol",I),I.value=function(e){var r=c.concat(c,e,a);return r in m?H[r]:B(r)},k(G,"for",I),I.value=function(e){if(M(e))throw new TypeError(e+" is not a symbol");return d.call(H,e)?e.slice(2*l,-a.length):void 0},k(G,"keyFor",I),I.value=function ae(e,r){var n=E(e,r);return n&&W(r)&&(n.enumerable=q.call(e,r)),n},k(e,p,I),I.value=function ce(e,r){return 1===arguments.length||void 0===r?N(e):z(e,r)},k(e,"create",I);var U=null===function(){return this}.call(null);if(I.value=U?function(){var e=w.call(this);return"[object String]"===e&&W(this)?"[object Symbol]":e}:function(){if(this===window)return"[object Null]";var e=w.call(this);return"[object String]"===e&&W(this)?"[object Symbol]":e},k(m,"toString",I),u=function(e,r,n){var t=E(m,r);delete m[r],k(e,r,n),e!==m&&k(m,r,t)},function(){try{var r={};return e.defineProperty(r,"t",{configurable:!0,enumerable:!1,get:function(){return!0},set:undefined}),!!r.t}catch(n){return!1}}()){var V;try{V=Function("s","var v = s.valueOf(); return { [v]() {} }[v].name;")}catch(Z){}var X=function(){},Y=V&&"inferred"===X.name?V:null;e.defineProperty(n.Symbol.prototype,"description",{configurable:!0,enumerable:!1,get:function(){return C(this)}})}}(Object,0,self);}if (!("Symbol"in self&&"replace"in self.Symbol
|
|
||||||
)) {Object.defineProperty(Symbol,"replace",{value:Symbol("replace")});}if (!("replaceAll"in String.prototype
|
|
||||||
)) {CreateMethodProperty(String.prototype,"replaceAll",function e(r,t){"use strict";var n=RequireObjectCoercible(this);if(r!==undefined&&null!==r){if(IsRegExp(r)){var i=Get(r,"flags");if(!("flags"in RegExp.prototype||!0===r.global))throw TypeError("");if("flags"in RegExp.prototype&&(RequireObjectCoercible(i),-1===ToString(i).indexOf("g")))throw TypeError("")}var l="Symbol"in self&&"replace"in self.Symbol?GetMethod(r,self.Symbol.replace):undefined;if(l!==undefined)return Call(l,r,[n,t])}var o=ToString(n),a=ToString(r),f=IsCallable(t);!1===f&&(t=ToString(t));for(var g=a.length,s=Math.max(1,g),u=[],p=StringIndexOf(o,a,0);-1!==p;)u.push(p),p=StringIndexOf(o,a,p+s);for(var d=0,b="",S=0;S<u.length;S++){var h=o.substring(d,u[S]);if(f)var c=ToString(Call(t,undefined,[a,u[S],o]));else{var v=[];c=GetSubstitution(a,o,u[S],v,undefined,t)}b=b+h+c,d=u[S]+g}return d<o.length&&(b+=o.substring(d)),b});}})('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {});
|
|
||||||
@@ -8,12 +8,12 @@ PKG_NAME:=alwaysonline
|
|||||||
PKG_UPSTREAM_VERSION:=1.2.1
|
PKG_UPSTREAM_VERSION:=1.2.1
|
||||||
PKG_UPSTREAM_GITHASH:=206292ca68e4d6c81b215163a7bbd0cd2eb36860
|
PKG_UPSTREAM_GITHASH:=206292ca68e4d6c81b215163a7bbd0cd2eb36860
|
||||||
PKG_VERSION:=$(PKG_UPSTREAM_VERSION)~$(call version_abbrev,$(PKG_UPSTREAM_GITHASH))
|
PKG_VERSION:=$(PKG_UPSTREAM_VERSION)~$(call version_abbrev,$(PKG_UPSTREAM_GITHASH))
|
||||||
PKG_RELEASE:=10
|
PKG_RELEASE:=11
|
||||||
UCI_VERSION:=0.2025.01.25
|
UCI_VERSION:=0.2025.01.25
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://github.com/Jamesits/alwaysonline.git
|
PKG_SOURCE_URL:=https://github.com/Jamesits/alwaysonline.git
|
||||||
PKG_SOURCE_VERSION:=50198a45c01e688c49bf2809709f5e817cf2560b
|
PKG_SOURCE_VERSION:=df3039364e41a68a11ecd462b5e3491403b6ca9e
|
||||||
PKG_MIRROR_HASH:=skip
|
PKG_MIRROR_HASH:=skip
|
||||||
|
|
||||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION)
|
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION)
|
||||||
|
|||||||
Reference in new issue
Block a user