<!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下的目錄結構是一致的,如下圖所示

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有一定了解。
網上對國際化也有其他的做法,也可以參考。
如果上述有所偏頗,敬請斧正。