**struts程序的國際化(下)-struts的國際化

Struts 的國際化也是通過ResourceBundle 完成的。因此,也必須編寫資源文件。下面以前面的應用爲示例,演示如何實現程序的國際化。
1. 編寫資源文件
本示例程序能滿足兩種語言環境:簡體中文和英語。當然,需要滿足更多國家的語言也不是問題,只需提供對應的資源文件即可。
下面是兩份資源文件:
// 英文的資源文件
username=username
pass=password
login=submit
noname=please enter name
nopass=please enter password
下面是中文的資源文件:
// 中文的資源文件
username=用戶名
pass=密碼
login=登錄
noname=請輸入用戶名,然後再登錄
noname=請輸入密碼,然後再登錄

[color=red]注意:對於非西歐文字的資源文件,必須使用native2ascii進行轉換。[/color]
2. 加載資源文件
資源文件的加載通過struts-config.xml文件來配置,加載資源文件應從Web 應用的WEB-INF/classes路徑開始加載。因此,[color=red]資源文件必須放在WEB-INF/classes路徑或該路徑的子路徑下[/color]。[color=red]如果直接放在WEB-INF/classes 路徑下,在配置資源文件時,直接指定資源文件的baseName 即可。但如果放在子路徑下,則必須以包的形式配置。[/color]下面的示例程序中的資源文件放在WEB-INF/classesl1ee 下。配置資源文件的
struts-config.xml文件的源代碼如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Struts 配置文件的文件頭,包含DTD 等信息-->
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<!-- Struts 配置文件的根元素-->
<struts-config>
<!-- 配置所有的ActionForm-->
<form-beans>
<!-- 配置第一個ActionForm. 指定ActionForm的口arne 和type 屬性-->
<form-bean name="loginForm" type="lee.LoginForm" />
</form-beans>
<!--配置全局Forward對象-->
<global-forwards>
<!--該Forward對象的name 屬性爲error,映射資源爲/WEB-INF/jsp/error.jsp -->
<forward name="error" path="/WEB-INF/jsp/error.jsp" />
</global-forwards>
<!--此處配置所有的Action 映射-->
<action-mappings>
<!--配置Action 的path. type 屬性name 屬性配置Action 對應的ActionForm-->
<action path="/login" type="lee.LoginAction" name="loginForm">
<!--還配置了兩個局部Forward. 這兩個局部Forward僅對該Action有效-->
<forward name="welcome" path="/WEB-INF/jsp/welcome.jsp" />
<forward name="input" path="/login.jsp" />
</action>
</action-mappings>
<!--配置國際化資源. parameter指定資源文件的位置。-->
<message-resources parameter="lee.messages" />
</struts-config>

Struts 負責加載資源文件, Struts 在應用啓動時將加載該資源文件。
注意:如果需要Struts 實現程序國際化,必須將ActionServlet配直成load-on-startup的Servlet,只有這樣纔可以保證在啓動應用時加載該資源文件。
3. 使用bean 標籤顯示國際化信息
根據前面的國際化示例程序我們知道,程序要實現國際化,則不能將標籤及幫助等提示信息以硬編碼方式寫在程序中,而應使用資源文件的key 。Struts 提供了專門用於國際化的標籤bean,關於bean 標籤,將在後面深入講解。此處僅介紹國際化支持使用的bean 標籤。爲了可以在Web 應用中使用bean 標籤,在應該將struts-bean.tid 複製到WEB-INF/路徑下,並在web.xml 文件中增加該Struts 標籤庫的配置。下面的web.xml 文件增加了Struts struts-bean標籤庫,源代碼如下:
<?xml version="1.0" encoding="UTF-8" ?>
<web-app>
<!-- 配置ActionServlet. 並配置成load-on-startup的Servlet-->
<servlet>
<servlet-name>actionSevlet</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<load-on-startup>l</load-on-startup>
</servlet>
<!-- 配置ActionServlet映射的URL-->
<servlet-mapping>
<servlet-name>actionSevlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 配置struts-bean的標籤庫-->
<taglib>
<!-- 配置標籤庫的uri-->
<taglib-uri>/tags/struts-bean</taglib-uri>
<!-- 配置標籤庫對應的物理位置-->
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
</web-app>

經過上面的配置, JSP 頁面可以使用bean 標籤了,從而可以通過bean 標籤顯示國際化提示。下面是login.jsp 文件的源代碼,該文件中不再以硬編碼的方式輸出提示,而是輸出的資源文件的key:
<%@ page language="java" contentType="text/html;charset=UTF-8"
errorPage="error.jsp"%>
<!-- 增加struts-bean.xml的標籤庫 -->
<%@ taglib uri="/tags/struts-bean" prefix="bean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!-- 使用國際化資源文件的key 輸出標題 -->
<title><bean:message key="login" /></title>
</head>
<script>
function check(form)
{if (form.username.value==null ||form.username.value=="" ){
<!-- 使用國際化資源文件的key 輸出提示 -->
alert ('<bean:message key="noname"/>') ;
return false; }
else if(form.pass.value==null || form.pass.value=="") {
<!-- 使用國際化資源文件的key 輸出提示 -->
alert ('<bean:message key="nopass" />');
return false; }
else return true;
}
</script>
<body>
<font color="red"> <%
if (request.getAttribute("err") != null)
out.println(request.getAttribute("err"));
%> </font>
<form id="login" method="post" action="login.do"
onsubmit="return check(this); ">
<!-- 使用國際化資源文件的key 輸出用戶名標籤 -->
<bean:message key="username" />
<input type="text" name="username" />
<br>
<!-- 使用國際化資源文件的key 輸出密碼標籤 -->
<bean:message key="pass" />
<input name="pass" />
<br>
<!-- 使用國際化資源文件的key 輸出登錄按鈕 -->
<input type="submit" value='<bean:message key="login"/>' />
<br>
</form>
</body>
</html>

因此,實現國際化只需要編寫資源文件,然後使用bean 標籤輸出國際化信息。使用bean 標籤,可以大大降低程序國際化的複雜度,這就是使用框架的優勢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章