# Файл для подключения в основной проект через include # Обновление и генерация файлов переводов # Языки переводов перечислить в переменной LNG if(IS_DEBUG) message(STATUS "Project '${PROJECT_NAME}' [translations] DEBUG building: skip .qm generation") return() endif() # Если список языков не задан в основном CMakeLists.txt — применяем по умолчанию if(NOT DEFINED LNG) set(LNG en ru) message(STATUS "Project '${PROJECT_NAME}' [translations] LNG not set, use default: ${LNG}") else() message(STATUS "Project '${PROJECT_NAME}' [translations] Use LNG: ${LNG}") endif() # Подключить LinguistTools find_package(Qt${QT_VERSION_MAJOR}LinguistTools REQUIRED) # Полные пути утилит get_target_property(LUPDATE_EXECUTABLE Qt${QT_VERSION_MAJOR}::lupdate IMPORTED_LOCATION) get_target_property(LRELEASE_EXECUTABLE Qt${QT_VERSION_MAJOR}::lrelease IMPORTED_LOCATION) # Каталог генерации файлов ts и qm файлов set(TRANSLATIONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/translations") set(QM_OUTPUT_DIR "${DISTRIB_DIR}/translations") file(MAKE_DIRECTORY "${TRANSLATIONS_DIR}") file(MAKE_DIRECTORY "${QM_OUTPUT_DIR}") # Список TS файлов в зависимости от списка языков set(TS_FILES "") # Обновление каждого файла с добавлением в список foreach(LANG ${LNG}) set(TS_FILE "${TRANSLATIONS_DIR}/${PROJECT_NAME}_${LANG}.ts") list(APPEND TS_FILES "${TS_FILE}") message(STATUS "Project '${PROJECT_NAME}' Update translation file: ${TS_FILE}") execute_process(COMMAND ${LUPDATE_EXECUTABLE} ${PROJECT_SOURCES} -ts ${TS_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) endforeach() # Генерация файлов qm set(QM_FILES "") foreach(TS ${TS_FILES}) get_filename_component(TS_NAME_WE ${TS} NAME_WE) set(QM ${QM_OUTPUT_DIR}/${TS_NAME_WE}.qm) list(APPEND QM_FILES ${QM}) add_custom_command( OUTPUT ${QM} COMMAND ${LRELEASE_EXECUTABLE} ${TS} -qm ${QM} DEPENDS ${TS} COMMENT "Generating ${QM}" ) endforeach() add_custom_target(translations_qm ALL DEPENDS ${QM_FILES}) add_dependencies(translations_qm ${PROJECT_NAME})