【CMake】CMake 中引入 Qt Linguist 翻译功能
文章目录
- Qt Linguist 通常使用方法
- 1 - 设置翻译路径
- 2 - 查找 Qt 翻译工具
- 3 - 应用 Qt 翻译工具
- 4 - 参考链接
Qt Linguist 通常使用方法
在编写代码时,将需要翻译的字符串使用 tr()
函数包裹起来,如
this->setText(tr("Text to be translate"));
Qt Linguist 翻译主要分三个步骤:
- 在命令提示符 (cmd) 中运行 lupdate 工具,扫描源代码文件,并从中提取需要翻译的文本,执行结束会生成一个
.ts
文件,此文件格式是 xml 格式 - 使用 Qt Linguist 或编辑器打开
.ts
文件,并完成翻译工作 - 在 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