**struts程序的国际化(下)-struts的国际化

Struts 的国际化也是通过ResourceBundle 完成的。因此,也必须编写资源文件。下面以前面的应用为示例,演示如何实现程序的国际化。
1. 编写资源文件
本示例程序能满足两种语言环境:简体中文和英语。当然,需要满足更多国家的语言也不是问题,只需提供对应的资源文件即可。
下面是两份资源文件:
// 英文的资源文件
username=username
pass=password
login=submit
noname=please enter name
nopass=please enter password
下面是中文的资源文件:
// 中文的资源文件
username=用户名
pass=密码
login=登录
noname=请输入用户名,然后再登录
noname=请输入密码,然后再登录

注意:对于非西欧文字的资源文件,必须使用native2ascii进行转换。
2. 加载资源文件
资源文件的加载通过struts-config.xml文件来配置,加载资源文件应从Web 应用的WEB-INF/classes路径开始加载。因此, 资源文件必须放在WEB-INF/classes路径或该路径的子路径下如果直接放在WEB-INF/classes 路径下,在配置资源文件时,直接指定资源文件的baseName 即可。但如果放在子路径下,则必须以包的形式配置。下面的示例程序中的资源文件放在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 标签,可以大大降低程序国际化的复杂度,这就是使用框架的优势。

你可能感兴趣的:(jsp,bean,Web,xml,struts)