diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 88ca67440..d288f7af3 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -5,6 +5,7 @@ **2020/08/13** * 添加亮度调节控件显示开关 +* 添加应用内语言切换 **2020/08/12** * 增加了Content Provider 接口支持 by [w568w](https://github.com/w568w) diff --git a/app/src/main/java/io/legado/app/base/BaseActivity.kt b/app/src/main/java/io/legado/app/base/BaseActivity.kt index e0de2b618..0574813a2 100644 --- a/app/src/main/java/io/legado/app/base/BaseActivity.kt +++ b/app/src/main/java/io/legado/app/base/BaseActivity.kt @@ -29,6 +29,10 @@ abstract class BaseActivity( ) : AppCompatActivity(), CoroutineScope by MainScope() { + override fun attachBaseContext(newBase: Context) { + super.attachBaseContext(LanguageUtils.setConfiguration(newBase)) + } + override fun onCreateView( parent: View?, name: String, diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index 059bb0382..a4a9572bd 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -2,6 +2,7 @@ package io.legado.app.constant object PreferKey { const val versionCode = "versionCode" + const val language = "language" const val themeMode = "themeMode" const val hideStatusBar = "hideStatusBar" const val clickTurnPage = "clickTurnPage" diff --git a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt index 0922cde84..e95414af2 100644 --- a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt @@ -117,6 +117,9 @@ class OtherConfigFragment : BasePreferenceFragment(), ) PreferKey.replaceEnableDefault -> AppConfig.replaceEnableDefault = App.INSTANCE.getPrefBoolean(PreferKey.replaceEnableDefault, true) + PreferKey.language -> { + postEvent(EventBus.RECREATE, "") + } } } diff --git a/app/src/main/java/io/legado/app/utils/LanguageUtils.kt b/app/src/main/java/io/legado/app/utils/LanguageUtils.kt new file mode 100644 index 000000000..67afb05f2 --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/LanguageUtils.kt @@ -0,0 +1,51 @@ +package io.legado.app.utils + +import android.content.Context +import android.content.res.Configuration +import android.content.res.Resources +import android.os.Build +import io.legado.app.constant.PreferKey +import java.util.* + + +object LanguageUtils { + + /** + * 设置语言 + */ + fun setConfiguration(context: Context): Context { + val resources: Resources = context.resources + val targetLocale: Locale = when (context.getPrefString(PreferKey.language)) { + "zh" -> Locale.CHINESE + "tw" -> Locale.TRADITIONAL_CHINESE + "en" -> Locale.ENGLISH + else -> getSystemLocale() + } + val configuration: Configuration = resources.configuration + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + configuration.setLocale(targetLocale) + context.createConfigurationContext(configuration) + } else { + @Suppress("DEPRECATION") + configuration.locale = targetLocale + @Suppress("DEPRECATION") + resources.updateConfiguration(configuration, resources.displayMetrics) + context + } + } + + + /** + * 当前系统语言 + */ + private fun getSystemLocale(): Locale { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //7.0有多语言设置获取顶部的语言 + Resources.getSystem().configuration.locales.get(0) + } else { + @Suppress("DEPRECATION") + Resources.getSystem().configuration.locale + } + } + + +} \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/arrays.xml b/app/src/main/res/values-zh-rHK/arrays.xml index f3a1dc0f7..a11c1cb68 100644 --- a/app/src/main/res/values-zh-rHK/arrays.xml +++ b/app/src/main/res/values-zh-rHK/arrays.xml @@ -64,4 +64,11 @@ A屏黑 + + 跟随系统 + 简体中文 + 繁体中文 + 英文 + + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 2e47d7132..bcc554a0c 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -742,4 +742,5 @@ 格式不对 错误 显示亮度调节控件 + 语言 diff --git a/app/src/main/res/values-zh-rTW/arrays.xml b/app/src/main/res/values-zh-rTW/arrays.xml index add52f533..837da7471 100644 --- a/app/src/main/res/values-zh-rTW/arrays.xml +++ b/app/src/main/res/values-zh-rTW/arrays.xml @@ -121,4 +121,11 @@ A屏黑 + + 跟随系统 + 简体中文 + 繁体中文 + 英文 + + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 684041caf..d892b7952 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -742,5 +742,6 @@ 格式不对 错误 显示亮度调节控件 + 语言 diff --git a/app/src/main/res/values-zh/arrays.xml b/app/src/main/res/values-zh/arrays.xml index 04138f7c2..3ac5c3cd4 100644 --- a/app/src/main/res/values-zh/arrays.xml +++ b/app/src/main/res/values-zh/arrays.xml @@ -121,4 +121,11 @@ A屏黑 + + 跟随系统 + 简体中文 + 繁体中文 + 英文 + + \ No newline at end of file diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 9b40b42c4..4d7109de8 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -742,4 +742,5 @@ 格式不对 错误 显示亮度调节控件 + 语言 diff --git a/app/src/main/res/values/array_values.xml b/app/src/main/res/values/array_values.xml index b6b32fa5b..bdaf1ef49 100644 --- a/app/src/main/res/values/array_values.xml +++ b/app/src/main/res/values/array_values.xml @@ -48,4 +48,11 @@ 3 + + auto + zh + tw + en + + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 6910aa52e..0ff78f4bf 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -121,4 +121,11 @@ A屏黑 + + 跟随系统 + 简体中文 + 繁体中文 + 英文 + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b501e6f54..e56636895 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -743,5 +743,6 @@ 格式不对 错误 显示亮度调节控件 + 语言 \ No newline at end of file diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index 7856b6455..877de80cc 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -2,6 +2,13 @@ + +