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

Android How to get system's installed locales

有没有办法从 Android 设备获取系统安装的语言环境。我尝试使用 android Get Available locales 中的 getAvailableLocales (),但它不适用于 Asus、Carbon、Lava、Intex 等设备。

例如,如果我在 Nexus 设备中调用 getAvailableLocales(),我可以获得 Settings-> Language&Input -> Language

中的语言环境

但是如果我在任何 Carbon 设备上做同样的事情,而不是从 Settings-> Language&Input -> Language 获取语言,我会得到一个不同的列表。

我只想要设备中已安装的语言列表,而不是 OS 支持的所有语言。

Locale.getAvailableLocales() 方法是通用的 'base' 语言环境集。来自文档:

Most locale-sensitive classes offer their own getAvailableLocales method, which should be preferred over this general purpose method.

强调我的。

您可以通过在适当的 class 上查询 getAvailableLocales() 方法来获取可用于特定用例的语言环境。具体来说:

如果您想要系统支持的语言环境,请使用

Locale.getAvailableLocales() 

如果您想要系统支持和设备启用的语言环境

Resources.getSystem().getAssets().getLocales()

通过使用第一个,您无法确定该设备是否支持所有语言环境。因为他们都带有 Android ROM。

但后者总是一个可靠的机会。 因为它只提供为该特定设备安装的所有语言环境(字体)。这些语言环境(字体)由该设备制造商放置。

我在 here

中解释了更多