无论操作系统语言如何,如何翻译使用预构建的 Qt 安装程序框架创建的安装程序

Posted

技术标签:

【中文标题】无论操作系统语言如何,如何翻译使用预构建的 Qt 安装程序框架创建的安装程序【英文标题】:How to translate installer created with pre-built Qt installer framework regardless of OS language 【发布时间】:2019-02-13 14:18:25 【问题描述】:

我正在尝试使用我已经使用 Qt 安装程序框架的预构建版本创建的安装程序的翻译版本,但是文档不足,我需要知道我应该将翻译文件放在哪里( en.qm 已翻译成目标语言的文件)

我尝试将翻译文件放入配置文件夹并在config.xml 中设置<Translations> 元素,但与在没有此元素的情况下创建安装程序相比没有任何变化。 我取得的唯一进展是当我将en.qm 放入元文件夹中的一个包文件夹中,并在其中添加<Translations> 元素package.xml。但在这个解决方案中,只有一半的页面被翻译。

这是我添加到config.xmlpackage.xml的翻译元素<Translations> <Translation>en.qm</Translation> </Translations>

en.qm 添加到meta 文件夹中的包文件时,新页面和一些默认页面被翻译,但第一页(欢迎...)和开始菜单快捷方式页面以及下一步和后退按钮永远不会被翻译。


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


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


谢谢

【问题讨论】:

【参考方案1】:

很遗憾,您必须单独翻译每个包。

我用整个插值器翻译过程的自动化为自己制作了一个 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)

【讨论】:

以上是关于无论操作系统语言如何,如何翻译使用预构建的 Qt 安装程序框架创建的安装程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QT 的语言翻译中使用与号字符串

C语言 程序是如何跑起来的

使用 qt 为预构建的 c 程序构建 GUI [关闭]

CMake + Qt 翻译系统的正确工作流程

QT的动态翻译功能,可能依赖于消息(事件)机制

如何删除 transifex 中的语言?