切换语言分为两种
1、切换app内部语言,系统语言不变,不需要系统签名app可以实现的功能
LanguageUtils.applyLanguage(Locale.KOREA, false)
这里的LanguageUtils是工具库Utilcode中的工具
2、切换系统语言,需要系统签名,
fun setSystemLanguage(context: Context, languageCode: String) {
val toLocal = Locale.forLanguageTag(languageCode)
Timber.i("Language: ${toLocal.language} toLocal.script: ${toLocal.script}")
// 设置语言,但国家不能改变
val newLocale = Locale.Builder()
.setLocale(toLocal)
.setLanguage(toLocal.language)
.setScript(toLocal.script)
.build()
LocalePicker.updateLocale(newLocale)
}
无论哪种修改语言后需要重启应用生效,可以在当前Activity中监听并重启应用生效
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
Timber.d("语言变化:${Locale.getDefault().language}")
restartApplication()
}
// 在 Activity 类中添加方法
fun restartApplication() {
val ctx = applicationContext
val packageManager = ctx.packageManager
val intent = packageManager.getLaunchIntentForPackage(ctx.packageName)
val mainIntent = Intent.makeRestartActivityTask(intent?.component)
ctx.startActivity(mainIntent)
Runtime.getRuntime().exit(0)
}