从Play Store下载的应用程序内部完全破坏了Android语言更改和设置



在安装应用程序时,我有一个基于系统语言重写和选择应用程序语言的功能。如果您从Android Studio构建应用程序(甚至是发布版本(,则此功能可以正常工作。此外,我可以确认,除了Android 10、11和12之外,它在所有Android上都可以在Play Store上运行。

看起来我会根据日志正确地选择区域设置,并重写资源配置,但在活动重新启动后,无论当前设置的系统语言是什么,它都会跳到默认的英语(即使代码中的默认区域设置是正确的——在我的情况下是捷克语(lang-code"cs"(。

正如我所说,它是由谷歌播放版的APK引起的,而不是来自安卓工作室的一个。

Google Play服务条款是否有任何未记录的更改,即自Android 10以来,如果在Play Store上传,他们将阻止资源配置为只读?

以下是功能:

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(可能更低(-按预期工作。

我不知道发生了什么事,但有点好笑。

根据您上面的描述,我知道您的问题只发生在Google Play应用程序版本中。我也遇到过类似的问题,我所做的就是添加这个设置:

bundle {
language {
enableSplit = false
}
}

build.gradle(.app(android标签内

展开Eng.OsamaYousef答案。简而言之,你必须禁止捆绑删除";不需要";用户下载应用程序时使用的语言。

bundle {
language {
enableSplit = false
}
}

解释:你的语言选择器使用安卓工作室而不是播放商店版本的原因是,通过安卓工作室你可以安装.apk和播放商店安装.aab(捆绑包(。要测试用户通过play商店下载你的应用程序得到了什么,只需访问android studio->运行->编辑配置->在安装选项下搜索部署,然后从应用程序捆绑包中选择APK

此外,我还建议遵循Android指南来实施最新的建议。

最新更新