如何翻译使用预构建的Qt安装程序框架创建的安装程序,而不考虑操作系统语言是什么

时间:2019-02-13 14:18:25

标签: c++ qt qt-installer

我正在尝试使用已经安装好的Qt安装程序框架的预先版本创建的安装程序的翻译版本,但是文档不足,我需要知道将翻译文件放在哪里( { "musicListListItemId": 4, "musicListId": 1, "listItemId": 1019, "musicList": null, "listItem": null, "rank": 2, "comments": null, "imageUrl": null, "dateModified": "0001-01-01T00:00:00", "deleted": false } 个文件,我已将其翻译为目标语言)

我尝试将翻译文件放在config文件夹中,并在en.qm中设置<Translations>元素,但是与没有该元素的安装程序相比,没有任何变化。 我获得的唯一进步是,将config.xml放在meta文件夹的一个包文件夹中,并将en.qm元素添加到<Translations>中。但在此解决方案中,只有一半的页面被翻译。

这是我添加到package.xmlconfig.xml中的翻译元素
package.xml

<Translations> <Translation>en.qm</Translation> </Translations>添加到meta文件夹中的程序包文件中时,会翻译新页面和一些默认页面,但是从不拳头页面(欢迎...)和开始菜单快捷方式页面以及下一步和后退按钮翻译。


PS:我需要使用我自己的语言安装程序,并且操作系统语言始终是英语。


P.S_2:我正在使用Qt 5.9.1和预构建的Qt安装程序框架3.0.6,并且在源代码的en.qm上使用以下命令创建了en.qm文件安装程序框架的代码发布版本3.0.6。
installerfw.pro
 然后
 lupdate en.ts


谢谢

1 个答案:

答案 0 :(得分:0)

不幸的是,您必须分别翻译每个软件包。

我通过整个插值器翻译过程的自动化为自己创建了一个pri文件。

详细考虑:

installer.pri

QT_DIR = $$dirname(QMAKE_QMAKE)
win32:LUPDATE = $$QT_DIR/lupdate.exe
unix:LUPDATE = $$QT_DIR/lupdate

win32:LRELEASE = $$QT_DIR/lrelease.exe
unix:LRELEASE = $$QT_DIR/lrelease


SUPPORT_LANGS = ru

# this file search function with a specific extension
defineReplace(findFiles) {
    patern = $$1
    path = $$2

    all_files = $$files(*$${patern}, true)
    win32:all_files ~= s|\\\\|/|g
    win32:path ~= s|\\\\|/|g

    for(file, all_files) {
        result += $$find(file, $$path)
    }

    return($$result)
}

# here we get a list of our installer's xml files (since each package must contain its own config.xml, I consider each xml file a potential package)
XML_FILES = $$files(*.xml, true)

# and for each language I support
for(LANG, SUPPORT_LANGS) {
    # i add run lupdate command for all js and ui files of package
    for(XML, XML_FILES) {
        FILE_PATH = $$dirname(XML)

        JS_FILES = $$findFiles(".js", $$FILE_PATH)
        UI_FILES = $$findFiles(".ui", $$FILE_PATH)

        commands += "$$LUPDATE $$JS_FILES $$UI_FILES -ts $$FILE_PATH/$${LANG}.ts"
        TS_FILES += $$FILE_PATH/$${LANG}.ts

    }

    # I also add commands to lrelease for each ts file I created 
    for(TS, TS_FILES) {
        commands += "$$LRELEASE $$TS"
    }
}

# and execute all the accumulated commands 
for(command, commands) {
    system($$command)|error("Failed to run: $$command")
}

您需要做的就是将此installer.pri文件放在安装程序的根目录中,并将其连接到主pro文件中

main.pro

include($$PWD/installer/installer.pri)