无法弄清楚如何将QT翻译添加到CMake。我尝试过:
file(GLOB TRANSLATION_FILES ${CMAKE_SOURCE_DIR}/Translations/*.ts)
qt5_add_translation(QM_FILES ${TRANSLATION_FILES})
add_executable(${PROJECT_NAME} ${CPP_FILES} ${RESOURCES} ${QM_FILES})
当我编译用CMake生成的VS2015项目时,我将获得以下构建输出:
*2>Generating MyProj_en.qm
2>Updating 'C:/repos/build/lg/MyProj_en.qm'...
2> Generated 14 translation(s) (14 finished and 0 unfinished)
2>Generating MyProj_ru.qm
2>Updating 'C:/repos/build/lg/MyProj_ru.qm'...*
因此至少生成了* .qm文件,但是QTranslator不会加载翻译:
static const QString translationsDirectory = ":/Translations/";
QTranslator translator;
bool loaded = translator.load(translation_file, translationsDirectory);
//here loaded == false
我在CMake中想念什么?
EDIT1:
在我的.pro文件(带有QMake)中,我有这个:
TRANSLATIONS = $$files(Translations/*.ts)
qtPrepareTool(LRELEASE, lrelease)
for(tsfile, TRANSLATIONS) {
qmfile = $$tsfile
qmfile ~= s,.ts$,.qm,
if (!exists($$qmfile)) {
command = $$LRELEASE -removeidentical $$tsfile -qm $$qmfile
system($$command)|error("Translation: Failed to run: $$command")
}
}
#Icon files are added in the same way as in quickcontrols2\gallery\ sample
RESOURCES += qml.qrc \
scene.qrc \
$$files(Translations/*.qm) \
icons.qrc
和上面的C ++代码成功加载了翻译。
EDIT2:
试图将QM_FILES添加到资源:
file(GLOB TRANSLATION_FILES ${CMAKE_SOURCE_DIR}/Translations/*.ts)
qt5_add_translation(QM_FILES ${TRANSLATION_FILES})
qt5_add_resources(RESOURCES qml.qrc scene.qrc icons.qrc ${QM_FILES})
add_executable(${PROJECT_NAME} ${CPP_FILES} ${RESOURCES})
但没有成功,错误是:
CUSTOMBUILD : RCC Parse error : 'C:/repos/build/lg/MyProj_en.qm' Line: 1 Column: 2 [Encountered incorrectly encoded content.]
可能是.qrc文件,但不是.qm。
答案 0 :(得分:0)
可能有点晚了,但是: 可以在代码中找到 qmake 所做的事情并且确实非常清晰:https://github.com/qt/qtbase/blob/5.15.2/mkspecs/features/lrelease.prf
当您检查构建目录时,很明显 qmake 会生成一个名为 qmake_<resource list name>.qrc
的文件——在本例中为 qmake_qmake_qm_files.qrc
--,然后将其添加到 RESOURCES
列表中。
对于 cmake,我个人的解决方案是这样的(你可能想想出一些更漂亮的东西):
set(qmDir "${CMAKE_CURRENT_BINARY_DIR}/.qm")
file(MAKE_DIRECTORY ${qmDir})
file(GLOB_RECURSE translationFiles *.ts)
set_source_files_properties(${translationFiles} PROPERTIES OUTPUT_LOCATION ${qmDir})
qt5_create_translation(qmFileList ${translationFiles})
set(qmResourcesFile "${qmDir}/${resourceFileName}.qrc")
file(WRITE ${qmResourcesFile} "<!DOCTYPE RCC><RCC version=\"1.0\">\n <qresource prefix=\"i18n\">\n")
foreach(qm_file ${qmFileList})
file(RELATIVE_PATH qm_filename ${qmDir} ${qm_file})
file(APPEND ${qmResourcesFile} " <file alias=\"${qm_filename}\">${qm_file}</file>\n")
endforeach(qm_file)
file(APPEND ${qmResourcesFile} " </qresource>\n</RCC>\n")
然后使用 qt5_add_resources
将 qmResourcesFile
添加到您的来源。