Java Locale to String

Jac*_* Jr 2 java string locale

我需要将Locale转换为String,我该怎么做:

我有Locale loc和String loc1,需要将locale中的值转换为String.谢谢

Paw*_*yda 22

这实际上取决于您使用的Java版本.当你说转换为String时,我假设你可能想:

  1. 将其转换为区域设置标识符,以便您以后可以轻松地重新创建区域设置.
  2. 将它作为String表示传递给系统的某个部分.
  3. 获取(可能是本机)语言,国家或Locale对象的名称.

其他人指出你的文档,但我认为最好走几个可能性.

广告1.如果您需要转换为区域设置标识符,Java 7中的最佳方法(以前的版本中并不存在)是toLanguageTag().

这是因为您可以轻松地将Locale标识符存储在字符串中(包括所有选项,如脚本,Unicode扩展等),并使用forLanguageTag(String)重新创建Locale对象,而不会丢失信息.简单toString()不拥有此属性.
以下代码片段说明了我的观点:

Locale locale = Locale.getDefault(Locale.Category.DISPLAY);
String localeId = locale.toLanguageTag();
Locale recreatedLocale = Locale.forLanguageTag(localeId);
Run Code Online (Sandbox Code Playgroud)

在Java 7之前,您确实需要使用toString()并手动处理国家/地区和变体(对于Locale包含最多三个由分隔符和下划线分隔的标识符,即no_NO_NY.)

广告2.如果您需要将Locale传递到系统的其他部分(即Web服务),toString()可能也可能不是您要查找的内容.这是因为我上面写的内容 - 如果你需要破折号作为分隔符并且不太关心变体,我会使用getLanguage()和getCountry()方法而不是简单toString():

Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY);
String localeId = MessageFormat.format("{0}-{1}", 
                                       uiLocale.getLanguage(),
                                       uiLocale.getCountry());
Run Code Online (Sandbox Code Playgroud)

从版本1.4开始,此方法应与Java版本一起使用.

广告3.如果要显示语言,国家/地区或区域设置显示名称,以便用户可以选择有效的区域设置(即在他/她的个人资料中),您可能要查找的是getDisplayCountry(区域设置),getDisplayLanguage(区域设置)和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);
Run Code Online (Sandbox Code Playgroud)


Puc*_*uce 3

根据您想要用它做什么,您可以使用Locale 类的toString方法。