如何在Android 13中从应用程序语言中识别设备语言?

6
我在我的应用程序中添加了每个应用程序语言的支持,这是安卓13的功能,现在它同时支持英文和俄文。我可以从设置中更改应用程序语言,而无需更改设备语言。现在为了分析目的,我需要知道应用程序语言和设备语言。但是,如果我的设备语言是英文,而应用程序语言是俄文,我始终会收到俄文。
   Resources.getSystem().configuration.locales.get(0).language  - ru

   context.resources.configuration.locales[0].language - ru

   Locale.getDefault().language - ru

我期望从en收到

Resources.getSystem().configuration.locales.get(0).language

ru 来自

context.resources.configuration.locales[0].language

我会很高兴接受任何帮助


尝试使用ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration())。 - Vivek Gupta
1
上面的建议不起作用。列表中的第一个语言环境仍然是应用程序语言,而不是设备语言。 - Robert Nekic
1
@VivekGupta也获得应用程序语言而不是设备语言。 - Sergey
2个回答

4

我一直在使用以下技术:

AppCompatDelegate.getApplicationLocales()  // app locales
LocaleManagerCompat.getSystemLocales(Context) // system locales

如果没有应用程序级别的设置,则getApplicationLocales()可能会返回一个空数组[]。在这种情况下,系统语言环境将被使用。我还使用AppCompatDelegate.setApplicationLocales(LocaleListCompat)以确保一致性。我不确定是否有非兼容类可用于仅针对API 33进行定位,但目前它可以在API 27上工作。正如在另一个答案中提到的那样,您需要导入androidx.appcompat:appcompat:1.6.0-beta01 - 请参见此处的第一行。

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
请注意,在onCreate()之后才能使用AppCompatDelegate.getApplicationLocales() - undefined

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接