Qt 6.5.2 + CMake项目.ts翻译文件无法更新求助
Qt 6.5.2 + CMake 翻译失效问题排查与解决
问题现象
使用CMake构建Qt 6.5.2应用时,通过qt_add_translations工具生成多语言.ts文件,代码中用tr()包裹的字符串未出现在生成的lang_de.ts中,后续构建也无法自动更新翻译条目。尝试qt_create_translation、qt_add_lupdate等命令均未解决问题。
解决方法
1. 明确指定翻译扫描的源文件
Qt6的qt_add_translations需要明确告知lupdate工具要扫描哪些源文件,否则无法自动收集tr()标记的字符串。在CMake配置中为qt_add_translations添加SOURCES参数,列出所有包含翻译字符串的源文件。
2. 添加资源文件加载翻译
代码中通过:/i18n/lang_de路径加载翻译,需创建资源文件(.qrc)将编译后的.qm文件纳入资源系统,确保程序能正确读取翻译文件。
修改后的代码示例
资源文件 i18n.qrc
<RCC> <qresource prefix="/i18n"> <file>lang_de.qm</file> </qresource> </RCC>
修改后的 CMakeLists.txt
cmake_minimum_required(VERSION 3.25) project(mnwe VERSION 1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) find_package(Qt6 REQUIRED COMPONENTS Widgets LinguistTools) # 引入资源文件 set(RESOURCES i18n.qrc) add_executable(${CMAKE_PROJECT_NAME} main.cpp mainwindow.hpp mainwindow.cpp ${RESOURCES} ) # 明确指定需要扫描翻译字符串的源文件 qt_add_translations(${CMAKE_PROJECT_NAME} TS_FILES lang_de.ts SOURCES main.cpp mainwindow.cpp mainwindow.hpp ) target_link_libraries(${CMAKE_PROJECT_NAME} Qt::Widgets) set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE ON MACOSX_BUNDLE ON )
操作步骤
- 创建上述
i18n.qrc资源文件,放入项目根目录。 - 替换原
CMakeLists.txt为修改后的版本。 - 删除旧的
lang_de.ts文件,重新执行构建(或手动运行lupdate main.cpp mainwindow.cpp mainwindow.hpp -ts lang_de.ts生成新的.ts文件)。 - 打开
lang_de.ts,即可看到Translate this的翻译条目,完成翻译后再次构建,程序将自动加载翻译内容。
内容的提问来源于stack exchange,提问作者MrJ
相关产品推荐
相关产品推荐

