我有一個Qt4 CMake項目,我想將i18n的QM文件集成到輸出二進制文件中。這是我的規則至今產生的TS和QM文件:如何使用cmake和QRC將Qt4 qm文件集成到二進制文件中?
set(myapp_TRANSLATIONS
i18n/myapp_de.ts
)
set(FILES_TO_TRANSLATE
${myapp_SRCS}
${myapp_MOC_HDRS}
)
QT4_CREATE_TRANSLATION(QM_FILES ${FILES_TO_TRANSLATE} ${myapp_TRANSLATIONS})
QT4_ADD_TRANSLATION(QM ${myapp_TRANSLATIONS})
我嘗試了以下的QM文件添加到可執行文件:
add_executable(myapp ${myapp_SRCS} ${myapp_MOC_SRCS} ${myapp_RCC_SRCS} ${QM})
這是主要的初始化。 CPP:
QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&qtTranslator);
QTranslator appTranslator;
appTranslator.load("myapp_" + QLocale::system().name());
app.installTranslator(&appTranslator);
然而,strings mypp
表明,翻譯不會成二進制。
更新:我添加的每個QM文件到一個i18n/translations.qrc
:
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/resources">
<file>myapp_de.qm</file>
<file> ... .qm</file>
</qresource>
</RCC>
和使用
QT4_ADD_RESOURCES(myapp_QM_RCC_SRCS i18n/translations.qrc)
和添加myapp_QM_RCC_SRCS
到可執行的依賴關係。
但是由於CMake做了一個陰影構建(在源代碼目錄之外構建)但是解析了QRC文件的期望被引用文件相對於QRC文件的依賴關係,所以這在構建時失敗(很好的特性,但是沒有make規則如何在該位置構建QM文件)。質量管理文件在${CMAKE_CURRENT_BINARY_DIR}
(他們屬於使用影子建築物的地方),但預計在${CMAKE_CURRENT_SOURCE_DIR}
(其中非生成的文件應該是 - 所以這兩個位置將是正確的,取決於情況)。
看起來很有希望,我會嘗試。 +1 – hurikhan77 2010-12-17 22:24:29
我從一開始就一步一步構建了您的想法,以瞭解您是如何做到的。完美的作品。 – hurikhan77 2011-10-01 20:05:30
固體!像魅力一樣工作 – Claudiu 2014-08-06 21:54:30