欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > qt国际化翻译功能用法

qt国际化翻译功能用法

2025/9/17 5:26:04 来源:https://blog.csdn.net/qq_43627907/article/details/147744883  浏览:    关键词: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);
    


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词