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

Qt6 CMake中如何将QML模块源文件加入qt_add_translations?

问题描述

我在使用CMake搭建Qt6应用的翻译文件时遇到了问题,以下以QML文件为例说明:

  • 项目采用子模块组织:根项目appTestLocalization包含Main.qml,MyModule子模块位于MyModule目录下,包含MyText.qml,两个QML文件都有qsTr()调用。
  • 根项目CMakeLists.txt中添加了qt_add_translations:
qt_add_translations(appTestLocalization TS_FILES i18n/lang_fr_FR.ts)
  • 执行update_translations或appTestLocalization_lupdate后,生成的.ts文件仅包含Main.qml的翻译内容。
  • 尝试添加INCLUDE_DIRECTORIES MyModule、给lupdate加-recursive参数均无效;在子模块中单独添加qt_add_translations会覆盖根项目的翻译内容;手动用SOURCES指定文件维护成本太高,希望找到更便捷的方式将模块文件纳入翻译流程。

解决方案

方法1:子模块传递翻译源到根项目

在MyModule的CMakeLists.txt中收集模块内的源文件,并传递给根项目:

# MyModule/CMakeLists.txt
# 递归收集模块内所有需要翻译的文件(可根据实际调整后缀)
file(GLOB_RECURSE MY_MODULE_TRANSLATE_FILES *.qml *.cpp *.h)

# 将收集到的文件传递到父作用域,供根项目使用
set(TRANSLATION_SOURCES ${TRANSLATION_SOURCES} ${MY_MODULE_TRANSLATE_FILES} PARENT_SCOPE)

根项目CMakeLists.txt中使用这个全局变量:

# 根项目CMakeLists.txt
qt_add_translations(appTestLocalization
    SOURCES ${TRANSLATION_SOURCES} Main.qml
    TS_FILES i18n/lang_fr_FR.ts
)

后续模块新增文件时会自动被收集,无需手动修改根项目配置。

方法2:利用Qt目标属性关联翻译源

在子模块的CMakeLists.txt中,给模块目标设置QT_TRANSLATION_SOURCES属性:

# MyModule/CMakeLists.txt
# 假设模块是QML模块
qt_add_qml_module(mymodule
    URI MyModule
    VERSION 1.0
    QML_FILES MyText.qml
)

# 将模块的QML文件添加到翻译源属性中
set_property(TARGET mymodule PROPERTY QT_TRANSLATION_SOURCES MyText.qml)

根项目中只需在qt_add_translations里指定模块目标:

# 根项目CMakeLists.txt
qt_add_translations(appTestLocalization
    TS_FILES i18n/lang_fr_FR.ts
    TARGETS mymodule
)

TARGETS参数会让lupdate自动扫描指定目标关联的所有翻译源文件,包括QML模块内的内容。

方法3:根项目递归收集所有翻译源

如果项目结构清晰,可直接在根项目递归收集所有需要翻译的文件:

# 根项目CMakeLists.txt
# 递归收集项目内所有需要翻译的文件,可添加EXCLUDE排除不需要的目录
file(GLOB_RECURSE ALL_TRANSLATE_FILES
    *.qml
    *.cpp
    *.h
    # EXCLUDE_FROM_ALL third_party/*
)

qt_add_translations(appTestLocalization
    SOURCES ${ALL_TRANSLATE_FILES}
    TS_FILES i18n/lang_fr_FR.ts
)

这种方式最简洁,但要注意排除第三方库或不需要翻译的文件,避免引入冗余内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:03:13