You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
)

操作步骤

  1. 创建上述i18n.qrc资源文件,放入项目根目录。
  2. 替换原CMakeLists.txt为修改后的版本。
  3. 删除旧的lang_de.ts文件,重新执行构建(或手动运行lupdate main.cpp mainwindow.cpp mainwindow.hpp -ts lang_de.ts生成新的.ts文件)。
  4. 打开lang_de.ts,即可看到Translate this的翻译条目,完成翻译后再次构建,程序将自动加载翻译内容。

内容的提问来源于stack exchange,提问作者MrJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:14:52