# 准备使用 ResourceBundle

> 原文： [https://docs.oracle.com/javase/tutorial/i18n/resbundle/prepare.html](https://docs.oracle.com/javase/tutorial/i18n/resbundle/prepare.html)

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

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

*   `String`
*   `Image`
*   `Color`
*   `AudioClip`

您会注意到此列表不包含表示数字，日期，时间或货币的对象。这些对象的显示格式因`Locale`而异，但对象本身则不然。例如，根据`Locale`格式化`Date`，但无论`Locale`如何，都使用相同的`Date`对象。不是在`ResourceBundle`中隔离这些对象，而是使用特殊的区域设置敏感格式化类格式化它们。您将在[格式化](../format/index.html)课程的[日期和时间](../format/dateintro.html)部分学习如何执行此操作。

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

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

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

## 组织 ResourceBundle 对象

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

*   您的代码更易于阅读和维护。
*   您将避免使用大量`ResourceBundle`对象，这可能需要很长时间才能加载到内存中。
*   您可以通过仅在需要时加载每个`ResourceBundle`来减少内存使用量。