【问题标题】:How to run QT's `lupdate`-tool with a `qmake CONFIG`?如何使用 `qmake CONFIG` 运行 QT 的 `lupdate`-tool?
【发布时间】:2019-09-20 14:09:02
【问题描述】:

这个问题之前已经在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,$$1):result += $$2$${a}$$3
 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,因为它被那个条件阻止了。

我敢肯定,有人有更好的主意来完成这项任务。

提前致谢。

【问题讨论】:

    标签: qt internationalization translation qmake qt-linguist


    【解决方案1】:

    我在这里分享vmpk project 的食谱。我是从 Arora 项目中借来的(我认为)。它比你的要简单得多,我让 qmake 来决定是否有必要在输出已擦除或输入 .ts 已更改时重新生成任何 .qm 文件,就像任何其他编译器一样。

    更新qm.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”被弃用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 2018-02-14
      • 1970-01-01
      相关资源
      最近更新 更多