Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
如果你的应用程序具有用户界面,则它包含许多特定于语言环境的对象。首先,你应该查看源代码并查找随 Locale 而变化的对象。你的列表可能包含从以下类实例化的对象:
StringImageColorAudioClip你会注意到此列表不包含表示数字,日期,时间或货币的对象。这些对象的显示格式因 Locale 而异,但对象本身则不然。例如,根据 Locale 格式化 Date,但无论 Locale 如何,都使用相同的 Date 对象。不是在 ResourceBundle 中隔离这些对象,而是使用特殊的语言环境敏感格式化类格式化它们。你将在 Formatting 课程的 Dates and Times 部分中学习如何执行此操作。
通常,存储在 ResourceBundle 中的对象是预定义的,随产品一起提供。程序运行时不会修改这些对象。例如,你应该在 ResourceBundle 中存储 Menu 标签,因为它是特定于语言环境的,并且在程序会话期间不会更改。但是,你不应该把终端用户在 TextField 中输入的 String 在 ResourceBundle 对象中进行隔离。像这种 String 数据每天都可能有所不同。它特定于程序会话,而不是程序运行的 Locale。
通常,你需要在 ResourceBundle 中隔离的大多数对象都是 String 对象。但是,并非所有 String 对象都是特定于语言环境的。例如,如果 String 是进程间通信使用的协议元素,则不需要进行本地化,因为终端用户永远不会看到它。
是否本地化某些 String 对象的决定并不总是很清楚。日志文件就是一个很好的例子。如果日志文件由一个程序写入并由另一个程序读取,则两个程序都使用日志文件作为通信缓冲区。假设终端用户偶尔检查此日志文件的内容。日志文件不应该本地化吗?另一方面,如果终端用户很少检查日志文件,则翻译成本可能不值得。你决定本地化此日志文件取决于许多因素:程序设计,易用性,翻译成本和可支持性。
你可以根据它们包含的对象类别组织 ResourceBundle 对象。例如,你可能希望将订单输入窗口的所有 GUI 标签加载到名为 OrderLabelsBundle 的 ResourceBundle 中。使用多个 ResourceBundle 对象具有以下几个优点:
ResourceBundle 对象,它可能需要很长时间才能加载到内存中。ResourceBundle 来减少内存使用量。