diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 97ef07bf98..e09f93b3fd 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp @@ -649,7 +649,8 @@ void IApplicationFunctions::GetDesiredLanguage(Kernel::HLERequestContext& ctx) { // TODO(bunnei): This should be configurable IPC::ResponseBuilder rb{ctx, 4}; rb.Push(RESULT_SUCCESS); - rb.Push(static_cast(Service::Set::LanguageCode::EN_US)); + rb.Push( + static_cast(Service::Set::available_language_codes[Settings::values.language_index])); LOG_DEBUG(Service_AM, "called"); } diff --git a/src/core/hle/service/set/set.cpp b/src/core/hle/service/set/set.cpp index c1753ca4cb..2ecbe6e5df 100644 --- a/src/core/hle/service/set/set.cpp +++ b/src/core/hle/service/set/set.cpp @@ -8,29 +8,10 @@ #include "core/hle/kernel/client_port.h" #include "core/hle/kernel/client_session.h" #include "core/hle/service/set/set.h" +#include "core/settings.h" namespace Service::Set { -constexpr std::array available_language_codes = {{ - LanguageCode::JA, - LanguageCode::EN_US, - LanguageCode::FR, - LanguageCode::DE, - LanguageCode::IT, - LanguageCode::ES, - LanguageCode::ZH_CN, - LanguageCode::KO, - LanguageCode::NL, - LanguageCode::PT, - LanguageCode::RU, - LanguageCode::ZH_TW, - LanguageCode::EN_GB, - LanguageCode::FR_CA, - LanguageCode::ES_419, - LanguageCode::ZH_HANS, - LanguageCode::ZH_HANT, -}}; - void SET::GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx) { ctx.WriteBuffer(available_language_codes); @@ -52,9 +33,9 @@ void SET::GetAvailableLanguageCodeCount(Kernel::HLERequestContext& ctx) { void SET::GetLanguageCode(Kernel::HLERequestContext& ctx) { IPC::ResponseBuilder rb{ctx, 4}; rb.Push(RESULT_SUCCESS); - rb.Push(static_cast(LanguageCode::EN_US)); + rb.Push(static_cast(available_language_codes[Settings::values.language_index])); - LOG_DEBUG(Service_SET, "called"); + LOG_DEBUG(Service_SET, "called {}", Settings::values.language_index); } SET::SET() : ServiceFramework("set") { diff --git a/src/core/hle/service/set/set.h b/src/core/hle/service/set/set.h index ff3772d457..331a156ce0 100644 --- a/src/core/hle/service/set/set.h +++ b/src/core/hle/service/set/set.h @@ -29,6 +29,26 @@ enum class LanguageCode : u64 { ZH_HANT = 0x00746E61482D687A, }; +constexpr std::array available_language_codes = {{ + LanguageCode::JA, + LanguageCode::EN_US, + LanguageCode::FR, + LanguageCode::DE, + LanguageCode::IT, + LanguageCode::ES, + LanguageCode::ZH_CN, + LanguageCode::KO, + LanguageCode::NL, + LanguageCode::PT, + LanguageCode::RU, + LanguageCode::ZH_TW, + LanguageCode::EN_GB, + LanguageCode::FR_CA, + LanguageCode::ES_419, + LanguageCode::ZH_HANS, + LanguageCode::ZH_HANT, +}}; + class SET final : public ServiceFramework { public: explicit SET(); diff --git a/src/core/settings.h b/src/core/settings.h index f4fb443476..12c0f04d1d 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -113,6 +113,7 @@ struct Values { // System bool use_docked_mode; std::string username; + int language_index; // Controls std::array buttons; diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 927584f4ee..19a0529e44 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -99,6 +99,7 @@ void Config::ReadValues() { qt_config->beginGroup("System"); Settings::values.use_docked_mode = qt_config->value("use_docked_mode", false).toBool(); Settings::values.username = qt_config->value("username", "yuzu").toString().toStdString(); + Settings::values.language_index = qt_config->value("language_index", 1).toInt(); qt_config->endGroup(); qt_config->beginGroup("Miscellaneous"); @@ -203,6 +204,7 @@ void Config::SaveValues() { qt_config->beginGroup("System"); qt_config->setValue("use_docked_mode", Settings::values.use_docked_mode); qt_config->setValue("username", QString::fromStdString(Settings::values.username)); + qt_config->setValue("language_index", Settings::values.language_index); qt_config->endGroup(); qt_config->beginGroup("Miscellaneous"); diff --git a/src/yuzu/configuration/configure_system.cpp b/src/yuzu/configuration/configure_system.cpp index 0726d3e25f..9be2c939c0 100644 --- a/src/yuzu/configuration/configure_system.cpp +++ b/src/yuzu/configuration/configure_system.cpp @@ -40,6 +40,7 @@ ConfigureSystem::~ConfigureSystem() {} void ConfigureSystem::setConfiguration() { enabled = !Core::System::GetInstance().IsPoweredOn(); ui->edit_username->setText(QString::fromStdString(Settings::values.username)); + ui->combo_language->setCurrentIndex(Settings::values.language_index); } void ConfigureSystem::ReadSystemSettings() {} @@ -48,6 +49,7 @@ void ConfigureSystem::applyConfiguration() { if (!enabled) return; Settings::values.username = ui->edit_username->text().toStdString(); + Settings::values.language_index = ui->combo_language->currentIndex(); Settings::Apply(); } diff --git a/src/yuzu/configuration/configure_system.ui b/src/yuzu/configuration/configure_system.ui index 8caf496239..a001a8d9fe 100644 --- a/src/yuzu/configuration/configure_system.ui +++ b/src/yuzu/configuration/configure_system.ui @@ -164,7 +164,7 @@ - Simplified Chinese (简体中文) + Chinese @@ -187,6 +187,31 @@ Russian (Русский) + + + Taiwanese + + + + + British English + + + + + Canadian French + + + + + Latin American Spanish + + + + + Simplified Chinese + + Traditional Chinese (正體中文) diff --git a/src/yuzu_cmd/default_ini.h b/src/yuzu_cmd/default_ini.h index 567f23417e..3780e81bd0 100644 --- a/src/yuzu_cmd/default_ini.h +++ b/src/yuzu_cmd/default_ini.h @@ -166,6 +166,16 @@ use_virtual_sd = # 1: Yes, 0 (default): No use_docked_mode = +# Sets the account username, max length is 32 characters +# yuzu (default) +username = + +# Sets the systems language index +# 0: Japanese, 1: English (default), 2: French, 3: German, 4: Italian, 5: Spanish, 6: Chinese, +# 7: Korean, 8: Dutch, 9: Portuguese, 10: Russian, 11: Taiwanese, 12: British English, 13: Canadian French, +# 14: Latin American Spanish, 15: Simplified Chinese, 16: Traditional Chinese +language_index = + # The system region that yuzu will use during emulation # -1: Auto-select (default), 0: Japan, 1: USA, 2: Europe, 3: Australia, 4: China, 5: Korea, 6: Taiwan region_value =