您想要的似乎是资源的层次结构,也就是说,您可能希望从一个类派生一个类(或由某个特定部分和某个公共部分组成)。
基本上,ResourceBundle并不是为此而设计的,而您是一个人。
但是,我想您需要一些建议。
确保通用术语 确实很 通用。也就是说,“确定”,“取消”,“下一个>”,“ <下一个”,“打开”,“文件”等在其上下文中将具有通用翻译。我的意思是只翻译一次这样的标准项目是相当安全的,但是如果您想在不同的上下文中使用它们,则仍然需要另一个条目。为什么?因为“打开”按钮翻译在许多种语言中与“打开”对话框标题翻译不同。
将所有.properties文件移动到一个位置(例如,一个名为“ resources”的目录)。当然,特定于模块的文件应分开到不同的子目录…
- 创建一个资源工厂,该工厂将返回ResourceBundle类的实例(或您自己的Facade-这种方法实际上将使您共享一些公共捆绑包)。
- 对于大型应用程序,好的做法是创建一些语言包,即将语言资源分隔到它们自己的目录(即/ resources / en,/ resources / fr,/ resources / zh-Hans)。但是,这种方法的问题在于您需要自己实施资源回退(在问题中提到的文章的帮助下,该层次实际上是资源加载层次)。这意味着一些特殊情况,例如从语言标签“ nb”回退到“ no”但不从“ nn”退回;从“ zh-CN”和“ zh-SG”退回到“ zh-Hans”,然后又降到“ zh”,但从“ zh-HK”,“ zh-TW”和“ zh-MO”退回到“ zh” -Hant”,然后使用默认语言,而不是“ pt-BR”
似乎需要很多工作?好吧,但是之后的维护工作将很少。
可能有用的一件事PropertyResourceBundle有两个构造函数,可让您加载所需的任何属性文件,即:PropertyResourceBundle(InputStream
stream)和PropertyResourceBundle(Reader
reader)。老实说,在大型项目中,标准的ResourceBundle机制存在太多限制,因此您确实需要自己的资源访问层…



