资源包配置为 -
<resource-bundle>
<base-name>views.msgs.labels</base-name>
<var>msg</var>
</resource-bundle>
faces-config.xml
中的。
在resources/views/msgs/
-
labels_en.properties
labels_fr.properties
有两个部分:
在上一节中,文字/标签需要在English
中显示,而在下半部分,文字必须显示在French
中。
简单来说,
<f:view locale="en" >
#{msg['hello']}
#{msg['name']}
</f:view>
<f:view locale="fr" >
#{msg['HELLO']}
#{msg['name']}
</f:view>
两个键hello
&amp; name
出现在两个属性文件中。
我看到下半部locale="fr"
中的f:view
会覆盖上面的French
。
整个输出显示在widgets is undefined
。
我该如何解决这个问题?
答案 0 :(得分:4)
不支持此构造。 <f:view>
代表UIViewRoot
。虽然可以有多个<f:view>
标记,但组件树中只能有一个UIViewRoot
个实例。后一个<f:view>
声明的属性将覆盖之前声明的任何属性。
您最好的选择是通过ResourceBundle
API手动加载资源包,并在EL中为其分配一个不同的变量名称。
最简单的方法是使用托管bean。 E.g。
@ManagedBean
@RequestScoped
public class Labels {
private ResourceBundle french;
@PostConstruct
public void init() {
french = ResourceBundle.getBundle("views.msgs.labels", Locale.FRENCH);
}
public ResourceBundle getFrench() {
return french;
}
}
(提示:您可以通过<default-locale>
获取<supported-locale>
s和所有Application
)
然后使用如下:
Current locale:
#{msg['hello']}
#{msg['name']}
French locale:
#{labels.french['HELLO']}
#{labels.french['name']}