Java 7支持

类别区域设置

Java 7添加了用于格式化和显示的默认区域设置[http://download.oracle.com/javase/7/docs/technotes/guides/intl/enhancements.7.html#类别]. java.util中有两个新的API。下面的Locale类。

公共静电区域设置获取默认值(区域设置。类别类别)

获取此Java虚拟机实例的指定类别的默认区域设置的当前值。

Java虚拟机根据主机环境设置启动期间的默认区域设置。如果没有显式指定区域设置,许多对区域设置敏感的方法都会使用它。可以使用setDefault(Locale.Category,Locale)方法更改它。

参数:

类别--指定的类别以获取默认区域设置

退货:

此Java虚拟机实例的指定类别的默认区域设置

投掷次数:

空指针异常--如果类别为空

自:

1.7

另请参阅:

设置默认值(Locale.Category,Locale)

公共静态void setDefault(区域设置。类别类别,

区域设置newLocale)

为Java虚拟机的此实例设置指定类别的默认区域设置。这不会影响主机区域设置。

如果有安全管理器,则在更改默认区域设置之前,使用PropertyPermission(“user.language”,“write”)权限调用其checkPermission方法。

Java虚拟机根据主机环境设置启动期间的默认语言环境。如果没有显式指定区域设置,许多对区域设置敏感的方法都会使用它。

由于更改默认语言环境可能会影响许多不同的功能领域,因此只有当调用者准备重新初始化在同一Java虚拟机中运行的对语言环境敏感的代码时,才应使用此方法。

参数:

类别--用于设置默认区域设置的指定类别

newLocale(新区域设置)--新的默认区域设置

投掷次数:

安全例外--如果安全管理器存在并且其checkPermission方法不允许该操作。

空指针异常--如果类别和/或newLocale为空

自:

1.7

另请参阅:

SecurityManager.checkPermission(java.security.Permission), 属性权限, getDefault(区域设置类别)

以下是一些技术总结。

    • DISPLAY和FORMAT类别默认值与现有默认区域设置分开。getDefault()/setDefault(Locale)保持不变。

    • setDefault(Locale)还将指定的“区域设置”设置为DISPLAY/FORMAT类别默认值,但setDefault(category,Locale)不会更改指定类别默认值以外的默认区域设置。

    • 默认的DISPLAY语言环境由返回Java i18n服务类中本地化显示名称的方法使用(通常为getDisplayXXXX)。更具体地说-

      • 时区#getDisplayName

      • 货币#getSymbol

      • 货币#getDisplayName

      • 区域设置#getDisplayLanguage

      • 区域设置#getDisplayCountry

      • 区域设置#getDisplayVariant

      • 区域设置#getDisplayName

      • Locale#getDisplayScript(这应该使用DISPLAY,但现在不行。这显然是Java 7中的一个错误)

    • 默认的FORMAT语言环境用于创建Java i18n服务对象,以格式化日期(包括日历)、数字和货币。更具体地说,以下类中的构造函数/工厂方法-

      • 日历及其子类

      • 格式化程序

      • 日期格式/SimpleDateFormat/DateFormatSymbols

      • 数字格式/小数格式/小数格式符号

      • 消息格式

    • java.lang包类、Collator和BreakIterator中的核心区域设置敏感服务继续使用现有的默认值。这些服务没有类别。

ICU4J默认语言环境与底层JVM默认语言环境同步。然而,ICU4J 4.8.1不支持对这些类别的地区进行分类。为了支持Java7,有必要添加并行API,并将类别区域设置与Java7运行时同步。ICU Trac报告支持问题#8630

以下是建议的API。

/**

*区域设置类别的枚举。这些区域设置类别用于获取/设置的默认区域设置

*类别所表示的特定功能。

*@稳定ICU 49

*/

公共枚举类别{

/**

*用于表示显示用户界面的默认区域设置的类别。

*@稳定ICU 49

*/

显示器,

/**

*用于表示格式化日期、数字和/或货币的默认区域设置的类别。

*@稳定ICU 49

*/

格式

}

/**

*返回指定类别的当前默认ULocale。

*

*@param category类别

*@返回指定类别的默认ULocale。

*@稳定ICU 49

*/

公共静态ULocale getDefault(类别类别)

/**

*为指定的类别设置默认的位置。

*这还为指定的类别设置默认的区域设置

*JVM的。如果调用方没有对的写入权限

*user.language属性,将引发安全异常,

*指定类别的默认ULocale将保持不变。

*

*@param category指定的类别以设置默认区域设置

*@param newLocale新的默认语言环境

*@参见SecurityManager#checkPermission(java.security.Permission)

*@请参阅java.util。属性权限

*@稳定ICU 49

*/

public static synchronized void setDefault(类别类别,ULocale newLocale)

注意:这些新API被标记为@stable,因为它们与JDKAPI并行,我们不会更改它们。

在ICU4J中,应在Java兼容的API中使用DISPLAY/FORMAT默认值,以及一些用于格式化和返回显示名称的ICU特定类/方法。下面的电子表格显示了trunk中ULocale.getDefault()的所有调用站点和建议的更改。

脱localesites

关键错误修复

    • #8734icu无法在某些java7区域设置下加载