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

    结果如下:


     

  • 相关阅读:
    线性回归 r python 比较
    vps
    插桩 inline hook 动态二进制插桩的原理和基本实现过程
    duration of lease 1 0.5 0.875 DHCP 租借时间 续租时间 重新绑定时间
    单页应用 cookies处理
    websocket 无需通过轮询服务器的方式以获得响应 同步在线用户数 上线下线 抓包 3-way-handshake web-linux-shell 开发
    code_action
    mysql 表级锁
    mysql 表级锁
    块级标签和行级标签
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637657.html
Copyright © 2020-2023  润新知