From 8a060b285a8a50d29fe18d7179fa29b63565afe2 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 17 Jul 2024 14:15:40 +0200 Subject: [PATCH] Fix in-wizard translation support We in principle support a map of locale->string for keys starting with "tr" like "trDisplayName". This didn't work everywhere. We may not cast the value for these keys to QString before passing it to `localizedString`, since that would result in an empty string if the value is such a map. Also fix the documentation since we remove all parts from '_' (to also get rid of encoding parts). Fixes: QTCREATORBUG-23575 Change-Id: I2be795053e645c8bf81417d0db69cd7e63eff022 Reviewed-by: Christian Stenger --- .../creator-projects-custom-wizards-json.qdocinc | 4 ++-- .../projectexplorer/jsonwizard/jsonfieldpage.cpp | 13 +++++++------ .../jsonwizard/jsonwizardfactory.cpp | 7 +++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc b/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc index f2d8d254249..d6b714bb7c7 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc @@ -52,13 +52,13 @@ translations in the .json file using the following syntax: \code - "trDisplayName": { "C": "default", "en_US": "english", "de_DE": "deutsch" } + "trDisplayName": { "C": "default", "en": "english", "de": "deutsch" } \endcode For example: \code - "trDisplayName": { "C": "Project Location", "en_US": "Project Location", "de_DE": "Projekt Verzeichnis" } + "trDisplayName": { "C": "Project Location", "en": "Project Location", "de": "Projektverzeichnis" } \endcode \section1 Creating Wizards diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index ca4220ebef4..d3d747c1a89 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -85,7 +85,7 @@ static QString translatedOrUntranslatedText(QVariantMap &map, const QString &key { if (key.size() >= 1) { const QString trKey = "tr" + key.at(0).toUpper() + key.mid(1); // "text" -> "trText" - const QString trValue = JsonWizardFactory::localizedString(consumeValue(map, trKey).toString()); + const QString trValue = JsonWizardFactory::localizedString(consumeValue(map, trKey)); if (!trValue.isEmpty()) return trValue; } @@ -188,9 +188,10 @@ JsonFieldPage::Field *JsonFieldPage::Field::parse(const QVariant &input, QString *errorMessage = Tr::tr("Field \"%1\" has unsupported type \"%2\".").arg(name).arg(type); return nullptr; } - data->setTexts(name, - JsonWizardFactory::localizedString(consumeValue(tmp, DISPLAY_NAME_KEY).toString()), - JsonWizardFactory::localizedString(consumeValue(tmp, TOOLTIP_KEY).toString())); + data->setTexts( + name, + JsonWizardFactory::localizedString(consumeValue(tmp, DISPLAY_NAME_KEY)), + JsonWizardFactory::localizedString(consumeValue(tmp, TOOLTIP_KEY))); data->setVisibleExpression(consumeValue(tmp, VISIBLE_KEY, true)); data->setEnabledExpression(consumeValue(tmp, ENABLED_KEY, true)); @@ -974,7 +975,7 @@ std::unique_ptr createStandardItemFromListItem(const QVariant &it auto standardItem = std::make_unique(); if (item.typeId() == QMetaType::QVariantMap) { QVariantMap tmp = item.toMap(); - const QString key = JsonWizardFactory::localizedString(consumeValue(tmp, "trKey", QString()).toString()); + const QString key = JsonWizardFactory::localizedString(consumeValue(tmp, "trKey")); const QVariant value = consumeValue(tmp, "value", key); if (key.isNull() || key.isEmpty()) { @@ -985,7 +986,7 @@ std::unique_ptr createStandardItemFromListItem(const QVariant &it standardItem->setData(value, ListField::ValueRole); standardItem->setData(consumeValue(tmp, "condition", true), ListField::ConditionRole); standardItem->setData(consumeValue(tmp, "icon"), ListField::IconStringRole); - standardItem->setToolTip(JsonWizardFactory::localizedString(consumeValue(tmp, "trToolTip", QString()).toString())); + standardItem->setToolTip(JsonWizardFactory::localizedString(consumeValue(tmp, "trToolTip"))); warnAboutUnsupportedKeys(tmp, QString(), "List"); } else { const QString keyvalue = item.toString(); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index 6da06b0616a..4870056c9bf 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -763,10 +763,9 @@ QString JsonWizardFactory::localizedString(const QVariant &value) return {}; if (value.typeId() == QMetaType::QVariantMap) { QVariantMap tmp = value.toMap(); - const QString locale = languageSetting().toLower(); - QStringList locales; - locales << locale << QLatin1String("en") << QLatin1String("C") << tmp.keys(); - for (const QString &locale : std::as_const(locales)) { + const QString currentLocale = languageSetting().toLower(); + const QStringList locales{currentLocale, "en", "C"}; + for (const QString &locale : locales) { QString result = tmp.value(locale, QString()).toString(); if (!result.isEmpty()) return result;