如何使用 `qmake CONFIG` 运行 QT 的 `lupdate`-tool?
How to run QT's `lupdate`-tool with a `qmake CONFIG`?
这个问题之前在qt社区发过:https://forum.qt.io/topic/106930/how-to-run-lupdate-with-a-qmake-config
我在我的项目文件中使用了这样的构造:
LANGUAGES = de
TRANSLATION_NAME = authorization
include(../../gen_translations.pri)
其中 gen_translations.pri 看起来像这样:
# parameters: var, prepend, append
defineReplace(prependAll) {
for(a,$):result += $$${a}$
return($$result)
}
TRANSLATIONS = $$prependAll(LANGUAGES, $$PWD/libs/$$TRANSLATION_NAME/translations/lib$${TRANSLATION_NAME}_, .ts)
TRANSLATIONS_FILES =
qtPrepareTool(LRELEASE, lrelease)
for(tsfile, TRANSLATIONS) {
qmfile = $$shadowed($$tsfile)
qmfile ~= s,.ts$,.qm,
qmdir = $$dirname(qmfile)
!exists($$qmdir) {
mkpath($$qmdir)|error("Aborting.")
}
command = $$LRELEASE -removeidentical $$tsfile -qm $$qmfile
system($$command)|error("Failed to run: $$command")
TRANSLATIONS_FILES += $$qmfile
}
for(qmentry, $$list($$TRANSLATIONS_FILES)) {
qmpath = $$OUT_PWD/../translations
qmpathname = $$replace(qmpath,/,)
qmpathname = $$replace(qmpathname,\.,)
qmpathname = $$replace(qmpathname,:,)
qmpathname = $$replace(qmpathname," ",)
qmentity = qmfiles_$${qmpathname}
eval($${qmentity}.files += $$qmentry)
eval($${qmentity}.path = $$qmpath)
INSTALLS *= $${qmentity}
}
它为我生成 *.qm
文件并使用 make install 将它们移动到定义的位置。
我不想 qmake
在我的开发机器上为每个构建执行所有的东西。因此,我想通过将其包装为 qmake
:
使其成为有条件的
translate{
LANGUAGES = de
TRANSLATION_NAME = authorization
include(../../gen_translations.pri)
}
这样我就可以决定何时获取 *.qm
文件,何时不获取。
但是我无法事先 运行 lupdate
项目文件,因为它被那个条件阻止了。
我相信,有人有更好的想法来完成任务。
提前致谢。
我在这里分享我的 vmpk project 食谱。我从 Arora 项目中借用了它(我认为)。它比你的简单得多,我让 qmake 决定是否有必要在输出已被删除或输入 .ts 已更改时重新生成任何 .qm 文件,就像任何其他编译器一样。
updateqm.pri
# update translations
isEmpty(QMAKE_LRELEASE) {
win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\lrelease.exe
else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
!exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease }
}
updateqm.input = TRANSLATIONS
updateqm.output = $$OUT_PWD/${QMAKE_FILE_BASE}.qm
updateqm.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm $$OUT_PWD/${QMAKE_FILE_BASE}.qm
updateqm.CONFIG += no_link target_predeps
QMAKE_EXTRA_COMPILERS += updateqm
project.pro:
TRANSLATIONS += \
translations/project_en.ts \
translations/project_cs.ts \
translations/project_de.ts \
translations/project_es.ts \
translations/project_fr.ts \
translations/project_ru.ts
include(updateqm.pri)
使用这个项目文件,您可以一如既往地做:
lupdate project.pro
无论如何,Qt5 has a builtin CONFIG+=lrelease
选项使 "updateqm.pri" 被弃用。
这个问题之前在qt社区发过:https://forum.qt.io/topic/106930/how-to-run-lupdate-with-a-qmake-config
我在我的项目文件中使用了这样的构造:
LANGUAGES = de
TRANSLATION_NAME = authorization
include(../../gen_translations.pri)
其中 gen_translations.pri 看起来像这样:
# parameters: var, prepend, append
defineReplace(prependAll) {
for(a,$):result += $$${a}$
return($$result)
}
TRANSLATIONS = $$prependAll(LANGUAGES, $$PWD/libs/$$TRANSLATION_NAME/translations/lib$${TRANSLATION_NAME}_, .ts)
TRANSLATIONS_FILES =
qtPrepareTool(LRELEASE, lrelease)
for(tsfile, TRANSLATIONS) {
qmfile = $$shadowed($$tsfile)
qmfile ~= s,.ts$,.qm,
qmdir = $$dirname(qmfile)
!exists($$qmdir) {
mkpath($$qmdir)|error("Aborting.")
}
command = $$LRELEASE -removeidentical $$tsfile -qm $$qmfile
system($$command)|error("Failed to run: $$command")
TRANSLATIONS_FILES += $$qmfile
}
for(qmentry, $$list($$TRANSLATIONS_FILES)) {
qmpath = $$OUT_PWD/../translations
qmpathname = $$replace(qmpath,/,)
qmpathname = $$replace(qmpathname,\.,)
qmpathname = $$replace(qmpathname,:,)
qmpathname = $$replace(qmpathname," ",)
qmentity = qmfiles_$${qmpathname}
eval($${qmentity}.files += $$qmentry)
eval($${qmentity}.path = $$qmpath)
INSTALLS *= $${qmentity}
}
它为我生成 *.qm
文件并使用 make install 将它们移动到定义的位置。
我不想 qmake
在我的开发机器上为每个构建执行所有的东西。因此,我想通过将其包装为 qmake
:
translate{
LANGUAGES = de
TRANSLATION_NAME = authorization
include(../../gen_translations.pri)
}
这样我就可以决定何时获取 *.qm
文件,何时不获取。
但是我无法事先 运行 lupdate
项目文件,因为它被那个条件阻止了。
我相信,有人有更好的想法来完成任务。
提前致谢。
我在这里分享我的 vmpk project 食谱。我从 Arora 项目中借用了它(我认为)。它比你的简单得多,我让 qmake 决定是否有必要在输出已被删除或输入 .ts 已更改时重新生成任何 .qm 文件,就像任何其他编译器一样。
updateqm.pri
# update translations
isEmpty(QMAKE_LRELEASE) {
win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\lrelease.exe
else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
!exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease }
}
updateqm.input = TRANSLATIONS
updateqm.output = $$OUT_PWD/${QMAKE_FILE_BASE}.qm
updateqm.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm $$OUT_PWD/${QMAKE_FILE_BASE}.qm
updateqm.CONFIG += no_link target_predeps
QMAKE_EXTRA_COMPILERS += updateqm
project.pro:
TRANSLATIONS += \
translations/project_en.ts \
translations/project_cs.ts \
translations/project_de.ts \
translations/project_es.ts \
translations/project_fr.ts \
translations/project_ru.ts
include(updateqm.pri)
使用这个项目文件,您可以一如既往地做:
lupdate project.pro
无论如何,Qt5 has a builtin CONFIG+=lrelease
选项使 "updateqm.pri" 被弃用。