这实际上取决于您使用的 Java 版本。当您说转换为字符串时,我假设您可能想要:
- 将其转换为区域设置标识符,以便您以后可以轻松地重新创建区域设置。
- 将其作为字符串表示形式传递给系统的某些部分。
- 获取(可能是本地)语言、国家或 Locale 对象的名称。
其他人向您指出了文档,但我认为最好了解几种可能性。
广告 1. 如果您需要转换为 Locale 标识符,Java 7 的最佳方法(在以前的版本中并不存在)是toLanguageTag()。
这是因为您可以轻松地将 Locale 标识符存储在字符串中(包括所有选项,如脚本、Unicode 扩展等)并使用 forLanguageTag(String) 重新创建 Locale 对象而不会丢失信息。简单的toString() 没有这个属性。
以下代码 sn -p 说明了我的观点:
Locale locale = Locale.getDefault(Locale.Category.DISPLAY);
String localeId = locale.toLanguageTag();
Locale recreatedLocale = Locale.forLanguageTag(localeId);
在 Java 7 之前,您确实需要使用 toString() 并手动处理国家/地区和变体(对于 Locale,最多包含三个用下划线分隔的标识符,即 no_NO_NY。)
广告 2. 如果您需要将区域设置传递给系统的其他部分(即 Web 服务),toString() 可能也可能不是您想要的。那是因为我上面写的 - 如果您需要破折号作为分隔符并且不太关心变体,我会使用 getLanguage() 和 getCountry() 方法而不是普通的 toString():
Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY);
String localeId = MessageFormat.format("{0}-{1}",
uiLocale.getLanguage(),
uiLocale.getCountry());
此方法应该适用于自 1.4 版以来的 Java 版本。
广告 3. 如果您想显示语言、国家或地区显示名称,以便用户可以选择有效的地区(即在他/她的个人资料中),您可能要查找的是 getDisplayCountry(Locale)、getDisplayLanguage(Locale) 和getDisplayName(Locale)。您可以使用它们以目标用户语言显示名称(前提是 JVM 具有适当的翻译,这适用于许多语言):
Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY);
String languageName = uiLocale.getDisplayLanguage(uiLocale);
String countryName = uiLocale.getDisplayLanguage(uiLocale);
// usually something like langage (country), i.e. polski (Polska)
String localeName = uiLocale.getDisplayName(uiLocale);