@@ -4,12 +4,16 @@ if (force_qt STREQUAL "Qt6" OR NOT force_qt)
44 if (Qt6Core_FOUND)
55 message (STATUS "Using Qt6" )
66 find_package (Qt6 REQUIRED COMPONENTS Widgets Gui Xml Svg )
7+ set (QT_VERSION_MAJOR "6" )
78 macro (qt_wrap_cpp )
89 qt6_wrap_cpp (${ARGN} )
910 endmacro ()
1011 macro (qt_add_resources )
1112 qt6_add_resources (${ARGN} )
1213 endmacro ()
14+ macro (qt_add_translation )
15+ qt6_add_translation (${ARGN} )
16+ endmacro ()
1317 elseif (force_qt STREQUAL "Qt6" )
1418 # no fallback to Qt5
1519 message (FATAL_ERROR "Qt6 not found" )
@@ -22,12 +26,16 @@ if (force_qt STREQUAL "Qt5" OR NOT Qt6_FOUND)
2226 if (Qt5Core_FOUND)
2327 message (STATUS "Using Qt5" )
2428 find_package (Qt5 REQUIRED COMPONENTS Widgets Gui Xml Svg )
29+ set (QT_VERSION_MAJOR "5" )
2530 macro (qt_wrap_cpp )
2631 qt5_wrap_cpp (${ARGN} )
2732 endmacro ()
2833 macro (qt_add_resources )
2934 qt5_add_resources (${ARGN} )
3035 endmacro ()
36+ macro (qt_add_translation )
37+ qt5_add_translation (${ARGN} )
38+ endmacro ()
3139 elseif (force_qt STREQUAL "Qt5" )
3240 message (FATAL_ERROR "Qt5 not found" )
3341 else ()
@@ -140,8 +148,58 @@ inputbool.h
140148inputstring.h
141149inputstrlist.h
142150wizard.h
151+ languagedialog.h
143152)
144153
154+ set (TRANSLATIONS_DIR ${CMAKE_CURRENT_SOURCE_DIR} /i18n)
155+ file (GLOB DOXYWIZARD_TRANSLATION_FILES CONFIGURE_DEPENDS "${TRANSLATIONS_DIR} /doxywizard_*.ts" )
156+
157+ find_package (Qt${QT_VERSION_MAJOR} COMPONENTS LinguistTools QUIET )
158+ if (Qt${QT_VERSION_MAJOR} LinguistTools_FOUND)
159+ set (I18N_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /i18n)
160+ file (MAKE_DIRECTORY ${I18N_BINARY_DIR} )
161+ set_source_files_properties (${DOXYWIZARD_TRANSLATION_FILES} PROPERTIES OUTPUT_LOCATION ${I18N_BINARY_DIR} )
162+ qt_add_translation (doxywizard_QM_FILES ${DOXYWIZARD_TRANSLATION_FILES} )
163+ get_target_property (QT_QMAKE_EXECUTABLE Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION )
164+ execute_process (
165+ COMMAND "${QT_QMAKE_EXECUTABLE} " -query QT_INSTALL_TRANSLATIONS
166+ OUTPUT_VARIABLE QT_TRANSLATIONS_DIR
167+ OUTPUT_STRIP_TRAILING_WHITESPACE
168+ )
169+ message (STATUS "Qt translations dir: ${QT_TRANSLATIONS_DIR} " )
170+
171+ set (TRANSLATIONS_QRC_CONTENT "<!DOCTYPE RCC>\n <RCC version=\" 1.0\" >\n <qresource>\n " )
172+ set (doxywizard_QM_FILES_PATHS)
173+ foreach (ts_file ${DOXYWIZARD_TRANSLATION_FILES} )
174+ get_filename_component (ts_name ${ts_file} NAME_WE )
175+ string (REGEX REPLACE "doxywizard_(.+)" "\\ 1" LOCALE "${ts_name} " )
176+ set (qm_file "${I18N_BINARY_DIR} /${ts_name} .qm" )
177+ list (APPEND doxywizard_QM_FILES_PATHS ${qm_file} )
178+
179+ if (QT_TRANSLATIONS_DIR)
180+ if (EXISTS "${QT_TRANSLATIONS_DIR} /qtbase_${LOCALE} .qm" )
181+ configure_file ("${QT_TRANSLATIONS_DIR} /qtbase_${LOCALE} .qm" "${I18N_BINARY_DIR} /qtbase_${LOCALE} .qm" COPYONLY )
182+ string (APPEND TRANSLATIONS_QRC_CONTENT " <file>i18n/qtbase_${LOCALE} .qm</file>\n " )
183+ else ()
184+ message (WARNING "Qt translation file ${QT_TRANSLATIONS_DIR} /qtbase_${LOCALE} .qm not found" )
185+ endif ()
186+ endif ()
187+ configure_file ("${PROJECT_SOURCE_DIR} /src/i18n/config_${LOCALE} .xml" "${I18N_BINARY_DIR} /config_${LOCALE} .xml" COPYONLY )
188+ string (APPEND TRANSLATIONS_QRC_CONTENT " <file>i18n/config_${LOCALE} .xml</file>\n " )
189+ string (APPEND TRANSLATIONS_QRC_CONTENT " <file>i18n/${ts_name} .qm</file>\n " )
190+ endforeach ()
191+ string (APPEND TRANSLATIONS_QRC_CONTENT " </qresource>\n </RCC>\n " )
192+
193+ message (STATUS "i18n.qrc:\n ${TRANSLATIONS_QRC_CONTENT} " )
194+ file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /i18n.qrc "${TRANSLATIONS_QRC_CONTENT} " )
195+ set_source_files_properties (${CMAKE_CURRENT_BINARY_DIR} /i18n.qrc PROPERTIES OBJECT_DEPENDS "${doxywizard_QM_FILES_PATHS} " )
196+ qt_add_resources (doxywizard_TRANSLATION_RESOURCES ${CMAKE_CURRENT_BINARY_DIR} /i18n.qrc )
197+
198+ else ()
199+ message (STATUS "Qt Linguist tools not found, translation files will not be compiled" )
200+ set (doxywizard_TRANSLATION_RESOURCES)
201+ endif ()
202+
145203qt_add_resources (doxywizard_RESOURCES_RCC doxywizard.qrc )
146204
147205add_executable (doxywizard WIN32
@@ -153,11 +211,13 @@ inputbool.cpp
153211inputstring.cpp
154212inputint.cpp
155213inputstrlist.cpp
214+ languagedialog.cpp
156215${GENERATED_SRC_WIZARD} /settings.h
157216${GENERATED_SRC_WIZARD} /config_doxyw.cpp
158217${GENERATED_SRC_WIZARD} /config_doxyw.l.h
159218${GENERATED_SRC_WIZARD} /configdoc.cpp
160219${doxywizard_MOC}
220+ ${doxywizard_TRANSLATION_RESOURCES}
161221${doxywizard_RESOURCES_RCC}
162222${PROJECT_SOURCE_DIR} /templates/icon/doxygen.rc
163223)
0 commit comments