mar*_*337 5 android android-resources google-play
我有一个功能可以在您安装应用程序时根据系统语言重写和选择应用程序语言。如果您从 Android Studio 构建应用程序(甚至发布版本),此功能将按预期工作。另外,我可以确认它可以在除 Android 10、11 和 12 之外的所有 Android 设备上的 Play Store 上运行。
看起来我会根据我的日志正确选择区域设置,并且我将重写资源配置,但是在活动重新启动后,无论当前设置什么系统语言,它都会跳转到默认英语(即使代码中的默认区域设置是正确的 - 在我的情况是捷克语(语言代码“cs”)。
正如我所说,这是由 Google Play 版本的 APK 引起的,而不是 Android Studio 版本引起的。
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}")
}
Run Code Online (Sandbox Code Playgroud)
它的功能很简单,我有一系列可用语言(在我的例子中,其中有 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(可能更低) - 按预期工作。
我不确定发生了什么事,但有点有趣。
根据您上面的描述,我了解到您的问题仅发生在Google Play应用版本中。我遇到过类似的问题,我所做的就是添加此设置:
bundle {
language {
enableSplit = false
}
}
Run Code Online (Sandbox Code Playgroud)
android 标签内的build.gradle(.app)
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |