项目结构,如下图片显示:

global.properties
#global messages global.username = username global.password = password global.submit = submit
global_zh_cn.properties
#global messages global.username = \u7528\u6237\u540d global.password = \u5bc6\u7801 global.submit=\u63d0\u4ea4
global_fr.properties
#global messages global.username = nom d'utilisateur global.password = mot de passe global.submit = soumettre
global_de.properties
#global messages global.username = benutzername global.password = kennwort global.submit = einreichen
两个动作类,localeaction基本上是什么都不做, 而 loginaction 会做一个简单的验证和通过gettext()显示来自资源包错误信息。
localeaction.java
package com.h3.common.action;
import com.opensymphony.xwork2.actionsupport;
public class localeaction extends actionsupport{
//business logic
public string execute() {
return "success";
}
}
loginaction.java
package com.h3.user.action;
import com.opensymphony.xwork2.actionsupport;
public class loginaction extends actionsupport{
private string username;
private string password;
//...getter and setter methods
//business logic
public string execute() {
return "success";
}
//simple validation
public void validate(){
if("".equals(getusername())){
addfielderror("username", gettext("username.required"));
}
if("".equals(getpassword())){
addfielderror("password", gettext("password.required"));
}
}
}
login.jsp
<%@ page contenttype="text/html;charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>
<body>
<h1>struts 2 localization example</h1>
<s:form action="validateuser" namespace="/user">
<s:textfield key="global.username" name="username" />
<s:password key="global.password" name="password"/>
<s:submit key="global.submit" name="submit" />
</s:form>
<s:url id="localeen" namespace="/" action="locale" >
<s:param name="request_locale" >en</s:param>
</s:url>
<s:url id="localezhcn" namespace="/" action="locale" >
<s:param name="request_locale" >zh_cn</s:param>
</s:url>
<s:url id="localede" namespace="/" action="locale" >
<s:param name="request_locale" >de</s:param>
</s:url>
<s:url id="localefr" namespace="/" action="locale" >
<s:param name="request_locale" >fr</s:param>
</s:url>
<s:a href="%{localeen}" >english</s:a>
<s:a href="%{localezhcn}" >chinese</s:a>
<s:a href="%{localede}" >german</s:a>
<s:a href="%{localefr}" >france</s:a>
</body>
</html>
<s:textfield key="global.username" name="username" />
<s:text name="global.username" />
<s:property value="gettext('global.username')" />
<s:text name="global.password" />
<?xml version="1.0" encoding="utf-8" ?> <!doctype struts public "-//apache software foundation//dtd struts configuration 2.0//en" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="global" /> <constant name="struts.devmode" value="true" /> <package name="user" namespace="/user" extends="struts-default"> <action name="login"> <result>/pages/login.jsp</result> </action> <action name="validateuser" class="com.h3.user.action.loginaction"> <result name="success">/pages/welcome.jsp</result> <result name="input">/pages/login.jsp</result> </action> </package> <package name="default" namespace="/" extends="struts-default"> <action name="locale" class="com.h3.common.action.localeaction"> <result name="success">/user/pages/login.jsp</result> </action> </package> </struts>
http://localhost:8080/i18nlocalization/user/login.action

http://localhost:8080/i18nlocalization/locale.action?request_locale=en

http://localhost:8080/i18nlocalization/locale.action?request_locale=zh_cn

http://localhost:8080/i18nlocalization/locale.action?request_locale=de

http://localhost:8080/i18nlocalization/locale.action?request_locale=fr

代码下载 - http://pan.baidu.com/s/1jgcuaj8