【问题标题】:How to specify output name for qt5_add_translation?如何为 qt5_add_translation 指定输出名称?
【发布时间】:2018-05-31 11:37:11
【问题描述】:

我想使用qt5_add_translation 为不同语言的大量*.ts 文件生成大量*.qm。所有*.ts 文件都使用*.de_DE.ts/*.fr_FR.ts/etc 约定命名。但是qt5_add_translation 产生输出,直到第一个.,而不是最后一个。

无法使用qt5_add_translation(QM_FILES "${PROJECT_NAME}.de_DE.ts" OPTIONS -qm "${PROJECT_NAME}.de_DE.qm") 语法将选项传递给lrelease

同时为源 *.ts 文件设置 OUTPUT_NAME 属性不起作用:

set_source_files_properties(
    "${PROJECT_NAME}.de_DE.ts" PROPERTIES
    OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}"
    OUTPUT_NAME "${PROJECT_NAME}.de_DE.qm"
    )

案例中产生的文件名仍然是"${PROJECT_NAME}.qm",而不是"${PROJECT_NAME}.de_DE.qm"

如何覆盖生成的 *.qm 文件的生成名称?

当然,我可以制作自定义命令并将其用于我的目的,但我更喜欢使用准备好的qt5_add_translation

编辑:

看着/usr/local/Qt-5.9.2/lib/cmake/Qt5LinguistTools/Qt5LinguistToolsMacros.cmake,我得出结论,使用准备使用的qt5_add_translation 无法达到预期,因为使用get_filename_component(qm ${_abs_FILE} NAME_WE) 来获取文件名:

NAME_WE = 没有目录或最长扩展名的文件名

出于我的目的,需要使用 ABSOLUTE 的组合(以获取带有完整后缀的文件名),然后多次应用 EXTNAME_WE 组合以提取不带最短扩展名的文件名。

【问题讨论】:

    标签: qt cmake translation qt-linguist


    【解决方案1】:

    我最终得到了以下自定义函数add_translation 来替换qt5_add_translation

    function(ADD_TRANSLATION _qm_files)
        foreach(_basename ${ARGN})
        set(qm "${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.qm")
        add_custom_command(
            OUTPUT "${qm}"
            COMMAND "${Qt5_LRELEASE_EXECUTABLE}"
            ARGS -markuntranslated "Not translated!" -nounfinished -removeidentical -compress "${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.ts" -qm "${qm}"
            DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.ts" VERBATIM
        )
        list(APPEND ${_qm_files} "${qm}")
        endforeach()
        set(${_qm_files} ${${_qm_files}} PARENT_SCOPE)
    endfunction()
    

    它接受*.ts 文件的基本名称并生成*.qm 文件的列表:都在当前源目录中。

    【讨论】:

      【解决方案2】:

      请升级到 Qt 5.9.4 或更新版本。已修复名称中带有点的 .ts 文件的处理,另请参阅 https://bugreports.qt.io/browse/QTBUG-64317

      【讨论】:

        猜你喜欢
        • 2015-05-17
        • 1970-01-01
        • 2021-01-03
        • 1970-01-01
        • 2021-05-15
        • 2021-09-13
        • 2020-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多