【问题标题】:Java Locale to StringJava 语言环境到字符串
【发布时间】:2012-03-02 15:36:53
【问题描述】:

我需要将语言环境转换为字符串。我该怎么做?

我有 Locale loc 和 String loc1,需要将值从 locale 转换为 String。

【问题讨论】:

  • thanx.. 只是一个新手.. 试图弄清楚...
  • @Jack:将来您可能希望(Google|Bing)先搜索答案,如果找不到答案或感到困惑,请询问详细问题。我知道 Locale 类可能非常令人困惑,尤其是从 Java 7 开始,但这并不意味着您不应该自己解决问题,而不是寻找快速的解决方案。
  • 既然语言环境转换不是微不足道的,我觉得这个问题没那么傻。特别是当您需要两种方式转换时:locale => string 和 string => locale stackoverflow.com/questions/2522248/…

标签: java string locale


【解决方案1】:

这实际上取决于您使用的 Java 版本。当您说转换为字符串时,我假设您可能想要:

  1. 将其转换为区域设置标识符,以便您以后可以轻松地重新创建区域设置。
  2. 将其作为字符串表示形式传递给系统的某些部分。
  3. 获取(可能是本地)语言、国家或 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);

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这很简单。只需使用以下代码。假设您正在使用语言环境将 ISO 当前日历日期转换为 Hijri calendar

      Chronology iso = ISOChronology.getInstanceUTC();
      Chronology hijri = IslamicChronology.getInstanceUTC();
      LocalDate todayIso = new LocalDate(2016, 1, 20, iso);
      LocalDate todayHijri = new LocalDate(todayIso.toDateTimeAtStartOfDay(), hijri);
      String currenthijridate = "" + todayHijri;
      
      /* 'currenthijridate' will appear as 1437-04-08 which
         is a string. Now it's simply String = "" + locale
       */
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多