如何将 qml 模块中的源添加到 Qt6 CMake 中的 qt_add_translations 中?

问题描述 投票:0回答:1

我在使用 CMake 在 Qt6 应用程序中设置翻译文件时遇到问题。

我认为我的问题不限于 qml 文件,但我将在这里仅使用 qml 文件以使我的情况简单。

我正在开发一个带有子模块的项目来组织我的 cpp 和 qml 文件。
举个例子,假设我有一个名为

appTestLocalization
的根项目,其中包含一个
Main.qml
和一个模块
MyModule
,位于包含
MyModule
的目录
MyText.qml
中。
每个 qml 文件中都包含一个
qsTr()

我想向我的应用程序添加本地化,并按照 qt doc 添加一个 qt_add_translations(),就像根项目的 CMakeLists.txt 中的那样:

qt_add_translations(appTestLocalization TS_FILES i18n/lang_fr_FR.ts)

然后在 Qt Creator 中我执行

Ctrl+K
并运行
cm update_translations
(或
cm appTestLocalization_lupdate
但结果是相同的)

但是,生成的 ts 文件仅包含

qsTr
中的
Main.qml
。 所以我尝试像这样手动添加模块目录,但结果是相同的:

qt_add_translations(appTestLocalization 
INCLUDE_DIRECTORIES
    MyModule
TS_FILES 
    i18n/lang_fr_FR.ts)

我也尝试在模块的

CMakeLists.txt
中添加翻译:

qt_add_translations(mymodule TS_FILES ${CMAKE_SOURCE_DIR}/i18n/lang_fr_FR.ts)

但是它会覆盖根项目的翻译...

如何将模块文件添加到 Qt 翻译过程中?

编辑

我知道我可以使用

SOURCE
参数添加我想要的文件,如下所示:

qt_add_translations(appTestLocalization
    #SOURCES
        Main.qml
        MyModule/MyLabel.qml
    TS_FILES
        i18n/lang_fr_FR.ts
)

但这似乎是一种“错误”的方式,因为我们可以在多个模块中拥有很多文件。维护这将是一场噩梦,我想避免这种情况。

我也尝试将

-recursive
传递给 lupdate,尽管它应该是默认值,但它也不起作用:

qt_add_translations(appTestLocalization
    LUPDATE_OPTIONS -recursive
    TS_FILES
        i18n/lang_fr_FR.ts
)
qt cmake qml qt6
1个回答
0
投票

正如 @smr 所提到的,您可以扫描文件以递归翻译。这就是我们向由一堆模块构建的应用程序添加翻译的方式:

file(GLOB_RECURSE QML_SOURCES RELATIVE ${CMAKE_SOURCE_DIR} *.qml)

qt_add_translations(${EXECUTABLE_NAME} TS_FILES
    ${EXECUTABLE_NAME}_de_DE.ts
    ${EXECUTABLE_NAME}_en_EN.ts
    SOURCES ${QML_SOURCES}
    RESOURCE_PREFIX "/translations"
    LUPDATE_OPTIONS -no-obsolete
)
© www.soinside.com 2019 - 2024. All rights reserved.