准备使用 ResourceBundle

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

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

  • String

  • Image

  • Color

  • AudioClip

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

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

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

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

组织 ResourceBundle 对象

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

  • 您的代码更易于阅读和维护。

  • 您将避免使用庞大的ResourceBundle对象,这些对象可能需要很 Long 时间才能加载到内存中。

  • 您可以通过仅在需要时加载每个ResourceBundle来减少内存使用量。