在開發的系統裏,很多時候會遇到需要支援多種語言,雖然我們可以直接把語言文字直接寫在介面的位置,但維護和增加語言時十分困難。所以,在這個JSF 2.0教學裏,將會演示如何使用Resource bundle方式來顯示文字,建議大家使用這種方式集中把文字放進messages properties文件裏。
1.建立 Properties 文件
新建一個properties文件,文件裏包函了系統會使用的文字,把這個文件放置到resource 文件夾。
messages.properties
titleText=JSF Messages Demo
message = This is "message"
message.test1 = This is "message.test1"
message.test2 = This is "<h2>message.test3</h2>"
message.test3 = This is "<h2>message.test4</h2>"
message.param1 = This is "message.param1" - {0}
message.param2 = This is "message.param2" - {0} and {1}
2.使用Resource Bundles
在JSF 2.0載入Resource Bundles有兩種方法。
全域載入
以全域的方式載入,可以讓所有的JSF頁面都可以存取這個文字資源,全域載入需要建立faces-config.xml。
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>
<locale-config>
<default-locale>zh_HK</default-locale>
</locale-config>
<resource-bundle>
<base-name>com.test.demojsf.messages</base-name>
<var>msg</var>
</resource-bundle>
<message-bundle>com.test.demojsf.messages</message-bundle>
</application>
</faces-config>
本地載入
以本地的方式載入,在需要使用文字的頁面上宣告<f:loadBundle />標簽便可。
<f:loadBundle basename="com.test.demojsf.messages" var="msg"/>
3.JSF 2.0頁面
這個範例裏,在messages.properties裏定義了變數名為msg,所以只需要使用「msg.<key>」便可以存取需要的文字
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html;charset=UTF8"%>
<f:view>
<html>
<head>
<title><h:outputText value="#{msgs.titleText}"/></title>
</head>
<body>
<h1><h:outputText value="#{msgs.titleText}"/></h1>
<ol>
<li><h:outputText value="#{msg.message}" /></li>
<li><h:outputText value="#{msg['message.test1']}" /></li>
<li><h:outputText value="#{msg['message.test2']}" /></li>
<li><h:outputText value="#{msg['message.test2']}" escape="false" /></li>
<li><h:outputText value="#{msg['message.test3']}" /></li>
<li><h:outputText value="#{msg['message.test3']}" escape="false" /></li>
<li>
<h:outputFormat value="#{msg['message.param1']}">
<f:param value="param0" />
</h:outputFormat>
</li>
<li>
<h:outputFormat value="#{msg['message.param2']}">
<f:param value="param0" />
<f:param value="param1" />
</h:outputFormat>
</li>
</ol>
</body>
</html>
</f:view>
4.輸出結果
下載範例(GitHub)
https://github.com/vvtitana/DemoJSF-Resource-Bundles-Example
鏈結到這頁!