JSF 2.0和Resource Bundles使用范例

在开发的系统里,很多时候会遇到需要支援多种语言,虽然我们可以直接把语言文字直接写在介面的位置,但维护和增加语言时十分困难。所以,在这个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 "&lt;h2&gt;message.test4&lt;/h2&gt;"
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

下载附件

发布留言

发布留言必须填写的电子邮件地址不会公开。 必填栏位标示为 *

*

验证码 * Time limit is exhausted. Please reload CAPTCHA.

这个网站采用 Akismet 服务减少垃圾留言。进一步了解 Akismet 如何处理网站访客的留言资料