Qt qmake和生成的qm文件
将编译后的翻译(*.qm)组织到资源中的最佳(正确)方法是什么? *.qm文件在qrc文件中引用,由两(三)个额外目标通过以下方式生成:Qt qmake和生成的qm文件,qt,qmake,Qt,Qmake,将编译后的翻译(*.qm)组织到资源中的最佳(正确)方法是什么? *.qm文件在qrc文件中引用,由两(三)个额外目标通过以下方式生成: trans_update.commands = lupdate $$_PRO_FILE_ trans_update.depends = $$_PRO_FILE_ trans_release.commands = lrelease $$_PRO_FILE_ trans_release.depends = trans_update $$TRANSLATIONS
trans_update.commands = lupdate $$_PRO_FILE_
trans_update.depends = $$_PRO_FILE_
trans_release.commands = lrelease $$_PRO_FILE_
trans_release.depends = trans_update $$TRANSLATIONS
translate.depends = trans_release
QMAKE_EXTRA_TARGETS += trans_update trans_release translate deploy
CONFIG(release, debug|release) {
DESTDIR=release
PRE_TARGETDEPS += translate
}
但问题是在qmake第一次运行时,还没有生成任何qm文件,并且会出现如下错误:
RCC: Error in 'qml.qrc': Cannot find file ...
我不喜欢将编译好的qm文件保存到VSC中的想法
有什么方法可以很好地组织它吗?我想指出我在一些项目中使用的解决方案。这可能远远不够完美,但效果很好
CONFIG(release, debug|release) {
TRANSLATION_TARGET_DIR = $${OUT_PWD}/release/translations
LANGUPD_OPTIONS = -locations relative -no-ui-lines
LANGREL_OPTIONS = -compress -nounfinished -removeidentical
} else {
TRANSLATION_TARGET_DIR = $${OUT_PWD}/debug/translations
LANGUPD_OPTIONS =
LANGREL_OPTIONS = -markuntranslated "MISS_TR "
}
isEmpty(QMAKE_LUPDATE) {
win32:LANGUPD = $$[QT_INSTALL_BINS]\lupdate.exe
else:LANGUPD = $$[QT_INSTALL_BINS]/lupdate
}
isEmpty(QMAKE_LRELEASE) {
win32:LANGREL = $$[QT_INSTALL_BINS]\lrelease.exe
else:LANGREL = $$[QT_INSTALL_BINS]/lrelease
}
langupd.command = \
$$LANGUPD $$LANGUPD_OPTIONS $$shell_path($$_PRO_FILE_) -ts $$_PRO_FILE_PWD_/$$TRANSLATIONS
langrel.depends = langupd
langrel.input = TRANSLATIONS
langrel.output = $$TRANSLATION_TARGET_DIR/${QMAKE_FILE_BASE}.qm
langrel.commands = \
$$LANGREL $$LANGREL_OPTIONS ${QMAKE_FILE_IN} -qm $$TRANSLATION_TARGET_DIR/${QMAKE_FILE_BASE}.qm
langrel.CONFIG += no_link
QMAKE_EXTRA_TARGETS += langupd
QMAKE_EXTRA_COMPILERS += langrel
PRE_TARGETDEPS += langupd compiler_langrel_make_all
可能会对lupdate选项进行一些有意义的调整,因为不同的构建(发布和调试)会生成不同的*.ts
文件,然后这些文件会触发所用VCS的更改
我还想把读者引导到一个专家使用它的地方。推荐的方法——在最初提出这个问题的时候可能还没有
TRANSLATIONS += <your *.ts files>
CONFIG += lrelease embed_translations
TRANSLATIONS+=
CONFIG+=lrelease嵌入\u翻译
如果您真的需要/想要单独构建qm文件,我会指出qmake对上述配置的作用,并根据您的需要对其进行调整。看见
(基本上,它会创建一个资源列表并将其添加到
资源中)我想到的第一件事是:忽略有关VCS的*.qm
文件怎么样?我可能会在几分钟内想出一个更好的解决方案。谢谢,如果qrc文件引用*.qm文件,这似乎是一个解决方案谢谢,虽然它不是明确的答案,但它是helpful@IlyaKitaev您必须清楚地阅读它:查看包含选项-qm
的lrelease
调用的参数。这可能有助于组织。我没有将它们组织到任何资源文件中,因为它们是(*.qm
文件)一种构建产品,它是在每个(发布)构建中创建的。我注意到\u PRO_文件
和\u PRO_文件
变量是mistyped@Piroxiljin谢谢,现在修好了。谢谢这个被低估的解决方案。我将添加以下内容,生成的翻译二进制文件将加载到前缀“i18n”下。顺致敬意,