此Java教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并且可能使用已不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐选项的信息,请参阅JDK发行说明。
特定区域设置的数据必须根据最终用户的语言和地区的约定进行定制。用户界面显示的文本是最明显的区域设置特定数据的示例。例如,美国的应用程序上将显示一个取消按钮,而在德国将显示一个Abbrechen按钮。在其他国家,此按钮将具有其他标签。显然,您不希望硬编码此按钮标签。如果您可以自动获取给定区域设置的正确标签,那不是很好吗?幸运的是,您可以,只要将区域设置特定的对象隔离在ResourceBundle中。
在本课程中,您将学习如何创建和访问ResourceBundle对象。如果您想快速查看一些编码示例,请继续查看本课程的最后两节。然后您可以返回前两节获取有关ResourceBundle对象的一些概念性信息。
ResourceBundle对象包含特定于区域设置的对象。当您需要特定于区域设置的对象时,您从ResourceBundle中获取它,该对象返回与最终用户的Locale匹配的对象。本节解释了ResourceBundle与Locale的关系,并描述了ResourceBundle子类。
在创建ResourceBundle对象之前,您应该进行一些规划。首先,确定程序中的特定于区域设置的对象。然后根据类别将它们组织到不同的ResourceBundle对象中。
如果您的应用程序包含需要翻译成各种语言的String对象,您可以将这些String对象存储在由一组属性文件支持的PropertyResourceBundle中。由于属性文件是简单的文本文件,因此可以由翻译人员创建和维护。您不需要更改源代码。本节将介绍如何设置支持PropertyResourceBundle的属性文件。
ListResourceBundle类是ResourceBundle的子类,它使用列表管理特定于区域设置的对象。ListResourceBundle由一个类文件支持,这意味着每次需要对新的Locale提供支持时,都必须编写和编译一个新的源文件。但是,ListResourceBundle对象很有用,因为与属性文件不同,它们可以存储任何类型的特定于区域设置的对象。通过一个示例程序的步骤,本节演示了如何使用ListResourceBundle。
本节介绍了改进ResourceBundle.getBundle工厂的灵活性的新功能。ResourceBundle.Control类与加载资源包的工厂方法协作。这允许将资源包加载过程的每个实质步骤及其缓存控制视为单独的方法。