Как перевести установщик, созданный с помощью готовой среды установки Qt, независимо от языка ОС - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь получить переведенную версию моего установщика, которую я уже создал, используя предварительно собранную версию инфраструктуры установщика Qt, но документация неадекватна, и мне нужно знать, куда мне поместить файл перевода (en.qm файл, который я перевел на язык назначения)

Я попытался поместить файл перевода в папку конфигурации и установить элемент <Translations> в config.xml, но ничего не изменилось по сравнению с созданиемустановщик без этого элемента.Единственный прогресс, которого я достиг, это когда я поместил en.qm в одну из папок пакета в метапапку и добавил элемент <Translations> в его package.xml.но в этом решении переводится только половина страниц.

это элемент перевода, который я добавил к config.xml и package.xml
<Translations> <Translation>en.qm</Translation> </Translations>

, когда en.qm добавляется в файл пакета в метапапке, переводятся новые страницы и некоторые страницы по умолчанию, но первая страница (приветствие ...) и страница ярлыков меню Пуск, а также кнопки «Вперед» и «Назад» никогда не переводятся.


PS: мне нужен установщик на моем родном языке, а язык ОС всегда английский.


P.S_2: я использую Qt 5.9.1 ипредварительно собранная среда установки Qt 3.0.6, и я создал файл en.qm, используя следующую команду для installerfw.pro исходного кода платформы установщика, выпускает версию 3.0.6.
lupdate en.ts
итогда
lrelease installerfw.pro -ts en.ts


Спасибо

1 Ответ

0 голосов
/ 10 мая 2019

К сожалению, вы должны перевести каждый пакет отдельно.

Я сделал для себя файл 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...