Files
update-client/i18n/update-client_zh_CN.ts
T

1358 lines
70 KiB
XML
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.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<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>
<context>
<name>ConfigHelper</name>
<message>
<location filename="../Common/ConfigHelper.cpp" line="219"/>
<source>The user canceled the administrator permission confirmation.</source>
<translation>用户取消了管理员权限确认。</translation>
</message>
<message>
<location filename="../Common/ConfigHelper.cpp" line="220"/>
<source>Windows error %1</source>
<translation>Windows 错误 %1</translation>
</message>
<message>
<location filename="../Common/ConfigHelper.cpp" line="230"/>
<source>Administrator Permission Required</source>
<translation>需要管理员权限</translation>
</message>
<message>
<location filename="../Common/ConfigHelper.cpp" line="231"/>
<source>The current operation needs administrator permission to modify a protected file.
Target file: %1
Reason: %2
Click OK, then choose Yes in the Windows permission confirmation dialog.</source>
<translation>当前操作需要管理员权限来修改受保护文件。
目标文件:%1
原因:%2
点击“确定”,然后在 Windows 权限确认窗口中选择“是”。</translation>
</message>
<message>
<location filename="../Common/ConfigHelper.cpp" line="238"/>
<source>The user canceled the administrator permission request.</source>
<translation>用户取消了管理员权限请求。</translation>
</message>
</context>
<context>
<name>IntegrityHelper</name>
<message>
<location filename="../Common/IntegrityHelper.cpp" line="83"/>
<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="92"/>
<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="102"/>
<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="115"/>
<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="136"/>
<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="144"/>
<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="159"/>
<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="168"/>
<source>Local manifest SHA-256 does not match the cached envelope. Stage: installed version verification. Version: %1.
Expected SHA-256: %2
Actual SHA-256: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Common/IntegrityHelper.cpp" line="177"/>
<source>Local manifest cache is unsigned, but require_manifest_signature is enabled. Stage: installed version verification. Version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Common/IntegrityHelper.cpp" line="186"/>
<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="197"/>
<source>Local signed manifest identity does not match this application. Stage: installed version verification. Expected product/channel/version: %1 / %2 / %3. Manifest product/channel/version: %4 / %5 / %6.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Common/IntegrityHelper.cpp" line="211"/>
<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="219"/>
<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="229"/>
<source>Installed file size does not match the local manifest. Stage: installed version verification. Version: %1. Manifest path: %2. Local path: %3.
Expected size: %4 bytes
Actual size: %5 bytes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Common/IntegrityHelper.cpp" line="238"/>
<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="241"/>
<source>&lt;cannot read file&gt;</source>
<translation>&lt;无法读取文件&gt;</translation>
</message>
<message>
<location filename="../Common/IntegrityHelper.cpp" line="264"/>
<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>
<context>
<name>Launcher</name>
<message>
<location filename="../Launcher/main.cpp" line="82"/>
<source>Checking for software updates...</source>
<translation>正在检查软件更新...</translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="243"/>
<source>Authorization Rejected</source>
<translation>授权被拒绝</translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="209"/>
<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="221"/>
<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="232"/>
<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="262"/>
<source>New Version Available</source>
<translation>发现新版本</translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="258"/>
<source>Version %1 is available. Update now?</source>
<translation>发现新版本 %1,是否现在更新?</translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="83"/>
<source>SimCAE Launcher</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="103"/>
<location filename="../Launcher/main.cpp" line="117"/>
<source>Customer Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="105"/>
<source>Enter the customer account email:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="106"/>
<source>%1
Enter the customer account email:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="118"/>
<source>Enter the customer account password:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="126"/>
<source>Logging in...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="132"/>
<source>Customer login failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="136"/>
<source>Customer Login Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="150"/>
<location filename="../Launcher/main.cpp" line="170"/>
<source>Refreshing customer session...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="156"/>
<source>A customer account is required to check authorized updates and download release packages.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="164"/>
<source>Checking authorized updates...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="176"/>
<source>The stored customer session has expired. Please log in again.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="245"/>
<source>The current customer account is not authorized to download this update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="250"/>
<source>Update Server Unavailable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="251"/>
<source>Cannot connect to the update server. The installed application will be started without downloading an update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="269"/>
<location filename="../Launcher/main.cpp" line="316"/>
<source>Startup Failed</source>
<translation>启动失败</translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="271"/>
<location filename="../Launcher/main.cpp" line="318"/>
<source>Cannot start the main application: %1</source>
<translation>无法启动主程序:%1</translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="289"/>
<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="299"/>
<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="310"/>
<source>Offline startup. Starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="288"/>
<location filename="../Launcher/main.cpp" line="298"/>
<source>Updater Startup Failed</source>
<translation>更新器启动失败</translation>
</message>
<message>
<location filename="../Launcher/main.cpp" line="309"/>
<source>The application is up to date. Starting...</source>
<translation>当前已是最新版本,正在启动...</translation>
</message>
</context>
<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>
<context>
<name>UpdateLogic</name>
<message>
<location filename="../Launcher/UpdateLogic.cpp" line="93"/>
<source>Update configuration is incomplete. Server, product_code and current_version are required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/UpdateLogic.cpp" line="174"/>
<source>Current version manifest identity is incomplete. Stage: cache current version manifest. Product: %1, channel: %2, version: %3.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/UpdateLogic.cpp" line="201"/>
<source>Cannot download manifest for the current local version. Stage: cache current version manifest. HTTP status: %1. Product: %2, channel: %3, version: %4.%5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/UpdateLogic.cpp" line="205"/>
<source>
Server message: %1</source>
<translation>
服务端消息:%1</translation>
</message>
<message>
<location filename="../Launcher/UpdateLogic.cpp" line="215"/>
<source>The manifest response for the current local version is incomplete. Stage: cache current version manifest. Product: %1, channel: %2, version: %3.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/UpdateLogic.cpp" line="226"/>
<source>The manifest identity does not match the current local version. Stage: cache current version manifest. Expected product/channel/version: %1 / %2 / %3. Manifest product/channel/version: %4 / %5 / %6.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/UpdateLogic.cpp" line="251"/>
<source>Cannot save manifest cache. Stage: cache current version manifest. File: %1. Error: %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Launcher/UpdateLogic.cpp" line="238"/>
<source>Cannot create manifest cache directory. Stage: cache current version manifest. Directory: %1.</source>
<translation>无法创建 Manifest 缓存目录。阶段:缓存当前版本 Manifest。目录:%1。</translation>
</message>
</context>
<context>
<name>Updater</name>
<message>
<location filename="../Updater/main.cpp" line="47"/>
<source>Invalid Offline Package</source>
<translation>离线包无效</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="59"/>
<source>Updater Argument Error</source>
<translation>更新器参数错误</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="60"/>
<source>The updater is missing online update arguments or an offline update package.</source>
<translation>更新器缺少在线更新参数或离线更新包。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="88"/>
<source>Offline Package Not Applicable</source>
<translation>离线包不适用</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="89"/>
<source>The update package application or channel does not match the local configuration.</source>
<translation>更新包的应用或渠道与本机配置不一致。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="98"/>
<source>Offline Update Rejected</source>
<translation>离线更新被拒绝</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="99"/>
<source>The local signed policy has expired, forbids offline updates, or does not allow the target version.</source>
<translation>本地签名策略已过期、禁止离线更新或不允许目标版本。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="106"/>
<source>Downgrade Forbidden</source>
<translation>禁止降级</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="107"/>
<source>The current signed policy does not allow installing an offline package with a lower version.</source>
<translation>当前签名策略不允许安装较低版本的离线包。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="119"/>
<location filename="../Updater/main.cpp" line="127"/>
<source>Update Recovery Failed</source>
<translation>更新恢复失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="120"/>
<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>
<location filename="../Updater/main.cpp" line="128"/>
<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>
<location filename="../Updater/main.cpp" line="135"/>
<source>Preparing update...</source>
<translation>正在准备更新...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="136"/>
<source>Updating to %1</source>
<translation>正在更新到 %1</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="165"/>
<source>Preparing download...</source>
<translation>正在准备下载...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="166"/>
<source>Downloading: %1</source>
<translation>正在下载:%1</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="188"/>
<source>
Details:
%1</source>
<translation>
详细信息:
%1</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="208"/>
<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="220"/>
<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="231"/>
<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="234"/>
<source>&lt;not used&gt;</source>
<translation>&lt;未使用&gt;</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="252"/>
<source>Delegating rollback to Bootstrap...</source>
<translation>正在将回滚工作移交给 Bootstrap...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="261"/>
<source>
Cannot start Bootstrap to perform rollback. Do not continue running the software. Please contact the administrator.</source>
<translation>
无法启动 Bootstrap 执行回滚。请不要继续运行软件,并联系管理员。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="271"/>
<source>Transaction Resume Failed</source>
<translation>事务续办失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="272"/>
<source>Cannot read the Bootstrap update transaction: %1</source>
<translation>无法读取 Bootstrap 更新事务:%1</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="285"/>
<source>Update Rolled Back</source>
<translation>更新已回滚</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="287"/>
<source>The new version failed to install or start. The old version has been restored and started automatically.</source>
<translation>新版本安装或启动失败,已自动恢复并启动旧版本。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="288"/>
<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>
<location filename="../Updater/main.cpp" line="295"/>
<source>Automatic Rollback Failed</source>
<translation>自动回滚失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="296"/>
<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>
<location filename="../Updater/main.cpp" line="300"/>
<location filename="../Updater/main.cpp" line="306"/>
<source>Update Preparation Failed</source>
<translation>更新准备失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="301"/>
<source>Cannot create the update transaction directory or save the transaction state.</source>
<translation>无法创建更新事务目录或保存事务状态。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="307"/>
<source>Cannot save the offline transaction marker.</source>
<translation>无法保存离线事务标记。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="313"/>
<source>Fetching and verifying version manifest...</source>
<translation>正在获取并验证版本清单...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="314"/>
<source>Verifying offline update package...</source>
<translation>正在验证离线更新包...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="318"/>
<location filename="../Updater/main.cpp" line="348"/>
<location filename="../Updater/main.cpp" line="351"/>
<source>Manifest Cache Failed</source>
<translation>清单缓存失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="319"/>
<source>Cannot read the signed manifest cache after Bootstrap installation.</source>
<translation>Bootstrap 安装后无法读取签名 Manifest 缓存。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="326"/>
<location filename="../Updater/main.cpp" line="329"/>
<source>Security Verification Failed</source>
<translation>安全验证失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="327"/>
<source>Cannot reverify the manifest signature after Bootstrap installation.</source>
<translation>Bootstrap 安装后无法重新验证版本清单签名。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="330"/>
<source>The version manifest signature is invalid. The update has stopped. Please contact the administrator.</source>
<translation>版本清单签名无效,更新已停止。请联系管理员。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="349"/>
<source>Cannot save the new version manifest cache.</source>
<translation>无法保存新版本 Manifest 缓存。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="352"/>
<source>Cannot save the new version manifest cache. The update has stopped.</source>
<translation>无法保存新版本 Manifest 缓存,更新已停止。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="360"/>
<source>Fetching secure download URLs...</source>
<translation>正在获取安全下载地址...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="361"/>
<source>Preparing offline package files...</source>
<translation>正在准备离线包文件...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="365"/>
<source>No Files to Update</source>
<translation>没有可更新文件</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="366"/>
<source>The server did not return any version files. The update has stopped.</source>
<translation>服务器没有返回任何版本文件,更新已停止。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="375"/>
<source>Insufficient Disk Space</source>
<translation>磁盘空间不足</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="376"/>
<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>
<location filename="../Updater/main.cpp" line="385"/>
<source>Downloading and verifying %1 version files...</source>
<translation>正在下载并校验 %1 个版本文件...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="386"/>
<source>Extracting and verifying %1 offline files...</source>
<translation>正在提取并校验 %1 个离线文件...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="389"/>
<source>Offline Package Extraction Failed</source>
<translation>离线包提取失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="395"/>
<source>Download Failed</source>
<translation>下载失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="396"/>
<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>
</message>
<message>
<location filename="../Updater/main.cpp" line="406"/>
<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="486"/>
<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="403"/>
<source>Verifying complete version files...</source>
<translation>正在校验完整版本文件...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="405"/>
<source>File Verification Failed</source>
<translation>文件校验失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="420"/>
<source>Bootstrap Cannot Self-Update</source>
<translation>Bootstrap 无法自更新</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="421"/>
<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>
<location filename="../Updater/main.cpp" line="426"/>
<source>Transaction Recording Failed</source>
<translation>事务记录失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="427"/>
<source>Cannot save the list of verified or pending deletion files. The update has stopped.</source>
<translation>无法保存已校验或待删除文件列表,更新已停止。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="430"/>
<source>Closing the main application...</source>
<translation>正在关闭主程序...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="432"/>
<source>Cannot Close Main Application</source>
<translation>无法关闭主程序</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="433"/>
<source>%1 is still running. Please close it manually and try again.</source>
<translation>%1 仍在运行,请手动关闭后重试。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="436"/>
<source>Backing up %1 files to be changed, including %2 files to be deleted...</source>
<translation>正在备份 %1 个待变更文件(其中删除 %2 个)...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="439"/>
<source>Backup Failed</source>
<translation>备份失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="440"/>
<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>
<location filename="../Updater/main.cpp" line="446"/>
<location filename="../Updater/main.cpp" line="456"/>
<location filename="../Updater/main.cpp" line="464"/>
<location filename="../Updater/main.cpp" line="470"/>
<source>Bootstrap Handoff Preparation Failed</source>
<translation>接管准备失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="447"/>
<source>Cannot create the Bootstrap file plan.</source>
<translation>无法创建 Bootstrap 文件计划。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="457"/>
<source>Cannot write the Bootstrap copy plan.</source>
<translation>无法写入 Bootstrap 复制计划。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="465"/>
<source>Cannot write the Bootstrap deletion plan.</source>
<translation>无法写入 Bootstrap 删除计划。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="471"/>
<source>Cannot commit the Bootstrap file plan or transaction state.</source>
<translation>无法提交 Bootstrap 文件计划或事务状态。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="474"/>
<source>Delegating installation to Bootstrap...</source>
<translation>正在将安装工作移交给 Bootstrap...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="476"/>
<source>Bootstrap Startup Failed</source>
<translation>Bootstrap 启动失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="477"/>
<source>Cannot start the standalone update handoff program: %1</source>
<translation>无法启动独立更新接管程序:%1</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="483"/>
<source>Verifying Bootstrap installation result...</source>
<translation>正在校验 Bootstrap 安装结果...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="485"/>
<source>Installation Verification Failed</source>
<translation>安装校验失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="490"/>
<source>Obsolete File Cleanup Failed</source>
<translation>废弃文件清理失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="491"/>
<source>An obsolete file still exists: %1</source>
<translation>废弃文件仍然存在:%1</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="494"/>
<source>Saving new version state...</source>
<translation>正在保存新版本状态...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="497"/>
<source>State Save Failed</source>
<translation>状态保存失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="498"/>
<source>Cannot save the current version number.</source>
<translation>无法保存当前版本号。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="502"/>
<source>Starting the new version and waiting for health confirmation...</source>
<translation>正在启动新版本并等待健康确认...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="504"/>
<source>Startup Failed</source>
<translation>启动失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="506"/>
<source>%1 cannot be started.</source>
<translation>%1 无法启动。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="516"/>
<source>Startup Confirmation Failed</source>
<translation>启动确认失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="517"/>
<source>The new version did not complete startup health confirmation within %1 milliseconds.</source>
<translation>新版本在 %1 毫秒内没有完成启动健康确认。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="520"/>
<source>Committing update transaction...</source>
<translation>正在提交更新事务...</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="522"/>
<source>Transaction Commit Failed</source>
<translation>事务提交失败</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="523"/>
<source>The new version has started, but the update transaction could not be committed.</source>
<translation>新版本已经启动,但无法提交更新事务。</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="531"/>
<source>Update Complete</source>
<translation>更新完成</translation>
</message>
<message>
<location filename="../Updater/main.cpp" line="532"/>
<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>
<location filename="../Updater/UpdaterLogic.cpp" line="196"/>
<source>
Server message: %1</source>
<translation>
服务端消息:%1</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="209"/>
<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="217"/>
<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="230"/>
<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="241"/>
<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="253"/>
<source>Cannot create OpenSSL verification context. Stage: manifest signature verification.</source>
<translation>无法创建 OpenSSL 验签上下文。阶段:Manifest 签名校验。</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="276"/>
<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="290"/>
<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="184"/>
<source>Target version manifest response is incomplete. Stage: download target manifest. Product: %1, channel: %2, version: %3, release id: %4.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="193"/>
<source>Cannot download target version manifest. Stage: download target manifest. HTTP status: %1. Product: %2, channel: %3, version: %4, release id: %5.%6</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="298"/>
<source>Manifest SHA-256 does not match the server envelope. Stage: manifest digest verification.
Expected SHA-256: %1
Actual SHA-256: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="311"/>
<source>The manifest does not contain a signature, but require_manifest_signature is enabled. Stage: manifest signature verification.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="333"/>
<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="340"/>
<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="350"/>
<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="380"/>
<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="390"/>
<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="399"/>
<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="516"/>
<source>installed version verification</source>
<translation>已安装版本校验</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="517"/>
<source>downloaded/staged file verification</source>
<translation>已下载/暂存文件校验</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="520"/>
<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="533"/>
<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="550"/>
<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="558"/>
<source>File size does not match the signed manifest. Stage: %1. Version: %2. Manifest path: %3. Local path: %4.
Expected size: %5 bytes
Actual size: %6 bytes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="568"/>
<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="570"/>
<location filename="../Updater/UpdaterLogic.cpp" line="803"/>
<source>&lt;cannot read file&gt;</source>
<translation>&lt;无法读取文件&gt;</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="583"/>
<source>Cannot open the offline update package</source>
<translation>无法打开离线更新包</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="584"/>
<source>The offline package format identifier is invalid</source>
<translation>离线包格式标识无效</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="586"/>
<source>The offline package header is incomplete</source>
<translation>离线包头不完整</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="589"/>
<source>The offline package header length is invalid</source>
<translation>离线包头长度无效</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="592"/>
<source>The offline package header JSON is invalid</source>
<translation>离线包头 JSON 无效</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="597"/>
<source>The offline package RSA signature is invalid</source>
<translation>离线包 RSA 签名无效</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="599"/>
<source>The offline package signature metadata is invalid</source>
<translation>离线包签名元数据无效</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="600"/>
<source>The manifest digest does not match the package signature</source>
<translation>Manifest 摘要与包签名不一致</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="602"/>
<source>The offline manifest is invalid</source>
<translation>离线 Manifest 无效</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="612"/>
<source>Package information does not match manifest identity</source>
<translation>包信息与 Manifest 身份不一致</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="613"/>
<source>The offline manifest RSA signature is invalid</source>
<translation>离线 Manifest RSA 签名无效</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="619"/>
<source>The offline package contains an unsafe path or out-of-range data: %1</source>
<translation>离线包包含不安全路径或越界数据:%1</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="622"/>
<source>Cannot prepare offline file: %1</source>
<translation>无法准备离线文件:%1</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="623"/>
<source>Cannot create staged file: %1</source>
<translation>无法创建暂存文件:%1</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="625"/>
<source>Failed to read offline file: %1</source>
<translation>离线文件读取失败:%1</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="626"/>
<source>Offline file hash verification or write failed: %1</source>
<translation>离线文件 Hash 或写入失败:%1</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="628"/>
<source>The offline package file count does not match the manifest</source>
<translation>离线包文件数量与 Manifest 不一致</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="640"/>
<source>The manifest does not contain any downloadable package URL. Stage: prepare authorized downloads.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="671"/>
<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="700"/>
<location filename="../Updater/UpdaterLogic.cpp" line="791"/>
<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="706"/>
<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="719"/>
<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="800"/>
<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="807"/>
<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="816"/>
<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="834"/>
<source>File download failed after retries. Stage: download file. File: %1.</source>
<translation>文件多次重试后仍下载失败。阶段:下载文件。文件:%1。</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="909"/>
<source>The target version manifest contains no downloadable files. Stage: prepare downloads.</source>
<translation>目标版本 Manifest 中没有可下载文件。阶段:准备下载。</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="916"/>
<source>Cannot create update staging directory. Stage: prepare downloads. Directory: %1.</source>
<translation>无法创建更新暂存目录。阶段:准备下载。目录:%1。</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="923"/>
<source>Cannot create download cache directory. Stage: prepare downloads. Directory: %1.</source>
<translation>无法创建下载缓存目录。阶段:准备下载。目录:%1。</translation>
</message>
<message>
<location filename="../Updater/UpdaterLogic.cpp" line="957"/>
<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="982"/>
<source>Cannot create staging subdirectory. Stage: prepare file download. File: %1. Directory: %2.</source>
<translation>无法创建暂存子目录。阶段:准备文件下载。文件:%1。目录:%2。</translation>
</message>
</context>
</TS>