diff options
| -rw-r--r-- | src/yuzu/configuration/configure_ui.cpp | 73 |
1 files changed, 67 insertions, 6 deletions
diff --git a/src/yuzu/configuration/configure_ui.cpp b/src/yuzu/configuration/configure_ui.cpp index 46e5409db..d3a60cdd1 100644 --- a/src/yuzu/configuration/configure_ui.cpp +++ b/src/yuzu/configuration/configure_ui.cpp | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <QDirIterator> | 9 | #include <QDirIterator> |
| 10 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 11 | #include "common/fs/path_util.h" | 11 | #include "common/fs/path_util.h" |
| 12 | #include "common/logging/log.h" | ||
| 12 | #include "common/settings.h" | 13 | #include "common/settings.h" |
| 13 | #include "core/core.h" | 14 | #include "core/core.h" |
| 14 | #include "ui_configure_ui.h" | 15 | #include "ui_configure_ui.h" |
| @@ -170,14 +171,74 @@ void ConfigureUi::RetranslateUI() { | |||
| 170 | } | 171 | } |
| 171 | 172 | ||
| 172 | void ConfigureUi::InitializeLanguageComboBox() { | 173 | void ConfigureUi::InitializeLanguageComboBox() { |
| 174 | // This is a list of lexicographically sorted languages, only the available translations are | ||
| 175 | // shown to the user. | ||
| 176 | static const struct { | ||
| 177 | const QString name; | ||
| 178 | const char* id; | ||
| 179 | } languages[] = { | ||
| 180 | // clang-format off | ||
| 181 | {QStringLiteral(u"Bahasa Indonesia"), "id"}, // Indonesian | ||
| 182 | {QStringLiteral(u"Bahasa Melayu"), "ms"}, // Malay | ||
| 183 | {QStringLiteral(u"Catal\u00E0"), "ca"}, // Catalan | ||
| 184 | {QStringLiteral(u"\u010Ce\u0161tina"), "cs"}, // Czech | ||
| 185 | {QStringLiteral(u"Dansk"), "da"}, // Danish | ||
| 186 | {QStringLiteral(u"Deutsch"), "de"}, // German | ||
| 187 | {QStringLiteral(u"English"), "en"}, // English | ||
| 188 | {QStringLiteral(u"Espa\u00F1ol"), "es"}, // Spanish | ||
| 189 | {QStringLiteral(u"Fran\u00E7ais"), "fr"}, // French | ||
| 190 | {QStringLiteral(u"Hrvatski"), "hr"}, // Croatian | ||
| 191 | {QStringLiteral(u"Italiano"), "it"}, // Italian | ||
| 192 | {QStringLiteral(u"Magyar"), "hu"}, // Hungarian | ||
| 193 | {QStringLiteral(u"Nederlands"), "nl"}, // Dutch | ||
| 194 | {QStringLiteral(u"Norsk bokm\u00E5l"), "nb"}, // Norwegian | ||
| 195 | {QStringLiteral(u"Polski"), "pl"}, // Polish | ||
| 196 | {QStringLiteral(u"Portugu\u00EAs"), "pt_PT"}, // Portuguese | ||
| 197 | {QStringLiteral(u"Portugu\u00EAs (Brasil)"), "pt_BR"}, // Portuguese (Brazil) | ||
| 198 | {QStringLiteral(u"Rom\u00E2n\u0103"), "ro"}, // Romanian | ||
| 199 | {QStringLiteral(u"Srpski"), "sr"}, // Serbian | ||
| 200 | {QStringLiteral(u"Suomi"), "fi"}, // Finnish | ||
| 201 | {QStringLiteral(u"Svenska"), "sv"}, // Swedish | ||
| 202 | {QStringLiteral(u"Ti\u1EBFng Vi\u1EC7t"), "vi"}, // Vietnamese | ||
| 203 | {QStringLiteral(u"Ti\u1EBFng Vi\u1EC7t (Vi\u1EC7t Nam)"), "vi_VN"}, // Vietnamese | ||
| 204 | {QStringLiteral(u"T\u00FCrk\u00E7e"), "tr_TR"}, // Turkish | ||
| 205 | {QStringLiteral(u"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"), "el"}, // Greek | ||
| 206 | {QStringLiteral(u"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"), "ru_RU"}, // Russian | ||
| 207 | {QStringLiteral(u"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"), | ||
| 208 | "uk"}, // Ukrainian | ||
| 209 | {QStringLiteral(u"\u0627\u0644\u0639\u0631\u0628\u064A\u0629"), "ar"}, // Arabic | ||
| 210 | {QStringLiteral(u"\u0641\u0627\u0631\u0633\u06CC"), "fa"}, // Farsi | ||
| 211 | {QStringLiteral(u"\uD55C\uAD6D\uC5B4"), "ko_KR"}, // Korean | ||
| 212 | {QStringLiteral(u"\u65E5\u672C\u8A9E"), "ja_JP"}, // Japanese | ||
| 213 | {QStringLiteral(u"\u7B80\u4F53\u4E2D\u6587"), "zh_CN"}, // Simplified Chinese | ||
| 214 | {QStringLiteral(u"\u7E41\u9AD4\u4E2D\u6587"), "zh_TW"}, // Traditional Chinese | ||
| 215 | // clang-format on | ||
| 216 | }; | ||
| 173 | ui->language_combobox->addItem(tr("<System>"), QString{}); | 217 | ui->language_combobox->addItem(tr("<System>"), QString{}); |
| 174 | ui->language_combobox->addItem(tr("English"), QStringLiteral("en")); | 218 | QDir languages_dir{QStringLiteral(":/languages")}; |
| 175 | QDirIterator it(QStringLiteral(":/languages"), QDirIterator::NoIteratorFlags); | 219 | QStringList language_files = languages_dir.entryList(); |
| 176 | while (it.hasNext()) { | 220 | for (const auto& lang : languages) { |
| 177 | QString locale = it.next(); | 221 | if (QString::fromLatin1(lang.id) == QStringLiteral("en")) { |
| 222 | ui->language_combobox->addItem(lang.name, QStringLiteral("en")); | ||
| 223 | continue; | ||
| 224 | } | ||
| 225 | for (int i = 0; i < language_files.size(); ++i) { | ||
| 226 | QString locale = language_files[i]; | ||
| 227 | locale.truncate(locale.lastIndexOf(QLatin1Char{'.'})); | ||
| 228 | if (QString::fromLatin1(lang.id) == locale) { | ||
| 229 | ui->language_combobox->addItem(lang.name, locale); | ||
| 230 | language_files.removeAt(i); | ||
| 231 | break; | ||
| 232 | } | ||
| 233 | } | ||
| 234 | } | ||
| 235 | // Anything remaining will be at the bottom | ||
| 236 | for (const QString& file : language_files) { | ||
| 237 | LOG_CRITICAL(Frontend, "Unexpected Language File: {}", file.toStdString()); | ||
| 238 | QString locale = file; | ||
| 178 | locale.truncate(locale.lastIndexOf(QLatin1Char{'.'})); | 239 | locale.truncate(locale.lastIndexOf(QLatin1Char{'.'})); |
| 179 | locale.remove(0, locale.lastIndexOf(QLatin1Char{'/'}) + 1); | 240 | const QString language_name = QLocale::languageToString(QLocale(locale).language()); |
| 180 | const QString lang = QLocale::languageToString(QLocale(locale).language()); | 241 | const QString lang = QStringLiteral("%1 [%2]").arg(language_name, locale); |
| 181 | ui->language_combobox->addItem(lang, locale); | 242 | ui->language_combobox->addItem(lang, locale); |
| 182 | } | 243 | } |
| 183 | 244 | ||