Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
必须根据终端用户的语言和区域的规范来定制特定于语言环境的数据。用户界面显示的文本是语言环境特定数据的最明显示例。例如,在美国使用 Cancel 按钮的应用程序将在德国具有 Abbrechen 按钮。在其他国家/地区,此按钮将包含其他标签。显然你不想硬编码这个按钮标签。如果你可以自动为给定的 Locale
获取正确的标签,那不是很好吗?幸运的是,只要你在 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
类与用于加载资源包的工厂方法协作。这允许将资源包加载过程的每个实质步骤及其高速缓存控制视为单独的方法。