# 语言环境的范围

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

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

还可以为两种类型(Locale.Category)的用途分别设置默认语言环境:

  • DISPLAY:用于菜单和对话框的显示
  • FORMAT:用于格式化资源
Locale.getDefault(Locale.Category)
Locale.setDefault(Locale.Category, Locale)
1
2

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

您不应该以 Locale 编程方式设置默认值(Locale.setDefault 是全局的),因为所有区域设置敏感类都共享它。

分布式计算提出了一些有趣的问题。例如,假设您正在设计一个应用程序服务器,该服务器将接收来自不同国家/地区客户端的请求。如果每个客户端的区域设置不同,服务器的区域设置应该是什么?服务器可能是多线程的,每个线程都设置为它服务的客户端的 Locale。或者,在服务器和客户端之间传递的所有数据都应该独立于 Locale。

您应该采用哪种设计方法?如果可能,服务器和客户端之间传递的数据应独立于 Locale。这简化了服务器的设计,使客户端负责以对 Locale 敏感的方式显示数据。但是,如果服务器必须以特定于 Locale 的形式存储数据,则此方法将不起作用。例如,服务器可能会在不同的数据库列中存储相同数据的西班牙语、英语和法语版本。在这种情况下,服务器可能想要查询客户端的 Locale,因为 Locale 可能自上次请求以来已更改。