文档

Java™ 教程
隐藏目录
区域设置的范围
路径:国际化
课程:设置区域设置

区域设置的范围

Java平台不要求您在程序中使用相同的Locale。如果需要,您可以为程序中的每个与区域设置相关的对象分配不同的Locale。这种灵活性允许您开发多语言应用程序,可以显示多种语言的信息。

然而,大多数应用程序并不是多语言的,它们与区域设置相关的对象依赖于默认的Locale。Java虚拟机在启动时设置默认的Locale,该默认Locale对应于主机平台的区域设置。要确定Java虚拟机的默认Locale,调用Locale.getDefault方法。


注意: 

有可能独立设置两种类型的默认区域设置:格式设置用于格式化资源,显示设置用于菜单和对话框。在Java SE 7版本中引入,Locale.getDefault(Locale.Category)方法接受一个Locale.Category参数。将FORMAT枚举传递给getDefault(Locale.Category)方法会返回用于格式化资源的默认区域设置。类似地,传递DISPLAY枚举会返回UI使用的默认区域设置。相应的setDefault(Locale.Category, Locale)方法允许设置所需类别的区域设置。无参数的getDefault方法返回DISPLAY的默认值。

在Windows平台上,这些默认值根据Windows控制面板中的“标准和格式”和“显示语言”设置进行初始化。


不应该在程序中编程方式设置默认的Locale,因为它是由所有与区域设置相关的类共享的。

分布式计算引发了一些有趣的问题。例如,假设您正在设计一个应用程序服务器,该服务器将接收来自不同国家的客户端请求。如果每个客户端的Locale不同,那么服务器的Locale应该是什么?也许服务器是多线程的,每个线程都设置为为其提供服务的客户端的Locale。或者服务器和客户端之间传递的所有数据都应该是与区域设置无关的。

您应该采取哪种设计方法?如果可能的话,服务器和客户端之间传递的数据应该是与区域设置无关的。这样可以通过使客户端负责以与区域设置相关的方式显示数据来简化服务器的设计。然而,如果服务器必须以区域设置特定的形式存储数据,这种方法将不起作用。例如,服务器可能会在不同的数据库列中存储相同数据的西班牙语、英语和法语版本。在这种情况下,服务器可能希望查询客户端的Locale,因为Locale可能自上次请求以来发生了变化。


上一页: 语言标签过滤和查找
下一页: 区域敏感的服务SPI