update 2026-05-13 22:22:03

This commit is contained in:
action 2026-05-13 22:22:03 +08:00
parent 7f834c9000
commit fab7abeee1
4 changed files with 793 additions and 281 deletions

View File

@ -6,34 +6,34 @@
'require uci';
'require view';
var callServiceList = rpc.declare({
const callServiceList = rpc.declare({
object: 'service',
method: 'list',
params: ['name'],
expect: { '': {} }
});
function getServiceStatus() {
return L.resolveDefault(callServiceList('openlist2'), {}).then(function (res) {
var isRunning = false;
const getServiceStatus = () => {
return L.resolveDefault(callServiceList('openlist2'), {}).then(res => {
let isRunning = false;
try {
isRunning = res['openlist2']['instances']['openlist2']['running'];
} catch (e) { }
return isRunning;
});
}
};
function renderStatus(isRunning, protocol, webport, site_url) {
var spanTemp = '<em><span style="color:%s"><strong>%s %s</strong></span></em>';
var renderHTML;
const renderStatus = (isRunning, protocol, webport, site_url) => {
const spanTemp = '<em><span style="color:%s"><strong>%s %s</strong></span></em>';
let renderHTML;
if (isRunning) {
var buttonUrl = '';
let buttonUrl = '';
if (site_url && site_url.trim() !== '') {
buttonUrl = site_url;
} else {
buttonUrl = String.format('%s//%s:%s/', protocol, window.location.hostname, webport);
buttonUrl = `${protocol}//${window.location.hostname}:${webport}/`;
}
var button = String.format('<input class="cbi-button-reload" type="button" style="margin-left: 50px" value="%s" onclick="window.open(\'%s\')">',
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 {
@ -41,20 +41,20 @@ function renderStatus(isRunning, protocol, webport, site_url) {
}
return renderHTML;
}
};
return view.extend({
load: function () {
load() {
return Promise.all([
uci.load('openlist2')
]);
},
handleResetPassword: async function (data) {
var data_dir = uci.get(data[0], '@openlist2[0]', 'data_dir') || '/etc/openlist2';
async handleResetPassword(data) {
const data_dir = uci.get(data[0], '@openlist2[0]', 'data_dir') || '/etc/openlist2';
try {
var newpassword = await fs.exec('/usr/bin/openlist2', ['admin', 'random', '--data', data_dir]);
var new_password = newpassword.stdout.match(/password:\s*(\S+)/)[1];
const newpassword = await fs.exec('/usr/bin/openlist2', ['admin', 'random', '--data', data_dir]);
const new_password = newpassword.stdout.match(/password:\s*(\S+)/)[1];
const textArea = document.createElement('textarea');
textArea.value = new_password;
@ -62,23 +62,23 @@ return view.extend({
textArea.select();
document.execCommand('copy');
document.body.removeChild(textArea);
alert(_('Username:') + 'admin\n' + _('New Password:') + new_password + '\n\n' + _('New password has been copied to clipboard.'));
alert(`${_('Username:')}admin\n${_('New Password:')}${new_password}\n\n${_('New password has been copied to clipboard.')}`);
} catch (error) {
console.error('Failed to reset password: ', error);
}
},
render: function (data) {
var m, s, o;
var webport = uci.get(data[0], '@openlist2[0]', 'port') || '5244';
var ssl = uci.get(data[0], '@openlist2[0]', 'ssl') || '0';
var protocol;
render(data) {
let m, s, o;
const webport = uci.get(data[0], '@openlist2[0]', 'port') || '5244';
const ssl = uci.get(data[0], '@openlist2[0]', 'ssl') || '0';
let protocol;
if (ssl === '0') {
protocol = 'http:';
} else if (ssl === '1') {
protocol = 'https:';
}
var 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'),
_('A file list program that supports multiple storage.'));
@ -87,26 +87,27 @@ return view.extend({
s.anonymous = true;
s.addremove = false;
s.render = function () {
poll.add(function () {
return L.resolveDefault(getServiceStatus()).then(function (res) {
var view = document.getElementById('service_status');
view.innerHTML = renderStatus(res, protocol, webport, site_url);
s.render = () => {
poll.add(() => {
return L.resolveDefault(getServiceStatus()).then(res => {
const view = document.getElementById('service_status');
if (view)
view.innerHTML = renderStatus(res, protocol, webport, site_url);
});
});
return E('div', { class: 'cbi-section', id: 'status_bar' }, [
E('p', { id: 'service_status' }, _('Collecting data...'))
]);
}
};
s = m.section(form.NamedSection, '@openlist2[0]', 'openlist2');
s.tab('basic', _('Basic Settings'));
s.tab('global', _('Global Settings'));
s.tab("log", _("Logs"));
s.tab("database", _("Database"));
s.tab("scheme", _("Web Protocol"));
s.tab('log', _('Logs'));
s.tab('database', _('Database'));
s.tab('scheme', _('Web Protocol'));
s.tab('tasks', _('Task threads'));
s.tab('cors', _('CORS Settings'));
s.tab('s3', _('Object Storage'));

View File

@ -5,21 +5,21 @@
'require uci';
'require view';
var scrollPosition = 0;
var userScrolled = false;
var logTextarea;
var log_path;
let scrollPosition = 0;
let userScrolled = false;
let logTextarea;
let log_path;
uci.load('openlist2').then(function() {
uci.load('openlist2').then(() => {
log_path = uci.get('openlist2', '@openlist2[0]', 'log_path') || '/var/log/openlist2.log';
});
function pollLog() {
const pollLog = () => {
return Promise.all([
fs.read_direct(log_path, 'text').then(function (res) {
fs.read_direct(log_path, 'text').then(res => {
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(function (data) {
]).then(data => {
logTextarea.value = data[0] || _('No log data.');
if (!userScrolled) {
@ -31,32 +31,33 @@ function pollLog() {
};
return view.extend({
handleCleanLogs: function () {
handleCleanLogs() {
return fs.write(log_path, '')
.catch(function (e) { ui.addNotification(null, E('p', e.message)) });
.catch(e => { ui.addNotification(null, E('p', e.message)) });
},
render: function () {
render() {
logTextarea = E('textarea', {
'id': 'log_content',
'class': 'cbi-input-textarea',
'wrap': 'off',
'readonly': 'readonly',
'style': 'width: calc(100% - 20px);height: 535px;margin: 10px;overflow-y: scroll;',
});
logTextarea.addEventListener('scroll', function () {
logTextarea.addEventListener('scroll', () => {
userScrolled = true;
scrollPosition = logTextarea.scrollTop;
});
var log_textarea_wrapper = E('div', { 'id': 'log_textarea' }, logTextarea);
const log_textarea_wrapper = E('div', { 'id': 'log_textarea' }, logTextarea);
setTimeout(function () {
setTimeout(() => {
poll.add(pollLog);
}, 100);
var clear_logs_button = E('input', { 'class': 'btn cbi-button-action', 'type': 'button', 'style': 'margin-left: 10px; margin-top: 10px;', 'value': _('Clear logs') });
clear_logs_button.addEventListener('click', this.handleCleanLogs.bind(this));
const clear_logs_button = E('input', { 'class': 'btn cbi-button-action', 'type': 'button', 'style': 'margin-left: 10px; margin-top: 10px;', 'value': _('Clear logs') });
clear_logs_button.addEventListener('click', L.bind(this.handleCleanLogs, this));
return E([
E('div', { 'class': 'cbi-map' }, [

View File

@ -0,0 +1,384 @@
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 ""
#: 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 ""
#: 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 ""
#: 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"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:68
msgid "Refresh every %s seconds."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:142
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:144
msgid "Reset Password"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:115
msgid "SFTP"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:386
msgid "SFTP Port"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
msgid "SQLite"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:267
msgid "SSL cert"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:268
msgid "SSL certificate file path"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:272
msgid "SSL key"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:273
msgid "SSL key file path"
msgstr ""
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:13
msgid "Setting"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:150
msgid ""
"Setting this to true will force the program to read the configuration file, "
"ignoring environment variables."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:154
msgid "Site URL"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:111
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 ""
"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 ""

View File

@ -1,267 +1,393 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: zh_Hans\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "OpenList"
msgstr "OpenList"
#: 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 "默认 0 不限制低性能设备建议设置较低的并发数10-20"
msgid "Open Web Interface"
msgstr "打开 Web 界面"
#: 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 "一款支持多种存储的目录文件列表程序。"
msgid "Setting"
msgstr "设置"
msgid "Basic Settings"
msgstr "基本设置"
msgid "Global Settings"
msgstr "全局设置"
msgid "Logs"
msgstr "日志"
msgid "Enabled"
msgstr "启用"
msgid "Port"
msgstr "端口"
msgid "Web Protocol"
msgstr "Web 协议"
msgid "Enable SSL"
msgstr "启用 SSL"
msgid "Force HTTPS"
msgstr "强制 HTTPS"
msgid "SSL cert"
msgstr "SSL 证书"
msgid "SSL certificate file path"
msgstr "SSL 证书文件路径"
msgid "SSL key"
msgstr "SSL 密钥"
msgid "SSL key file path"
msgstr "SSL 密钥文件路径"
msgid "Data directory"
msgstr "数据目录"
msgid "Cache directory"
msgstr "缓存目录"
msgid "RUNNING"
msgstr "运行中"
msgid "NOT RUNNING"
msgstr "未运行"
msgid "Collecting data..."
msgstr "收集数据..."
msgid "NAS"
msgstr "网络存储"
msgid "User Manual"
msgstr "用户手册"
msgid "Open firewall port"
msgstr "打开防火墙端口"
msgid "Enable Logs"
msgstr "启用日志"
msgid "Log path"
msgstr "日志文件路径"
msgid "Max Size (MB)"
msgstr "日志文件大小MB"
msgid "Max backups"
msgstr "日志备份数量"
msgid "Max age"
msgstr "日志保存天数"
msgid "Log Compress"
msgstr "日志压缩"
msgid "Clear logs"
msgstr "清空日志"
msgid "Reset Password"
msgstr "重置密码"
msgid "Generate a new random password."
msgstr "随机生成一个新密码。"
msgid "Username:"
msgstr "用户名:"
msgid "New Password:"
msgstr "新密码:"
msgid "New password has been copied to clipboard."
msgstr "新密码已复制到剪贴板。"
msgid "Force read config"
msgstr "强制读取配置"
msgid "Setting this to true will force the program to read the configuration file, ignoring environment variables."
msgstr "将此设置为 true 可以强制程序读取配置文件,而忽略环境变量"
msgid "Login Validity Period (hours)"
msgstr "登录有效期(小时)"
msgid "Max Connections"
msgstr "最大并发连接数"
msgid "0 is unlimited, It is recommend to set a low number of concurrency (10-20) for poor performance device"
msgstr "默认 0 不限制低性能设备建议设置较低的并发数10-20"
msgid "Max concurrency of local proxies"
msgstr "本地代理最大并发数"
msgid "0 is unlimited, Limit the maximum concurrency of local agents. The default value is 64"
msgstr "限制本地代理最大并发数,值为 0 表示不限制,默认值 64"
msgid "Site URL"
msgstr "站点地址"
msgid "CDN URL"
msgstr "CDN 地址"
msgid "JWT Key"
msgstr "JWT 密钥"
msgid "Disable TLS Verify"
msgstr "禁用 TLS 验证"
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 结尾请勿携带 '/'"
msgid "Delayed Start (seconds)"
msgstr "开机延时启动(秒)"
msgid "Database"
msgstr "数据库"
msgid "Database Type"
msgstr "数据库类型"
msgid "Database Host"
msgstr "主机"
msgid "Database Port"
msgstr "端口"
msgid "Database Username"
msgstr "用户名"
msgid "Database Password"
msgstr "密码"
msgid "Database Name"
msgstr "数据库名"
msgid "Database Table Prefix"
msgstr "数据库表前缀"
msgid "Database SSL Mode"
msgstr "SSL模式"
msgid "Database DSN"
msgstr "DSN"
msgid "Task threads"
msgstr "任务线程"
msgid "Download Workers"
msgstr "下载任务线程数"
msgid "Download Max Retry"
msgstr "下载任务重试次数"
msgid "Transfer Workers"
msgstr "中转任务线程数"
msgid "Transfer Max Retry"
msgstr "中转任务下载重试次数"
msgid "Upload Workers"
msgstr "上传任务线程数"
msgid "Upload Max Retry"
msgstr "上传任务重试次数"
msgid "Copy Workers"
msgstr "复制任务线程数"
msgid "Copy Max Retry"
msgstr "复制任务重试次数"
msgid "CORS Settings"
msgstr "跨域设置"
msgid "Allow Origins"
msgstr "允许来源Origins"
msgid "Allow Methods"
msgstr "允许方法Methods"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:327
msgid "Allow Headers"
msgstr "允许标头Headers"
msgid "Object Storage"
msgstr "对象存储"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:323
msgid "Allow Methods"
msgstr "允许方法Methods"
msgid "Enabled S3"
msgstr "启用 S3"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:319
msgid "Allow Origins"
msgstr "允许来源Origins"
msgid "Enabled FTP"
msgstr "启用 FTP"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:106
msgid "Basic Settings"
msgstr "基本设置"
msgid "FTP Port"
msgstr "FTP 端口"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:157
msgid "CDN URL"
msgstr "CDN 地址"
msgid "Max retries on port conflict during passive transfer"
msgstr "被动传输端口冲突时最大重试次数"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:112
msgid "CORS Settings"
msgstr "跨域设置"
msgid "Enable non-20 port for active transfer"
msgstr "启用非 20 端口进行主动传输"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:138
msgid "Cache directory"
msgstr "缓存目录"
msgid "Client idle timeout (seconds)"
msgstr "客户端空闲超时(秒)"
msgid "Connection timeout (seconds)"
msgstr "连接超时(秒)"
msgid "Disable active transfer mode"
msgstr "禁用主动传输模式"
msgid "Enable binary transfer mode"
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"
msgstr "运行中"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:68
msgid "Refresh every %s seconds."
msgstr "每 %s 秒刷新。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:142
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:144
msgid "Reset Password"
msgstr "重置密码"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:115
msgid "SFTP"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:386
msgid "SFTP Port"
msgstr "SFTP 端口"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
msgid "SQLite"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:267
msgid "SSL cert"
msgstr "SSL 证书"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:268
msgid "SSL certificate file path"
msgstr "SSL 证书文件路径"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:272
msgid "SSL key"
msgstr "SSL 密钥"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:273
msgid "SSL key file path"
msgstr "SSL 密钥文件路径"
#: luci-app-openlist2/root/usr/share/luci/menu.d/luci-app-openlist2.json:13
msgid "Setting"
msgstr "设置"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:150
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:154
msgid "Site URL"
msgstr "站点地址"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:111
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 ""
"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 结尾请勿携"
"带 '/'"