Struts2实现自由选择语言环境

来源:互联网 发布:电信是什么网络模式 编辑:程序博客网 时间:2024/06/13 13:11

struts国际化需要

开发工具myeclipse8.0

第一步:新建项目必须要J2EE5.0(不然加不上Struts2)包

第二步:加入Struts2核心包(struts2-core Library)其他的不需要

【struts2核心包2.1.8】

 struts2-embeddedjsp-plugin-2.1.8.jar
 struts2-convention-plugin-2.1.8.jar
 struts2-json-plugin-2.1.8.jar
struts2-core-2.1.8.jar

第三步:更改 WEB-INF/web.xml文件

所有的jsp和Action都交给过滤

  <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
  </filter>
  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>*.action</url-pattern>
      <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
第四步:修改src目录下的struts.xml文件添加一个Action

/**name值随便写  extends默认是写成"struts-default" 主要作用是继承Action的一些用到的类*/

    <package name="struts2_login" extends="struts-default">          

  /**name值随便写(访问的路径)    method对应Action中的方法 class对应的类*/

        <action name="checkLogin2" class="com.LoginAction" method="checkLogin2">
  /**返回的字符串   和跳转的页面地址*/           

<result name="success">/choose.jsp</result></action>
    </package>

第五步:添加消息资源文件

【Struts2消息资源文件】

//国际化文件

globalMessages_en_US.properties


huizi.home=Welcome
huizhi.en=American English
huizhi.cn=Simplified Chinese

 

globalMessages_zh_CN.properties


huizi.home=/u4F60/u597D/u554A
huizhi.en=/u7F8E/u56FD/u82F1/u8BED
huizhi.cn=/u7B80/u4F53/u4E2D/u6587

 

配置键值对


//默认文件   以下设置是固定的因是Struts的内部变量

struts.properties

//设置18n的前缀,并且此文件为全局消息资源文件

struts.custom.i18n.resources=globalMessages

//设置编码集
struts.i18n.encoding=utf-8

第六步:创建Action   路径为SRC  com下面  路径和名字和struts.xml配置信息统一

 

【继承ActionSupport   java类一个也就是Action文件】

 

@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {
//设置获取语言环境的变量
    private Locale current;
    public void  setCurrent(Locale cur){
        this.current=cur;
    }
    @SuppressWarnings("unchecked")
    public Map<String, Locale> getLocales(){

//定义MAP加入本系统支持的语言环境
        Map<String, Locale> locales=new Hashtable<String, Locale>(2);
        ResourceBundle bundle=ResourceBundle.getBundle("globalMessages",current);

    //"huizhi.en"和"huizhi.cn"要对应消息资源文件不然会报标签错误
        locales.put(bundle.getString("huizhi.en"),Locale.US);
        locales.put(bundle.getString("huizhi.cn"),Locale.CHINA);
        return locales;
    }
    public String checkLogin2(){
        return SUCCESS;
    }

}

第七步:在根目录下面添加一个jsp文件与struts.xml中设置的统一

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>//编码
<%@ taglib prefix="s" uri="/struts-tags"%>  //给页面加入Struts标签库

<script type="text/javascript">//js事件
function changeLocale()
{
 document.getElementById("langForm").submit();
}
</script>

//获取struts2默认的资源拦截器

<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"></s:set>

//调用javaBean传入本地的语言包

<s:bean id="locales" name="com.LoginAction" >
<s:param name="current" value="#SESSION_LOCALE==null?locale:#SESSION_LOCALE"></s:param>
</s:bean>

//默认当前连接
      <form action='<s:url/>' name="langForm">

//struts2标签传入map #locales.locales 调用javaBean中个头方法
 <s:select label="language" list="#locales.locales" listKey="value" listValue="key" 
 value="#SESSION_LOCALE==null?locale:#SESSION_LOCALE" name="request_locale"
 onchange="changeLocale()" headerKey="0" headerValue="--select--"/>
      </form>

//struts2标签 显示消息资源文件key对应的数据据

      <s:text name="huizi.home"></s:text>

//注意:别忘了最后访问的时候访问的是http://localhost:8088/progect/*.Action

 

突然间事情多了。第一次写不知道从何下手