Struts国际化开发总结
就开发过程中用到的关于struts国际化的一些东西做个总结,国际化背景是由用户自行选择语言环境,然后系统显示相应国家\地区、语言环境下的样子。strust2国际化一般包括验证提示信息国际化、类型转化提示国际化、Action信息国际化和jsp页面国际化。该系统国际化中主要用到Action信息国际化和jsp页面国际化,以及少量的jsp页
面中的js国际化,下面就这几个方面进行介绍。
1.定义JavaBean,该JavaBean里保存了当前系统所支持的全部语言。该JavaBean的代
码如下:
package com.struts.test;
public class Locales{
private Locale current;
public void setCurrent(Locale cur){
this.current=cur;
}
public Map<String,Locale> getLocales(){
Map<String,Locale> locales=new Hashtable<String,Locals>();
//global是usen和zhcn所在的资源文件的baseName
ResourceBundle bundle = ResourceBundle.getBundle("global" , current);
locales.put(bundle.getString("usen"), Locale.US);
locales.put(bundle.getString("zhcn"), Locale.CHINA);
return locales;
}
}
2. 定义selectLanguage.jsp页面,该页面中主要包含一个下拉框,由用户自行选择语
言,其代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<script type="text/javascript">
function langSelecter_onChanged()
{
document.getElementById("langForm").submit();
}
</script>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<s:bean id="locales" name="com.struts.test.Locales">
<s:param name="current" value="#SESSION_LOCALE == null ? locale :
#SESSION_LOCALE"/>
</s:bean>
<form action="<s:url/>" id="langForm">
<s:text name="language"/>
<s:select label="Language" list="#locales.locales" listKey="value"
listValue="key" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
name="request_locale" id="langSelecter"
onchange="langSelecter_onChanged()" theme="simple"/>
</form>
3.配置struts.xml文件
Strust2的默认拦截器包括i18n拦截器,i18n拦截器在执行Action前,自行查找请求
中一个名为request_locale的参数,如果该参数存在,拦截器将其作为参数,转化成Locale对象,并将其设为用户默认的Locale。若不执行Action,则根据浏览器的语言环境生成Locale对象,用户选择的语言环境不起作用。下面的配置就是为了保证每一个页面都是执行Action后跳转的,从而可以保证用户选择的语言环境可以起作用。若每个页面能确保是Action之后跳转的,可省略该配置。配置代码如下:
<action name="*">
<result>/WEB-INF/jsp/{1}.jsp</result>
</action>
4.将selectLanguage.jsp包含到系统的首页(index.jsp或者login.jsp),代码如下:
<s:include value="selectLanguage.jsp"/>
5.国际化信息显示
(1)Action信息国际化
将资源文件放在包com.strusts下,命名为package_language_country.properties,则com.strusts目录下的所有action都可以访问到该资源文件。在Action中使用getText
("key")获得相应的值。
(2)JSP页面国际化
系统开发中使用到全局资源文件和临时资源文件。下面分别介绍:
①全局资源文件
只在struts.xml中配置如下:
<constant name="struts.custom.i18n.resources" value="global"></constant>
global为全局资源文件的baseName,在jsp中通过<s:text name="key"/>直接访问。
②临时资源文件
它不需要在struts.xml中配置,而是在jsp页面中加入<s:i18n name="resource">用到国际化资源的内容</s:i18n>,resource是临时资源文件的baseName。访问方法同上,<s:text name="key"/>。
(3)jsp页面中js国际化
通过链接a的href出发js函数,<a href="javascript:check('<s:text name="lan"/>');",js函数中根据lan不同显示相应语言的提示信息。