我试图获得当前设备区域设置,如"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