Java教程已针对JDK 8编写。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息,请参阅JDK发行说明。
如果您的应用程序具有用户界面,则包含许多特定于语言环境的对象。要开始,您应该查看源代码,并查找随Locale而变化的对象。您的列表可能包括以下类实例化的对象:
StringImageColorAudioClip您会注意到,此列表不包含表示数字、日期、时间或货币的对象。这些对象的显示格式随Locale而变化,但对象本身并不变化。例如,您根据Locale格式化Date,但无论Locale如何,都使用相同的Date对象。您不需要将这些对象隔离在ResourceBundle中,而是使用特殊的语言环境敏感格式化类对其进行格式化。您将在日期和时间部分以及格式化教程的课程中学习如何做到这一点。
通常,存储在ResourceBundle中的对象是预定义的,并随产品一起提供。这些对象在程序运行时不会被修改。例如,应将Menu标签存储在ResourceBundle中,因为它是特定于语言环境的,并且在程序会话期间不会更改。但是,不应将用户在TextField中输入的String对象隔离在ResourceBundle中。这样的数据可能会每天有所变化。它是特定于程序会话的,而不是特定于程序运行的Locale。
通常,您需要在ResourceBundle中隔离的大部分对象都是String对象。然而,并不是所有的String对象都是特定于语言环境的。例如,如果一个String是进程间通信使用的协议元素,则不需要本地化,因为最终用户永远不会看到它。
是否对某些String对象进行本地化的决定并不总是清晰的。日志文件是一个很好的例子。如果一个日志文件由一个程序编写并由另一个程序读取,那么两个程序都将日志文件用作通信的缓冲区。假设最终用户偶尔检查此日志文件的内容。那么日志文件是否应该本地化?另一方面,如果最终用户很少检查日志文件,则翻译的成本可能不值得。您是否本地化此日志文件的决策取决于多种因素:程序设计、易用性、翻译成本和可支持性。
您可以根据包含的对象的类别来组织ResourceBundle对象。例如,您可能希望将订单输入窗口的所有GUI标签加载到名为OrderLabelsBundle的ResourceBundle中。使用多个ResourceBundle对象具有以下几个优点:
ResourceBundle对象。ResourceBundle以减少内存使用。