将编译的翻译(* .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
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中的想法。
有没有办法很好地组织它?
答案 0 :(得分:4)
我想指出一些我在某些项目中使用的解决方案。它可能远非完美,但效果很好。
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的更改。
我也想引导受欢迎的读者到专家使用它的example。
答案 1 :(得分:1)
推荐的方法——在最初提出这个问题时可能还没有使用
TRANSLATIONS += <your *.ts files>
CONFIG += lrelease embed_translations
如果您真的需要/想要单独构建 qm 文件,我会指出 qmake 对上述配置的作用并根据您的需要进行调整。见https://github.com/qt/qtbase/blob/5.15.2/mkspecs/features/lrelease.prf
(基本上,它会创建资源列表并将其添加到 RESOURCES
)。