diff --git a/android/app/src/main/java/com/github/stenzek/duckstation/AndroidHostInterface.java b/android/app/src/main/java/com/github/stenzek/duckstation/AndroidHostInterface.java index b0713ba47..71057e3b9 100644 --- a/android/app/src/main/java/com/github/stenzek/duckstation/AndroidHostInterface.java +++ b/android/app/src/main/java/com/github/stenzek/duckstation/AndroidHostInterface.java @@ -9,6 +9,7 @@ import android.widget.Toast; import java.io.IOException; import java.io.InputStream; +import java.util.Locale; public class AndroidHostInterface { public final static int DISPLAY_ALIGNMENT_TOP_OR_LEFT = 0; diff --git a/android/app/src/main/java/com/github/stenzek/duckstation/MainActivity.java b/android/app/src/main/java/com/github/stenzek/duckstation/MainActivity.java index 536546dbc..c0af5169a 100644 --- a/android/app/src/main/java/com/github/stenzek/duckstation/MainActivity.java +++ b/android/app/src/main/java/com/github/stenzek/duckstation/MainActivity.java @@ -6,6 +6,8 @@ import android.content.ClipboardManager; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.util.Log; @@ -30,6 +32,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.HashSet; +import java.util.Locale; import java.util.Set; public class MainActivity extends AppCompatActivity { @@ -42,6 +45,25 @@ public class MainActivity extends AppCompatActivity { private ListView mGameListView; private boolean mHasExternalStoragePermissions = false; + private void setLanguage() { + String language = PreferenceManager.getDefaultSharedPreferences(this).getString("Main/Language", "none"); + if (language == null || language.equals("none")) { + return; + } + + String[] parts = language.split("-"); + if (parts.length < 2) + return; + + Locale locale = new Locale(parts[0], parts[1]); + Locale.setDefault(locale); + + Resources res = getResources(); + Configuration config = res.getConfiguration(); + config.setLocale(locale); + res.updateConfiguration(config, res.getDisplayMetrics()); + } + private boolean shouldResumeStateByDefault() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); return prefs.getBoolean("Main/SaveStateOnExit", true); @@ -59,6 +81,7 @@ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setLanguage(); setContentView(R.layout.activity_main); Toolbar toolbar = findViewById(R.id.toolbar); diff --git a/android/app/src/main/res/values/arrays.xml b/android/app/src/main/res/values/arrays.xml index 0f734ae9b..9da976715 100644 --- a/android/app/src/main/res/values/arrays.xml +++ b/android/app/src/main/res/values/arrays.xml @@ -421,4 +421,16 @@ portrait landscape + + Use Device Setting + English + Portuguese (pt) in Brazil (BR) + Italian (it) + + + none + en-EN + pt-rBR + it-IT + diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index d432de9c3..a236e4d4a 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -151,4 +151,5 @@ Copy Threaded GPU Rendering Uses a second thread for drawing graphics. Currently only available for the software renderer, but can provide a significant speed improvement, and is safe to use. + Language (restart to apply) diff --git a/android/app/src/main/res/xml/advanced_preferences.xml b/android/app/src/main/res/xml/advanced_preferences.xml index 91411d2a3..034b2b425 100644 --- a/android/app/src/main/res/xml/advanced_preferences.xml +++ b/android/app/src/main/res/xml/advanced_preferences.xml @@ -15,6 +15,14 @@ --> +