diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/YuzuApplication.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/YuzuApplication.kt index 55282cad1c..52fdee6692 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/YuzuApplication.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/YuzuApplication.kt @@ -16,16 +16,12 @@ import java.io.FileOutputStream import java.security.KeyStore import javax.net.ssl.TrustManagerFactory import javax.net.ssl.X509TrustManager -import android.content.res.Configuration -import android.os.LocaleList -import org.yuzu.yuzu_emu.features.settings.model.IntSetting import org.yuzu.yuzu_emu.utils.DirectoryInitialization import org.yuzu.yuzu_emu.utils.DocumentsTree import org.yuzu.yuzu_emu.utils.GpuDriverHelper import org.yuzu.yuzu_emu.utils.Log import org.yuzu.yuzu_emu.utils.PowerStateUpdater import org.yuzu.yuzu_emu.utils.ControllerNavigationGlobalHook -import java.util.Locale fun Context.getPublicFilesDir(): File = getExternalFilesDir(null) ?: filesDir @@ -84,38 +80,5 @@ class YuzuApplication : Application() { val appContext: Context get() = application.applicationContext - - private val LANGUAGE_CODES = arrayOf( - "system", "en", "es", "fr", "de", "it", "pt", "pt-BR", "ru", "ja", "ko", - "zh-CN", "zh-TW", "pl", "cs", "nb", "hu", "uk", "vi", "id", "ar", "ckb", "fa", "he", "sr" - ) - - fun applyLanguage(context: Context): Context { - val languageIndex = IntSetting.APP_LANGUAGE.getInt() - val langCode = if (languageIndex in LANGUAGE_CODES.indices) { - LANGUAGE_CODES[languageIndex] - } else { - "system" - } - - if (langCode == "system") { - return context - } - - val locale = when { - langCode.contains("-") -> { - val parts = langCode.split("-") - Locale.Builder().setLanguage(parts[0]).setRegion(parts[1]).build() - } - else -> Locale.Builder().setLanguage(langCode).build() - } - - Locale.setDefault(locale) - - val config = Configuration(context.resources.configuration) - config.setLocales(LocaleList(locale)) - - return context.createConfigurationContext(config) - } } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt index aaabcc95be..85be0004a1 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt @@ -115,10 +115,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener, InputManager mainHandler.postDelayed(romSwapStopTimeoutRunnable, ROM_SWAP_STOP_TIMEOUT_MS) } - override fun attachBaseContext(base: Context) { - super.attachBaseContext(YuzuApplication.applyLanguage(base)) - } - override fun onCreate(savedInstanceState: Bundle?) { Log.gameLaunched = true ThemeHelper.setTheme(this) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt index ea31692fbf..ccc3f098d0 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt @@ -38,7 +38,6 @@ enum class IntSetting(override val key: String) : AbstractIntSetting { THEME("theme"), THEME_MODE("theme_mode"), STATIC_THEME_COLOR("static_theme_color"), - APP_LANGUAGE("app_language"), OVERLAY_SCALE("control_scale"), OVERLAY_OPACITY("control_opacity"), LOCK_DRAWER("lock_drawer"), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt index 3f38831a17..80b434319f 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt @@ -997,15 +997,6 @@ abstract class SettingsItem( descriptionId = R.string.enable_qlaunch_button_description, ) ) - put( - SingleChoiceSetting( - IntSetting.APP_LANGUAGE, - titleId = R.string.app_language, - descriptionId = R.string.app_language_description, - choicesId = R.array.appLanguageNames, - valuesId = R.array.appLanguageValues - ) - ) put( SwitchSetting( BooleanSetting.RENDERER_DEBUG, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt index ad1ecba64c..7103684f11 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt @@ -6,8 +6,6 @@ package org.yuzu.yuzu_emu.features.settings.ui -import android.content.Context -import org.yuzu.yuzu_emu.YuzuApplication import android.os.Bundle import android.view.View import android.view.ViewGroup.MarginLayoutParams @@ -29,7 +27,6 @@ import org.yuzu.yuzu_emu.features.input.NativeInput import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile import org.yuzu.yuzu_emu.fragments.ResetSettingsDialogFragment import org.yuzu.yuzu_emu.utils.* -import org.yuzu.yuzu_emu.utils.collect class SettingsActivity : AppCompatActivity() { private lateinit var binding: ActivitySettingsBinding @@ -38,10 +35,6 @@ class SettingsActivity : AppCompatActivity() { private val settingsViewModel: SettingsViewModel by viewModels() - override fun attachBaseContext(base: Context) { - super.attachBaseContext(YuzuApplication.applyLanguage(base)) - } - override fun onCreate(savedInstanceState: Bundle?) { ThemeHelper.setTheme(this) @@ -148,16 +141,6 @@ class SettingsActivity : AppCompatActivity() { NativeConfig.savePerGameConfig() NativeConfig.unloadPerGameConfig() } - - if (settingsViewModel.shouldRecreateForLanguageChange.value) { - settingsViewModel.setShouldRecreateForLanguageChange(false) - val relaunchIntent = packageManager?.getLaunchIntentForPackage(packageName) - if (relaunchIntent != null) { - relaunchIntent.addFlags(android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK or android.content.Intent.FLAG_ACTIVITY_NEW_TASK) - startActivity(relaunchIntent) - android.os.Process.killProcess(android.os.Process.myPid()) - } - } } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt index 8d47db94e0..9513d8e36a 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt @@ -482,14 +482,6 @@ class SettingsAdapter( position ).show(fragment.childFragmentManager, SettingsDialogFragment.TAG) - // reset language if detected - if (item.setting.key == "app_language") { - // recreate page apply language change instantly - fragment.requireActivity().recreate() - - settingsViewModel.setShouldRecreateForLanguageChange(true) - } - return true } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt index 3ab864f906..a842d3b88a 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt @@ -387,12 +387,6 @@ class SettingsDialogFragment : DialogFragment(), DialogInterface.OnClickListener ) { settingsViewModel.setShouldReloadSettingsList(true) } - - if (scSetting.setting.key == "app_language") { - settingsViewModel.setShouldRecreateForLanguageChange(true) - // recreate page apply language change instantly - requireActivity().recreate() - } } is StringSingleChoiceSetting -> { diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index ca282ba159..e5d7ec243a 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -1345,10 +1345,8 @@ class SettingsFragmentPresenter( } } - add(HeaderSetting(R.string.app_settings)) - add(IntSetting.APP_LANGUAGE.key) - if (NativeLibrary.isUpdateCheckerEnabled()) { + add(HeaderSetting(R.string.app_settings)) add(BooleanSetting.ENABLE_UPDATE_CHECKS.key) } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsViewModel.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsViewModel.kt index b1914c3169..b83d6ef3ad 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsViewModel.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsViewModel.kt @@ -1,6 +1,3 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -// SPDX-License-Identifier: GPL-3.0-or-later - // SPDX-FileCopyrightText: 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -57,9 +54,6 @@ class SettingsViewModel : ViewModel() { private val _shouldShowResetInputDialog = MutableStateFlow(false) val shouldShowResetInputDialog = _shouldShowResetInputDialog.asStateFlow() - private val _shouldRecreateForLanguageChange = MutableStateFlow(false) - val shouldRecreateForLanguageChange = _shouldRecreateForLanguageChange.asStateFlow() - private val _shouldShowPathPicker = MutableStateFlow(false) val shouldShowPathPicker = _shouldShowPathPicker.asStateFlow() @@ -118,10 +112,6 @@ class SettingsViewModel : ViewModel() { _shouldShowResetInputDialog.value = value } - fun setShouldRecreateForLanguageChange(value: Boolean) { - _shouldRecreateForLanguageChange.value = value - } - fun setShouldShowPathPicker(value: Boolean) { _shouldShowPathPicker.value = value } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt index 1da275ab87..3d7abf9bf0 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt @@ -4,7 +4,6 @@ package org.yuzu.yuzu_emu.ui.main import android.content.Intent -import android.content.Context import android.net.Uri import android.os.Bundle import android.view.View @@ -71,10 +70,6 @@ class MainActivity : AppCompatActivity(), ThemeProvider { private val CHECKED_DECRYPTION = "CheckedDecryption" private var checkedDecryption = false - override fun attachBaseContext(base: Context) { - super.attachBaseContext(YuzuApplication.applyLanguage(base)) - } - override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() splashScreen.setKeepOnScreenCondition { !DirectoryInitialization.areDirectoriesReady } diff --git a/src/android/app/src/main/jni/android_settings.h b/src/android/app/src/main/jni/android_settings.h index 7cc3ad22d5..649c32339c 100644 --- a/src/android/app/src/main/jni/android_settings.h +++ b/src/android/app/src/main/jni/android_settings.h @@ -59,7 +59,6 @@ namespace AndroidSettings { Settings::Setting static_theme_color{linkage, 0, "static_theme_color", Settings::Category::Android}; Settings::Setting black_backgrounds{linkage, false, "black_backgrounds", Settings::Category::Android}; - Settings::Setting app_language{linkage, 0, "app_language", Settings::Category::Android}; Settings::Setting enable_update_checks{linkage, true, "enable_update_checks", Settings::Category::Android}; Settings::Setting enable_folder_button{linkage, true, "enable_folder_button", diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index b3aed5758c..bbfd75c31a 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -409,62 +409,6 @@ 2 - - @string/app_language_system - @string/app_language_english - @string/app_language_spanish - @string/app_language_french - @string/app_language_german - @string/app_language_italian - @string/app_language_portuguese - @string/app_language_brazilian_portuguese - @string/app_language_russian - @string/app_language_japanese - @string/app_language_korean - @string/app_language_simplified_chinese - @string/app_language_traditional_chinese - @string/app_language_polish - @string/app_language_czech - @string/app_language_norwegian - @string/app_language_hungarian - @string/app_language_ukrainian - @string/app_language_vietnamese - @string/app_language_indonesian - @string/app_language_arabic - @string/app_language_central_kurdish - @string/app_language_persian - @string/app_language_hebrew - @string/app_language_serbian - @string/app_language_thai - - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - - @string/auto @string/sdl3 diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 730f6bbade..b717dbdd55 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -1275,42 +1275,6 @@ Black backgrounds When using the dark theme, apply black backgrounds. - - Folder - Show the button to add game folders - QLaunch - Show the button to launch QLaunch - - - App Language - Change the language of the app interface - Follow System - English - Español - Français - Deutsch - Italiano - Português - Português do Brasil - Русский - 日本語 - 한국어 - 简体中文 - 繁體中文 - Polski - Čeština - Norsk bokmål - Magyar - Українська - Tiếng Việt - Bahasa Indonesia - العربية - کوردیی ناوەندی - فارسی - עברית - Српски - แบบไทย - Theme Color Eden