Java教程已针对JDK 8编写。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息,请参阅JDK发行说明。
如果您的应用程序具有用户界面,则包含许多特定于语言环境的对象。要开始,您应该查看源代码,并查找随Locale
而变化的对象。您的列表可能包括以下类实例化的对象:
String
Image
Color
AudioClip
您会注意到,此列表不包含表示数字、日期、时间或货币的对象。这些对象的显示格式随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
以减少内存使用。