如何为qt5\u添加\u翻译指定输出名称?

如何为qt5\u添加\u翻译指定输出名称?,qt,cmake,translation,qt-linguist,Qt,Cmake,Translation,Qt Linguist,我想使用qt5\u add\u translation为不同语言的plenty*.ts文件生成plenty*.qm。所有*.ts文件都使用*.de_de.ts/*.fr_fr.ts/etc约定命名。但是qt5\u add\u translation生成输出,在第一个之前只使用basename,而不是最后一个 无法使用qt5_add_translation(QM_FILES“${PROJECT_NAME}.de_de.ts”options-QM“${PROJECT_NAME}.de_de.QM”)

我想使用
qt5\u add\u translation
为不同语言的plenty
*.ts
文件生成plenty
*.qm
。所有
*.ts
文件都使用
*.de_de.ts
/
*.fr_fr.ts
/etc约定命名。但是
qt5\u add\u translation
生成输出,在第一个
之前只使用basename,而不是最后一个

无法使用
qt5_add_translation(QM_FILES“${PROJECT_NAME}.de_de.ts”options-QM“${PROJECT_NAME}.de_de.QM”)将选项传递给
lrelease

另外,为源
*.ts
文件设置
OUTPUT\u 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\u NAME}.qm”
,而不是
“${PROJECT\u NAME}.de\u de.qm”

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

当然,我可以自定义命令并将其用于我的目的,但我更喜欢使用ready
qt5\u add\u translation

编辑: 查看
/usr/local/Qt-5.9.2/lib/cmake/Qt5LinguistTools/Qt5LinguistToolsMacros.cmake
我得出结论,使用现成的
qt5_添加_翻译
无法达到预期效果,因为使用
get_filename_组件(qm${abs FILE}NAME_WE)
来获取文件名:

NAME\u WE=没有目录或最长扩展名的文件名


出于我的目的,需要结合使用
绝对值
(以获得带有完整后缀的文件名),然后,要多次应用
EXT
并结合
NAME\u,我们
提取文件名,但没有最短的扩展名。

我使用下面的自定义函数
添加翻译
替换
qt5\u添加翻译

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
文件列表:都在当前源目录中。

请升级到Qt 5.9.4或更新版本。名称中带有点的.ts文件的处理已在此处修复,另请参见