ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/26 15:32:56 拓冰建站 浏览量
【CMake】CMake 中引入 Qt Linguist 翻译功能

【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 "${TS_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