🍕 Sync 2026-09-14 23:30:37

This commit is contained in:
github-actions[bot] committed 2026-09-14 23:30:37 +08:00
1 parent 0603b094cf
commit 81fe4cd866
214 files changed
+10806 -2630

No files matched your search

+3 -3
View File
@@ -7,11 +7,11 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openlist2
PKG_VERSION:=1.0.4
PKG_RELEASE:=6
PKG_RELEASE:=7
LUCI_TITLE:=LuCI support for openlist
# The virtual provide forces installation of a core package with the helper.
LUCI_DEPENDS:=+openlist2 +openlist2-helper
# Require a core package with both the restricted helper and automatic TLS.
LUCI_DEPENDS:=+openlist2 +openlist2-helper +openlist2-tls
include $(TOPDIR)/feeds/luci/luci.mk
@@ -545,7 +545,7 @@ return view.extend({
};
o = addOption('scheme', form.Value, 'listen_https_port', _('HTTPS listen port'),
_('The upstream default is -1 (disabled). Set a valid port number to enable HTTPS.'));
_('Set to -1 to disable HTTPS, or 1-65535 to enable it. Leave both certificate paths empty to use an automatically generated self-signed certificate.'));
o.datatype = 'integer';
o.default = '-1';
o.rmempty = false;
@@ -554,14 +554,15 @@ return view.extend({
return validateListenPort(value);
};
o = addOption('scheme', form.Flag, 'force_https', _('Force HTTPS'));
o = addOption('scheme', form.Flag, 'force_https', _('Force HTTPS'),
_('Redirect HTTP requests to HTTPS. The HTTPS listen port enables HTTPS independently of this option.'));
o.rmempty = false;
o = addOption('scheme', form.Value, 'ssl_cert', _('SSL cert'),
_('SSL certificate file path'));
_('Leave both paths empty to manage a self-signed certificate in the TLS subdirectory of the data directory. It is reused and renewed at startup when fewer than 30 days remain. Browsers do not trust self-signed certificates automatically.'));
o = addOption('scheme', form.Value, 'ssl_key', _('SSL key'),
_('SSL key file path'));
_('For custom TLS, specify both certificate and private key paths. The certificate must be currently valid and match its private key. Custom files are never overwritten automatically.'));
o = addOption('scheme', form.Value, 'listen_unix_file', _('Unix socket file'));
@@ -572,7 +573,7 @@ return view.extend({
o.rmempty = false;
o = addOption('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.'));
_('Enable HTTP/3 over QUIC on the HTTPS listen port. HTTPS must be enabled. Certificate settings are shared with HTTPS.'));
o.rmempty = false;
// tasks
@@ -698,7 +699,8 @@ return view.extend({
o.default = 5246;
o.rmempty = false;
o = addOption('s3', form.Flag, 's3_ssl', _('Enable SSL'));
o = addOption('s3', form.Flag, 's3_ssl', _('Enable SSL'),
_('Use the same custom or automatically generated certificate as HTTPS. Configure certificate paths on the Web Protocol tab.'));
o.rmempty = false;
// ftp
@@ -708,7 +710,8 @@ return view.extend({
_('Ports or ranges to allow from WAN, for example 50000-50100. They must match the listening ports in OpenList passive port mapping. Empty means passive ports must be allowed manually.'));
o.placeholder = '50000-50100';
o.depends({ ftp: '1', allow_wan: '1' });
o = addOption('ftp', form.Flag, 'ftp', _('Enabled FTP'));
o = addOption('ftp', form.Flag, 'ftp', _('Enabled FTP'),
_('Enable FTP/SFTP access for the OpenList account in Management > Users. Also grant FTP/SFTP management permission to allow uploads and changes.'));
o.rmempty = false;
o = addOption('ftp', form.Value, 'ftp_port', _('FTP Port'));
@@ -749,7 +752,8 @@ return view.extend({
o.rmempty = false;
// sftp
o = addOption('sftp', form.Flag, 'sftp', _('Enabled SFTP'));
o = addOption('sftp', form.Flag, 'sftp', _('Enabled SFTP'),
_('Enable FTP/SFTP access for the OpenList account in Management > Users. Also grant FTP/SFTP management permission to allow uploads and changes.'));
o.rmempty = false;
o = addOption('sftp', form.Value, 'sftp_port', _('SFTP Port'));
@@ -764,7 +768,7 @@ return view.extend({
o = addOption('mcp', form.DummyValue, '_mcp_endpoint', _('MCP endpoint'),
_('Use Streamable HTTP with Authorization: TOKEN, without a Bearer prefix. Use an OpenList user login token; retain MCP-Session-Id for subsequent requests.'));
_('Use Streamable HTTP with Authorization: TOKEN, without a Bearer prefix. Use an OpenList administrator login token; retain MCP-Session-Id for subsequent requests.'));
o.depends('mcp', '1');
o.renderWidget = () => E('div', {}, [
E('code', {}, backendUrl('mcp') || _('Configure a web port or Site URL.')),
@@ -793,26 +797,48 @@ return view.extend({
if (dist && (containsPath(dist, data) || containsPath(dist, cache) ||
containsPath(cache, dist) || containsPath(dist, index) || containsPath(index, dist)))
return _('Frontend files must be separate from private data, cache and index files.');
if (tlsRequired(section_id) && !fieldValue(section_id, 'ssl_cert') && !fieldValue(section_id, 'ssl_key')) {
const tls = data + '/tls';
for (const directory of [cache, index, dist].filter(Boolean))
if (containsPath(tls, directory) || containsPath(directory, tls))
return _('Automatic TLS directory must be separate from cache, index and public frontend directories.');
}
return true;
};
for (const name of ['data_dir', 'temp_dir', 'bleve_dir', 'dist_dir'])
fields[name].validate = (section_id, value) => validateDirectories(section_id, name, value);
const tlsRequired = section_id => isEnabledPort(fieldValue(section_id, 'listen_https_port', '-1')) ||
(fieldValue(section_id, 's3') === '1' && fieldValue(section_id, 's3_ssl') === '1');
for (const name of ['ssl_cert', 'ssl_key']) {
fields[name].validate = (section_id, value) => {
if (tlsRequired(section_id) && !String(value || '').trim())
return _('Certificate and key paths are required for HTTPS or S3 SSL.');
return validateAbsolutePath(value, false);
};
}
const tlsRequired = section_id => {
const httpsPort = fieldValue(section_id, 'listen_https_port', '-1');
const s3Enabled = fieldValue(section_id, 's3') === '1';
const s3Ssl = fieldValue(section_id, 's3_ssl') === '1';
return isEnabledPort(httpsPort) || (s3Enabled && s3Ssl);
};
const validateCertificatePaths = (section_id, changed, value) => {
if (!tlsRequired(section_id))
return true;
const cert = changed === 'ssl_cert' ? value : fieldValue(section_id, 'ssl_cert');
const key = changed === 'ssl_key' ? value : fieldValue(section_id, 'ssl_key');
if (!cert && !key)
return true;
if (!cert || !key)
return _('Leave both certificate paths empty for automatic TLS, or provide both custom certificate and key paths.');
for (const path of [cert, key]) {
const valid = validateAbsolutePath(path, true);
if (valid !== true)
return valid;
}
return true;
};
for (const name of ['ssl_cert', 'ssl_key'])
fields[name].validate = (section_id, value) => validateCertificatePaths(section_id, name, value);
// LuCI passes input.value (always "1") for checkbox validation.
// Read formvalue() to distinguish checked and unchecked flags.
for (const name of ['force_https', 'listen_enable_h3'])
fields[name].validate = (section_id, value) => value !== '1' || isEnabledPort(fieldValue(section_id, 'listen_https_port', '-1'))
fields[name].validate = section_id => fieldValue(section_id, name) !== '1' || isEnabledPort(fieldValue(section_id, 'listen_https_port', '-1'))
? true : _('Force HTTPS and HTTP/3 require an enabled HTTPS port.');
fields.s3_ssl.validate = (section_id, value) => value !== '1' || fieldValue(section_id, 's3') !== '1' ||
(fieldValue(section_id, 'ssl_cert').trim() && fieldValue(section_id, 'ssl_key').trim())
? true : _('Certificate and key paths are required for HTTPS or S3 SSL.');
fields.s3_ssl.validate = section_id => fieldValue(section_id, 's3') !== '1' || fieldValue(section_id, 's3_ssl') !== '1'
? true : validateCertificatePaths(section_id);
fields.listen_unix_file.validate = (section_id, value) => validateAbsolutePath(value, false);
fields.listen_unix_file_perm.validate = (section_id, value) => !value || /^[0-7]{3,4}$/.test(value)
? true : _('Use 3 or 4 octal digits, for example 660 or 0660.');
@@ -857,6 +883,17 @@ return view.extend({
};
for (const name of ['listen_http_port', 'listen_https_port', 's3_port', 'ftp_port', 'sftp_port', 'ftp_pasv_ports'])
fields[name].validate = (section_id, value) => validatePorts(section_id, name, value);
const protocolFields = ['listen_http_port', 'listen_https_port', 'force_https', 'listen_enable_h3',
'ssl_cert', 'ssl_key', 's3', 's3_ssl', 's3_port', 'ftp', 'ftp_port', 'sftp', 'sftp_port',
'ftp_pasv_ports', 'allow_wan', 'data_dir', 'temp_dir', 'bleve_dir', 'dist_dir'];
const revalidateProtocolFields = (event, section_id) => {
for (const name of protocolFields)
if (fields[name].isActive(section_id))
fields[name].triggerValidation(section_id);
ui.tabs.updateTabs(event, m.root);
};
for (const name of protocolFields)
fields[name].onchange = revalidateProtocolFields;
for (const name of ['ftp_pasv_ports', 'log_path', 'log_max_size', 'log_max_backups', 'log_max_age',
'log_compress', 'log_filter', 'log_filter_cidr', 'log_filter_path', 'log_filter_method'])
fields[name].retain = true;
@@ -54,7 +54,7 @@ return view.extend({
const clearButton = E('button', {
'class': 'btn cbi-button-action',
'type': 'button',
'disabled': !L.hasViewPermission(),
'disabled': !L.hasViewPermission() || null,
'click': ui.createHandlerFn(this, 'handleCleanLogs')
}, _('Clear current log'));
+22 -6
View File
@@ -439,19 +439,23 @@ msgid "HTTPS listen port"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:548
msgid "The upstream default is -1 (disabled). Set a valid port number to enable HTTPS."
msgid "Set to -1 to disable HTTPS, or 1-65535 to enable it. Leave both certificate paths empty to use an automatically generated self-signed certificate."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:557
msgid "Force HTTPS"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Redirect HTTP requests to HTTPS. The HTTPS listen port enables HTTPS independently of this option."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:560
msgid "SSL cert"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:561
msgid "SSL certificate file path"
msgid "Leave both paths empty to manage a self-signed certificate in the TLS subdirectory of the data directory. It is reused and renewed at startup when fewer than 30 days remain. Browsers do not trust self-signed certificates automatically."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:563
@@ -459,7 +463,7 @@ msgid "SSL key"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:564
msgid "SSL key file path"
msgid "For custom TLS, specify both certificate and private key paths. The certificate must be currently valid and match its private key. Custom files are never overwritten automatically."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:566
@@ -483,7 +487,7 @@ msgid "Enable HTTP/3/QUIC"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:575
msgid "Enable HTTP/3 over QUIC on the HTTPS listen port. HTTPS must be enabled and certificate files must be configured."
msgid "Enable HTTP/3 over QUIC on the HTTPS listen port. HTTPS must be enabled. Certificate settings are shared with HTTPS."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:579
@@ -632,6 +636,10 @@ msgstr ""
msgid "Enabled FTP"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Enable FTP/SFTP access for the OpenList account in Management > Users. Also grant FTP/SFTP management permission to allow uploads and changes."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:714
msgid "FTP Port"
msgstr ""
@@ -689,7 +697,7 @@ msgid "MCP endpoint"
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:767
msgid "Use Streamable HTTP with Authorization: TOKEN, without a Bearer prefix. Use an OpenList user login token; retain MCP-Session-Id for subsequent requests."
msgid "Use Streamable HTTP with Authorization: TOKEN, without a Bearer prefix. Use an OpenList administrator login token; retain MCP-Session-Id for subsequent requests."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:770
@@ -718,7 +726,15 @@ msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:806
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:815
msgid "Certificate and key paths are required for HTTPS or S3 SSL."
msgid "Leave both certificate paths empty for automatic TLS, or provide both custom certificate and key paths."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Automatic TLS directory must be separate from cache, index and public frontend directories."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Use the same custom or automatically generated certificate as HTTPS. Configure certificate paths on the Web Protocol tab."
msgstr ""
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:812
+28 -12
View File
@@ -440,28 +440,32 @@ msgid "HTTPS listen port"
msgstr "HTTPS 监听端口"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:548
msgid "The upstream default is -1 (disabled). Set a valid port number to enable HTTPS."
msgstr "上游默认值为 -1(禁用)。设为有效端口号可启用 HTTPS。"
msgid "Set to -1 to disable HTTPS, or 1-65535 to enable it. Leave both certificate paths empty to use an automatically generated self-signed certificate."
msgstr "设为 -1 可禁用 HTTPS,设为 1–65535 可启用 HTTPS。证书和私钥路径同时留空时,使用自动生成的自签名证书。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:557
msgid "Force HTTPS"
msgstr "强制 HTTPS"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Redirect HTTP requests to HTTPS. The HTTPS listen port enables HTTPS independently of this option."
msgstr "将 HTTP 请求重定向到 HTTPS。是否启用 HTTPS 由 HTTPS 监听端口决定,与此选项独立。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:560
msgid "SSL cert"
msgstr "SSL 证书"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:561
msgid "SSL certificate file path"
msgstr "SSL 证书文件路径"
msgid "Leave both paths empty to manage a self-signed certificate in the TLS subdirectory of the data directory. It is reused and renewed at startup when fewer than 30 days remain. Browsers do not trust self-signed certificates automatically."
msgstr "两项路径同时留空时,在数据目录的 tls 子目录中自动管理自签名证书。有效证书会复用,剩余有效期不足 30 天时在启动时更新。浏览器不会自动信任自签名证书。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:563
msgid "SSL key"
msgstr "SSL 密钥"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:564
msgid "SSL key file path"
msgstr "SSL 密钥文件路径"
msgid "For custom TLS, specify both certificate and private key paths. The certificate must be currently valid and match its private key. Custom files are never overwritten automatically."
msgstr "使用自定义证书时,请同时填写证书和私钥路径。证书必须在有效期内且与私钥匹配。自定义文件不会被自动覆盖。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:566
msgid "Unix socket file"
@@ -484,8 +488,8 @@ msgid "Enable HTTP/3/QUIC"
msgstr "启用 HTTP/3/QUIC"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:575
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 并配置证书文件。"
msgid "Enable HTTP/3 over QUIC on the HTTPS listen port. HTTPS must be enabled. Certificate settings are shared with HTTPS."
msgstr "在 HTTPS 监听端口上启用基于 QUIC 的 HTTP/3。必须先启用 HTTPS,并与 HTTPS 共用证书设置。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:579
msgid "Open traffic settings"
@@ -633,6 +637,10 @@ msgstr "允许从 WAN 访问的端口或范围,例如 50000-50100,必须与
msgid "Enabled FTP"
msgstr "启用 FTP"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Enable FTP/SFTP access for the OpenList account in Management > Users. Also grant FTP/SFTP management permission to allow uploads and changes."
msgstr "还需在 OpenList 管理后台的“用户”中为账号开启 FTP/SFTP 访问权限;上传和修改文件还需要 FTP/SFTP 管理权限。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:714
msgid "FTP Port"
msgstr "FTP 端口"
@@ -690,8 +698,8 @@ msgid "MCP endpoint"
msgstr "MCP 端点"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:767
msgid "Use Streamable HTTP with Authorization: TOKEN, without a Bearer prefix. Use an OpenList user login token; retain MCP-Session-Id for subsequent requests."
msgstr "使用 Streamable HTTP,认证头为 Authorization: TOKEN,不添加 Bearer 前缀。TOKEN 为 OpenList 用户登录令牌,后续请求需保留 MCP-Session-Id。"
msgid "Use Streamable HTTP with Authorization: TOKEN, without a Bearer prefix. Use an OpenList administrator login token; retain MCP-Session-Id for subsequent requests."
msgstr "使用 Streamable HTTP,认证头为 Authorization: TOKEN,不添加 Bearer 前缀。TOKEN 必须为 OpenList 管理员登录令牌,后续请求需保留 MCP-Session-Id。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:770
msgid "Configure a web port or Site URL."
@@ -719,8 +727,16 @@ msgstr "前端文件必须与私有数据、缓存和索引分开。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:806
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:815
msgid "Certificate and key paths are required for HTTPS or S3 SSL."
msgstr "启用 HTTPS 或 S3 SSL 时必须填写证书和私钥路径。"
msgid "Leave both certificate paths empty for automatic TLS, or provide both custom certificate and key paths."
msgstr "请将证书和私钥路径同时留空以自动生成证书,或同时填写自定义证书和私钥路径。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Automatic TLS directory must be separate from cache, index and public frontend directories."
msgstr "自动 TLS 目录必须与缓存、索引和公开前端目录分开。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Use the same custom or automatically generated certificate as HTTPS. Configure certificate paths on the Web Protocol tab."
msgstr "与 HTTPS 共用自定义或自动生成的证书。请在“Web 协议”选项卡配置证书路径。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:812
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:855
+28 -12
View File
@@ -440,28 +440,32 @@ msgid "HTTPS listen port"
msgstr "HTTPS 監聽埠"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:548
msgid "The upstream default is -1 (disabled). Set a valid port number to enable HTTPS."
msgstr "上游預設值為 -1(停用)。設為有效埠號可啟用 HTTPS。"
msgid "Set to -1 to disable HTTPS, or 1-65535 to enable it. Leave both certificate paths empty to use an automatically generated self-signed certificate."
msgstr "設為 -1 可停用 HTTPS,設為 1–65535 可啟用 HTTPS。憑證與私密金鑰路徑同時留空時,使用自動產生的自簽憑證。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:557
msgid "Force HTTPS"
msgstr "強制 HTTPS"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Redirect HTTP requests to HTTPS. The HTTPS listen port enables HTTPS independently of this option."
msgstr "將 HTTP 請求重新導向至 HTTPS。是否啟用 HTTPS 由 HTTPS 監聽埠決定,與此選項獨立。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:560
msgid "SSL cert"
msgstr "SSL 證書"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:561
msgid "SSL certificate file path"
msgstr "SSL 證書檔案路徑"
msgid "Leave both paths empty to manage a self-signed certificate in the TLS subdirectory of the data directory. It is reused and renewed at startup when fewer than 30 days remain. Browsers do not trust self-signed certificates automatically."
msgstr "兩項路徑同時留空時,在資料目錄的 tls 子目錄中自動管理自簽憑證。有效憑證會重複使用,剩餘有效期不足 30 天時於啟動時更新。瀏覽器不會自動信任自簽憑證。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:563
msgid "SSL key"
msgstr "SSL 金鑰"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:564
msgid "SSL key file path"
msgstr "SSL 金鑰檔案路徑"
msgid "For custom TLS, specify both certificate and private key paths. The certificate must be currently valid and match its private key. Custom files are never overwritten automatically."
msgstr "使用自訂憑證時,請同時填寫憑證與私密金鑰路徑。憑證必須在有效期內且與私密金鑰相符。自訂檔案不會被自動覆寫。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:566
msgid "Unix socket file"
@@ -484,8 +488,8 @@ msgid "Enable HTTP/3/QUIC"
msgstr "啟用 HTTP/3/QUIC"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:575
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 並配置憑證檔案。"
msgid "Enable HTTP/3 over QUIC on the HTTPS listen port. HTTPS must be enabled. Certificate settings are shared with HTTPS."
msgstr "在 HTTPS 監聽埠上啟用基於 QUIC 的 HTTP/3。必須先啟用 HTTPS,並與 HTTPS 共用憑證設定。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:579
msgid "Open traffic settings"
@@ -633,6 +637,10 @@ msgstr "允許從 WAN 存取的連接埠或範圍,例如 50000-50100,必須
msgid "Enabled FTP"
msgstr "啟用 FTP"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Enable FTP/SFTP access for the OpenList account in Management > Users. Also grant FTP/SFTP management permission to allow uploads and changes."
msgstr "還需在 OpenList 管理後台的「使用者」中為帳號開啟 FTP/SFTP 存取權限;上傳和修改檔案還需要 FTP/SFTP 管理權限。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:714
msgid "FTP Port"
msgstr "FTP 埠"
@@ -690,8 +698,8 @@ msgid "MCP endpoint"
msgstr "MCP 端點"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:767
msgid "Use Streamable HTTP with Authorization: TOKEN, without a Bearer prefix. Use an OpenList user login token; retain MCP-Session-Id for subsequent requests."
msgstr "使用 Streamable HTTP,認證標頭為 Authorization: TOKEN,不加 Bearer 前綴。TOKEN 為 OpenList 使用者登入權杖,後續請求須保留 MCP-Session-Id。"
msgid "Use Streamable HTTP with Authorization: TOKEN, without a Bearer prefix. Use an OpenList administrator login token; retain MCP-Session-Id for subsequent requests."
msgstr "使用 Streamable HTTP,認證標頭為 Authorization: TOKEN,不加 Bearer 前綴。TOKEN 必須為 OpenList 管理員登入權杖,後續請求須保留 MCP-Session-Id。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:770
msgid "Configure a web port or Site URL."
@@ -719,8 +727,16 @@ msgstr "前端檔案必須與私人資料、快取及索引分開。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:806
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:815
msgid "Certificate and key paths are required for HTTPS or S3 SSL."
msgstr "啟用 HTTPS 或 S3 SSL 時必須填寫憑證及私密金鑰路徑。"
msgid "Leave both certificate paths empty for automatic TLS, or provide both custom certificate and key paths."
msgstr "請將憑證與私密金鑰路徑同時留空以自動產生憑證,或同時填寫自訂憑證與私密金鑰路徑。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Automatic TLS directory must be separate from cache, index and public frontend directories."
msgstr "自動 TLS 目錄必須與快取、索引及公開前端目錄分開。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js
msgid "Use the same custom or automatically generated certificate as HTTPS. Configure certificate paths on the Web Protocol tab."
msgstr "與 HTTPS 共用自訂或自動產生的憑證。請在「Web 協定」分頁設定憑證路徑。"
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:812
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:855