文档

Java™ 教程-Java Tutorials 中文版
准备使用 ResourceBundle
Trail: Internationalization
Lesson: Isolating Locale-Specific Data

准备使用 ResourceBundle

识别特定于语言环境的对象

如果你的应用程序具有用户界面,则它包含许多特定于语言环境的对象。首先,你应该查看源代码并查找随 Locale 而变化的对象。你的列表可能包含从以下类实例化的对象:

你会注意到此列表不包含表示数字,日期,时间或货币的对象。这些对象的显示格式因 Locale 而异,但对象本身则不然。例如,根据 Locale 格式化 Date,但无论 Locale 如何,都使用相同的 Date 对象。不是在 ResourceBundle 中隔离这些对象,而是使用特殊的语言环境敏感格式化类格式化它们。你将在 Formatting 课程的 Dates and Times 部分中学习如何执行此操作。

通常,存储在 ResourceBundle 中的对象是预定义的,随产品一起提供。程序运行时不会修改这些对象。例如,你应该在 ResourceBundle 中存储 Menu 标签,因为它是特定于语言环境的,并且在程序会话期间不会更改。但是,你不应该把终端用户在 TextField 中输入的 StringResourceBundle 对象中进行隔离。像这种 String 数据每天都可能有所不同。它特定于程序会话,而不是程序运行的 Locale

通常,你需要在 ResourceBundle 中隔离的大多数对象都是 String 对象。但是,并非所有 String 对象都是特定于语言环境的。例如,如果 String 是进程间通信使用的协议元素,则不需要进行本地化,因为终端用户永远不会看到它。

是否本地化某些 String 对象的决定并不总是很清楚。日志文件就是一个很好的例子。如果日志文件由一个程序写入并由另一个程序读取,则两个程序都使用日志文件作为通信缓冲区。假设终端用户偶尔检查此日志文件的内容。日志文件不应该本地化吗?另一方面,如果终端用户很少检查日志文件,则翻译成本可能不值得。你决定本地化此日志文件取决于许多因素:程序设计,易用性,翻译成本和可支持性。

组织 ResourceBundle 对象

你可以根据它们包含的对象类别组织 ResourceBundle 对象。例如,你可能希望将订单输入窗口的所有 GUI 标签加载到名为 OrderLabelsBundleResourceBundle 中。使用多个 ResourceBundle 对象具有以下几个优点:


Previous page: About the ResourceBundle Class
Next page: Backing a ResourceBundle with Properties Files