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 @@
+
+