☆藍色夢想☆

          世界總是反反覆覆錯錯落落地飄去 來不及嘆息 生活不是平平淡淡從從容容的東西 不能放棄
          posts - 57, comments - 5, trackbacks - 0, articles - 0

          關于struts國際化的一點嘗試

          Posted on 2006-02-27 14:51 ☆藍色夢想☆ 閱讀(329) 評論(0)  編輯  收藏 所屬分類: Struct

          1、修改web.xml文件,內容如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<web-app>
              <servlet>
                  <servlet-name>action</servlet-name>
                  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
                  <init-param>
                      <param-name>config</param-name>
                      <param-value>/WEB-INF/struts-config.xml</param-value>
                  </init-param>
                  <init-param>
                     <param-name>application</param-name>
                     <param-value>com.sharp.struts.ApplicationResources</param-value>
                   </init-param>

                  <load-on-startup>1</load-on-startup>
              </servlet>
              <servlet-mapping>
                  <servlet-name>action</servlet-name>
                  <url-pattern>*.do</url-pattern>
              </servlet-mapping>
          </web-app>

          文件中灰色背景部分為國際化需要增加的內容,其中com.sharp.struts.ApplicationResources跟你的WEB-INF目錄下classes下的目錄結構是一致的,如下圖所示
          web-xml.jpg

          2、建立資源文件ApplicationResources.source(中文源文件,而不是中文資源文件)、ApplicationResources_en.properties(英文資源文件)。
          首先建立ApplicationResources_en.properties文件,內容如下:
          owner.greet=Greet
          owner.name=Name
          owner.address=Address
          owner.email=Email
          owner.tel=Tel

          對應的中文源文件內容如下:
          owner.greet=稱呼
          owner.name=姓名
          owner.address=地址
          owner.email=電子郵件
          owner.tel=聯系電話

          然后通過在cmd中執行native2ascii -encoding GBK ApplicationResources.source .\ApplicationResources_zh_CN.properties
          命令將中文源文件生成UTF-8格式的中文資源文件,內容如下
          owner.greet=\u79f0\u547c
          owner.name=\u59d3\u540d
          owner.address=\u5730\u5740
          owner.email=\u7535\u5b50\u90ae\u4ef6
          owner.tel=\u8054\u7cfb\u7535\u8bdd
          這里介紹一下,native2ascii是JDK包自帶的一個工具,如果你不能cmd直接執行native2ascii命令,請檢查你的環境變量,這里不具體介紹了。

          3、接著來介紹一下struts-config.xml文件的內容,如果熟悉struts的朋友也覺得很簡單的
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "
          <struts-config>
              <!-- ========== Form Bean Definitions ================================== -->
              <form-beans>
                  <form-bean name="ownerForm" type="com.sharp.struts.form.OwnerForm">
                      <form-property name="Email" type="java.lang.String" />
                      <form-property name="Greet" type="java.lang.String" initial="Mr." />
                      <form-property name="Address" type="java.lang.String" />
                      <form-property name="Tel" type="java.lang.Integer" initial="0" />
                      <form-property name="Name" type="java.lang.String" />
                  </form-bean>
                 
              </form-beans>
             
              <!-- ========== Global Exception Definitions ============================== -->
              <global-exceptions />
             
              <!-- ========== Global Forward Definitions =============================== -->
              <global-forwards>
                  <forward name="failure" path="/failure.jsp" />
                 
              </global-forwards>
             
              <!-- ========== Action Mapping Definitions =============================== -->
              <action-mappings>
                  <action
                      attribute="ownerForm"
                      input="/owner.jsp"
                      name="ownerForm"
                      path="/owner"
                      type="com.sharp.struts.action.OwnerAction"
                      parameter="formAction"><!--因為action類繼承DispatchAction類,所以需要設置這個屬性-->
                      <forward name="owner"   path="/owner.jsp" />
                      <forward name="success" path="/success.jsp" />
                  </action>

                 
              </action-mappings>
             
          </struts-config>

          4、現在就開始準備java和jsp文件吧
          owner.jsp文件內容如下:
          <%@ page contentType="text/html;charset=gb2312" %>
          <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
          <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
          <html:html locale="true">
           <head>
            <meta name = "Generator" content = "Easy Struts Xslt generator for Eclipse (
            <title>Struts Form for ownerForm</title>
            <script language="javascript">
                function changeLanguage(language) {
                    if(language == "en") {
                        document.all("language").value = "en";
                    } else {
                        document.all("language").value = "cn";
                    }
                    document.forms[0].submit();
                }
            </script>
           </head>
           <body>
            <html:form action="/owner">
            <input type="hidden" name="formAction" value="changeLanguage">
            <input type="hidden" name="language">

             <bean:message key="owner.greet" /> : <html:select property="greet">
                <html:option value=""></html:option>
                <html:option value="Mr.">Mr.</html:option>
                <html:option value="Miss.">Miss.</html:option>
                <html:option value="Mrs.">Mrs.</html:option>
               </html:select><html:errors property="greet"/></br>   
             <bean:message key="owner.name" /> : <html:text property="name"/><html:errors property="name"/></br>
             <bean:message key="owner.address" /> : <html:text property="address"/><html:errors property="address"/></br>
             <bean:message key="owner.email" /> : <html:text property="email"/><html:errors property="email"/></br>
             <bean:message key="owner.tel" /> : <html:text property="tel"/><html:errors property="tel"/></br>
             <html:submit/>
             <html:cancel/>
             <input type="button" name="langEn" value="英文版" onclick="changeLanguage('en')">   
             <input type="button" name="langCn" value="中文版" onclick="changeLanguage('cn')">
            </html:form>
           <body>
          </html:html>

          OwnerAction.java文件內容如下:
          // Created by Xslt generator for Eclipse.
          // XSL :  not found (java.io.FileNotFoundException:  (Bad file descriptor))
          // Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl

          package com.sharp.struts.action;

          import java.util.Locale;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.struts.Globals;
          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import org.apache.struts.actions.DispatchAction;

          import com.sharp.struts.form.OwnerForm;

          /**
           * OwnerAction.java created by EasyStruts - XsltGen.
           *
          http://easystruts.sf.net
           * created on 10-09-2004
           *
           * XDoclet definition:
           * @struts:action path="/owner" name="ownerForm" input="/owner.jsp" validate="true"
           * @struts:action-forward name="/success.jsp" path="/success.jsp"
           */
          public class OwnerAction extends DispatchAction {

           
           public ActionForward changeLanguage(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) {

             String language = request.getParameter("language");   
             if (language.equals("en")) {
                  request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ENGLISH);    
             } else {    
                  request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.CHINESE);
             }
             
                  return mapping.findForward("owner");
              }
          }
          這里需要注意一下,千萬不要弄錯,我在這里就花費了一個多小時,因為把文件名寫錯了
          Locale.ENGLISH是一個Locale對象,getLanguage()方法返回en,跟資源文件(ApplicationResources_en.properties)的后綴相同
          Locale.CHINESE是一個Locale對象,getLanguage()方法返回zh,跟資源文件(ApplicationResources_zh_CN.properties)的后綴相同


          另外還用到一個ownerForm.java文件,內容如下:
          // Created by Xslt generator for Eclipse.
          // XSL :  not found (java.io.FileNotFoundException:  (Bad file descriptor))
          // Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl

          package com.sharp.struts.form;

          import javax.servlet.http.HttpServletRequest;

          import org.apache.struts.action.ActionError;
          import org.apache.struts.action.ActionErrors;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionMapping;

          /**
           * OwnerForm.java created by EasyStruts - XsltGen.
           * http://easystruts.sf.net
           * created on 10-09-2004
           *
           * XDoclet definition:
           * @struts:form name="ownerForm"
           */
          public class OwnerForm extends ActionForm {

           // --------------------------------------------------------- Instance Variables

           /** Email property */
           private String email;

           /** Greet property */
           private String greet = "Mr.";

           /** Address property */
           private String address;

           /** Tel property */
           private int tel = 0;

           /** Name property */
           private String name;
           // --------------------------------------------------------- Methods
          ......
          //getter,setter mothod,這里不贅列了

          }

          5、總結
          這樣一個國際化的小例子就可以運行了,不過上面寫得比較粗略,需要對java和struts有一定了解。
          網上對國際化也有其他的做法,也可以參考。
          如果上述有所偏頗,敬請斧正。

          主站蜘蛛池模板: 东乡县| 江津市| 司法| 巴东县| 龙泉市| 乐山市| 文登市| 福泉市| 红原县| 石棉县| 勃利县| 喀什市| 贺州市| 托克托县| 油尖旺区| 麻城市| 冕宁县| 成安县| 诸暨市| 永川市| 洛南县| 额尔古纳市| 金平| 枣强县| 赣榆县| 连江县| 灵川县| 平塘县| 武乡县| 鞍山市| 牙克石市| 大丰市| 凤山市| 涞水县| 富蕴县| 祥云县| 上虞市| 沧源| 红安县| 宣城市| 澄城县|