我有一个功能,重写和选择应用程序语言的基础上,系统语言,而你安装一个应用程序。如果你从Android Studio构建你的应用程序(甚至发布构建),这个功能是工作的预期。此外,我可以确认它是从所有Android的Play商店工作,除了Android 10,11和12。
看起来我会根据我的日志正确地选择语言环境,并重写资源配置,但在Activity重新启动后,无论当前设置的系统语言是什么,它都将跳转到英语作为默认值(即使代码中的默认语言环境是正确的-在我的情况下是捷克语(lang code "cs"))。
正如我所说,它是由APK的Google Play版本造成的,而不是来自Android Studio One。
Google Play服务条款是否有任何未记录的更改,即自Android 10以来,如果上传到Play商店,他们会阻止资源配置为只读?
以下是函数:
fun applyLanguage() {
val defaultLocale = startupLocale
val langs = App.languages
val langCode = app.languageIndex.let {
if (it == 0) {
if(langs.any{ l -> l.first==defaultLocale.language }) {
defaultLocale.language
}else {
langs[App.LANGUAGE_INIT_DEFAULT].first
}
} else {
langs[it - 1].first
}
}
App.log("LangChange: MainActivity -> applyLanguage (langCodeSet) $langCode")
app.sysLog("LangChange: MainActivity -> applyLanguage (langCodeSet) $langCode")
if (resources.configuration.locale.language != langCode) {
val l = if (langCode == defaultLocale.language) {
defaultLocale
} else
Locale(langCode, "", "")
arrayOf(resources, app.resources).forEach { res ->
val cfg = res.configuration
cfg.locale = l
res.updateConfiguration(cfg, res.displayMetrics)
}
Locale.setDefault(l)
}
app.langCode = if (langs.any { it.first == langCode }) langCode else "cs"
App.log("LangChange: MainActivity -> applyLanguage (langCode) ${app.langCode}")
app.sysLog("LangChange: MainActivity -> applyLanguage (langCode) ${app.langCode}")
}
它的功能很简单,我有一个可用语言的数组(在我的情况下,根据可用资源,它是3个-翻译),如果默认的系统语言是其中之一,我会设置应用程序的语言,如果它不是我会设置捷克语为默认。所以,如果我选择英语,我应该有英语的应用程序,如果我选择德语,我应该有德语的应用程序,如果我选择捷克语,我应该有捷克语的应用程序,如果我选择任何其他语言(例如法语),它应该设置为捷克语,因为有一个备用方案。
此外,应用程序设置中的语言选择器也使用了相同的函数,这是相同的问题。默认区域设置为langCode "cs",但如果我从选择器中选择任何一种语言,它将始终将资源设置为默认状态(string.xml文件),当然是英语。
另一个例子,我在设备设置中设置默认语言为法语。我从商店下载了一个应用程序,它正确地将资源区域设置重写为捷克语(语言代码"cs")。但应用程序仍然是英语。
因此,resources.configuration.locale.language
在活动重新启动后为"cs",但系统完全忽略了此资源配置,并且系统选择了默认资源xml-string.xml
(英语)。
所以看起来你不能再重写资源配置了,或者从技术上说你可以,但是这个改变的资源配置被系统完全忽略了。
- 更新**
附加调试。
- Android 10:**默认语言(法语):应用程序已安装,默认语言设置为英语(假设为捷克语)。如果您在设置中更改语言,无论您选择什么语言,它都将始终设置为英语。
- Android 11:**默认语言(法语):应用程序已安装,默认语言设置为捷克语(正确)。如果您在设置中更改您的语言,它会变得有趣:如果你改成英语,应用程序就会切换到英语。如果你改回捷克语,应用程序就会切换到捷克语。如果你改成德语,应用程序就会切换到英语(我不知道怎么回事)。
- Android 12:**默认语言(法语):应用程序已安装,默认语言设置为英语(假设为捷克语)。如果您更改为英语,应用程序将切换为英语。如果您更改回捷克语,应用程序将切换为英语。如果您更改为德语,应用程序将切换为德语。
- Android 9、8、7、6(可能更低)**-按预期工作。
我不知道发生了什么事,但它有点有趣。
1条答案
按热度按时间holgip5t1#
根据您的描述,我了解到您的问题只发生在Google Play应用程序版本中。我也遇到过类似的问题,我所做的只是添加了以下设置:
构建.gradle(.app)在安卓标签内