У меня есть проект Qt4 CMake, и я хотел бы интегрировать файлы QM для i18n в выходной двоичный файл.Вот правила, которые у меня есть для генерации файлов 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 (хорошая функция, но нет правила make для создания файла QM в этом месте).Файлы QM находятся в ${CMAKE_CURRENT_BINARY_DIR}
(где они принадлежат с использованием теневого построения), но ожидают его в ${CMAKE_CURRENT_SOURCE_DIR}
(где должны быть не сгенерированные файлы - поэтому оба местоположения будут правильными, в зависимости от ситуации).