Files
qinglong/cli/src/shared/i18n/en.ts
T
whyour ef348b445b fix: synchronize runtime locales and harden online updates
Translate UI, scheduler, validation, preload and maintenance messages dynamically, and propagate locale changes between workers. Harden update checks, downloads and terminal states, verify Debian pnpm, and ignore generated test artifacts.
2026-10-17 07:07:09 +08:00

334 lines
21 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Migrated from shell/lang/en.sh; the original remains for differential evaluation.
export const english: Record<string, string> = {
'%s 订阅同步': '%s subscription sync',
'新增 %s 个任务,删除 %s 个任务': 'Added %s tasks, removed %s tasks',
'需要双因素验证,请调用 user two-factor-login。':
'Two-factor authentication required; use user two-factor-login.',
'QL_URL 和 QL_ACCESS_TOKEN 必须同时提供。':
'Provide QL_URL and QL_ACCESS_TOKEN together.',
'接口返回 JSON,未保存下载文件。':
'The endpoint returned JSON; no download was saved.',
'已选择的 CLI 安装路径必须为绝对路径。':
'The selected CLI installation path must be absolute.',
'保留 CLI 入口仅支持已确认的 2.x 升级载荷。':
'Preserving CLI entries requires a verified 2.x upgrade payload.',
'无法确认已选择的 CLI 命令加载器,请检查安装。':
'Cannot verify the selected CLI command loader. Check the installation.',
'容器入口仅接受通过环境变量配置。':
'Container entry accepts configuration through environment variables only.',
'任务延迟过滤已取消。': 'Task delay filtering cancelled.',
'任务延迟过滤失败(退出码 %s)。': 'Task delay filtering failed (exit %s).',
'直接运行的后端在启动期间退出(%s)。':
'Direct backend exited during startup (%s).',
'无法获取本机系统令牌,请检查运行中的面板。':
'Cannot obtain a local system token. Check the running panel.',
'本机面板端口无效。': 'Invalid local panel port.',
'本机 API 拒绝请求(HTTP %s)。': 'Local API rejected request (HTTP %s).',
'本机 API 请求失败;请先检查操作结果,不要直接重试写入。':
'Local API request failed; do not retry a mutation without checking its result.',
'本机 API 拒绝请求,请检查面板日志和权限。':
'Local API rejected request. Check panel logs and permissions.',
'任务列表响应无效。': 'Invalid task list response.',
'任务响应无效。': 'Invalid task response.',
'日志响应无效。': 'Invalid log response.',
'订阅响应无效。': 'Invalid subscription response.',
'订阅列表响应无效。': 'Invalid subscription list response.',
'返回的订阅 ID 与请求不一致。': 'Unexpected subscription ID.',
'订阅日志响应无效。': 'Invalid subscription log response.',
'不支持的订阅操作。': 'Unsupported subscription operation.',
'路径必须位于其管理目录内部。':
'Path must be a descendant of its managed directory.',
'仓库路径无效。': 'Invalid repository path.',
'单文件订阅需要 HTTP(S) 地址。': 'Raw subscriptions require HTTP(S).',
'订阅任务同步返回了无效任务列表。':
'Invalid task list during subscription reconciliation.',
'无法启动必要的可执行程序:%s': 'Cannot start required executable: %s',
'子进程输出写入失败。': 'Child output sink failed.',
'子进程输出超过配置的捕获上限。':
'Child output exceeded the configured capture limit.',
'必要的可执行程序失败(%s,退出码 %s)。':
'Required executable failed (%s, exit %s).',
'CLI 安装路径必须为绝对路径。': 'CLI installation paths must be absolute.',
'CLI 入口必须为普通文件。': 'CLI entry is not a regular file.',
'命令日志目录无效。': 'Invalid command log directory.',
'QlPort 必须在 1 到 65535 之间。': 'QlPort must be between 1 and 65535.',
'CLI 调用失败。': 'CLI invocation failed.',
'不支持此部署操作系统:%s。': 'Unsupported deployment OS: %s.',
'Python 返回了无效版本。': 'Python returned an invalid version.',
'启动需要以 /data 结尾的绝对数据目录。':
'Startup requires an absolute data directory ending in /data.',
'容器安装目录和数据目录必须为绝对路径。':
'Container root and data directory must be absolute paths.',
'容器目录不可写或不可访问:%s(UID %s)。请检查挂载目录的所有者和权限。':
'Container directory is not writable/searchable: %s (UID %s). Check the mounted directory ownership and permissions.',
'无法初始化 %s:%s': 'Cannot initialize %s: %s',
'QL_SCHEDULER 必须为 node 或 system。':
'QL_SCHEDULER must be node or system.',
'容器调度器意外退出(%s)。': 'Container scheduler exited unexpectedly (%s).',
'Bot 安装不支持此操作系统:%s。': 'Bot installation does not support OS: %s.',
'Bot 仓库包含指向目录外部的符号链接。':
'Bot repository contains an external symlink.',
'Bot 仓库包含不支持的文件类型。':
'Bot repository contains an unsupported entry.',
'Bot 源必须为普通目录。': 'Bot source must be a regular directory.',
'Bot 配置模板必须为普通文件。':
'Bot configuration template must be a regular file.',
'Bot 进程管理需要 Linux。': 'Bot process management requires Linux.',
'Bot 安装和进程管理需要 Linux。':
'Bot installation and process management require Linux.',
'Bot 在启动期间退出(%s)。': 'Bot exited during startup (%s).',
'订阅路径包含换行或空字符,无法安全过滤。':
'Subscription paths with line breaks cannot be filtered safely.',
'订阅 POSIX 正则表达式无效。':
'Invalid subscription POSIX regular expression.',
'订阅过滤失败(退出码 %s)。': 'Subscription filtering failed (exit %s).',
'账号选择格式无效。': 'Invalid account selection.',
'账号选择超出环境变量的账号范围。':
'Account selection is outside the environment variable range.',
'超时必须为正时长,例如 30s 或 5m。':
'Timeout must be a positive duration, e.g. 30s or 5m.',
'超时时长超出支持范围。': 'Timeout is outside the supported range.',
'必须指定脚本或可执行程序。': 'A script or executable is required.',
'必须指定有效的账号环境变量名。':
'A valid account environment variable is required.',
'cron 环境变量值无效。': 'Invalid cron environment value',
'cron 安装路径必须为绝对路径。': 'Cron installation paths must be absolute',
'拒绝覆盖不属于此 CLI 的用户 crontab 命令。':
'Refusing to replace an unrelated user crontab command',
'无法安装或读取面板 crontab,请检查环境路径和系统 cron 工具。':
'Cannot install or read the selected panel crontab. Check its environment paths and system cron tool.',
'后端进程未在 5 秒内停止,已取消重启。':
'Direct backend did not stop within 5 seconds; restart cancelled.',
'无法检查运行中的后端进程。': 'Cannot inspect running backend processes.',
'升级文件包含指向目录外部的符号链接。':
'Upgrade payload contains an external symlink.',
'升级文件包含不支持的文件类型。':
'Upgrade payload contains unsupported filesystem entries.',
'升级归档包含无效路径。': 'Upgrade archive contains an invalid path.',
'升级归档包含符号链接。': 'Upgrade archive contains symlinks.',
'暂存升级指针无效。': 'Invalid staged upgrade pointer.',
'暂存升级目录无效。': 'Invalid staged upgrade directory.',
'暂存升级就绪记录与目录不匹配。':
'Staged upgrade readiness does not match its directory.',
'替换源与目标相同。': 'Replacement source equals destination.',
'替换源位于目标目录内部。': 'Replacement source is inside its destination.',
'重载失败;文件已恢复,但原服务无法重新启动。':
'Reload failed; files restored, but the previous service could not restart.',
'数据重载需要独立的数据目录。':
'Data reload requires a dedicated data directory.',
'暂存数据与已安装的数据目录必须分离。':
'Staged data must be separate from the installed data directory.',
'主机开机注册需要 OpenRC 或 systemd;仅在其他管理器负责服务时使用 --no-startup。':
'Host startup registration requires OpenRC or systemd. Use --no-startup only when another supervisor owns the services.',
'本机命令需要通过 --root 或 QL_DIR 指定绝对路径。':
'Local commands require an absolute --root or QL_DIR.',
'面板安装目录不存在或不是目录。': 'Panel root does not exist.',
'用户配置加载已取消。': 'User configuration evaluation cancelled.',
'用户配置加载失败。': 'User configuration evaluation failed.',
'用户配置返回了无效的环境数据。':
'User configuration returned invalid environment data.',
'用法:ql-compat update [true|false]': 'Usage: ql-compat update [true|false]',
'用法:ql-compat reload [services|system|data]':
'Usage: ql-compat reload [services|system|data]',
'未知旧命令,请运行 ql-compat --help。':
'Unknown legacy command. Run ql-compat --help.',
'命令已中断。': 'Command interrupted.',
'旧命令适配器执行失败。': 'Legacy command adapter failed.',
'用法:ql-subscription-worker repo|raw <url> [旧订阅参数]':
'Usage: ql-subscription-worker repo|raw <url> [legacy subscription arguments]',
'订阅布尔参数无效,只能使用 true 或 false。': 'Invalid subscription boolean.',
'订阅参数过多。': 'Too many subscription arguments.',
'SUB_ID 无效,必须为正整数。': 'Invalid SUB_ID.',
'订阅执行器失败,请检查本机日志。':
'Subscription worker failed. Check local logs.',
'任务执行器选项无效。': 'Invalid runner options.',
'本机任务在加载配置时已取消。':
'Local task execution cancelled during configuration.',
'本机任务执行失败,请检查面板环境和任务日志。':
'Local task execution failed. Check the panel environment and task log.',
'应用 ID': 'Client ID',
应用密钥: 'Client secret',
订阅: 'subscription',
任务: 'task',
应用凭据: 'application credentials',
'应用凭据和 %s 权限': 'application credentials and %s permission',
未知: 'unknown',
'请检查%s。': 'Check %s.',
'资源冲突,请检查重复的名称或值。':
'Resource conflict; check for duplicate names or values.',
'服务端错误,请检查服务状态和日志。':
'Server error; check service status and logs.',
'请求未成功,请检查请求参数和服务日志。':
'Request unsuccessful; check request parameters and service logs.',
'API 请求失败(%s %s)。%s%s': 'API request failed (%s %s). %s%s',
' 执行结果可能未知,请先检查%s状态再考虑重试。':
' Execution outcome may be unknown; check %s status before retrying.',
'API 请求被拒绝(HTTP %s),请检查%s。%s':
'API request rejected (HTTP %s). Check %s.%s',
'请求失败或响应无效,执行结果未知。请先检查%s状态再考虑重试。':
'Request failed or returned an invalid response; execution outcome is unknown. Check %s status before retrying.',
'请求失败或返回的 JSON 无效,请检查实例 URL、网络和 TLS 证书。':
'Request failed or returned invalid JSON. Check the instance URL, network and TLS certificate.',
'API 请求被拒绝(code %s),请检查%s。':
'API request rejected (code %s). Check %s.',
'CLI 配置必须是当前用户拥有的私有普通文件(0600)。':
'CLI config must be an owned private regular file (0600).',
'CLI 配置无效,请运行 ql login。': 'Invalid CLI config. Run ql login.',
'尚未登录,请运行 ql login。': 'Not logged in. Run ql login.',
'无法读取 CLI 配置,请检查文件权限并运行 ql login。':
'Cannot read CLI config. Check file permissions and run ql login.',
'请输入有效的面板 URL。': 'A valid panel URL is required.',
'请使用不含凭据、查询参数或片段的 HTTP(S) 面板 URL。':
'Use an HTTP(S) panel URL without credentials, query or fragment.',
'远程认证需要 HTTPS;HTTP 仅允许回环地址。':
'Remote authentication requires HTTPS; HTTP is allowed only for loopback.',
'非交互登录需要 QL_CLIENT_ID 和 QL_CLIENT_SECRET。':
'Non-interactive login requires QL_CLIENT_ID and QL_CLIENT_SECRET.',
'登录已取消。': 'Login cancelled.',
'凭据不能为空。': 'Credentials cannot be empty.',
'认证响应无效。': 'Invalid authentication response.',
'请输入支持范围内的整数。': 'Expected an integer within the supported range.',
'未知命令,请运行 %s --help。': 'Unknown command. Run %s --help.',
'选项未知或缺少选项值,请运行 %s --help。':
'Unknown or missing option. Run %s --help.',
'选项重复,请运行 %s --help。': 'Duplicate option. Run %s --help.',
'参数多余或缺少必要参数。':
'Unexpected argument or missing required argument.',
'缺少 --%s。': 'Missing --%s.',
'--%s 无效。': 'Invalid --%s.',
'CLI 操作已取消。': 'CLI operation cancelled.',
'CLI 操作失败,请检查本机配置和权限。':
'CLI operation failed. Check local configuration and permissions.',
'任务状态上报失败,请检查本机面板。\n':
'Task lifecycle reporting failed; check the local panel.\n',
'任务统计上报失败,请检查本机面板。\n':
'Task statistics reporting failed; check the local panel.\n',
'命令状态上报失败,请检查本机面板。\n':
'Command lifecycle reporting failed; check the local panel.\n',
'订阅同步已完成,但通知发送失败,请检查面板通知设置。\n':
'Subscription synchronized, but notification delivery failed. Check panel notification settings.\n',
'\n## 执行结束... %s 退出码 %s\n': '\n## Finished... %s exit code %s\n',
'任务随机延迟 %s 秒,将于 %s 开始,配置文件参数 RandomDelay 置空可取消延迟\n':
'Task delayed %s seconds, will start at %s. Set RandomDelay to empty to cancel delay\n',
'开始执行...\n': 'Starting execution...\n',
已停止: 'Stopped',
完成: 'Completed',
'失败(退出码 %s)': 'Failed (exit code %s)',
'安装 %s 依赖包...\n': 'Installing %s dependencies...\n',
'开始拉取仓库 %s 到 %s\n': 'Cloning repository %s to %s\n',
添加成功: 'Added successfully',
'添加失败(%s)': 'Add failed (%s)',
更新成功: 'Updated successfully',
'更新失败(%s)': 'Update failed (%s)',
成功: 'Success',
'失败(%s)': 'Failed (%s)',
'通知发送成功🎉': 'Notification sent successfully 🎉',
'通知失败(%s)': 'Notification failed (%s)',
'当前有以下脚本可以运行:': 'Available scripts:',
暂无脚本可以执行: 'No scripts available',
'警告:工作目录不存在 %s': 'Warning: working directory does not exist: %s',
'\n缺少并发运行的环境变量参数': '\nMissing concurrency environment variable',
'\n缺少单独运行的参数 task xxx.js desi Test':
'\nMissing parameter: task xxx.js desi Test',
'暂不支持此系统 %s': 'Unsupported system: %s',
'检测到 pm2 服务正在运行': 'pm2 service is running',
'npm 模块位置: %s': 'npm module location: %s',
'导入数据成功 %s': 'Data imported successfully: %s',
'导出数据成功 %s': 'Data exported successfully: %s',
'当前版本: %s / 最新版本: %s': 'Current: %s / Latest: %s',
已是最新版本: 'Already up to date',
'%s 个定时任务正在运行': '%s scheduled tasks running',
'执行前置命令\n': 'Running pre-command\n',
'\n执行前置命令结束\n': '\nPre-command finished\n',
'\n执行后置命令\n': '\nRunning post-command\n',
'\n执行后置命令结束': '\nPost-command finished',
'警告: PM2 启动失败 (退出码: %s),可能是由于硬件不兼容':
'Warning: PM2 start failed (exit code: %s), possibly due to hardware incompatibility',
'正在尝试直接使用 Node.js 启动服务...':
'Attempting to start service with Node.js directly...',
'已使用 Node.js 直接启动服务 (PID: %s)':
'Service started with Node.js directly (PID: %s)',
'注意: 使用此模式时,部分 PM2 管理功能将不可用':
'Note: some PM2 management features are unavailable in this mode',
'## 开始执行... %s\n': '## Starting... %s\n',
'\n## 已停止 🛑... %s 耗时 %s 秒%s':
'\n## Stopped 🛑... %s took %s seconds%s',
'\n## 完成 ✅... %s 耗时 %s 秒%s':
'\n## Completed ✅... %s took %s seconds%s',
'\n## 失败 ❌(退出码 %s)... %s 耗时 %s 秒%s':
'\n## Failed ❌(exit code %s)... %s took %s seconds%s',
'%s -> 添加成功': '%s -> Added successfully',
'%s -> 添加失败(%s)': '%s -> Add failed (%s)',
'%s -> 更新成功': '%s -> Updated successfully',
'%s -> 更新失败(%s)': '%s -> Update failed (%s)',
'%s成功🎉': '%s succeeded 🎉',
'%s失败(%s)': '%s failed (%s)',
'检测到有%s的定时任务:': 'Found %s scheduled tasks:',
'\n开始尝试自动删除失效的定时任务...':
'\nAttempting to remove invalid scheduled tasks...',
'\n开始尝试自动添加定时任务...': '\nAttempting to add scheduled tasks...',
'拉取 %s 成功...\n': 'Pull %s succeeded...\n',
'拉取 %s 失败,请检查日志...\n': 'Pull %s failed, check logs...\n',
'开始下载:%s 保存路径:%s\n': 'Downloading: %s to: %s\n',
'下载 %s 成功...\n': 'Download %s succeeded...\n',
'下载 %s 失败,保留之前正常下载的版本...\n':
'Download %s failed, keeping previous version...\n',
'%s文件不存在,跳过执行...\n': '%s does not exist, skipping...\n',
'使用 %s 源更新...\n': 'Updating using %s mirror...\n',
'更新青龙源文件成功...\n': 'Qinglong source updated successfully\n',
'更新青龙源文件失败,请检查网络...\n':
'Qinglong source update failed, check network\n',
'更新青龙静态资源成功...\n': 'Static assets updated successfully\n',
'更新青龙静态资源失败,请检查网络...\n':
'Static assets update failed, check network\n',
'\n开始检测依赖...\n': '\nChecking dependencies...\n',
'\n依赖检测安装成功...\n': '\nDependencies installed successfully\n',
'更新包下载成功...\n': 'Package download succeeded\n',
'\n依赖检测安装失败,请检查网络...\n':
'\nDependency installation failed, check network\n',
'\n1、安装bot依赖...\n': '\n1. Installing bot dependencies...\n',
'\nbot依赖安装成功...\n': '\nBot dependencies installed\n',
'2、下载bot所需文件...\n': '2. Downloading bot files...\n',
'\nbot文件下载成功...\n': '\nBot files downloaded\n',
'3、安装python3依赖...\n': '3. Installing python3 dependencies...\n',
'\npython3依赖安装成功...\n': '\nPython3 dependencies installed\n',
'4、启动bot程序...\n': '4. Starting bot...\n',
'bot启动成功...\n': 'Bot started successfully\n',
'---> 1. 开始检测配置文件\n': '---> 1. Checking config...\n',
'---> 配置文件检测完成\n': '---> Config check complete\n',
'---> 2. 开始安装青龙依赖\n': '---> 2. Installing qinglong dependencies...\n',
'---> 青龙依赖安装完成\n': '---> Dependencies installed\n',
'---> 脚本依赖安装完成\n': '---> Script dependencies installed\n',
'---> 1. 复制通知文件\n': '---> 1. Copying notification files...\n',
'---> 复制一份 %s 为 %s\n': '---> Copying %s to %s\n',
'---> 通知文件复制完成\n': '---> Notification files copied\n',
'---> pm2日志': '---> pm2 log',
'\n=====> 检测面板': '\n=====> Checking panel',
'=====> 面板服务启动正常\n': '=====> Panel service running normally\n',
'\n=====> 检测后台': '\n=====> Checking backend',
'=====> 后台服务启动正常\n': '=====> Backend service running normally\n',
'=====> 开始检测': '=====> Starting check',
'\n=====> 检测结束\n': '\n=====> Check complete\n',
'查询文件 %s': 'Checking file: %s',
'删除中~': 'Deleting...',
'正在被 %s 使用,跳过~': 'In use by %s, skipping...',
'查找旧日志文件中...\n': 'Looking for old log files...\n',
'删除旧日志执行完毕\n': 'Old log cleanup complete\n',
'未找到 qinglong 模块,请先执行 npm i -g @whyour/qinglong 安装':
'Module not found. Run: npm i -g @whyour/qinglong',
'请先手动设置 export QL_DIR=%s,环境变量,并手动添加到系统环境变量,然后再次执行命令 qinglong 启动服务':
'Set env: export QL_DIR=%s, then run qinglong to start',
'请先手动设置数据存储目录 export QL_DATA_DIR 环境变量,目录必须以斜杠开头的绝对路径,并且以 /data 结尾,例如 /ql/data 并手动添加到系统环境变量':
'Set QL_DATA_DIR (absolute path ending with /data, e.g. /ql/data)',
'QL_DATA_DIR 必须以 /data 结尾,例如 /ql/data,如果有历史数据,请新建 data 目录,把历史数据放到 data 目录中':
'QL_DATA_DIR must end with /data, e.g. /ql/data',
'暂不支持此系统部署 %s': 'Unsupported system for deployment: %s',
'命令输入错误...\n': 'Invalid command...\n',
};