У меня есть проект 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}
(где не созданы файлы - так что оба места будут правильными, в зависимости от ситуации).