[Bug]:android15中设置印度尼西亚语无效
框架版本【必填】
9.5
问题描述【必填】
我在项目中使用的是 in 设置印度尼西亚语, 添加的语言字符串也是 res/values-in/strings.xml,但是在 android15 中设置印度尼西亚语后发现设置无效,排查一下,发现调用 MultiLanguages.getAppLanguage(Context context) 返回的 Locale.language 是 id。
网上查了一下在 Android 语言和区域设置中,印度尼西亚语的简写可以是 in 或 id
in是 ISO 639-1 旧标准(1989 年之前)的印度尼西亚语代码id是 ISO 639-1 现行标准(1990 年之后)的印度尼西亚语代码
然后我使用新的 id 和 res/values-id/strings.xml,在 Android 15 以下系统中,设置语言为 id 后, 调用MultiLanguages.getAppLanguage(Context context) 返回的 Locale.language 还是 in,而且语言变成的是英语,估计还是按照values-in 目录来查找
复现步骤【必填】
使用 MultiLanguages.setAppLanguage 设置印度尼西亚语
是否必现【必填】
是
项目 targetSdkVersion【必填】
35
出现问题的手机信息【必填】
google pixel6 和google pixel7
出现问题的安卓版本【必填】
android15, android14
问题信息的来源渠道【必填】
自己遇到的
是部分机型还是所有机型都会出现【必答】
所有机型
框架最新的版本是否存在这个问题【必答】
是
框架文档是否提及了该问题【必答】
否
是否已经查阅框架文档但还未能解决的【必答】
是
issue 列表中是否有人曾提过类似的问题【必答】
否
是否已经搜索过了 issue 列表但还未能解决的【必答】
是
是否可以通过 Demo 来复现该问题【必答】
是
提供报错堆栈
提供截图或视频
No response
提供解决方案
No response
你在 setAppLanguage 方法传入的参数是什么?
你提供一下这块的文档或者资料给到我
/**
* 设置语言
*/
fun Activity.changeLanguage(language: String = ""): Boolean {
Log.d("changeLanguage", "Activity: $this")
val locale: Locale = if (language == "zh-rTW") {
Locale.TRADITIONAL_CHINESE
}
else {
Locale(language)
}
val bSet = MultiLanguages.setAppLanguage(this, locale)
return bSet
}
setAppLanguage时调用的是这个方法,然后传了"in"
我是在chatGPT中询问"in"和"id"的区别
https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes
我最近研究了一下这个问题,发现这个问题在 Android 14 运行不会出现,在 Android 15 运行会出现,但也仅限于 targetSdk >= 35 的时候才会,这个问题的根源是谷歌程序员在 Locale 类中强行修改了 language 字段的赋值,并且没有选项可供开发者选择,暂时的解决方案是将 in 语种资源复制一份到 id 上面,然后让后端接口配合兼容 in 和 id 这两种语种的情况。
补充一下受影响的语种列表