summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/yuzu/configuration/configure_ui.cpp73
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
172void ConfigureUi::InitializeLanguageComboBox() { 173void 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