Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
如果你的应用程序具有用户界面,则它包含许多特定于语言环境的对象。首先,你应该查看源代码并查找随 Locale
而变化的对象。你的列表可能包含从以下类实例化的对象:
String
Image
Color
AudioClip
你会注意到此列表不包含表示数字,日期,时间或货币的对象。这些对象的显示格式因 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
来减少内存使用量。