覆盖资源包的顺序

时间:2021-05-20 07:43:40

标签: java jsf bundle

如何覆盖 Java 在资源包中搜索标签时采用的顺序? 取自docs,默认顺序是这样的:

ButtonLabel_fr_CA_UNIX
ButtonLabel_fr_CA
ButtonLabel_fr
ButtonLabel_en_US
ButtonLabel_en
ButtonLabel

但是我想通过首先采用变体来覆盖此顺序,如下所示:

ButtonLabel_fr_CA_UNIX
ButtonLabel_en_US_UNIX
ButtonLabel_fr_CA
ButtonLabel_fr
ButtonLabel_en_US
ButtonLabel_en
ButtonLabel

我定义了一个扩展 ResourceBundle 类的新类,您可以在其中设置父包,但我不知道这个类何时被实例化,以及当我在 FacesContext 中更改语言时会发生什么。 是否可以以某种方式覆盖订单?

1 个答案:

答案 0 :(得分:0)

我需要扩展类 ResourceBundle.Control 并覆盖方法 getCandidateLocales,您可以在其中指定使用的语言环境的顺序。

然后将此类的实例传递给 getBundle 方法 - 我在扩展 ResourceBundle 的类的构造函数中调用它,如下所示:

final Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
final CustomControl control = new CustomControl();
setParent(getBundle("MyBundle", locale, control));

此类可以用作 <resource-bundle> 中的 faces-config.xml 或加载 <f:loadBundle ...>

<resource-bundle>
    <base-name>com.package.MyBundle</base-name>
    <var>bundle</var>
</resource-bundle>
相关问题