安卓系统如何获取已安装的语言环境

10
有没有办法从Android设备中获取已安装的系统语言环境?我尝试使用android Get Available locales中的getAvailableLocales(),但对于像Asus、Carbon、Lava和Intex这样的设备不起作用。
例如,在Nexus设备上调用getAvailableLocales(),我可以获取Settings-> Language&Input -> Language中存在的语言环境。
但是,如果我在任何Carbon设备上执行相同的操作,我会得到一个不同的列表,而不是从Settings-> Language&Input -> Language中获取语言。
我只想要设备中已安装的语言列表,而不是操作系统支持的每种语言。

1
你能详细说明一下对于这些设备而言,“不工作”是什么意思吗?它是否只是返回一个空数组,或者是一个仅包含 Locale.US 的数组,还是会崩溃,或者是没有返回你期望的可用语言环境? - Adam S
我更新了我的问题,请查看。 - Santhi Bharath
好的,我可以问一下你为什么需要本地化吗?你应该使用用户选择的任何语言环境(即默认语言环境)显示内容,并使用 Locale.US 写入网络或其他内容,正如Locale文档中所述。我记得有类似于你所经历的情况(locales != 安装的语言),但我不确定发生了什么。 - Adam S
2个回答

6
如果您需要系统支持的区域设置,请使用:
Locale.getAvailableLocales() 

如果您想要系统支持和设备启用的区域设置
Resources.getSystem().getAssets().getLocales()

通过使用第一种方法,你无法确定该设备是否支持所有语言环境。因为它们都是随着 Android ROM 一起提供的。
但后一种方法总是可靠的,因为它只提供了特定设备上安装的所有语言环境(字体)。这些语言环境(字体)是由设备制造商放置的。
我在这里进行了更详细的解释。

5

Locale.getAvailableLocales() 方法是通用的“基本”区域设置集合。根据文档:

大多数区域设置敏感的类提供了它们自己的 getAvailableLocales 方法,应优先使用这些方法,而不是此通用方法。

强调我的。

您可以通过查询适当类上的 getAvailableLocales() 方法来获取特定用例的可用区域设置。具体来说:


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