zoukankan      html  css  js  c++  java
  • JSF>国际化讯息

    一、资源文件

    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";
     }
    
    }
    

    结果如下:


     

  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/xqzt/p/5637344.html
Copyright © 2011-2022 走看看