From cd16b01f88840d83d2b089c4cac9f6a207d1d503 Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 6 Sep 2019 22:42:05 -0400 Subject: [PATCH] android: settings: Add system language setting. --- .../settings/SettingsFragmentPresenter.java | 5 +++- .../citra_android/utils/SettingsFile.java | 2 ++ src/android/app/src/main/jni/config.cpp | 12 ++++++++ src/android/app/src/main/jni/config.h | 2 ++ src/android/app/src/main/jni/default_ini.h | 5 ++++ src/android/app/src/main/jni/native.cpp | 8 ++--- .../app/src/main/res/values/arrays.xml | 30 +++++++++++++++++++ .../app/src/main/res/values/strings.xml | 3 +- 8 files changed, 61 insertions(+), 6 deletions(-) diff --git a/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentPresenter.java b/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentPresenter.java index fab3120d6..ff1e3dff7 100644 --- a/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentPresenter.java +++ b/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentPresenter.java @@ -139,18 +139,21 @@ public final class SettingsFragmentPresenter { mView.getActivity().setTitle(R.string.preferences_system); Setting region = null; + Setting language = null; Setting systemClock = null; Setting dateTime = null; if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) { region = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_REGION_VALUE); + language = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_LANGUAGE); systemClock = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_INIT_CLOCK); dateTime = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_INIT_TIME); } else { mView.passSettingsToActivity(mSettings); } - sl.add(new SingleChoiceSetting(SettingsFile.KEY_REGION_VALUE, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.region, 0, R.array.regionNames, R.array.regionValues, -1, region)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_REGION_VALUE, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.emulated_region, 0, R.array.regionNames, R.array.regionValues, -1, region)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_LANGUAGE, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.emulated_language, 0, R.array.languageNames, R.array.languageValues, 1, language)); sl.add(new SingleChoiceSetting(SettingsFile.KEY_INIT_CLOCK, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.init_clock, R.string.init_clock_description, R.array.systemClockNames, R.array.systemClockValues, 0, systemClock)); sl.add(new DateTimeSetting(SettingsFile.KEY_INIT_TIME, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.init_time, R.string.init_time_description, "2000-01-01 00:00:01", dateTime)); } diff --git a/src/android/app/src/main/java/org/citra/citra_android/utils/SettingsFile.java b/src/android/app/src/main/java/org/citra/citra_android/utils/SettingsFile.java index 1e78afe81..1aa17b689 100644 --- a/src/android/app/src/main/java/org/citra/citra_android/utils/SettingsFile.java +++ b/src/android/app/src/main/java/org/citra/citra_android/utils/SettingsFile.java @@ -82,6 +82,8 @@ public final class SettingsFile { public static final String KEY_IS_NEW_3DS = "is_new_3ds"; public static final String KEY_REGION_VALUE = "region_value"; + public static final String KEY_LANGUAGE = "language"; + public static final String KEY_INIT_CLOCK = "init_clock"; public static final String KEY_INIT_TIME = "init_time"; diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp index 4279a40c0..170443cdb 100644 --- a/src/android/app/src/main/jni/config.cpp +++ b/src/android/app/src/main/jni/config.cpp @@ -11,6 +11,8 @@ #include "common/file_util.h" #include "common/logging/log.h" #include "common/param_package.h" +#include "core/core.h" +#include "core/hle/service/cfg/cfg.h" #include "core/hle/service/service.h" #include "core/settings.h" #include "input_common/main.h" @@ -60,6 +62,13 @@ static const std::array default_analogs InputManager::N3DS_STICK_C, }}; +void Config::UpdateCFG() { + std::shared_ptr cfg = std::make_shared(); + cfg->SetSystemLanguage(static_cast( + sdl2_config->GetInteger("System", "language", Service::CFG::SystemLanguage::LANGUAGE_EN))); + cfg->UpdateConfigNANDSavegame(); +} + void Config::ReadValues() { // Controls for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { @@ -230,6 +239,9 @@ void Config::ReadValues() { sdl2_config->GetString("WebService", "web_api_url", "https://api.citra-emu.org"); Settings::values.citra_username = sdl2_config->GetString("WebService", "citra_username", ""); Settings::values.citra_token = sdl2_config->GetString("WebService", "citra_token", ""); + + // Update CFG file based on settings + UpdateCFG(); } void Config::Reload() { diff --git a/src/android/app/src/main/jni/config.h b/src/android/app/src/main/jni/config.h index abc90f642..465457856 100644 --- a/src/android/app/src/main/jni/config.h +++ b/src/android/app/src/main/jni/config.h @@ -10,11 +10,13 @@ class INIReader; class Config { +private: std::unique_ptr sdl2_config; std::string sdl2_config_loc; bool LoadINI(const std::string& default_contents = "", bool retry = true); void ReadValues(); + void UpdateCFG(); public: Config(); diff --git a/src/android/app/src/main/jni/default_ini.h b/src/android/app/src/main/jni/default_ini.h index 213e7a75c..3bb3ae915 100644 --- a/src/android/app/src/main/jni/default_ini.h +++ b/src/android/app/src/main/jni/default_ini.h @@ -220,6 +220,11 @@ is_new_3ds = # -1: Auto-select (default), 0: Japan, 1: USA, 2: Europe, 3: Australia, 4: China, 5: Korea, 6: Taiwan region_value = +# The system language that Citra will use during emulation +# 0: Japanese, 1: English (default), 2: French, 3: German, 4: Italian, 5: Spanish, +# 6: Simplified Chinese, 7: Korean, 8: Dutch, 9: Portuguese, 10: Russian, 11: Traditional Chinese +language = + # The clock to use when citra starts # 0: System clock (default), 1: fixed time init_clock = diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index d75b841cf..b83306753 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -126,16 +126,16 @@ static int RunCitra(const std::string& filepath) { Core::System& system{Core::System::GetInstance()}; SCOPE_EXIT({ system.Shutdown(); }); - // Register frontend applets - Frontend::RegisterDefaultApplets(); - system.RegisterSoftwareKeyboard(std::make_shared()); - { // Forces a config reload on game boot, if the user changed settings in the UI Config config; Settings::Apply(); } + // Register frontend applets + Frontend::RegisterDefaultApplets(); + system.RegisterSoftwareKeyboard(std::make_shared()); + InputManager::Init(); SCOPE_EXIT({ InputManager::Shutdown(); }); diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index 77e5626db..2b5f45064 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -34,6 +34,36 @@ 6 + + Japanese (日本語) + English + French (français) + German (Deutsch) + Italian (italiano) + Spanish (español) + Simplified Chinese (简体中文) + Korean (한국어) + Dutch (Nederlands) + Portuguese (português) + Russian (Русский) + Traditional Chinese (正體中文) + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + Europe Japan diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 2e9cdc078..08eb3f1a1 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -52,7 +52,8 @@ System clock starting time override If the \"System clock type\" setting is set to \"Simulated clock\", this changes the fixed date and time to start at. - Emulated region + Emulated region + Emulated language Enable V-Sync