准备使用 ResourceBundle

原文: https://docs.oracle.com/javase/tutorial/i18n/resbundle/prepare.html

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

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

  • String
  • Image
  • Color
  • AudioClip

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

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

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

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

组织 ResourceBundle 对象

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

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