假设您有以下两个消息文件
messages.properties
messages_de.properties
设置应用程序区域设置
设置应用程序区域设置的方法有三种,我认为您需要第一种。
1-您可以让浏览器选择区域设置。
在WEB-INF/faces-config.xml:中设置默认和支持的语言环境
<faces-config>
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>de</supported-locale>
</locale-config>
</application>
</faces-config>
当浏览器连接到您的应用程序时,它通常会在 HTTP 标头中包含一个 Accept-Language 值
2-您可以通过编程方式设置语言环境。
调用 UIViewRoot 对象的 setLocale 方法:
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
viewRoot.setLocale(new Locale("de"));
3-您可以为单个页面设置区域设置
通过使用带有语言环境属性的f:view 元素——例如:
<f:view locale="de">
语言环境可以动态设置:
<f:view locale="#{user.locale}"/>
声明消息包
现在设置了 Locale,您可以使用以下两种方式之一来声明消息包
1-通过 faces-config
最简单的方法是在应用程序的 WEB-INF 目录中提供一个名为 faces-config.xml 的文件,其内容如下:
<?xml version="1.0"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<resource-bundle>
<base-name>com.corejsf.messages</base-name>
<var>msgs</var>
</resource-bundle>
</application>
</faces-config>
2-在每个需要访问它的 JSF 页面上。
您可以将 f:loadBundle 元素添加到需要访问该包的每个 JSF 页面,而不是使用全局资源包声明,如下所示:
<f:loadBundle basename="com.corejsf.messages" var="msgs"/>
在任何一种情况下,都可以通过名为 msgs 的映射变量访问包中的消息。
在按钮上显示适当的标签
现在让我们说默认属性文件,即英语有属性
next=Next
和德语有等价的即
next=Weiter
并且您已经设置了语言环境并声明了消息包,您可以访问它以将标签放在命令按钮上,例如
<h:commandButton value="#{msgs.next}"/>
上面的答案是从Hortsmen Core Java Server Faces book中提取和修改的。