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

qt国际化翻译功能用法

文章目录

    • @[toc]
    • 1 概述
    • 2 设置待翻译文本
    • 3 生成ts翻译源文件
    • 4 编辑ts翻译源文件
    • 5 生成qm翻译二进制文件
    • 6 加载qm翻译文件进行翻译


更多精彩内容
👉内容导航 👈
👉Qt开发经验 👈

1 概述

在 Qt 中,ts 文件和 qm 文件是用于国际化和本地化的关键文件。以下是它们的详细说明:

ts 文件

  • 用途: ts 文件是 Qt 的翻译源文件,存储了应用程序中需要翻译的字符串及其翻译内容。
  • 格式: 它是基于 XML 的文本文件,便于编辑和版本控制。
  • 内容:
    • 包含原始字符串(source)和翻译后的字符串(translation)。
    • 还可能包含上下文(context)信息,用于区分不同模块中的相同字符串。
  • 生成方式:
    • 使用 Qt 提供的工具 lupdate 从源代码中提取需要翻译的字符串,生成 .ts 文件。
    • 示例命令:lupdate myproject.pro -ts translations/myproject_zh_CN.ts
  • 编辑方式:
    • 可以使用 Qt 提供的翻译工具 Qt Linguist 进行翻译。
    • 也可以手动编辑,因为它是 XML 格式。

qm文件

  • 用途: qm 文件是 Qt 的翻译二进制文件,供应用程序运行时加载使用。
  • 格式: 它是 .ts 文件的编译版本,体积更小,加载速度更快。
  • 生成方式:
    • 使用 Qt 提供的工具 lrelease.ts 文件编译为 .qm 文件。
    • 示例命令:lrelease translations/myproject_zh_CN.ts

文件对比

特性TS文件QM文件
可编辑性可人工编辑不可编辑
文件格式XML文本二进制
生成阶段开发阶段构建/发布阶段
文件大小较大(含元数据)较小(优化存储)
运行时依赖不需要必需
环境说明
系统windows11
Qt5.14.2、6.8
IDEqtcreator14

2 设置待翻译文本

  1. 创建一个Qt工程;

    在这里插入图片描述

  2. 在UI文件中添加的文本都可以被翻译;

    在这里插入图片描述

  3. 如果在QObject类的子类中,需要使用tr()包含文本才可以被翻译;

    在这里插入图片描述

  4. 如果在普通函数、或者不是QObject子类的类中,就不能直接使用tr()函数包含待翻译的文本了,可以使用下面几种方式;

    在这里插入图片描述

3 生成ts翻译源文件

方法1:

  • 鼠标右键【添加新文件】;

    在这里插入图片描述

  • 选择【Qt】【Qt Translation File】;

    在这里插入图片描述

  • 选择语言,例如下图中选择English就可以将Qt中文本翻译位英文。

    在这里插入图片描述

方法2:

  • 打开.pro文件,添加如下所示代码,建议文件名包含语言和地区的代码(zh_CNen_US等),会更加名称中缩写推理出适用于什么语言翻译。

    TRANSLATIONS += \untitled9_en_US.ts\a_zh_CN.ts\b_zh_CN.ts
    
  • 然后鼠标选择【工具】【外部】【Linguist】【lupdate】;

    在这里插入图片描述

  • 就可以在工程路径下生成对应的ts文件了;

    在这里插入图片描述

4 编辑ts翻译源文件

  1. 鼠标选择ts文件,右键【Qt语言家】打开ts文件;

    在这里插入图片描述

  2. 如下图所示,Qt UI界面中的文本或者使用tr() QCoreApplication::translate()包含的文件就可以在语言家中呈现。

    在这里插入图片描述

  3. 然后如下图所示,将中文文本翻译为英文文本,填入对应位置;

    在这里插入图片描述

  4. 填写完翻译后,点击工具栏中的,就可以将选中的文本标记为已完成。

    在这里插入图片描述

5 生成qm翻译二进制文件

  1. 编写完成ts文件后,鼠标点击【工具】【外部工具】【Linguist】【lrelease】,就可以将ts文件生成为qm文件。

    在这里插入图片描述

  2. 生成的qm文件如下所示;

    在这里插入图片描述

6 加载qm翻译文件进行翻译

  • 如下所示,使用QTranslator加载qm翻译文件;

    #include "widget.h"#include <QApplication>
    #include <QDebug>
    #include <QTranslator>int main(int argc, char* argv[])
    {QApplication a(argc, argv);QTranslator translator;if (translator.load("E:/test/untitled9/untitled9_en_US.qm")){qDebug() << "加载成功";QCoreApplication::installTranslator(&translator);}else{qDebug() << "加载失败";}qDebug() << "main函数1";qDebug() << QObject::tr("main函数2");qDebug() << QCoreApplication::tr("main函数3", "描述信息");qDebug() << QCoreApplication::translate("main", "main函数4");qDebug() << QCoreApplication::translate("main", "main函数5", "描述信息");Widget w;w.show();return a.exec();
    }
  • 注意:

    • 必须先调用installTranslator()再创建UI对象;
    • 多个翻译器会叠加生效,后加载的优先;
  • 也可以使用QString locale = QLocale::system().name(); // 获取系统语言,例如 "zh_CN"获取操作系统语言来选中使用的qm文件;

  • 加载qm翻译文件成功后如下所示,在ts文件中填写了翻译信息的就会被翻译。

    在这里插入图片描述

  • 如果在程序运行时动态切换语言,需要调用 retranslateUi() 方法刷新界面。例如:

    ui->retranslateUi(this);
    


相关文章:

  • 哈尔滨服务器租用
  • 亿级流量系统架构设计与实战(四)
  • 第九节:图像处理基础-图像几何变换 (缩放、旋转、平移、翻转)
  • 数据结构(一)——线性表的顺序表示和实现
  • Xcode16提交App Store审核时提示bitcode报错
  • 【coze】工作流(B站视频总结改写)
  • 什么是原子变量
  • 今日行情明日机会——20250506
  • The 2023 ICPC Asia Taoyuan Regional Programming Contest
  • C++自动重连机制设计与实现指南
  • 2025ACTF Web部分题解
  • Linux/AndroidOS中进程间的通信线程间的同步 - POSIX IPC
  • 【MongoDB篇】MongoDB的事务操作!
  • LeetCode 1128. 等价多米诺骨牌对的数量 题解
  • C++ STL 基础与多线程安全性说明文档
  • Visual Studio 快捷键更改和设置
  • 使用ip池后,爬虫还被封,是什么原因呢?
  • Zoho在2025:三个支点和一个新故事
  • 数据管理平台是什么?企业应如何做好数据化管理?
  • MySQL数据库中篇
  • 李云泽:将加快出台与房地产发展新模式相适配的系列融资制度
  • 《黎明的一切》:与正常世界脱轨后,我选择不再回去
  • 媒体评特朗普对进口电影征100%关税:让好莱坞时代加速谢幕
  • 余姚警方通报:一司机未悬挂车牌,事故现场就地粘贴安装
  • 中国海警局新闻发言人就日民用飞机侵闯我钓鱼岛领空发表谈话
  • 国羽3比0横扫日本晋级苏迪曼杯决赛,将战韩国与印尼胜者