2016-07-26 88 views
1

將編譯後的翻譯(* .qm)組織到資源中的最佳(適當)方法是什麼?簡稱 * .qm文件QRC文件,並通過二(三)額外的目標,以這種方式產生:qmake和生成的qm文件

trans_update.commands = lupdate $$_PRO_FILE_ 
trans_update.depends = $$_PRO_FILE_ 

trans_release.commands = lrelease $$_PRO_FILE_ 
trans_release.depends = trans_update $$TRANSLATIONS 

translate.depends = trans_release 

QMAKE_EXTRA_TARGETS += trans_update trans_release translate deploy 

CONFIG(release, debug|release) { 
    DESTDIR=release 
    PRE_TARGETDEPS += translate 
} 

但問題是,在運行的qmake第一次的那一刻,有是產生還沒有QM文件,並打印錯誤,如:

RCC: Error in 'qml.qrc': Cannot find file ... 

我不喜歡將編譯的qm文件保存到VSC的想法。

有沒有辦法很好地組織它?

+0

我想起來的第一件事情:關於忽略VCS中的'* .qm'文件怎麼辦?我可能會在幾分鐘內提出更好的解決方案。 – maxik

+0

謝謝,似乎是一個解決方案,如果qrc文件引用* .qm文件 – mbg033

回答

3

我喜歡指出我在某些項目中使用的解決方案。它可能遠非完美,但它很好地工作。

CONFIG(release, debug|release) { 
    TRANSLATION_TARGET_DIR = $${OUT_PWD}/release/translations 
    LANGUPD_OPTIONS = -locations relative -no-ui-lines 
    LANGREL_OPTIONS = -compress -nounfinished -removeidentical 
} else { 
    TRANSLATION_TARGET_DIR = $${OUT_PWD}/debug/translations 
    LANGUPD_OPTIONS = 
    LANGREL_OPTIONS = -markuntranslated "MISS_TR " 
} 

isEmpty(QMAKE_LUPDATE) { 
    win32:LANGUPD = $$[QT_INSTALL_BINS]\lupdate.exe 
    else:LANGUPD = $$[QT_INSTALL_BINS]/lupdate 
} 

isEmpty(QMAKE_LRELEASE) { 
    win32:LANGREL = $$[QT_INSTALL_BINS]\lrelease.exe 
    else:LANGREL = $$[QT_INSTALL_BINS]/lrelease 
} 

langupd.command = \ 
    $$LANGUPD $$LANGUPD_OPTIONS $$shell_path($$_PRO_FILE_) -ts $$_PRO_FILE_PWD_/$$TRANSLATIONS 

langrel.depends = langupd 
langrel.input = TRANSLATIONS 
langrel.output = $$TRANSLATION_TARGET_DIR/${QMAKE_FILE_BASE}.qm 
langrel.commands = \ 
    $$LANGREL $$LANGREL_OPTIONS ${QMAKE_FILE_IN} -qm $$TRANSLATION_TARGET_DIR/${QMAKE_FILE_BASE}.qm 
langrel.CONFIG += no_link 

QMAKE_EXTRA_TARGETS += langupd 
QMAKE_EXTRA_COMPILERS += langrel 
PRE_TARGETDEPS += langupd compiler_langrel_make_all 

有可能是一個sensful的調整,以lupdate選擇,因爲不同的構建(發佈和調試)生成不同*.ts文件,然後觸發在使用VCS的變化。

我也喜歡指導專家使用它的專家example

+0

謝謝,雖然它不是明確的答案,但它是有幫助的 – mbg033

+0

@IlyaKitaev你必須清楚地閱讀:看看'lrelease'調用的參數包含選項'-qm '。這可能有助於組織。而且我不會像它們那樣將它們組織到任何資源文件中('* .qm'文件),而是構建每個(發佈)構建版本的構建產品。 – maxik

+0

我注意到'_PRO_FILE_'和'_PRO_FILE_PWD_'變量是錯誤的 – Piroxiljin