您的位置:首页 > 编程语言 > Java开发

Web框架——Struts2国际化实现用户自行选择语言

2009-12-25 13:58 435 查看
Web框架——Struts2国际化实现用户自行选择语言

作者:娜 来源:程序员之家 发布者:admin

时间:2009-11-16 10:48:21 点击:182

在很多应用中,我们需要提供允许用户自行选择语言的功能。Struts2中可以通过ActionContext.getContext().setLocale(Locale
locale)设置用户的默认语言。Struts2还提供了一个名为i18n的拦截器(已经包含在默认拦截器栈中),i18n拦截器首先在请求中查找名为request_locale,如果存在,就将其转换成Locale,并设置成用户默认的Locale,此外i18n还会将其保存在Session的WW_TRANS_I18N_LOCALE属性中,如果存在此属性,则指定为用户浏览器的默认Locale。对象

我们在应用中,可以将我们系统所支持的语言放在一个下拉列表中,用户选择下拉列表中的某项时,将其值作为request_locale参数提交给Struts2就可以了。实现代码如下:

1,searchlanguage.jsp页面代码:此页面就是用户选择语言的页面,它也以嵌在任何页面下

<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<script type="text/javascript">
function langSelecter_onChanged()
{
document.getElementById("langForm").submit();
}
</script>
<!--
将session里的WW_TRANS_I18N_LOCALE属性的值取出来,赋值给此页面的属性SESSION_LOCALE
-->
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<!--
在此页面注册一个lee.Locales类型的Bean -->
<s:bean id="locales" name="lee.Locales">
<!--
给lee.Locales的参数current注入值SESSION_LOCALE
-->
<s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
</s:bean>
<!--
提交给当前目录名.action处理,这样做是为了在任何都可以嵌入此selectlanguage.jsp页面,如果用户不需要此功能,这里也可以指定action
-->
<form action="<s:url/>" id="langForm"

style="background-color:#bbbbbb; padding-top: 4px; padding-bottom: 4px;">
<!--
从资源文件中读出key为languag的信息
-->
<s:text name="languag"/>
<!--
读出刚才注册的locales类实例的locales属性
-->
<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>

2,Locales类的代码如下:此类仅作数据装载,不做其它用途。

package lee;

import java.util.*;

public class Locales
{
//current属性,由于此属性只做赋值操作,不做取值操作,因此没有get方法
private Locale current;
public void setCurrent(Locale cur)
{
this.current = cur;
}

//locales属性,由于此属性只做取值操作,不做赋值操作,因此没有set方法
public Map<String, Locale> getLocales()
{
Map<String, Locale> locales = new Hashtable<String, Locale>();
//这里是根据当前用户选择的语言类型,获取指定资源文件,这一步非常重要
ResourceBundle bundle = ResourceBundle.getBundle("messageResource" , current);
//设置工程支持的语言类型,key里的值对应资源文件里的key的值
locales.put(bundle.getString("usen"), Locale.US);
locales.put(bundle.getString("zhcn"), Locale.CHINA);
return locales;
}
}

3,资源文件messageResource.properties中的内容如下:

languag=选择语言
usen=美式英语
zhcn=简体中文

4,struts.xml配置文件中的配置如下:

<action name="*">
<result>/WEB-INF/jsp/{1}.jsp</result>
</action>

这个action的配置意思就是返回你请求的那个JSP页面,因为所有的操作,在你选择语言的时候就已经完成了,所以无需其它的处理。

5,其它页面的调用方式:

其它JSP页面要调用此页面,只需要include就行了。如下例

<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title><s:text name="loginPage"/></title>
</head>
<body>
<s:include value="selectlanguage.jsp"/>
<s:form action="Login">
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit key="login"/>
</s:form>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: