[Card] Show card languages in the same native (English) format as the UI

Address review: the card text & images language dropdown listed bare native
names, some in inconsistent lowercase (e.g. "čeština", "español de España"),
which makes the languages easy to mix up for users that do not read the script
(e.g. 日本語 vs 한국어). It now mirrors the UI language dropdown and always pairs
the native name with its English name (e.g. "Deutsch (German)",
"日本語 (Japanese)"), using the same fixed casing.
This commit is contained in:
Lukas Brübach 2026-09-18 05:16:25 +02:00
parent fa89662172
commit fbd624a02e
2 changed files with 24 additions and 8 deletions

View file

@ -1,5 +1,6 @@
#include "card_localization.h" #include "card_localization.h"
#include <QHash>
#include <QLocale> #include <QLocale>
#include <QStringList> #include <QStringList>
@ -13,11 +14,23 @@ const QStringList &supportedLanguages()
QString languageDisplayName(const QString &lang) QString languageDisplayName(const QString &lang)
{ {
if (lang == "zhs") { static const QHash<QString, QString> displayNames = {
return QStringLiteral("简体中文"); {"cs", "Česky (Czech)"},
} {"de", "Deutsch (German)"},
if (lang == "zht") { {"es", "Español (Spanish)"},
return QStringLiteral("繁體中文"); {"fr", "Français (French)"},
{"it", "Italiano (Italian)"},
{"ja", "日本語 (Japanese)"},
{"ko", "한국어 (Korean)"},
{"pt", "Português (Portuguese)"},
{"ru", "Русский (Russian)"},
{"he", "עברית (Hebrew)"},
{"zhs", "简体中文 (Chinese Simplified)"},
{"zht", "繁體中文 (Chinese Traditional)"},
};
const QString displayName = displayNames.value(lang);
if (!displayName.isEmpty()) {
return displayName;
} }
const QString nativeName = QLocale(lang).nativeLanguageName(); const QString nativeName = QLocale(lang).nativeLanguageName();
return nativeName.isEmpty() ? lang : nativeName; return nativeName.isEmpty() ? lang : nativeName;

View file

@ -28,11 +28,14 @@ namespace CardLocalization
[[nodiscard]] const QStringList &supportedLanguages(); [[nodiscard]] const QStringList &supportedLanguages();
/** /**
* @brief Human-readable native name for a language code. * @brief Human-readable name for a language code.
*
* Follows the same "native name (English name)" format the UI language list
* uses (e.g. "日本語 (Japanese)"), so the English fallback is always visible.
* *
* @param lang Language code (e.g. "de", "ja", "zhs"). * @param lang Language code (e.g. "de", "ja", "zhs").
* @return The language's name in its own language, or the code itself if * @return The language's native name with its English name in parentheses, or
* it cannot be resolved. * the code itself if it cannot be resolved.
*/ */
[[nodiscard]] QString languageDisplayName(const QString &lang); [[nodiscard]] QString languageDisplayName(const QString &lang);
} // namespace CardLocalization } // namespace CardLocalization