需要在app内部加一个切换语言的的功能,切换了语言之后重启app有部分文字翻译没有替换。查了资料之后发现是在application的attachBaseContext中要重新设置resources,参考这个文章
具体实现
application初始化
override fun attachBaseContext(base: Context) {
super.attachBaseContext(attachContext(base))
...
}
设置应用语言
//API24以下和以上不同的初始化方法
fun attachContext(context: Context): Context {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return setAppLanguageApi24(context)
} else {
setAppLanguageLower(context)
}
return context
}
@TargetApi(Build.VERSION_CODES.N)
private fun setAppLanguageApi24(context: Context): Context {
val resources = context.resources
val configuration = resources.configuration
val locale = Locale("ar")//这里要设置成需要改成的语言
val localeList = LocaleList(locale)
LocaleList.setDefault(localeList)
configuration.setLocale(locale)
configuration.setLocales(localeList)
return context.createConfigurationContext(configuration)
}
@SuppressLint("ObsoleteSdkInt")
private fun setAppLanguageLower(context: Context) {
val resources = context.resources
val configuration = resources.configuration
val displayMetrics = resources.displayMetrics
val locale = Locale("ar")//这里要设置成需要改成的语言
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale)
} else {
configuration.locale = locale
}
resources.updateConfiguration(configuration, displayMetrics)
}