Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
Java 平台不要求你在整个程序中使用相同的 Locale
。如果你愿意,可以为程序中的每个语言环境敏感对象分配不同的 Locale
。这种灵活性允许你开发多语言应用程序,可以显示多种语言的信息。
但是,大多数应用程序不是多语言的,它们的语言环境敏感对象依赖于默认的 Locale
。由 Java 虚拟机启动时设置,默认 Locale
对应于主机平台的语言环境。要确定 Java 虚拟机的默认 Locale
,请调用 Locale.getDefault
方法。
可以为两种类型的用途独立设置默认语言环境: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
,因为它由所有语言环境敏感的类共享。
分布式计算提出了一些有趣的问题。例如,假设你正在设计一个应用程序服务器,它将接收来自不同国家/地区的客户端的请求。如果每个客户端的 Locale
不同,那么服务器的 Locale
应该是什么?也许服务器是多线程的,每个线程都设置为它所服务的客户端的 Locale
。或者,服务器和客户端之间传递的所有数据都应该是与语言环境无关的。
你应该选择哪种设计方法?如果可能,服务器和客户端之间传递的数据应该与语言环境无关。这通过使客户端负责以语言环境敏感的方式显示数据来简化服务器的设计。但是,如果服务器必须以特定于语言环境的形式存储数据,则此方法将不起作用。例如,服务器可能将相同数据的西班牙语,英语和法语版本存储在不同的数据库列中。在这种情况下,服务器可能希望查询客户端的 Locale
,因为 Locale
可能自上次请求以来已更改。