Java 根据上下文加载ResourceBundle

Java 根据上下文加载ResourceBundle,java,resourcebundle,Java,Resourcebundle,我有一个应用程序,它在多个上下文中分离,每个上下文具有相同的布局,但具有不同的消息 关于上下文“A”的示例: 头衔 标签:文本 关于上下文“B”的示例: 标题B 标签:文本B 请注意,每个上下文上的“标签”是相同的,上下文“A”是默认上下文 我需要每个上下文有一个属性文件: resources.properties(上下文A-默认值) 头衔 标签 文本=文本 资源属性(上下文b) 标题=标题B 文本=文本B 我想根据上下文加载好的属性文件 我找到的第一个解决方案是像这样使用Locale:

我有一个应用程序,它在多个上下文中分离,每个上下文具有相同的布局,但具有不同的消息

关于上下文“A”的示例:

头衔

标签:文本

关于上下文“B”的示例:

标题B

标签:文本B

请注意,每个上下文上的“标签”是相同的,上下文“A”是默认上下文

我需要每个上下文有一个属性文件:

  • resources.properties(上下文A-默认值)
头衔

标签

文本=文本

  • 资源属性(上下文b)
标题=标题B

文本=文本B

我想根据上下文加载好的属性文件

我找到的第一个解决方案是像这样使用
Locale

// context is either "A", "B"...
resources = ResourceBundle.getBundle(config, new Locale(context));
这样,如果在resources_b.properties中找不到该消息,它将按预期从resources.properties返回该消息

不使用
语言环境
,让每个上下文加载“漂亮”资源的最佳方法是什么


应用程序当前仅使用英语,但将来可能会更改…

不要将区域设置用作上下文。您可以选择以下区域设置变量:

de_DE_<variant>, e.g., de_DE_A, de_DE_B
de_de_,例如de_de_A、de_de_B

但是请注意,没有国家/地区,就不可能有变体。

为什么不使用自己的变体:a/B/…为什么不为每个上下文加载不同的捆绑包,但是定义具有不同值的相同键?@JBNizet这可能是一个很好的解决方案,但在添加新上下文@JoopEggen I tested
variant
时,它需要始终重新定义所有键,但所有属性文件必须包含语言代码+国家代码,这也是一个很好的解决方案restrictive@kev,如果您的意思是不想重新定义所有上下文共有的所有键,那么请为这些共有的键使用不同的、共有的捆绑包。