Android语言的变化和设置是完全打破了从Play商店下载的应用程序内

lokaqttq  于 2023-01-11  发布在  Android
关注(0)|答案(1)|浏览(111)

我有一个功能,重写和选择应用程序语言的基础上,系统语言,而你安装一个应用程序。如果你从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(可能更低)**-按预期工作。

我不知道发生了什么事,但它有点有趣。

holgip5t

holgip5t1#

根据您的描述,我了解到您的问题只发生在Google Play应用程序版本中。我也遇到过类似的问题,我所做的只是添加了以下设置:

bundle {
    language {
        enableSplit = false
    }
}

构建.gradle(.app)安卓标签内

相关问题