如何覆盖 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
中更改语言时会发生什么。
是否可以以某种方式覆盖订单?
答案 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>