2026-07-14 01:37:06 +00:00
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version= "2.1" language= "zh_CN" >
2026-07-16 08:14:51 +00:00
<context>
<name> Bootstrap</name>
<message>
<location filename= "../Bootstrap/main.cpp" line= "22" />
<source> Update Handoff Failed</source>
<translation> 更新交接失败</translation>
</message>
<message>
<location filename= "../Bootstrap/main.cpp" line= "139" />
<source> Bootstrap arguments are incomplete.</source>
<translation> Bootstrap 启动参数不完整。</translation>
</message>
<message>
<location filename= "../Bootstrap/main.cpp" line= "158" />
<source> The update plan is missing or invalid.</source>
<translation> 更新计划文件缺失或格式无效。</translation>
</message>
<message>
<location filename= "../Bootstrap/main.cpp" line= "195" />
<source> Cannot restart Updater.</source>
<translation> 无法重新启动 Updater。</translation>
</message>
<message>
<location filename= "../Bootstrap/main.cpp" line= "197" />
<source>
Failed file: %1</source>
<translation>
失败文件:%1</translation>
</message>
</context>
2026-07-14 01:37:06 +00:00
<context>
<name> ConfigHelper</name>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Common/ConfigHelper.cpp" line= "219" />
2026-07-14 01:37:06 +00:00
<source> The user canceled the administrator permission confirmation.</source>
<translation> 用户取消了管理员权限确认。</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Common/ConfigHelper.cpp" line= "220" />
2026-07-14 01:37:06 +00:00
<source> Windows error %1</source>
<translation> Windows 错误 %1</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Common/ConfigHelper.cpp" line= "230" />
2026-07-14 01:37:06 +00:00
<source> Administrator Permission Required</source>
<translation> 需要管理员权限</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Common/ConfigHelper.cpp" line= "231" />
2026-07-21 03:02:42 +00:00
<source> The current operation needs administrator permission to modify a protected file.
2026-07-14 01:37:06 +00:00
Target file: %1
Reason: %2
Click OK, then choose Yes in the Windows permission confirmation dialog.</source>
2026-07-21 03:02:42 +00:00
<translation> 当前操作需要管理员权限来修改受保护文件。
2026-07-14 01:37:06 +00:00
目标文件:%1
原因:%2
2026-07-21 03:02:42 +00:00
点击“确定”,然后在 Windows 权限确认窗口中选择“是”。</translation>
2026-07-14 01:37:06 +00:00
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Common/ConfigHelper.cpp" line= "238" />
2026-07-14 01:37:06 +00:00
<source> The user canceled the administrator permission request.</source>
<translation> 用户取消了管理员权限请求。</translation>
</message>
</context>
2026-07-16 08:14:51 +00:00
<context>
<name> DeviceIdentityHelper</name>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "54" />
<source> OpenSSL is unavailable, so device credential signature cannot be verified.</source>
<translation> 当前程序未启用 OpenSSL,无法验证设备凭证签名。</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "62" />
<source> Device public key is missing: %1</source>
<translation> 设备凭证公钥缺失:%1</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "73" />
<source> Device public key is invalid: %1</source>
<translation> 设备凭证公钥无效:%1</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "93" />
<source> Device credential signature is invalid. The local identity file may not match this server.</source>
<translation> 设备凭证签名无效。本机身份文件可能不是当前服务器签发的。</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "118" />
<source> Device credential file is not valid JSON: %1</source>
<translation> 设备凭证文件不是合法 JSON: %1</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "142" />
<source> Device credential does not match this application, channel, license, installation or device.</source>
<translation> 设备凭证与当前应用、渠道、License、安装实例或设备不匹配。</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "149" />
<source> License has expired. Please ask the administrator to issue a new License.</source>
<translation> License 已过期。请联系管理员重新签发 License。</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "182" />
<source> app_id is empty in app_config.json.</source>
<translation> app_config.json 中的 app_id 为空。</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "186" />
<source> channel is empty in app_config.json.</source>
<translation> app_config.json 中的 channel 为空。</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "190" />
<source> Server address is not configured. Set config/server_config.json before building Launcher, for example: http://192.168.229.128:8000</source>
<translation> 服务端地址未配置。请先设置 config/server_config.json,再重新编译 Launcher。例如:http://192.168.229.128:8000</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "196" />
<source> client_token is empty. Copy the client_token generated by the admin page into app_config.json.</source>
<translation> client_token 为空。请把管理后台生成的 client_token 复制到 app_config.json。</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "202" />
<source> License is empty. Create or select a License in the admin page, then copy the generated client configuration.</source>
<translation> License 为空。请先在管理后台创建或选择 License,然后复制生成的客户端配置。</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "213" />
<source> Cannot save installation id to %1: %2</source>
<translation> 无法保存安装实例 ID 到 %1: %2</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "277" />
<source> Cannot contact the update server to issue device identity.
Server: %1
App: %2
Channel: %3
Network error: %4
Timeout: %5 ms</source>
<translation> 无法连接更新服务器来签发设备身份。
服务器:%1
App: %2
渠道:%3
网络错误:%4
超时时间:%5 毫秒</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "282" />
<source> Device identity request was rejected by the update server.
Server: %1
HTTP status: %2
App: %3
Channel: %4
Server message: %5</source>
<translation> 设备身份请求被更新服务器拒绝。
服务器:%1
HTTP 状态码:%2
App: %3
渠道:%4
服务端消息:%5</translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "286" />
<source> < empty response> </source>
<translation> < 空响应> </translation>
</message>
<message>
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "295" />
2026-07-16 08:14:51 +00:00
<source> Server returned an invalid device identity response.</source>
<translation> 服务端返回的设备身份响应格式无效。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "310" />
2026-07-16 08:14:51 +00:00
<source> Cannot save device credential to %1: %2</source>
<translation> 无法保存设备凭证到 %1: %2</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Common/DeviceIdentityHelper.cpp" line= "318" />
2026-07-16 08:14:51 +00:00
<source> Cannot save server device id to %1: %2</source>
<translation> 无法保存服务端设备 ID 到 %1:%2</translation>
</message>
</context>
2026-07-21 03:02:42 +00:00
<context>
<name> IntegrityHelper</name>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "64" />
<source> Cannot verify signed manifest because OpenSSL support is unavailable. Stage: installed version verification.</source>
<translation> 无法验证签名 Manifest,因为当前程序未启用 OpenSSL。阶段:已安装版本校验。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "73" />
<source> Cannot open manifest public key. Stage: installed version verification. Public key path: %1.</source>
<translation> 无法打开 Manifest 公钥。阶段:已安装版本校验。公钥路径:%1。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "83" />
<source> Manifest public key is invalid. Stage: installed version verification. Public key path: %1.</source>
<translation> Manifest 公钥无效。阶段:已安装版本校验。公钥路径:%1。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "96" />
<source> Manifest RSA signature is invalid. Stage: installed version verification. This usually means the cached manifest was changed, the client public key does not match the server private key, or the wrong version cache is being used.</source>
<translation> Manifest RSA 签名无效。阶段:已安装版本校验。通常表示本地缓存的 Manifest 被改过、客户端公钥与服务端私钥不匹配,或正在使用错误版本的缓存。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "117" />
<source> Local signed manifest cache is missing. Stage: installed version verification. Version: %1. Expected cache file: %2. This cache is created after the same version is published or installed successfully.</source>
<translation> 本地签名 Manifest 缓存缺失。阶段:已安装版本校验。版本:%1。期望缓存文件:%2。该缓存会在同版本发布或安装成功后生成。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "125" />
<source> Local signed manifest cache is not valid JSON. Stage: installed version verification. Version: %1. File: %2. JSON error: %3.</source>
<translation> 本地签名 Manifest 缓存不是合法 JSON。阶段:已安装版本校验。版本:%1。文件:%2。JSON 错误:%3。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "134" />
<source> Local signed manifest cache is incomplete. Stage: installed version verification. Version: %1. File: %2.</source>
<translation> 本地签名 Manifest 缓存不完整。阶段:已安装版本校验。版本:%1。文件:%2。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "144" />
<source> Signed manifest payload is not valid JSON. Stage: installed version verification. Version: %1. File: %2. JSON error: %3.</source>
<translation> 签名 Manifest 内容不是合法 JSON。阶段:已安装版本校验。版本:%1。文件:%2。JSON 错误:%3。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "153" />
<source> Local signed manifest identity does not match this application. Stage: installed version verification. Expected app/channel/version: %1 / %2 / %3. Manifest app/channel/version: %4 / %5 / %6.</source>
<translation> 本地签名 Manifest 身份与当前应用不匹配。阶段:已安装版本校验。期望 app/channel/version: %1 / %2 / %3。Manifest 中的 app/channel/version: %4 / %5 / %6。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "167" />
<source> Signed manifest contains an unsafe file path. Stage: installed version verification. Version: %1. Path: %2.</source>
<translation> 签名 Manifest 包含不安全文件路径。阶段:已安装版本校验。版本:%1。路径:%2。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "175" />
<source> A required installed file is missing. Stage: installed version verification. Version: %1. Manifest path: %2. Checked path: %3. The local installation no longer matches the published version.</source>
<translation> 缺少必需的已安装文件。阶段:已安装版本校验。版本:%1。Manifest 路径:%2。检查路径:%3。本地安装目录已不再匹配发布版本。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "183" />
<source> Installed file SHA-256 does not match the local signed manifest. Stage: installed version verification. Version: %1. Manifest path: %2. Local path: %3.
Expected SHA-256: %4
Actual SHA-256: %5
This means the installed file is different from the version that was published or installed. If this is a developer test machine, check whether the local Release directory was recompiled or overwritten after publishing.</source>
<translation> 已安装文件的 SHA-256 与本地签名 Manifest 不一致。阶段:已安装版本校验。版本:%1。Manifest 路径:%2。本地路径:%3。
期望 SHA-256: %4
实际 SHA-256: %5
这表示当前安装目录里的文件和当初发布或安装成功的版本不同。如果这是开发测试机器,请检查发布后是否又重新编译或覆盖了本地 Release 目录。</translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "186" />
<source> < cannot read file> </source>
<translation> < 无法读取文件> </translation>
</message>
<message>
<location filename= "../Common/IntegrityHelper.cpp" line= "209" />
<source> An executable or DLL exists locally but is not declared in the signed manifest. Stage: installed version verification. Version: %1. Extra file: %2. Remove unexpected executable/plugin files or publish a new version that declares them.</source>
<translation> 本地存在签名 Manifest 未声明的 EXE 或 DLL。阶段:已安装版本校验。版本:%1。额外文件:%2。请删除异常的可执行文件/插件,或发布一个声明这些文件的新版本。</translation>
</message>
</context>
2026-07-14 01:37:06 +00:00
<context>
<name> Launcher</name>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "32" />
2026-07-14 01:37:06 +00:00
<source> Checking for software updates...</source>
<translation> 正在检查软件更新...</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "33" />
2026-07-14 01:37:06 +00:00
<source> Marsco Launcher</source>
<translation> Marsco 软件启动器</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "63" />
2026-07-14 01:37:06 +00:00
<source> Please enter the License for %1:</source>
<translation> 请输入 %1 的授权 License: </translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "64" />
<location filename= "../Launcher/main.cpp" line= "66" />
2026-07-14 01:37:06 +00:00
<source> the application</source>
<translation> 软件</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "65" />
2026-07-14 01:37:06 +00:00
<source> %1
Please enter a new License for %2:</source>
<translation> %1
请重新输入 %2 的授权 License:</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "69" />
2026-07-14 01:37:06 +00:00
<source> Enter License</source>
<translation> 输入 License</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "77" />
2026-07-14 01:37:06 +00:00
<source> License Required</source>
<translation> 需要 License</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "78" />
2026-07-14 01:37:06 +00:00
<source> A License provided by the administrator is required for the first launch.</source>
<translation> 首次启动需要输入管理员提供的 License。</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "83" />
2026-07-14 01:37:06 +00:00
<source> License Cannot Be Empty</source>
<translation> License 不能为空</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "84" />
2026-07-14 01:37:06 +00:00
<source> Please paste the License created in the admin page.</source>
<translation> 请粘贴管理员在后台创建的 License。</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "90" />
2026-07-14 01:37:06 +00:00
<source> Failed to Save License</source>
<translation> 保存 License 失败</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "91" />
2026-07-14 01:37:06 +00:00
<source> Cannot write the configuration file:
%1
%2</source>
<translation> 无法写入配置文件:
%1
%2</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "95" />
2026-07-14 01:37:06 +00:00
<source> Verifying License...</source>
<translation> 正在验证 License...</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "120" />
2026-07-14 01:37:06 +00:00
<source> Device Authentication Failed</source>
<translation> 设备身份验证失败</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "125" />
2026-07-14 01:37:06 +00:00
<source> The current License cannot be used: %1</source>
<translation> 当前 License 无法使用:%1</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "147" />
2026-07-14 01:37:06 +00:00
<source> The device or License authorization is invalid.</source>
<translation> 设备或 License 授权无效。</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "151" />
2026-07-14 01:37:06 +00:00
<source> The current authorization was rejected by the server: %1</source>
<translation> 当前授权被服务端拒绝:%1</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "155" />
2026-07-14 01:37:06 +00:00
<source> License Saved</source>
<translation> License 已保存</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "156" />
2026-07-14 01:37:06 +00:00
<source> Please restart Launcher to complete device authorization and update checking.</source>
<translation> 请重新启动 Launcher 完成设备授权和更新检查。</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "161" />
2026-07-14 01:37:06 +00:00
<source> Authorization Rejected</source>
<translation> 授权被拒绝</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "176" />
2026-07-14 01:37:06 +00:00
<source> Select Offline Update Package</source>
<translation> 选择离线更新包</translation>
</message>
<message>
2026-07-16 08:14:51 +00:00
<location filename= "../Launcher/main.cpp" line= "178" />
2026-07-14 01:37:06 +00:00
<source> Marsco offline update package (*.upd)</source>
<translation> Marsco 离线更新包 (*.upd)</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "184" />
<source> Cannot import the offline update package because the updater executable does not exist.
Updater: %1
Offline package: %2</source>
<translation> 无法导入离线更新包,因为 Updater 可执行文件不存在。
Updater: %1
离线包:%2</translation>
</message>
<message>
<location filename= "../Launcher/main.cpp" line= "193" />
<source> Cannot start the updater for offline package import.
Updater: %1
Offline package: %2
Check file permissions and dependent DLLs/shared libraries.</source>
<translation> 无法启动 Updater 导入离线更新包。
Updater: %1
离线包:%2
请检查文件权限和依赖 DLL/共享库。</translation>
</message>
<message>
<location filename= "../Launcher/main.cpp" line= "206" />
<location filename= "../Launcher/main.cpp" line= "394" />
2026-07-14 01:37:06 +00:00
<source> Offline Update</source>
<translation> 离线更新</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "207" />
2026-07-14 01:37:06 +00:00
<source> No offline update package was selected.</source>
<translation> 未选择离线更新包。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "217" />
<source> Cannot start the main application because the executable file does not exist.
Executable: %1
Check main_executable and install_root in the generated client configuration.</source>
<translation> 无法启动主程序,因为主程序文件不存在。
可执行文件:%1
请检查生成的客户端配置中的 main_executable 和 install_root。</translation>
</message>
<message>
<location filename= "../Launcher/main.cpp" line= "228" />
<source> Cannot start the main application because the one-time launch ticket could not be created.
Executable: %1
Details: %2</source>
<translation> 无法启动主程序,因为一次性启动 ticket 创建失败。
可执行文件:%1
详细信息:%2</translation>
</message>
<message>
<location filename= "../Launcher/main.cpp" line= "238" />
<source> Cannot start the main application process.
Executable: %1
Ticket file: %2
Check file permissions, dependent DLLs/shared libraries, and whether the executable can run independently.</source>
<translation> 无法启动主程序进程。
可执行文件:%1
Ticket 文件:%2
请检查文件权限、依赖 DLL/共享库,以及该可执行文件是否能独立运行。</translation>
</message>
<message>
<location filename= "../Launcher/main.cpp" line= "246" />
2026-07-14 01:37:06 +00:00
<source> Verifying local runtime policy...</source>
<translation> 正在验证本地运行策略...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "254" />
<location filename= "../Launcher/main.cpp" line= "262" />
<location filename= "../Launcher/main.cpp" line= "281" />
2026-07-14 01:37:06 +00:00
<source> Cannot Start</source>
<translation> 无法启动</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "255" />
2026-07-14 01:37:06 +00:00
<source> The local version policy is invalid: %1</source>
<translation> 本地版本策略无效:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "263" />
2026-07-14 01:37:06 +00:00
<source> The local version policy has expired. Please connect to the network or contact the administrator.</source>
<translation> 本地版本策略已过期,请连接网络或联系管理员。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "270" />
2026-07-14 01:37:06 +00:00
<source> Current Version Cannot Run</source>
<translation> 当前版本不可运行</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "271" />
2026-07-14 01:37:06 +00:00
<source> The current version %1 has been disabled by the administrator.</source>
<translation> 当前版本 %1 已被管理员停用。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "282" />
2026-07-14 01:37:06 +00:00
<source> Cannot read the local state: %1</source>
<translation> 无法读取本地状态:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "289" />
<location filename= "../Launcher/main.cpp" line= "297" />
2026-07-14 01:37:06 +00:00
<source> Security Check Failed</source>
<translation> 安全检查失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "290" />
2026-07-14 01:37:06 +00:00
<source> A version policy sequence rollback was detected. Startup has been blocked.</source>
<translation> 检测到版本策略序列回退,已阻止启动。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "298" />
2026-07-14 01:37:06 +00:00
<source> A possible system time rollback was detected. Startup has been blocked.</source>
<translation> 检测到系统时间可能被回拨,已阻止启动。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "304" />
2026-07-20 06:43:46 +00:00
<source> Generating Git tag list...</source>
<translation> 正在生成 Git 标签清单...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "311" />
2026-07-20 06:43:46 +00:00
<source> Git Tag List Failed</source>
<translation> Git 标签清单生成失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "312" />
2026-07-20 06:43:46 +00:00
<source> Cannot generate tags.txt, but startup will continue:
%1</source>
<translation> 无法生成 tags.txt,但启动会继续:
%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "322" />
2026-07-14 01:37:06 +00:00
<source> Version Rollback</source>
<translation> 版本回退</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "323" />
2026-07-14 01:37:06 +00:00
<source> Update Required</source>
<translation> 必须更新</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "323" />
2026-07-14 01:37:06 +00:00
<source> New Version Available</source>
<translation> 发现新版本</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "326" />
2026-07-14 01:37:06 +00:00
<source> The administrator provided version %1 as the rollback target. Downgrade now?</source>
<translation> 管理员提供了版本 %1 作为回退目标,是否现在降级?</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "327" />
2026-07-14 01:37:06 +00:00
<source> Version %1 is available. Update now?</source>
<translation> 发现新版本 %1,是否现在更新?</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "328" />
2026-07-14 01:37:06 +00:00
<source>
Target version: %1</source>
<translation>
目标版本:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "339" />
<location filename= "../Launcher/main.cpp" line= "418" />
2026-07-14 01:37:06 +00:00
<source> Startup Failed</source>
<translation> 启动失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "341" />
<location filename= "../Launcher/main.cpp" line= "420" />
2026-07-14 01:37:06 +00:00
<source> Cannot start the main application: %1</source>
<translation> 无法启动主程序:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "352" />
<source> Cannot start the updater because the executable file does not exist.
Executable: %1
Check updater_executable and install_root in the generated client configuration.</source>
<translation> 无法启动 Updater,因为 Updater 可执行文件不存在。
可执行文件:%1
请检查生成的客户端配置中的 updater_executable 和 install_root。</translation>
</message>
<message>
<location filename= "../Launcher/main.cpp" line= "362" />
<source> Cannot start the updater process.
Executable: %1
Arguments: %2
Check file permissions, dependent DLLs/shared libraries, and whether the updater can run independently.</source>
<translation> 无法启动 Updater 进程。
可执行文件:%1
参数:%2
请检查文件权限、依赖 DLL/共享库,以及 Updater 是否能独立运行。</translation>
</message>
<message>
<location filename= "../Launcher/main.cpp" line= "183" />
<location filename= "../Launcher/main.cpp" line= "192" />
<location filename= "../Launcher/main.cpp" line= "351" />
<location filename= "../Launcher/main.cpp" line= "361" />
2026-07-14 01:37:06 +00:00
<source> Updater Startup Failed</source>
<translation> 更新器启动失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "373" />
2026-07-14 01:37:06 +00:00
<source> Caching signed version manifest...</source>
<translation> 正在缓存签名版本清单...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "380" />
2026-07-14 01:37:06 +00:00
<source> Manifest Cache Failed</source>
<translation> 清单缓存失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "381" />
2026-07-14 01:37:06 +00:00
<source> Cannot cache the signed manifest for the current version: %1</source>
<translation> 无法缓存当前版本的签名清单:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "389" />
2026-07-14 01:37:06 +00:00
<source> Server Unavailable</source>
<translation> 服务器不可用</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "390" />
2026-07-14 01:37:06 +00:00
<source> Cannot connect to the update server. Import an offline update package?</source>
<translation> 当前无法连接更新服务器。是否导入离线更新包?</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "395" />
2026-07-14 01:37:06 +00:00
<source> No offline update package was selected, or the updater could not be started.</source>
<translation> 未选择离线更新包或无法启动更新器。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "405" />
2026-07-14 01:37:06 +00:00
<source> Network Unavailable</source>
<translation> 网络不可用</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "406" />
2026-07-14 01:37:06 +00:00
<source> Cannot connect to the update server, and the current policy does not allow offline startup.</source>
<translation> 无法连接更新服务器,且当前策略不允许离线启动。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "411" />
2026-07-14 01:37:06 +00:00
<source> The application is up to date. Starting...</source>
<translation> 当前已是最新版本,正在启动...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/main.cpp" line= "412" />
2026-07-14 01:37:06 +00:00
<source> Offline mode is active. Starting...</source>
<translation> 当前处于离线模式,正在启动...</translation>
</message>
</context>
2026-07-21 03:02:42 +00:00
<context>
<name> LocalStateHelper</name>
<message>
<location filename= "../Common/LocalStateHelper.cpp" line= "35" />
<source> Cannot create local state file: %1. Error: %2.</source>
<translation> 无法创建本地状态文件:%1。错误:%2。</translation>
</message>
<message>
<location filename= "../Common/LocalStateHelper.cpp" line= "46" />
<source> Cannot open local state file: %1. Error: %2.</source>
<translation> 无法打开本地状态文件:%1。错误:%2。</translation>
</message>
<message>
<location filename= "../Common/LocalStateHelper.cpp" line= "60" />
<source> Local state file is not valid JSON. File: %1. JSON error: %2.</source>
<translation> 本地状态文件不是合法 JSON。文件:%1。JSON 错误:%2。</translation>
</message>
<message>
<location filename= "../Common/LocalStateHelper.cpp" line= "76" />
<source> Local state has not been loaded.</source>
<translation> 本地状态尚未加载。</translation>
</message>
<message>
<location filename= "../Common/LocalStateHelper.cpp" line= "86" />
<source> Cannot save local state file: %1. Error: %2.</source>
<translation> 无法保存本地状态文件:%1。错误:%2。</translation>
</message>
</context>
<context>
<name> PolicyHelper</name>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "36" />
<source> Cannot open signed version policy file: %1. Error: %2.</source>
<translation> 无法打开签名版本策略文件:%1。错误:%2。</translation>
</message>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "45" />
<source> Signed version policy is not valid JSON. File: %1. JSON error: %2.</source>
<translation> 签名版本策略不是合法 JSON。文件:%1。JSON 错误:%2。</translation>
</message>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "66" />
<source> Cannot save signed version policy file: %1. Error: %2.</source>
<translation> 无法保存签名版本策略文件:%1。错误:%2。</translation>
</message>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "105" />
<source> OpenSSL is unavailable, so the signed version policy cannot be verified.</source>
<translation> 当前程序未启用 OpenSSL,无法验证签名版本策略。</translation>
</message>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "113" />
<source> Cannot open version policy public key: %1. Error: %2.</source>
<translation> 无法打开版本策略公钥:%1。错误:%2。</translation>
</message>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "124" />
<source> Version policy public key is invalid: %1.</source>
<translation> 版本策略公钥无效:%1。</translation>
</message>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "137" />
<source> Version policy RSA signature is invalid. The policy file may have been changed, or the public key does not match the server private key.</source>
<translation> 版本策略 RSA 签名无效。策略文件可能被修改,或客户端公钥与服务端私钥不匹配。</translation>
</message>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "148" />
<source> Version policy has not been loaded.</source>
<translation> 版本策略尚未加载。</translation>
</message>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "155" />
<source> Version policy is missing required field: %1.</source>
<translation> 版本策略缺少必填字段:%1。</translation>
</message>
<message>
<location filename= "../Common/PolicyHelper.cpp" line= "163" />
<source> Version policy signature algorithm is unsupported: %1.</source>
<translation> 版本策略签名算法不支持:%1。</translation>
</message>
</context>
<context>
<name> TicketHelper</name>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "33" />
<source> Cannot create launch ticket because required fields are empty: %1. Check app_config.json, registry-imported configuration and device authorization.</source>
<translation> 无法创建启动 ticket,因为必填字段为空:%1。请检查 app_config.json、已导入注册表的配置和设备授权状态。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "52" />
<source> Cannot create launch ticket directory: %1.</source>
<translation> 无法创建启动 ticket 目录:%1。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "64" />
<source> Cannot save launch ticket file: %1. Error: %2.</source>
<translation> 无法保存启动 ticket 文件:%1。错误:%2。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "86" />
<source> Launch ticket is missing or has already been consumed. Ticket file: %1. Please start the application from Launcher.</source>
<translation> 启动 ticket 缺失或已经被消费。Ticket 文件:%1。请从 Launcher 启动主程序。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "97" />
<source> Cannot read claimed launch ticket: %1. Error: %2.</source>
<translation> 无法读取已声明占用的启动 ticket:%1。错误:%2。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "110" />
<source> Launch ticket is not valid JSON. JSON error: %1.</source>
<translation> 启动 ticket 不是合法 JSON。JSON 错误:%1。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "128" />
<source> Launch ticket signature is invalid. The launch_token used by Launcher and the main application is inconsistent, or the ticket content was changed.</source>
<translation> 启动 ticket 签名无效。Launcher 和主程序使用的 launch_token 不一致,或 ticket 内容被修改过。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "136" />
<source> Launch ticket app_id does not match. Ticket app_id: %1. Expected app_id: %2.</source>
<translation> 启动 ticket 的 app_id 不匹配。Ticket app_id: %1。期望 app_id: %2。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "145" />
<source> Launch ticket device_id does not match. Ticket device_id: %1. Expected device_id: %2. Reauthorize the device from Launcher if the configuration was regenerated.</source>
<translation> 启动 ticket 的 device_id 不匹配。Ticket device_id: %1。期望 device_id:%2。如果刚重新生成过配置,请通过 Launcher 重新授权设备。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "154" />
<source> Launch ticket version does not match. Ticket version: %1. Expected version: %2.</source>
<translation> 启动 ticket 的版本号不匹配。Ticket 版本:%1。期望版本:%2。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "163" />
<source> Launch ticket time is invalid or expired. Issued at: %1. Expires at: %2. Current UTC time: %3.</source>
<translation> 启动 ticket 时间无效或已过期。签发时间:%1。过期时间:%2。当前 UTC 时间:%3。</translation>
</message>
<message>
<location filename= "../Common/TicketHelper.cpp" line= "174" />
<source> Launch ticket nonce is missing. The ticket is incomplete.</source>
<translation> 启动 ticket 缺少 nonce。Ticket 内容不完整。</translation>
</message>
</context>
2026-07-20 06:43:46 +00:00
<context>
<name> UpdateLogic</name>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/UpdateLogic.cpp" line= "109" />
<source> Current version manifest identity is incomplete. Stage: cache current version manifest. App: %1, channel: %2, version: %3, version id: %4.</source>
<translation> 当前版本 Manifest 身份信息不完整。阶段:缓存当前版本 Manifest。App:%1,渠道:%2,版本:%3,版本 ID:%4。</translation>
</message>
<message>
<location filename= "../Launcher/UpdateLogic.cpp" line= "133" />
<source> Cannot download signed manifest for the current local version. Stage: cache current version manifest. HTTP status: %1. App: %2, channel: %3, version: %4, version id: %5.%6</source>
<translation> 无法下载当前本地版本的签名 Manifest。阶段:缓存当前版本 Manifest。HTTP 状态码:%1。App: %2,渠道:%3,版本:%4,版本 ID:%5。%6</translation>
</message>
<message>
<location filename= "../Launcher/UpdateLogic.cpp" line= "136" />
<source>
Server message: %1</source>
<translation>
服务端消息:%1</translation>
</message>
<message>
<location filename= "../Launcher/UpdateLogic.cpp" line= "143" />
<source> The signed manifest response for the current local version is incomplete. Stage: cache current version manifest. App: %1, channel: %2, version: %3, version id: %4.</source>
<translation> 当前本地版本的签名 Manifest 响应不完整。阶段:缓存当前版本 Manifest。App:%1,渠道:%2,版本:%3,版本 ID:%4。</translation>
</message>
<message>
<location filename= "../Launcher/UpdateLogic.cpp" line= "151" />
<source> The signed manifest identity does not match the current local version. Stage: cache current version manifest. Expected app/channel/version: %1 / %2 / %3. Manifest app/channel/version: %4 / %5 / %6.</source>
<translation> 签名 Manifest 身份与当前本地版本不匹配。阶段:缓存当前版本 Manifest。期望 app/channel/version: %1 / %2 / %3。Manifest 中的 app/channel/version: %4 / %5 / %6。</translation>
</message>
<message>
<location filename= "../Launcher/UpdateLogic.cpp" line= "162" />
<source> Cannot create manifest cache directory. Stage: cache current version manifest. Directory: %1.</source>
<translation> 无法创建 Manifest 缓存目录。阶段:缓存当前版本 Manifest。目录:%1。</translation>
</message>
<message>
<location filename= "../Launcher/UpdateLogic.cpp" line= "174" />
<source> Cannot save signed manifest cache. Stage: cache current version manifest. File: %1. Error: %2.</source>
<translation> 无法保存签名 Manifest 缓存。阶段:缓存当前版本 Manifest。文件:%1。错误:%2。</translation>
</message>
<message>
<location filename= "../Launcher/UpdateLogic.cpp" line= "187" />
2026-07-20 06:43:46 +00:00
<source> Server address is empty.</source>
<translation> 服务端地址为空。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/UpdateLogic.cpp" line= "208" />
2026-07-20 06:43:46 +00:00
<source> Git tags request failed (HTTP %1).</source>
<translation> Git 标签请求失败(HTTP %1)。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/UpdateLogic.cpp" line= "215" />
2026-07-20 06:43:46 +00:00
<source> Git tags response is empty.</source>
<translation> Git 标签响应为空。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Launcher/UpdateLogic.cpp" line= "221" />
2026-07-20 06:43:46 +00:00
<source> Cannot write Git tags file: %1</source>
<translation> 无法写入 Git 标签文件:%1</translation>
</message>
</context>
2026-07-14 01:37:06 +00:00
<context>
<name> Updater</name>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "46" />
2026-07-14 01:37:06 +00:00
<source> Invalid Offline Package</source>
<translation> 离线包无效</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "58" />
2026-07-14 01:37:06 +00:00
<source> Updater Argument Error</source>
<translation> 更新器参数错误</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "59" />
2026-07-14 01:37:06 +00:00
<source> The updater is missing online update arguments or an offline update package.</source>
<translation> 更新器缺少在线更新参数或离线更新包。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "79" />
2026-07-14 01:37:06 +00:00
<source> Offline Package Not Applicable</source>
<translation> 离线包不适用</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "80" />
2026-07-14 01:37:06 +00:00
<source> The update package application or channel does not match the local configuration.</source>
<translation> 更新包的应用或渠道与本机配置不一致。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "89" />
2026-07-14 01:37:06 +00:00
<source> Offline Update Rejected</source>
<translation> 离线更新被拒绝</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "90" />
2026-07-14 01:37:06 +00:00
<source> The local signed policy has expired, forbids offline updates, or does not allow the target version.</source>
<translation> 本地签名策略已过期、禁止离线更新或不允许目标版本。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "97" />
2026-07-14 01:37:06 +00:00
<source> Downgrade Forbidden</source>
<translation> 禁止降级</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "98" />
2026-07-14 01:37:06 +00:00
<source> The current signed policy does not allow installing an offline package with a lower version.</source>
<translation> 当前签名策略不允许安装较低版本的离线包。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "110" />
<location filename= "../Updater/main.cpp" line= "118" />
2026-07-14 01:37:06 +00:00
<source> Update Recovery Failed</source>
<translation> 更新恢复失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "111" />
2026-07-14 01:37:06 +00:00
<source> An unfinished update was detected, but the old version could not be restored: %1
Do not continue running the software. Please contact the administrator.</source>
<translation> 检测到上次更新未完成,但无法恢复旧版本:%1
请不要继续运行软件,并联系管理员。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "119" />
2026-07-14 01:37:06 +00:00
<source> The old files were restored, but the version state could not be restored. Please check write permissions for the configuration directory.</source>
<translation> 旧文件已经恢复,但无法恢复版本状态,请检查配置目录写入权限。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "126" />
2026-07-14 01:37:06 +00:00
<source> Preparing update...</source>
<translation> 正在准备更新...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "127" />
2026-07-14 01:37:06 +00:00
<source> Updating to %1</source>
<translation> 正在更新到 %1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "156" />
2026-07-14 01:37:06 +00:00
<source> Preparing download...</source>
<translation> 正在准备下载...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "157" />
2026-07-14 01:37:06 +00:00
<source> Downloading: %1</source>
<translation> 正在下载:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "179" />
<source>
Details:
%1</source>
<translation>
详细信息:
%1</translation>
</message>
<message>
<location filename= "../Updater/main.cpp" line= "199" />
<source> Cannot start the main application because the executable file does not exist.
Executable: %1
Check main_executable and install_root in the generated client configuration.</source>
<translation> 无法启动主程序,因为主程序文件不存在。
可执行文件:%1
请检查生成的客户端配置中的 main_executable 和 install_root。</translation>
</message>
<message>
<location filename= "../Updater/main.cpp" line= "211" />
<source> Cannot start the main application because the one-time launch ticket could not be created.
Executable: %1
Details: %2</source>
<translation> 无法启动主程序,因为一次性启动 ticket 创建失败。
可执行文件:%1
详细信息:%2</translation>
</message>
<message>
<location filename= "../Updater/main.cpp" line= "222" />
<source> Cannot start the main application process.
Executable: %1
Ticket file: %2
Health file: %3
Check file permissions, dependent DLLs/shared libraries, and whether the executable can run independently.</source>
<translation> 无法启动主程序进程。
可执行文件:%1
Ticket 文件:%2
健康检查文件:%3
请检查文件权限、依赖 DLL/共享库,以及该可执行文件是否能独立运行。</translation>
</message>
<message>
<location filename= "../Updater/main.cpp" line= "225" />
<source> < not used> </source>
<translation> < 未使用> </translation>
</message>
<message>
<location filename= "../Updater/main.cpp" line= "243" />
2026-07-14 01:37:06 +00:00
<source> Delegating rollback to Bootstrap...</source>
<translation> 正在将回滚工作移交给 Bootstrap...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "252" />
2026-07-14 01:37:06 +00:00
<source>
Cannot start Bootstrap to perform rollback. Do not continue running the software. Please contact the administrator.</source>
<translation>
无法启动 Bootstrap 执行回滚。请不要继续运行软件,并联系管理员。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "262" />
2026-07-14 01:37:06 +00:00
<source> Transaction Resume Failed</source>
<translation> 事务续办失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "263" />
2026-07-14 01:37:06 +00:00
<source> Cannot read the Bootstrap update transaction: %1</source>
<translation> 无法读取 Bootstrap 更新事务:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "276" />
2026-07-14 01:37:06 +00:00
<source> Update Rolled Back</source>
<translation> 更新已回滚</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "278" />
2026-07-14 01:37:06 +00:00
<source> The new version failed to install or start. The old version has been restored and started automatically.</source>
<translation> 新版本安装或启动失败,已自动恢复并启动旧版本。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "279" />
2026-07-14 01:37:06 +00:00
<source> The old files were restored, but the old version number could not be written back. Please check configuration directory permissions.</source>
<translation> 旧文件已经恢复,但旧版本号写回失败,请检查配置目录权限。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "286" />
2026-07-14 01:37:06 +00:00
<source> Automatic Rollback Failed</source>
<translation> 自动回滚失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "287" />
2026-07-14 01:37:06 +00:00
<source> Bootstrap could not fully restore the old version. Do not continue running the software. Please contact the administrator.</source>
<translation> Bootstrap 无法完整恢复旧版本。请不要继续运行软件,并联系管理员。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "291" />
<location filename= "../Updater/main.cpp" line= "297" />
2026-07-14 01:37:06 +00:00
<source> Update Preparation Failed</source>
<translation> 更新准备失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "292" />
2026-07-14 01:37:06 +00:00
<source> Cannot create the update transaction directory or save the transaction state.</source>
<translation> 无法创建更新事务目录或保存事务状态。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "298" />
2026-07-14 01:37:06 +00:00
<source> Cannot save the offline transaction marker.</source>
<translation> 无法保存离线事务标记。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "304" />
2026-07-14 01:37:06 +00:00
<source> Fetching and verifying version manifest...</source>
<translation> 正在获取并验证版本清单...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "305" />
2026-07-14 01:37:06 +00:00
<source> Verifying offline update package...</source>
<translation> 正在验证离线更新包...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "309" />
<location filename= "../Updater/main.cpp" line= "339" />
<location filename= "../Updater/main.cpp" line= "342" />
2026-07-14 01:37:06 +00:00
<source> Manifest Cache Failed</source>
<translation> 清单缓存失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "310" />
2026-07-14 01:37:06 +00:00
<source> Cannot read the signed manifest cache after Bootstrap installation.</source>
<translation> Bootstrap 安装后无法读取签名 Manifest 缓存。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "317" />
<location filename= "../Updater/main.cpp" line= "320" />
2026-07-14 01:37:06 +00:00
<source> Security Verification Failed</source>
<translation> 安全验证失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "318" />
2026-07-14 01:37:06 +00:00
<source> Cannot reverify the manifest signature after Bootstrap installation.</source>
<translation> Bootstrap 安装后无法重新验证版本清单签名。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "321" />
2026-07-14 01:37:06 +00:00
<source> The version manifest signature is invalid. The update has stopped. Please contact the administrator.</source>
<translation> 版本清单签名无效,更新已停止。请联系管理员。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "340" />
2026-07-14 01:37:06 +00:00
<source> Cannot save the new version manifest cache.</source>
<translation> 无法保存新版本 Manifest 缓存。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "343" />
2026-07-14 01:37:06 +00:00
<source> Cannot save the new version manifest cache. The update has stopped.</source>
<translation> 无法保存新版本 Manifest 缓存,更新已停止。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "351" />
2026-07-14 01:37:06 +00:00
<source> Fetching secure download URLs...</source>
<translation> 正在获取安全下载地址...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "352" />
2026-07-14 01:37:06 +00:00
<source> Preparing offline package files...</source>
<translation> 正在准备离线包文件...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "356" />
2026-07-14 01:37:06 +00:00
<source> No Files to Update</source>
<translation> 没有可更新文件</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "357" />
2026-07-14 01:37:06 +00:00
<source> The server did not return any version files. The update has stopped.</source>
<translation> 服务器没有返回任何版本文件,更新已停止。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "366" />
2026-07-14 01:37:06 +00:00
<source> Insufficient Disk Space</source>
<translation> 磁盘空间不足</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "367" />
2026-07-14 01:37:06 +00:00
<source> The update requires at least %1 of free space, but the installation drive currently has only %2.
The required space includes downloaded files, old version backups, and a safety margin.</source>
<translation> 更新至少需要 %1 可用空间,安装盘当前仅剩 %2。
所需空间已包含下载文件、旧版本备份和安全余量。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "376" />
2026-07-14 01:37:06 +00:00
<source> Downloading and verifying %1 version files...</source>
<translation> 正在下载并校验 %1 个版本文件...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "377" />
2026-07-14 01:37:06 +00:00
<source> Extracting and verifying %1 offline files...</source>
<translation> 正在提取并校验 %1 个离线文件...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "380" />
2026-07-14 01:37:06 +00:00
<source> Offline Package Extraction Failed</source>
<translation> 离线包提取失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "386" />
2026-07-14 01:37:06 +00:00
<source> Download Failed</source>
<translation> 下载失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "387" />
<source> Some files failed to download or failed SHA-256 verification. Please check the network, update cache, or server release files and try again.</source>
<translation> 部分文件下载失败或 SHA-256 校验失败。请检查网络、更新缓存或服务端发布文件后重试。</translation>
2026-07-14 01:37:06 +00:00
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "397" />
<source> The downloaded/staged files do not match the target version manifest. The update has stopped before replacing installed files.</source>
<translation> 已下载/暂存的文件与目标版本 Manifest 不一致。更新已在替换已安装文件前停止。</translation>
</message>
<message>
<location filename= "../Updater/main.cpp" line= "477" />
<source> New version files failed verification after installation. The updater will roll back to the previous version.</source>
<translation> 新版本文件在安装后校验失败。更新器将回滚到上一版本。</translation>
</message>
<message>
<location filename= "../Updater/main.cpp" line= "394" />
2026-07-14 01:37:06 +00:00
<source> Verifying complete version files...</source>
<translation> 正在校验完整版本文件...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "396" />
2026-07-14 01:37:06 +00:00
<source> File Verification Failed</source>
<translation> 文件校验失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "411" />
2026-07-14 01:37:06 +00:00
<source> Bootstrap Cannot Self-Update</source>
<translation> Bootstrap 无法自更新</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "412" />
2026-07-14 01:37:06 +00:00
<source> This version contains a new %1. Please upgrade this component with the installer, then publish the business version again.</source>
<translation> 本次版本包含新的 %1。请使用安装包升级该组件,再重新发布业务版本。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "417" />
2026-07-14 01:37:06 +00:00
<source> Transaction Recording Failed</source>
<translation> 事务记录失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "418" />
2026-07-14 01:37:06 +00:00
<source> Cannot save the list of verified or pending deletion files. The update has stopped.</source>
<translation> 无法保存已校验或待删除文件列表,更新已停止。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "421" />
2026-07-14 01:37:06 +00:00
<source> Closing the main application...</source>
<translation> 正在关闭主程序...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "423" />
2026-07-14 01:37:06 +00:00
<source> Cannot Close Main Application</source>
<translation> 无法关闭主程序</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "424" />
2026-07-14 01:37:06 +00:00
<source> %1 is still running. Please close it manually and try again.</source>
<translation> %1 仍在运行,请手动关闭后重试。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "427" />
2026-07-14 01:37:06 +00:00
<source> Backing up %1 files to be changed, including %2 files to be deleted...</source>
<translation> 正在备份 %1 个待变更文件(其中删除 %2 个)...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "430" />
2026-07-14 01:37:06 +00:00
<source> Backup Failed</source>
<translation> 备份失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "431" />
2026-07-14 01:37:06 +00:00
<source> Cannot back up current version files. The new version has not been installed. Please check disk space and directory permissions.</source>
<translation> 无法备份当前版本文件,尚未安装新版本。请检查磁盘空间和目录权限。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "437" />
<location filename= "../Updater/main.cpp" line= "447" />
<location filename= "../Updater/main.cpp" line= "455" />
<location filename= "../Updater/main.cpp" line= "461" />
2026-07-14 01:37:06 +00:00
<source> Bootstrap Handoff Preparation Failed</source>
<translation> 接管准备失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "438" />
2026-07-14 01:37:06 +00:00
<source> Cannot create the Bootstrap file plan.</source>
<translation> 无法创建 Bootstrap 文件计划。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "448" />
2026-07-14 01:37:06 +00:00
<source> Cannot write the Bootstrap copy plan.</source>
<translation> 无法写入 Bootstrap 复制计划。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "456" />
2026-07-14 01:37:06 +00:00
<source> Cannot write the Bootstrap deletion plan.</source>
<translation> 无法写入 Bootstrap 删除计划。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "462" />
2026-07-14 01:37:06 +00:00
<source> Cannot commit the Bootstrap file plan or transaction state.</source>
<translation> 无法提交 Bootstrap 文件计划或事务状态。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "465" />
2026-07-14 01:37:06 +00:00
<source> Delegating installation to Bootstrap...</source>
<translation> 正在将安装工作移交给 Bootstrap...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "467" />
2026-07-14 01:37:06 +00:00
<source> Bootstrap Startup Failed</source>
<translation> Bootstrap 启动失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "468" />
2026-07-14 01:37:06 +00:00
<source> Cannot start the standalone update handoff program: %1</source>
<translation> 无法启动独立更新接管程序:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "474" />
2026-07-14 01:37:06 +00:00
<source> Verifying Bootstrap installation result...</source>
<translation> 正在校验 Bootstrap 安装结果...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "476" />
2026-07-14 01:37:06 +00:00
<source> Installation Verification Failed</source>
<translation> 安装校验失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "481" />
2026-07-14 01:37:06 +00:00
<source> Obsolete File Cleanup Failed</source>
<translation> 废弃文件清理失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "482" />
2026-07-14 01:37:06 +00:00
<source> An obsolete file still exists: %1</source>
<translation> 废弃文件仍然存在:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "485" />
2026-07-14 01:37:06 +00:00
<source> Saving new version state...</source>
<translation> 正在保存新版本状态...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "488" />
2026-07-14 01:37:06 +00:00
<source> State Save Failed</source>
<translation> 状态保存失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "489" />
2026-07-14 01:37:06 +00:00
<source> Cannot save the current version number.</source>
<translation> 无法保存当前版本号。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "493" />
2026-07-14 01:37:06 +00:00
<source> Starting the new version and waiting for health confirmation...</source>
<translation> 正在启动新版本并等待健康确认...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "495" />
2026-07-14 01:37:06 +00:00
<source> Startup Failed</source>
<translation> 启动失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "497" />
2026-07-14 01:37:06 +00:00
<source> %1 cannot be started.</source>
<translation> %1 无法启动。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "507" />
2026-07-14 01:37:06 +00:00
<source> Startup Confirmation Failed</source>
<translation> 启动确认失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "508" />
2026-07-14 01:37:06 +00:00
<source> The new version did not complete startup health confirmation within %1 milliseconds.</source>
<translation> 新版本在 %1 毫秒内没有完成启动健康确认。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "511" />
2026-07-14 01:37:06 +00:00
<source> Committing update transaction...</source>
<translation> 正在提交更新事务...</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "513" />
2026-07-14 01:37:06 +00:00
<source> Transaction Commit Failed</source>
<translation> 事务提交失败</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "514" />
2026-07-14 01:37:06 +00:00
<source> The new version has started, but the update transaction could not be committed.</source>
<translation> 新版本已经启动,但无法提交更新事务。</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "522" />
2026-07-14 01:37:06 +00:00
<source> Update Complete</source>
<translation> 更新完成</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/main.cpp" line= "523" />
2026-07-14 01:37:06 +00:00
<source> The software has been successfully updated to %1 and passed the startup health check.</source>
<translation> 软件已成功更新到 %1,并通过启动健康检查。</translation>
</message>
</context>
<context>
<name> UpdaterLogic</name>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "90" />
<source> Target version manifest response is incomplete. Stage: download target manifest. App: %1, channel: %2, version: %3, version id: %4.</source>
<translation> 目标版本 Manifest 响应不完整。阶段:下载目标版本 Manifest。App:%1,渠道:%2,版本:%3,版本 ID:%4。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "99" />
<source> Cannot download target version manifest. Stage: download target manifest. HTTP status: %1. App: %2, channel: %3, version: %4, version id: %5.%6</source>
<translation> 无法下载目标版本 Manifest。阶段:下载目标版本 Manifest。HTTP 状态码:%1。App: %2,渠道:%3,版本:%4,版本 ID:%5。%6</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "102" />
<location filename= "../Updater/UpdaterLogic.cpp" line= "527" />
<source>
Server message: %1</source>
<translation>
服务端消息:%1</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "115" />
<source> Cannot verify manifest signature because OpenSSL support is unavailable. Stage: manifest signature verification.</source>
<translation> 无法验证 Manifest 签名,因为当前程序未启用 OpenSSL。阶段:Manifest 签名校验。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "123" />
<source> Cannot open manifest public key. Stage: manifest signature verification. Public key path: %1.</source>
<translation> 无法打开 Manifest 公钥。阶段:Manifest 签名校验。公钥路径:%1。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "136" />
<source> Cannot parse manifest public key buffer. Stage: manifest signature verification. Public key path: %1.</source>
<translation> 无法解析 Manifest 公钥内容。阶段:Manifest 签名校验。公钥路径:%1。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "147" />
<source> Manifest public key is invalid. Stage: manifest signature verification. Public key path: %1.</source>
<translation> Manifest 公钥无效。阶段:Manifest 签名校验。公钥路径:%1。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "159" />
<source> Cannot create OpenSSL verification context. Stage: manifest signature verification.</source>
<translation> 无法创建 OpenSSL 验签上下文。阶段:Manifest 签名校验。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "182" />
<source> Manifest RSA signature is invalid. Stage: manifest signature verification. This usually means the manifest was not signed by the matching server private key, the client public key is wrong, or the manifest content was changed.</source>
<translation> Manifest RSA 签名无效。阶段:Manifest 签名校验。通常表示 Manifest 不是由匹配的服务端私钥签名、客户端公钥不正确,或 Manifest 内容被修改过。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "196" />
<source> No manifest is available for signature verification. Stage: manifest signature verification. The target manifest may not have been downloaded successfully.</source>
<translation> 没有可用于验签的 Manifest。阶段:Manifest 签名校验。目标版本 Manifest 可能没有下载成功。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "204" />
<source> The manifest does not contain a signature. Stage: manifest signature verification.</source>
<translation> Manifest 中没有签名字段。阶段:Manifest 签名校验。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "222" />
<source> Cannot save manifest cache because the target manifest is empty. Stage: save target manifest cache.</source>
<translation> 无法保存 Manifest 缓存,因为目标版本 Manifest 为空。阶段:保存目标版本 Manifest 缓存。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "229" />
<source> Cannot create manifest cache directory. Stage: save target manifest cache. Directory: %1.</source>
<translation> 无法创建 Manifest 缓存目录。阶段:保存目标版本 Manifest 缓存。目录:%1。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "239" />
<source> Cannot write manifest cache file. Stage: save target manifest cache. File: %1. Error: %2.</source>
<translation> 无法写入 Manifest 缓存文件。阶段:保存目标版本 Manifest 缓存。文件:%1。错误:%2。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "263" />
<source> Cannot read cached signed manifest. Stage: read local manifest cache. Version: %1. File: %2. This cache is created after a version is installed successfully.</source>
<translation> 无法读取本地签名 Manifest 缓存。阶段:读取本地 Manifest 缓存。版本:%1。文件:%2。该缓存会在版本安装成功后生成。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "273" />
<source> Cached signed manifest is not valid JSON. Stage: read local manifest cache. Version: %1. File: %2.</source>
<translation> 本地签名 Manifest 缓存不是合法 JSON。阶段:读取本地 Manifest 缓存。版本:%1。文件:%2。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "281" />
<source> Cached signed manifest is incomplete. Stage: read local manifest cache. Version: %1. File: %2.</source>
<translation> 本地签名 Manifest 缓存不完整。阶段:读取本地 Manifest 缓存。版本:%1。文件:%2。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "387" />
<source> installed version verification</source>
<translation> 已安装版本校验</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "388" />
<source> downloaded/staged file verification</source>
<translation> 已下载/暂存文件校验</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "391" />
<source> No manifest is available. Stage: %1. The updater cannot know which files and hashes should be verified.</source>
<translation> 没有可用的 Manifest。阶段:%1。Updater 无法知道应该校验哪些文件和哈希。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "404" />
<source> Manifest contains an unsafe file path. Stage: %1. Version: %2. Path: %3.</source>
<translation> Manifest 包含不安全文件路径。阶段:%1。版本:%2。路径:%3。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "421" />
<source> A required file is missing. Stage: %1. Version: %2. Manifest path: %3. Checked path: %4. If this is a downloaded update, the file was not downloaded or staged correctly; if this is startup verification, the installed file may have been deleted.</source>
<translation> 缺少必需文件。阶段:%1。版本:%2。Manifest 路径:%3。检查路径:%4。如果这是下载更新阶段,说明文件没有正确下载或暂存;如果这是启动校验阶段,说明已安装文件可能被删除。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "430" />
<source> File SHA-256 does not match the signed manifest. Stage: %1. Version: %2. Manifest path: %3. Local path: %4.
Expected SHA-256: %5
Actual SHA-256: %6
If this happens during download, clear the update cache and retry. If this happens during startup or after installation, the local file differs from the published version.</source>
<translation> 文件 SHA-256 与签名 Manifest 不一致。阶段:%1。版本:%2。Manifest 路径:%3。本地路径:%4。
期望 SHA-256: %5
实际 SHA-256: %6
如果发生在下载阶段,请清理更新缓存后重试。如果发生在启动或安装后校验阶段,说明本地文件与发布版本不同。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "432" />
<location filename= "../Updater/UpdaterLogic.cpp" line= "675" />
<source> < cannot read file> </source>
<translation> < 无法读取文件> </translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "445" />
2026-07-14 01:37:06 +00:00
<source> Cannot open the offline update package</source>
<translation> 无法打开离线更新包</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "446" />
2026-07-14 01:37:06 +00:00
<source> The offline package format identifier is invalid</source>
<translation> 离线包格式标识无效</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "448" />
2026-07-14 01:37:06 +00:00
<source> The offline package header is incomplete</source>
<translation> 离线包头不完整</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "451" />
2026-07-14 01:37:06 +00:00
<source> The offline package header length is invalid</source>
<translation> 离线包头长度无效</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "454" />
2026-07-14 01:37:06 +00:00
<source> The offline package header JSON is invalid</source>
<translation> 离线包头 JSON 无效</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "459" />
2026-07-14 01:37:06 +00:00
<source> The offline package RSA signature is invalid</source>
<translation> 离线包 RSA 签名无效</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "461" />
2026-07-14 01:37:06 +00:00
<source> The offline package signature metadata is invalid</source>
<translation> 离线包签名元数据无效</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "462" />
2026-07-14 01:37:06 +00:00
<source> The manifest digest does not match the package signature</source>
<translation> Manifest 摘要与包签名不一致</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "464" />
2026-07-14 01:37:06 +00:00
<source> The offline manifest is invalid</source>
<translation> 离线 Manifest 无效</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "467" />
2026-07-14 01:37:06 +00:00
<source> Package information does not match manifest identity</source>
<translation> 包信息与 Manifest 身份不一致</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "468" />
2026-07-14 01:37:06 +00:00
<source> The offline manifest RSA signature is invalid</source>
<translation> 离线 Manifest RSA 签名无效</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "474" />
2026-07-14 01:37:06 +00:00
<source> The offline package contains an unsafe path or out-of-range data: %1</source>
<translation> 离线包包含不安全路径或越界数据:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "477" />
2026-07-14 01:37:06 +00:00
<source> Cannot prepare offline file: %1</source>
<translation> 无法准备离线文件:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "478" />
2026-07-14 01:37:06 +00:00
<source> Cannot create staged file: %1</source>
<translation> 无法创建暂存文件:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "480" />
2026-07-14 01:37:06 +00:00
<source> Failed to read offline file: %1</source>
<translation> 离线文件读取失败:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "481" />
2026-07-14 01:37:06 +00:00
<source> Offline file hash verification or write failed: %1</source>
<translation> 离线文件 Hash 或写入失败:%1</translation>
</message>
<message>
2026-07-21 03:02:42 +00:00
<location filename= "../Updater/UpdaterLogic.cpp" line= "483" />
2026-07-14 01:37:06 +00:00
<source> The offline package file count does not match the manifest</source>
<translation> 离线包文件数量与 Manifest 不一致</translation>
</message>
2026-07-21 03:02:42 +00:00
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "524" />
<source> Cannot get secure download URLs. Stage: request download URLs. HTTP status: %1. App: %2, channel: %3, version: %4, version id: %5.%6</source>
<translation> 无法获取安全下载链接。阶段:请求下载链接。HTTP 状态码:%1。App:%2,渠道:%3,版本:%4,版本 ID:%5。%6</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "556" />
<source> Cannot create partial download directory. Stage: download file. File: %1. Partial file: %2.</source>
<translation> 无法创建断点续传目录。阶段:下载文件。文件:%1。临时分片文件:%2。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "585" />
<location filename= "../Updater/UpdaterLogic.cpp" line= "663" />
<source> Downloaded file passed SHA-256 verification, but cannot move it into the staging directory. Stage: download file. File: %1. From: %2. To: %3.</source>
<translation> 下载文件已通过 SHA-256 校验,但无法移动到暂存目录。阶段:下载文件。文件:%1。从:%2。到:%3。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "591" />
<source> Cached partial file has the expected size but wrong SHA-256. Stage: resume download. File: %1.
Expected SHA-256: %2
Actual SHA-256: %3
The partial cache will be deleted and downloaded again.</source>
<translation> 缓存的断点续传文件大小正确,但 SHA-256 不一致。阶段:断点续传。文件:%1。
期望 SHA-256: %2
实际 SHA-256: %3
该临时缓存会被删除并重新下载。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "604" />
<source> Cannot open partial download file. Stage: download file. File: %1. Partial file: %2. Error: %3.</source>
<translation> 无法打开断点续传临时文件。阶段:下载文件。文件:%1。临时分片文件:%2。错误:%3。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "672" />
<source> Downloaded file does not match the signed manifest. Stage: download file. File: %1. HTTP status: %2.
Expected size: %3 bytes
Actual size: %4 bytes
Expected SHA-256: %5
Actual SHA-256: %6
The partial cache will be deleted and downloaded again.</source>
<translation> 下载文件与签名 Manifest 不一致。阶段:下载文件。文件:%1。HTTP 状态码:%2。
期望大小:%3 字节
实际大小:%4 字节
期望 SHA-256: %5
实际 SHA-256: %6
该临时缓存会被删除并重新下载。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "679" />
<source> Downloaded file is incomplete. Stage: download file. File: %1. HTTP status: %2. Expected size: %3 bytes, current size: %4 bytes.</source>
<translation> 下载文件不完整。阶段:下载文件。文件:%1。HTTP 状态码:%2。期望大小:%3 字节,当前大小:%4 字节。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "688" />
<source> Download request failed. Stage: download file. File: %1. Attempt: %2/4. HTTP status: %3. Network error: %4. Partial file: %5.</source>
<translation> 下载请求失败。阶段:下载文件。文件:%1。尝试次数:%2/4。HTTP 状态码:%3。网络错误:%4。临时分片文件:%5。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "706" />
<source> File download failed after retries. Stage: download file. File: %1.</source>
<translation> 文件多次重试后仍下载失败。阶段:下载文件。文件:%1。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "781" />
<source> The target version manifest contains no downloadable files. Stage: prepare downloads.</source>
<translation> 目标版本 Manifest 中没有可下载文件。阶段:准备下载。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "788" />
<source> Cannot create update staging directory. Stage: prepare downloads. Directory: %1.</source>
<translation> 无法创建更新暂存目录。阶段:准备下载。目录:%1。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "795" />
<source> Cannot create download cache directory. Stage: prepare downloads. Directory: %1.</source>
<translation> 无法创建下载缓存目录。阶段:准备下载。目录:%1。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "829" />
<source> Manifest contains an unsafe file path. Stage: prepare file download. Path: %1.</source>
<translation> Manifest 包含不安全文件路径。阶段:准备文件下载。路径:%1。</translation>
</message>
<message>
<location filename= "../Updater/UpdaterLogic.cpp" line= "854" />
<source> Cannot create staging subdirectory. Stage: prepare file download. File: %1. Directory: %2.</source>
<translation> 无法创建暂存子目录。阶段:准备文件下载。文件:%1。目录:%2。</translation>
</message>
2026-07-14 01:37:06 +00:00
</context>
</TS>