我有一个Qt4 CMake项目,我想将i18n的QM文件集成到输出二进制文件中。目前我已经制定了生成TS和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})
这是来自 main.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文件引用文件的依赖关系(这是一个不错的功能,但没有构建QM文件的规则来到达该位置)。QM文件位于${CMAKE_CURRENT_BINARY_DIR}
(使用影子构建应该在此处),但期望其位于${CMAKE_CURRENT_SOURCE_DIR}
(非生成文件所在的位置 - 因此根据情况,两个位置均正确)。