1 WebContent/WEB-INF/web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
2 src/struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" >
<struts>
<!--
用于标示struts的国际化,规定国际化文件要以globalMessage做为开头,如:“globalMessage_zh_CN.properties”。
以下说明为有精力的同学看(可以不看):
也可以不要这行代码,采取属性文件的方式。具体做法是:先删除这行代码,然后在项目的src下
建一个属性文件,名为struts.properties(注:必须取这个名字),在属性文件中键入:
struts.custom.i18n.resources=globalMessage保存即可。
这个等号后面的"globalMessage"是随意取的,只要取的名字与国际化属性文件的名字
相对应即可,例如:若写"struts.custom.i18n.resources=Myi18n"那么国际化文件
的名字就要以Myi18n开头,如中文国际化属性文件名字就应该为"Myi18n_zh_CN.properties".
-->
<!-- value=message.globalMessage 对应着 资源文件路径 src/message/globalMessage*.properties -->
<constant name="struts.custom.i18n.resources" value="message.globalMessage"></constant>
<!-- 对应com.test.action包中的loginAction类 -->
<package name="test" namespace="/" extends="struts-default">
<action name="loginAction" class="com.test.action.LoginAction">
<result name="success">welcome.jsp</result>
<result name="login">login.jsp</result>
</action>
</package>
</struts>
3 JAVA国际化资源配置 src/message/
globalMessage_en_US.properties
login.title=login title
login.firstname=firstname
login.lastname=lastname
login.age=age
login.submit=submit
login.info=please write {0} and {1}
login.welcome=welcome you
globalMessage_zh_CN.properties
login.title=用户登录
login.firstname=姓
login.lastname=名
login.age=年龄
login.submit=提交
login.info=请输入 {0}和{1}
login.welcome=欢迎你
4 JS国际化 WebContent/js/locale
jsLocale.jsp js资源加载jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/locale/locale_<%=request.getLocale().toString() %>.js"></script>
<script type="text/javascript">
//js key获取函数
function getJsLocale(key)
{
if (typeof(jsLocale) != 'undefined')
{
if (typeof(jsLocale[key]) != 'undefined')
{
return jsLocale[key];
}
else
{
return key;
}
}
else
{
return key;
};
}
</script>
</head>
<body>
</body>
</html>
locale_en_US.js
var jsLocale =
{
name : "sky",
sex : "man",
info : "locale from js"
};
locale_zh_CN.js
var jsLocale =
{
name : "李晓峰",
sex : "男",
info : "js国际化"
};
5 后台登陆action
LoginAction
package com.test.action;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
*
* <一句话功能简述>
* <功能详细描述>
*
* @author 姓名 工号
* @version [版本号, 2012-10-9]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class LoginAction extends ActionSupport
{
@Override
public String execute() throws Exception
{
// TODO Auto-generated method stub
return super.execute();
}
/**
*
* 手动转换Locale
* @return
* @throws Exception
* @see [类、类#方法、类#成员]
*/
public String i18n() throws Exception
{
HttpServletRequest request = ServletActionContext.getRequest();
String language = request.getParameter("language");
String country = request.getParameter("country");
Locale locale = new Locale(language, country);
ActionContext.getContext().setLocale(locale);
getResource();
return "login";
}
/**
* 测试手动获取资源
* @see [类、类#方法、类#成员]
*/
public void getResource()
{
Locale locale = new Locale("zh","CN");
ResourceBundle bundle = ResourceBundle.getBundle("message.globalMessage",locale);
String name = bundle.getString("login.submit");
String name1 = bundle.getString("login.info");
Object[] os = {"infi","th000"};
String name11 = MessageFormat.format(name1, os);
String name3 = getText("name");
System.out.println(name);
System.out.println(name11);
System.out.println(name3);
}
}
6 国际化测试JSP页面 login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><s:text name="login.title"></s:text></title>
</head>
<body>
<s:text name="login.title"></s:text>
<br>
<hr />
<!-- 下面是手动地点击想要的语言。其中规定了,超联接要提交到的方法(i18n),提交时一起传入相应的语言及国家的代码值 -->
<a href="<%=path%>/loginAction!i18n.action?language=en&country=US">English</a>|
<a href="<%=path%>/loginAction!i18n.action?language=zh&country=CN">中文</a>
<br>
<!-- 以下代码中label="%{getText('login.firstname')}"是读取属性文件(如:globalMessage_en_US.properties)中的名为"login.firstname"的属性的值。 -->
<form action="<%=path%>/loginAction" method="post">
<table align="left">
<s:textfield name="firstname" label="%{getText('login.firstname')}"></s:textfield>
<s:textfield name="lastname" label="%{getText('login.lastname')}"></s:textfield>
<s:textfield name="age" label="%{getText('login.age')}"></s:textfield>
<s:submit value="%{getText('login.submit')}"></s:submit>
<s:text name="login.info">
<s:param value="%{getText('login.firstname')}"/>
<s:param value="%{getText('login.lastname')}"/>
</s:text>
</table>
</form>
</body>
</html>
7 国际化测试页面 java国际化 + js国际化
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><s:text name="login.welcome"></s:text></title>
<jsp:include page="/js/locale/jsLocale.jsp" />
<script type="text/javascript">
function init()
{
document.getElementById("locale").innerHTML = getJsLocale("info");
}
</script>
</head>
<body οnlοad="init()">
<s:text name="login.welcome"></s:text>
<div id="locale"></div>
</body>
</html>
8 strut2 架包
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-logging-1.1.jar
freemarker-2.3.13.jar
junit-3.8.1.jar
ognl-2.6.11.jar
servlet-api.jar
struts2-core-2.1.6.jar
xwork-2.1.2.jar