【CMake】CMake 中引入 Qt Linguist 翻译功能

本文详细介绍了如何在CMake项目中利用QtLinguist进行翻译,包括设置翻译路径、查找并调用Qt工具(lupdate和lrelease)以及在CMakeLists.txt中集成这些步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【CMake】CMake 中引入 Qt Linguist 翻译功能

文章目录

    • Qt Linguist 通常使用方法
    • 1 - 设置翻译路径
    • 2 - 查找 Qt 翻译工具
    • 3 - 应用 Qt 翻译工具
    • 4 - 参考链接

Qt Linguist 通常使用方法

在编写代码时,将需要翻译的字符串使用 tr() 函数包裹起来,如

this->setText(tr("Text to be translate"));

Qt Linguist 翻译主要分三个步骤:

  1. 在命令提示符 (cmd) 中运行 lupdate 工具,扫描源代码文件,并从中提取需要翻译的文本,执行结束会生成一个.ts 文件,此文件格式是 xml 格式
  2. 使用 Qt Linguist 或编辑器打开.ts 文件,并完成翻译工作
  3. 在 cmd 中运行 lrelease 工具,基于 .ts 文件生成一个 .qm 文件,它是一个二进制文件,在程序运行时使用。

其中,.ts 文件和 .qm 文件都是平台无关的文件

1 - 设置翻译路径

设置翻译文件所在路径,即生成的 ts 文件名称及所在位置

set(TRANS_DIR "${CMAKE_CURRENT_DIR}/res/translate")
set(TS_FILES "${TRANS_DIR}/translate_zh_CN.ts")
// 或
set(TS_FILES "${CMAKE_CURRENT_DIR}/res/translate/translate_zh_CN.ts")

2 - 查找 Qt 翻译工具

需要查找到 lupdate 和 lrelease 程序,才能调用。使用 CMake 中的 find_program 方法

find_program(LUPDATE_EXECUTABLE lupdate)
find_program(LRELEASE_EXECUTABLE lrelease)

lupdate 用于提取所有项目代码中的 tr 字符串
lrelease 用于将 .ts 文件生成 .qm 二进制文件

3 - 应用 Qt 翻译工具

在 cmd 中直接使用

lupdate -recursive . -ts  res/translate/translation.ts
lrelease translation.ts

CMake 中可更换为如下形式完成调用

foreach(_chinese_file ${TS_FILE})
	execute_process(
		COMMAND ${LUPDATE_EXECUTABLE} -recursive ${CMAKE_SOURCE_DIR} -ts ${_chinese_file}
	)
	execute_process(
		COMMAND ${LRELEASE_EXECUTABLE} ${_chinese_file}
	)
endforeach()

完整 CMakeLists.txt

set(TRANS_DIR "${CMAKE_CURRENT_DIR}/res/translate")
set(TS_FILE "${TRANS_DIR}/translate_zh_CN.ts")

find_program(LUPDATE_EXECUTABLE lupdate)
find_program(LRELEASE_EXECUTABLE lrelease)

foreach(_chinese_file ${TS_FILE})
	execute_process(
		COMMAND ${LUPDATE_EXECUTABLE} -recursive ${CMAKE_SOURCE_DIR} -ts ${_chinese_file}
	)
	execute_process(
		COMMAND ${LRELEASE_EXECUTABLE} ${_chinese_file}
	)
endforeach()

4 - 参考链接

https://zhuanlan.zhihu.com/p/114405973

http://blog.csdn.net/yulinxx/article/details/43260203 ------------------------------------------ C++ 国际化!!!!! 创建一个空白的Qt工程 添加一个main.cpp #include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv) QWidget* pWnd = new QWidget(); QPushButton* pBtn = new QPushButton(QPushButton::tr("Test Translate")) QVBoxLayout* pVlayout = new QVBoxLayout(); pVlayout->addWidget(pBtn) pWnd->setLayout(pVlayout); pWnd->show(); return a.exec(); } 即可运行起来。。。。 此工程中,只有按钮上有文字。。。运行如下图示: 在工程中加入: TRANSLATIONS += testTrans_en.ts (ts文字名可随意取) 然后执行: Tools -> External -> Linguist -> Update Translations(lupdate) 提示完成: /usr/local/Qt5.4.0/5.4/gcc_64/bin/lupdate" finished 在工程中,可以发现多了一个 testTrans_en.ts 文件,此文件可用文本编辑器打开进行查看,如: QPushButton Test Translate 此步骤是将工程中的文字(加tr等包含的文字)进行提取到ts文件中 接下来,在终端运行 x@x:~$ linguist 打开 Qt Linguist 翻译工具,对文字进行逐个翻译并保存 在工程中再执行: Tools -> External -> Linguist -> Release Translations(lrelease) 结果提示:/usr/local/Qt5.4.0/5.4/gcc_64/bin/lrelease" finished 在工程中,可以发现多了一个 testTrans_en.qm文件,此文件为二进制格式文件,即我们最终使用的翻译文件 然后添加Qt资源,将testTrans_en.qm添加进来 修改main.cpp文件,将翻译文件添加进来,最终执行 #include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QTranslator qtTranslator; qtTranslator.load(":/translate/testTrans_en.qm") a.installTranslator(&qtTranslator); QWidget* pWnd = new QWidget(); QPushButton* pBtn = new QPushButton(QPushButton::tr("Test Translate")) QVBoxLayout* pVlayout = new QVBoxLayout(); pVlayout->addWidget(pBtn) pWnd->setLayout(pVlayout); pWnd->show() return a.exec() } 最终执行结果:
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值