我有一个带有德语翻译的Qt项目Translation_de.ts
,它会通过Qmake自动编译到Translation_de.qm
:
TRANSLATIONS += Translation_de.ts
...
QMAKE_EXTRA_COMPILERS += lrelease
lrelease.input = TRANSLATIONS
lrelease.output = ${QMAKE_FILE_BASE}.qm
lrelease.commands = $$[QT_INSTALL_BINS]/lrelease ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_BASE}.qm
lrelease.CONFIG += no_link target_predeps
然后,生成的Translation_de.qm
将作为资源编译到最终应用程序中:
RESOURCES += Resources.qrc
Resources.qrc
看起来像这样:
<RCC>
<qresource>
...
<file>Translation_de.qm</file>
</qresource>
</RCC>
所有这一切都很好,除了在新结账时第一次打电话给Qmake会引发以下恼人的警告:
RCC: Error in 'Resources.qrc': Cannot find file 'Translation_de.qm'
我在这里做错了什么?如何正确指定自动生成的资源文件,如Translation_de.qm
?
答案 0 :(得分:8)
使用例如qmake阶段创建生成的文件system(lrelease...)
。保留其他规则,以便在更改输入文件时不必重新运行qmake。
答案 1 :(得分:2)
http://doc.qt.io/qt-5/qmake-variable-reference.html
CONFIG + = lrelease#将* .qm文件从TRANSLATIONS =生成到目录builddir / .qm / CONFIG + = embed_translations#将它们添加为qrc资源
所以(不是)
CONFIG+=lrelease embed_translations
不需要qmake魔术。您的qm文件将位于:/ i18n /下,除非您另行指定
QM_FILES_RESOURCE_PREFIX=/my/customtranslationdirectory
答案 2 :(得分:1)
我认为你想要的只是&#34; ignore_no_exist &#34;对于 lrelease.CONFIG
据我所知, target_predeps 确保它在&#39; normal&#39;之前执行。编译步骤已发布。因此,如果它真的只是去除警告,只需添加上面给出的标志。执行qmake调用创建的makefile后,qm创建应该可以正常工作。
如果未创建qm文件,请尝试添加:
PRE_TARGETDEPS += compiler_lrelease_make_all
查看此link以获取可能对您有所帮助的更多选项。