Android 应用内切换语言,部分翻译没有替换

256 阅读1分钟

需要在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)
}