From fe182c154106ca82e6b65c14ba59b247400769fe Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Mon, 4 Sep 2023 10:41:25 +0200 Subject: [PATCH] CMake: Add I18N_LANGUAGES keyword to qt_standard_project_setup [ChangeLog][CMake] Added variable QT_I18N_LANGUAGES to specify the languages that are used for i18n in the project. [ChangeLog][CMake] Added keyword I18N_LANGUAGES to qt_standard_project_setup to conveniently set QT_I18N_LANGUAGES. The call qt_standard_project_setup(I18N_LANGUAGES hi ho) sets the variable QT_I18N_LANGUAGES. The target finalizers use this variable to set up CFBundleLocalizations on Apple platforms. qt_add_translations will be extended to read QT_I18N_LANGUAGES as well to determine the names of .ts files if TS_FILES is not given. Fixes: QTBUG-116716 Change-Id: I76f0753d10efb9c32947d9239e43382c9d85eb51 Reviewed-by: Amir Masoud Abdol --- cmake/QtPublicAppleHelpers.cmake | 9 ++++-- src/corelib/Qt6CoreMacros.cmake | 9 +++++- .../src/cmake/cmake-configure-variables.qdoc | 29 +++++++++++++++++++ .../src/cmake/qt_standard_project_setup.qdoc | 7 +++++ 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/cmake/QtPublicAppleHelpers.cmake b/cmake/QtPublicAppleHelpers.cmake index 7d9007ce63c..102110b1632 100644 --- a/cmake/QtPublicAppleHelpers.cmake +++ b/cmake/QtPublicAppleHelpers.cmake @@ -618,9 +618,12 @@ function(_qt_internal_set_apple_localizations target) return() endif() - get_target_property(supported_languages "${target}" _qt_apple_supported_languages) - if("${supported_languages}" STREQUAL "supported_languages-NOTFOUND") - return() + set(supported_languages "${QT_I18N_LANGUAGES}") + if("${QT_I18N_LANGUAGES}" STREQUAL "") + get_target_property(supported_languages "${target}" _qt_apple_supported_languages) + if("${supported_languages}" STREQUAL "supported_languages-NOTFOUND") + return() + endif() endif() get_target_property(plist_file "${target}" MACOSX_BUNDLE_INFO_PLIST) if (NOT plist_file) diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake index 8a99e458ec2..9f8e6bb5919 100644 --- a/src/corelib/Qt6CoreMacros.cmake +++ b/src/corelib/Qt6CoreMacros.cmake @@ -2969,7 +2969,9 @@ macro(qt6_standard_project_setup) REQUIRES SUPPORTS_UP_TO ) - set(__qt_sps_args_multi) + set(__qt_sps_args_multi + I18N_LANGUAGES + ) cmake_parse_arguments(__qt_sps_arg "${__qt_sps_args_option}" "${__qt_sps_args_single}" @@ -3068,6 +3070,11 @@ macro(qt6_standard_project_setup) set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER ${__qt_qt_targets_folder}) endif() endif() + + # I18N support. + if(DEFINED __qt_sps_arg_I18N_LANGUAGES AND NOT DEFINED QT_I18N_LANGUAGES) + set(QT_I18N_LANGUAGES ${__qt_sps_arg_I18N_LANGUAGES}) + endif() endif() endmacro() diff --git a/src/corelib/doc/src/cmake/cmake-configure-variables.qdoc b/src/corelib/doc/src/cmake/cmake-configure-variables.qdoc index a777dd7da2f..a947c87a052 100644 --- a/src/corelib/doc/src/cmake/cmake-configure-variables.qdoc +++ b/src/corelib/doc/src/cmake/cmake-configure-variables.qdoc @@ -477,6 +477,35 @@ methods provided by CMake. \sa {qt6_standard_project_setup}{qt_standard_project_setup()} */ +/*! +\page cmake-variable-qt-i18n-languages.html +\ingroup cmake-variables-qtcore + +\title QT_I18N_LANGUAGES +\target cmake-variable-QT_I18N_LANGUAGES + +\summary {List of languages to be used for project internationalization} + +\cmakevariablesince 6.7 + +This variable specifies a list of languages that are used for project +internationalization. The single languages must be compatible with the +string-based \l QLocale constructor. + +The languages in \c QT_I18N_LANGUAGES are used to +\list + \li Set up executable targets for consuming \c{.qm} files. + \li Automatically construct \c{.ts} file names in + \l{qt6_add_translations}{qt_add_translations()}. +\endlist + +This variable can be conveniently set with the +{qt6_standard_project_setup}{qt_standard_project_setup()} command. + +\sa {qt6_standard_project_setup}{qt_standard_project_setup()} +\sa {qt6_add_translations}{qt_add_translations()} +*/ + /*! \page cmake-variable-qt-ios-launch-screen.html \ingroup cmake-variables-qtcore diff --git a/src/corelib/doc/src/cmake/qt_standard_project_setup.qdoc b/src/corelib/doc/src/cmake/qt_standard_project_setup.qdoc index 458b25bdc93..9dcbab6dc5c 100644 --- a/src/corelib/doc/src/cmake/qt_standard_project_setup.qdoc +++ b/src/corelib/doc/src/cmake/qt_standard_project_setup.qdoc @@ -20,6 +20,7 @@ qt_standard_project_setup( [REQUIRES ] [SUPPORTS_UP_TO ] + [I18N_LANGUAGES ] ) \endcode @@ -81,6 +82,12 @@ setting the \l{QT_NO_STANDARD_PROJECT_SETUP} variable to true. \sa {qt6_generate_deploy_app_script}{qt_generate_deploy_app_script()} \sa qt_policy +\section1 Internationalization + +Since Qt 6.7, it is possible to specify the languages that are used for project +internationalization with the \c I18N_LANGUAGES argument. See \l +QT_I18N_LANGUAGES for details. + \section1 Example \include cmake-generate-deploy-app-script.qdocinc