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

CMake构建QT项目后未生成TS文件,如何创建翻译文件?

Qt翻译文件生成失败的问题分析与解决

现有CMake配置的错误点

  • 变量名拼写错误:定义的目录变量是TranslationDir,但引用时写成了TranslationsDir(多了一个s),导致TS文件路径无效。
  • qt5_create_translation语法错误:该命令的正确格式是qt5_create_translation(QM_FILES <源文件/目录> <TS文件列表>),原代码将源目录与TS文件错误拼接成一个参数,同时使用了未定义的TS_FILES变量(仅定义了TS_FILE)。
  • 冗余代码:重复定义了TranslationDir和TS_FILE变量,无实际作用。

修正后的主CMakeLists.txt翻译配置部分

替换原文件末尾的翻译相关代码为以下内容:

# 翻译文件配置
set(TRANSLATION_DIR "${CMAKE_CURRENT_SOURCE_DIR}/langs")
file(MAKE_DIRECTORY ${TRANSLATION_DIR})

# 定义要生成的TS文件列表
set(TS_FILES
    ${TRANSLATION_DIR}/en_EN.ts
    # 可添加其他语言,比如zh_CN.ts
)

# 从项目根目录收集所有需要翻译的源文件(包含子目录)
qt5_create_translation(QM_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${TS_FILES}
)

# 将生成的QM文件添加到安装目标(可选,根据需求调整)
install(FILES ${QM_FILES} DESTINATION ${TRANSLATION_DIR})

子目录(gui、model)的翻译处理

针对包含独立CMakeLists.txt的子目录,有两种处理方式:

方式1:主目录统一收集所有源文件

上述修正后的代码会自动扫描${CMAKE_CURRENT_SOURCE_DIR}下的所有子目录(包括gui、model),只要子目录中的源文件使用了Qt翻译宏(如tr()、QT_TR_NOOP()等),翻译文本就会被提取到TS文件中,无需修改子目录的CMake配置。

方式2:子目录单独处理翻译(适合模块化项目)

在gui和model的CMakeLists.txt中分别添加翻译配置,再将生成的文件传递到主目录:

  1. 在gui/CMakeLists.txt中添加:
set(GUI_TS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/../langs/en_EN_gui.ts)
qt5_create_translation(GUI_QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${GUI_TS_FILES})

# 将TS/QM文件暴露给主目录
set(GUI_TS_FILES ${GUI_TS_FILES} PARENT_SCOPE)
set(GUI_QM_FILES ${GUI_QM_FILES} PARENT_SCOPE)
  1. 在model/CMakeLists.txt中添加类似配置,然后在主目录的翻译配置中合并所有TS文件:
set(TS_FILES
    ${TRANSLATION_DIR}/en_EN.ts
    ${GUI_TS_FILES}
    ${MODEL_TS_FILES}
)

注意:此方式需确保add_subdirectory(gui)、add_subdirectory(model)在主目录翻译配置之前执行(原代码已满足该顺序)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:10:37