准备使用 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 标签加载到名为OrderLabelsBundle
的ResourceBundle
中。使用多个ResourceBundle
对象具有以下优点:
-
您的代码更易于阅读和维护。
-
您将避免使用庞大的
ResourceBundle
对象,这些对象可能需要很 Long 时间才能加载到内存中。 -
您可以通过仅在需要时加载每个
ResourceBundle
来减少内存使用量。