当前位置: 首页 > 图文教程 > Java技术 > Web框架 > Web框架:Struts2国际化实现用户自行选择语言

Web框架
浅谈Ajax与Spring集成
浅谈Mock和基于Spring容器管理事务的测试
Hibernate中一级缓存与二级缓存
浅谈Hibernate的配置信息(一)
浅谈Hibernate的配置信息(二)
浅谈Spring中使用Quartz来执行计划任务
浅谈JFreeChart实时曲线(代码)
Ajax框架中选DWR还是A4J
浅谈Hibernate中关联问题
浅谈项目开发过程中使用Struts-menu
浅谈使用模板模式简化操作Hibernate
Hibernate中加载并存储对象
浅谈Hibernate依赖对象(Dependent objects)
浅谈Hibernate中自定义值类型
ORM那些事
51培训对Hibernate中的事务详解
51培训详谈Hibernate检索
详谈Struts2的核心概念(上)
详谈Struts2的核心概念(下)
浅谈应用dom4j操作xml文件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-12-26   浏览: 315 ::
收藏到网摘: n/a

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

 

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

 

1searchlanguage.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;">

<!-- 从资源文件中读出keylanguag的信息 -->

    <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>

 

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

 

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=简体中文

 

4struts.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>