feat(hardening): 内嵌产品配置 + 系统级状态 + 全量 i18n + 依赖治理 + 资料清理

update-client-hardening 四工作流合入(构建/静态检查已过):

- 配置:不可变产品策略经 UpdateClientResources.cmake 归一化校验后
  内嵌 qrc(URL/相对路径/主程序必须落 install_root/版本/UUID 格式,
  CMake override 写入前复验);可变机器状态迁系统级原生存储;
  运行目录不再落可编辑 app_config.json。
- i18n:生产源全英文(no-Han 检查 41/41),中文进 translations/
  zh_CN 目录;翻译加载收敛 Common/TranslationHelper 唯一入口;
  Bootstrap 补资源文件。
- 依赖:Qt/OpenSSL/架构/Perl 机器路径改 imported targets +
  UpdateClientDependencies.cmake,3rdparty 由父工程契约供给。
- 清理:旧 README/SDK README/3 个重复 PowerShell 打包脚本/PDF 提取
  文本删除,canonical README + 5 份结构化英文文档替代;Launcher
  requireAdministrator manifest;统一 MSVC /utf-8 删运行时编码设置。
This commit is contained in:
Comely
2026-07-10 00:38:23 -07:00
parent b06e003502
commit fe5aa5bbf0
45 changed files with 5033 additions and 4083 deletions
+53
View File
@@ -0,0 +1,53 @@
#include "TranslationHelper.h"
#include <QCoreApplication>
#include <QDir>
namespace
{
constexpr auto kSimplifiedChineseCatalog =
":/simcae/update-client/i18n/update-client_zh_CN.qm";
constexpr auto kQtSimplifiedChineseCatalog = "translations/qt_zh_CN.qm";
bool usesSimplifiedChinese(const QLocale& locale)
{
if (locale.language() != QLocale::Chinese ||
locale.script() == QLocale::TraditionalHanScript)
{
return false;
}
return locale.script() == QLocale::SimplifiedHanScript ||
locale.country() == QLocale::China ||
locale.country() == QLocale::Singapore;
}
}
TranslationHelper::TranslationHelper()
{
m_simplifiedChineseCatalog.load(
QString::fromLatin1(kSimplifiedChineseCatalog));
}
bool TranslationHelper::installForSystemLocale()
{
if (!usesSimplifiedChinese(QLocale::system()) ||
m_simplifiedChineseCatalog.isEmpty())
{
return false;
}
const QString qtCatalogPath = QDir(QCoreApplication::applicationDirPath())
.filePath(QString::fromLatin1(
kQtSimplifiedChineseCatalog));
if (m_qtSimplifiedChineseCatalog.load(qtCatalogPath))
QCoreApplication::installTranslator(&m_qtSimplifiedChineseCatalog);
return QCoreApplication::installTranslator(&m_simplifiedChineseCatalog);
}
QString TranslationHelper::translate(const char* context,
const char* sourceText) const
{
return m_simplifiedChineseCatalog.translate(context, sourceText);
}