语言环境的范围

Java 平台不需要您在整个程序中使用相同的Locale。如果愿意,可以为程序中的每个对语言环境敏感的对象分配一个不同的Locale。这种灵 Active 使您可以开发多语言应用程序,该应用程序可以多种语言显示信息。

但是,大多数应用程序不是多语言的,其语言环境敏感的对象依赖于默认的Locale。由 Java 虚拟机启动时设置,默认Locale对应于主机平台的语言环境。要确定 Java 虚拟机的默认Locale,请调用Locale.getDefault方法。

Note:

可以为两种类型的用途分别设置默认语言环境:* format 设置用于格式化资源,而 display *设置用于菜单和对话框。在 Java SE 7 版本中引入的Locale.getDefault(Locale.Category)方法采用Locale.Category参数。将FORMAT枚举传递给getDefault(Locale.Category)方法将返回用于格式化资源的默认语言环境。同样,传递DISPLAY枚举将返回 UI 使用的默认语言环境。相应的setDefault(Locale.Category, Locale)方法允许设置所需类别的语言环境。无参数getDefault方法返回DISPLAY默认值。

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

您不应该以编程方式设置默认值Locale,因为所有与语言环境相关的类都共享它。

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

您应该采用哪种设计方法?如果可能,在服务器和 Client 端之间传递的数据应与语言环境无关。通过使 Client 端负责以区域设置敏感的方式显示数据,从而简化了服务器的设计。但是,如果服务器必须以特定于语言环境的形式存储数据,则此方法将行不通。例如,服务器可能在不同的数据库列中存储相同数据的西班牙语,英语和法语版本。在这种情况下,服务器可能要向 Client 端查询其Locale,因为自上次请求以来Locale可能已更改。