当前位置: 首页 > news >正文

在 Qt 中加载 .qm 翻译文件

在 Qt 中加载 .qm 翻译文件
Qt 使用 .qm 文件(由 .ts 文件编译生成)来实现应用程序的国际化(i18n)。以下是加载 .qm 文件到 Qt 程序的几种方法:

  1. 基本加载方法
cpp
#include <QApplication>
#include <QTranslator>int main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建翻译器对象QTranslator translator;// 加载翻译文件if (translator.load(":/translations/myapp_zh_CN.qm")) {app.installTranslator(&translator);} else {qWarning() << "Failed to load translation file";}// 你的应用程序代码...return app.exec();
}
  1. 从文件系统加载
cpp
// 从应用程序目录加载
translator.load("translations/myapp_zh_CN.qm");// 或者使用绝对路径
translator.load("/path/to/translations/myapp_zh_CN.qm");
  1. 从资源文件加载(推荐)
    首先将 .qm 文件添加到 .qrc 资源文件中:
xml
<RCC><qresource prefix="/translations"><file>myapp_zh_CN.qm</file></qresource>
</RCC>
然后在代码中加载:cpp
translator.load(":/translations/myapp_zh_CN.qm");
  1. 动态切换语言
cpp
// 切换翻译的函数
void switchLanguage(const QString &language)
{QTranslator *translator = new QTranslator(qApp);if (translator->load(":/translations/myapp_" + language + ".qm")) {qApp->removeTranslator(currentTranslator); // 移除旧的qApp->installTranslator(translator);      // 安装新的currentTranslator = translator;} else {delete translator;}
}
  1. 自动检测系统语言
cpp
// 获取系统语言
QString locale = QLocale::system().name(); // 如 "zh_CN"QTranslator translator;
if (translator.load(":/translations/myapp_" + locale + ".qm")) {app.installTranslator(&translator);
}
注意事项
文件生成:确保 .qm 文件已通过 lrelease 工具从 .ts 文件生成:text
lrelease myapp_zh_CN.ts
翻译对象生命周期:QTranslator 对象必须在整个应用程序生命周期内保持存在字符串标记:源代码中所有需要翻译的字符串必须用 tr() 包裹:cpp
QString text = tr("Hello World");
UI 文件翻译:.ui 文件中的字符串会自动被 uic 工具处理,无需手动标记多翻译文件:可以同时加载多个翻译文件(如主程序翻译和库翻译)资源更新:如果修改了翻译文件,需要重新编译并运行程序才能看到效果

完整示例

cpp
#include <QApplication>
#include <QTranslator>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);// 加载翻译QTranslator translator;if (translator.load(":/translations/myapp_zh_CN.qm")) {app.installTranslator(&translator);}// 创建带翻译文本的UIQWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QLabel *label = new QLabel(tr("Hello World!"));QPushButton *button = new QPushButton(tr("Click Me"));layout->addWidget(label);layout->addWidget(button);window.show();return app.exec();
}
http://www.xdnf.cn/news/1424737.html

相关文章:

  • 跳跃游戏(二):DFS 求解最少跳跃次数与最优路径
  • 专项智能练习(Word)
  • JavaSE:抽象类和接口
  • 计算机视觉(五):blur
  • 原子操作(Atomic Operation) 是指不可被中断的操作——要么完整执行,要么完全不执行
  • 贵州在假期及夏天结束后保持旅游活力的策略分析
  • AI如何重塑电力工程设计?揭秘良策金宝AI的六大“超能力”
  • SQLSERVER关键字:N
  • VBA数据库解决方案第二十二讲:根据工作表数据生成数据库中数据表
  • 算法练习——189.轮转数组
  • 【逆序对 博弈】P10737 [SEERC 2020] Reverse Game|普及+
  • 【开题答辩全过程】以 基于JSP的养生网站设计与实现为例,包含答辩的问题和答案
  • MySQL 中 InnoDB 引擎的事务隔离级别与“可重复读”隔离级别下的 SQL 编写规范
  • Linux 进程间通信(IPC)
  • 大型语言模型微调 内容预告(69)
  • 【Docker】2025版Ubuntu 22.04 安装 Docker Docker Compose 指南
  • 电力工程师的AI时代已来,这6大功能彻底颠覆传统工作模式
  • 系统性学习数据结构-第二讲-顺序表与链表
  • 金融数据安全
  • 基于单片机汽车防盗系统/汽车安全防丢系统
  • 动态代理设计模式
  • 多模态大语言模型部署
  • Java泛型通配符详解:搞懂?/extends/super用法,避开集合操作踩坑点
  • 二、感知机
  • 高防IP防护效果评估全攻略:从指标解读到实战测试
  • langgraph / openmanus / suna 对比
  • 数据安全不用愁,群晖NAS让你存得放心、用得安心
  • 深度学习环境搭建运行(二) Ubuntu22.04安装基于CUDA11.8的ONNXRuntime-gpu1.18.1详细步骤(新手入门)
  • 联邦学习的文献复现与创新思路指导
  • Qt 项目文件(.pro)中添加 UI 文件相关命令