From c56d30d33f274568189ae7adfc52501aef46aa17 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Tue, 21 May 2024 07:56:17 +0200 Subject: [PATCH] added option to change language in-app --- .../java/xdsopl/robot36/MainActivity.java | 29 +++++++++++++++++++ .../res/drawable/baseline_language_24.xml | 5 ++++ app/src/main/res/menu/menu_main.xml | 20 +++++++++++++ app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 5 ++++ 7 files changed, 62 insertions(+) create mode 100644 app/src/main/res/drawable/baseline_language_24.xml diff --git a/app/src/main/java/xdsopl/robot36/MainActivity.java b/app/src/main/java/xdsopl/robot36/MainActivity.java index d5e2978..a2e331d 100644 --- a/app/src/main/java/xdsopl/robot36/MainActivity.java +++ b/app/src/main/java/xdsopl/robot36/MainActivity.java @@ -44,6 +44,7 @@ import androidx.appcompat.widget.ShareActionProvider; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.graphics.Insets; +import androidx.core.os.LocaleListCompat; import androidx.core.view.MenuItemCompat; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; @@ -75,6 +76,7 @@ public class MainActivity extends AppCompatActivity { private Decoder decoder; private Menu menu; private String currentMode; + private String language; private int recordRate; private int recordChannel; private int audioSource; @@ -355,6 +357,7 @@ public class MainActivity extends AppCompatActivity { state.putInt("recordRate", recordRate); state.putInt("recordChannel", recordChannel); state.putInt("audioSource", audioSource); + state.putString("language", language); super.onSaveInstanceState(state); } @@ -365,6 +368,7 @@ public class MainActivity extends AppCompatActivity { edit.putInt("recordRate", recordRate); edit.putInt("recordChannel", recordChannel); edit.putInt("audioSource", audioSource); + edit.putString("language", language); edit.apply(); } @@ -373,19 +377,23 @@ public class MainActivity extends AppCompatActivity { final int defaultSampleRate = 44100; final int defaultChannelSelect = 0; final int defaultAudioSource = MediaRecorder.AudioSource.MIC; + final String defaultLanguage = "en-US"; if (state == null) { SharedPreferences pref = getPreferences(Context.MODE_PRIVATE); AppCompatDelegate.setDefaultNightMode(pref.getInt("nightMode", AppCompatDelegate.getDefaultNightMode())); recordRate = pref.getInt("recordRate", defaultSampleRate); recordChannel = pref.getInt("recordChannel", defaultChannelSelect); audioSource = pref.getInt("audioSource", defaultAudioSource); + language = pref.getString("language", defaultLanguage); } else { AppCompatDelegate.setDefaultNightMode(state.getInt("nightMode", AppCompatDelegate.getDefaultNightMode())); recordRate = state.getInt("recordRate", defaultSampleRate); recordChannel = state.getInt("recordChannel", defaultChannelSelect); audioSource = state.getInt("audioSource", defaultAudioSource); + language = state.getString("language", defaultLanguage); } super.onCreate(state); + setLanguage(language); Configuration config = getResources().getConfiguration(); EdgeToEdge.enable(this); setContentView(config.orientation == Configuration.ORIENTATION_LANDSCAPE ? R.layout.activity_main_land : R.layout.activity_main); @@ -582,9 +590,30 @@ public class MainActivity extends AppCompatActivity { showTextPage(getString(R.string.about_text, BuildConfig.VERSION_NAME)); return true; } + if (id == R.id.action_english) { + setLanguage("en-US"); + return true; + } + if (id == R.id.action_simplified_chinese) { + setLanguage("zh-CN"); + return true; + } + if (id == R.id.action_russian) { + setLanguage("ru"); + return true; + } + if (id == R.id.action_german) { + setLanguage("de"); + return true; + } return super.onOptionsItemSelected(item); } + private void setLanguage(String language) { + this.language = language; + AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(language)); + } + private void storeScope() { int width = scopeBuffer.width; int height = scopeBuffer.height / 2; diff --git a/app/src/main/res/drawable/baseline_language_24.xml b/app/src/main/res/drawable/baseline_language_24.xml new file mode 100644 index 0000000..643d3fc --- /dev/null +++ b/app/src/main/res/drawable/baseline_language_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 5f158f3..c95404c 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -3,6 +3,26 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="xdsopl.robot36.MainActivity"> + + + + + + + + + Sprache Teilen Schirm Speichern Modus umschalten diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 10474f8..93668fc 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,5 +1,6 @@ + Язык Поделиться Сохранить экран Зафиксировать режим diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1ecdfc4..08dfca8 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1,5 +1,6 @@ + 语言 分享 保存图像 切换模式 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3a34c6d..36a6159 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -25,6 +25,11 @@ 32 kHz 44.1 kHz 48 kHz + English + 简体中文 + Русский + Deutsch + Language Share Store Scope Toggle Mode