JSF---->国际化讯息

来源:互联网 发布:linux开发工程师招聘 编辑:程序博客网 时间:2024/05/22 02:10

一、资源文件

JSF的国际化(Internnationalization)讯息处理是基于Java对国际化的支持,您可以在一个讯息资源文件中统一管理讯息资源,资源文件的名称是.properties,而内容是名称与值的配对,例如:

messages.properties

titleText=JSF Demo hintText=Please input your name and passwordnameText=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 DemoInputTip = Please input your name and password:NameTip = Name:PasswordTip = Password:CommandText = SubmitchooseLanguageTip = Please Choose Your Language:

messages_zh_cn.properties

globleTitleText = JSF2.0\u793A\u4F8BInputTip = \u8BF7\u8F93\u5165\u7528\u6237\u540D\u548C\u5BC6\u7801NameTip = \u7528\u6237\u540DPasswordTip = \u5BC6\u7801CommandText = \u63D0\u4EA4chooseLanguageTip =\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"; }}

结果如下:


 

原创粉丝点击