区域设置的范围

原文: https://docs.oracle.com/javase/tutorial/i18n/locale/scope.html

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

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


Note:

可以为两种类型的用途独立设置默认语言环境:格式设置用于格式化资源,显示设置用于菜单和对话框。在 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自上次请求后可能已更改。