准备使用 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
标签,因为它是特定于语言环境的,并且在程序会话期间不会更改。但是,您不应该在最终用户输入TextField
的ResourceBundle
和String
对象中进行隔离。此String
等数据可能每天都有所不同。它特定于程序会话,而不是程序运行的Locale
。
通常,您需要在ResourceBundle
中隔离的大多数对象都是String
对象。但是,并非所有String
对象都是特定于语言环境的。例如,如果String
是进程间通信使用的协议元素,则不需要进行本地化,因为最终用户永远不会看到它。
是否定位某些String
对象的决定并不总是很清楚。日志文件就是一个很好的例子。如果日志文件由一个程序写入并由另一个程序读取,则两个程序都使用日志文件作为通信缓冲区。假设最终用户偶尔检查此日志文件的内容。日志文件不应该本地化吗?另一方面,如果最终用户很少检查日志文件,则翻译成本可能不值得。您决定本地化此日志文件取决于许多因素:程序设计,易用性,翻译成本和可支持性。
组织 ResourceBundle 对象
您可以根据它们包含的对象类别组织ResourceBundle
对象。例如,您可能希望将订单输入窗口的所有 GUI 标签加载到名为OrderLabelsBundle
的ResourceBundle
中。使用多个ResourceBundle
对象具有以下几个优点:
- 您的代码更易于阅读和维护。
- 您将避免使用大量
ResourceBundle
对象,这可能需要很长时间才能加载到内存中。 - 您可以通过仅在需要时加载每个
ResourceBundle
来减少内存使用量。