在资源包中搜索标签时,如何覆盖Java的顺序?从文档中获取,默认顺序是:
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
中更改语言时会发生什么。有可能以某种方式推翻命令吗?
我需要扩展类ResourceBundle.Control
并覆盖方法getCandidateLocales
,在方法中可以指定使用的区域设置的顺序。
然后,这个类的实例被传递给getBundle
方法——我在扩展ResourceBundle
的类的构造函数中调用了这个方法,如下所示:
final Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
final CustomControl control = new CustomControl();
setParent(getBundle("MyBundle", locale, control));
此类可以用作faces-config.xml
中的<resource-bundle>
,也可以加载<f:loadBundle ...>
<resource-bundle>
<base-name>com.package.MyBundle</base-name>
<var>bundle</var>
</resource-bundle>