您的位置:首页 > Web前端 > JavaScript

JSF---->国际化讯息

2012-05-17 23:12 246 查看

一、资源文件

JSF的国际化(Internnationalization)讯息处理是基于Java对国际化的支持,您可以在一个讯息资源文件中统一管理讯息资源,资源文件的名称是.properties,而内容是名称与值的配对,例如:
messages.properties
titleText=JSF Demo
hintText=Please input your name and password
nameText=name
passText=password
commandText=Submit

资源文件名称由basename加上语言与地区来组成,例如:
basename.properties    basename_en.properties     basename_zh_cn.properties
由于讯息资源文件必须是ISO-8859-1编码,所以对于非西方语系的处理,必须先将之转换为Java Unicode Escape格式,使用JDK的工具程序native2ascii来转换(myeclipse有properties类型文件编辑器)。
messages_en.properties
globleTitleText = JSF Demo
InputTip = Please input your name and password:
NameTip = Name:
PasswordTip = Password:
CommandText = Submit
chooseLanguageTip = Please Choose Your Language:

messages_zh_cn.properties
globleTitleText = JSF2.0\u793A\u4F8B
InputTip = \u8BF7\u8F93\u5165\u7528\u6237\u540D\u548C\u5BC6\u7801
NameTip = \u7528\u6237\u540D
PasswordTip = \u5BC6\u7801
CommandText = \u63D0\u4EA4
chooseLanguageTip =\u8BF7\u9009\u62E9\u60A8\u7684\u8BED\u8A00

接下来您可以使用<f:loadBundle>卷标来指定加载讯息资源,

<f:view>可以设定locale属性,直接指定所要使用的语系,例如:
<f:view locale="zh_cn"> <f:loadBundle basename="messages" var="msgs"/>

直接指定以上的话,则会使用繁体中文来显示,JSF会根据<f:loadBundle>的basename属性加上<f:view>的locale属性来决定要使用哪一个讯息资源文件,就上例而言,就是使用 messages_zh_cn.properties,如果设定为以下的话,就会使用messages_en.properties:
<f:view locale="en"> <f:loadBundle basename="messages" var="msgs"/>

您也可以在faces-config.xml中设定语系,例如:
 <faces-config>
  <application>
   <local-config>
    <default-locale>en</default-locale>
    <supported-locale>zh_cn</supported-locale>
   </local-config>
  </application>
  .....
 </faces-config>

在<local-config>一定有一个<default-locale>,而<supported-locale>可以有好几个,这告诉JSF您的应用程序支持哪些语系。当然,如果您可以提供一个选项让使用者选择自己的语系会是更好的方式,例如根据user这个Bean的locale属性来决定页面语系:
<f:view locale="#{user.locale}"> <f:loadBundle basename="messages" var="msgs"/>

二:例子-下拉列表改变页面中英文

(例子中使用的资源文件如上所示)
页面:index.jsp
<%@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=gb18030"%>
<f:view locale="#{user.local }">
<html>
<head>
<title><h:outputText value="#{msgs.globleTitleText}" />
</title>
</head>
<body>
<f:loadBundle var="msgs" basename="messages" />
<br>

<h:form>
<h:outputText value="#{msgs.chooseLanguageTip}"></h:outputText>
<h:selectOneMenu value="#{user.local}"
onchange="this.form.submit();"
valueChangeListener="#{user.changeLocale}">
<f:selectItem itemValue="zh_CN" itemLabel="Chinese" />
<f:selectItem itemValue="en" itemLabel="English" />
</h:selectOneMenu>

<h3>
<h:outputText value="#{msgs.InputTip }" />
</h3>
<h:outputText value="#{user.errMsg}"></h:outputText>
<br>
<h:outputText value="#{msgs.NameTip }"></h:outputText>
<h:inputText value="#{user.name}" />
<br>
<h:outputText value="#{msgs.PasswordTip }" />
<h:inputSecret value="#{user.password }"></h:inputSecret>
<br>
<h:commandButton value="#{msgs.CommandText}"
action="#{user.verify }" />

</h:form>

</body>
</html>
</f:view>

UserBean.java
package wsz.ncepu;

import javax.faces.event.ValueChangeEvent;

public class UserBean {
private String name;
private String password;
private String errMsg;
private String local;

public String getLocal() {
return this.local;
}

public void setLocal(String local) {
this.local = local;
}

public String getPassword() {
return this.password;
}

public void setPassword(String password) {
this.password = password;
}

public String getErrMsg() {
return this.errMsg;
}

public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

/**
* 校验用户名和密码的方法。
*/
public String verify() {
System.out.println("name:" + name + ",password:" + password);
if (name.equals("admin") && password.equals("123456")) {
return "success";
} else {
errMsg = "用户名或密码错误!";
return "failure";
}
}

public void changeLocale(ValueChangeEvent event) {
if ("en".equals(local))
local = "zh_CN";
else
local = "en";
}

}

结果如下:





 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息