如何使用region获取locale



我试图获得当前设备区域设置,如"en_us","en_gb"。

我调用Locale.getDefault().getLanguage(),它只返回两个字母代码en

像"en_us"或"en_gb"这样的格式有"语言代码"_"国家代码"

Locale对象包含国家代码和语言代码。

所以你可以使用下面的代码片段来格式化你自己的代码。

String cCode = Locale.getDefault().getCountry();
String lCode = Locale.getDefault().getLanguage();
String code = lCode+"_"+cCode;

你可以在Locale对象上使用toString()方法来获取数据

String code = Locale.getDefault().toString();

默认的Locale是在运行时从系统属性设置静态地为应用程序进程构建的,因此它将表示当应用程序启动时在该设备上选择的Locale。通常情况下,这没有问题,但这确实意味着,如果用户在应用程序进程运行后更改了设置中的Locale,那么getDefaultLocale()的值可能不会立即更新。

如果在应用程序中由于某种原因需要像这样捕获事件,您可以尝试从资源Configuration对象中获取可用的Locale,即

Locale current = getResources().getConfiguration().locale;

您可能会发现,如果您的应用程序需要更改设置,则此值在更改后更新得更快。

我已经测试过了:)

我从这个链接可以被删除,所以答案复制:)

值得指出的是,区域设置代码和语言标记是相关但不同的。区域设置代码有一个下划线分隔符(例如fr_CA),语言标签有一个破折号分隔符(例如fr-ca)。我敢肯定有更深层次的差异,但这超出了我的薪酬范围。

这个答案给出了Locale类的各种方法的结果:https://stackoverflow.com/a/23168383

看起来您想要toString()方法(获取区域设置代码)或toLanguageTag()方法(获取语言标记)。

使用

Locale.getDisplayName();

的简写
Locale.getDisplayName(Locale.getDefault());

文档在这里:http://developer.android.com/reference/java/util/Locale.html

最新更新