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)。更具体地说-
默认的FORMAT语言环境用于创建Java i18n服务对象,以格式化日期(包括日历)、数字和货币。更具体地说,以下类中的构造函数/工厂方法-
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()的所有调用站点和建议的更改。