struts2国际化我通过一个Demo来理解的。
国际化的配置文件包括:1.全局配置文件的国际化 2.包下配置文件的国际化 3.Action的国际化。如下图所示:

需要注意的是,国际化的配置文件命名规则是: resource_country_language.properties。
其中country表示国家或地区,它的取值由ISO-639定义的大写的、两个字母组成的代码,以下左表列出了常用的ISO-639语言代码。右表列出了常用的ISO-3166国家和地区代码

1.global__en_US.properties与global__zh_CN.properties是全局范围资源文件,应放在src下
global__en_US.properties配置如下: id=ID name=NAME age=AGE date=CREATEDATE username=(G)username password=(G)password submit=(G)submit chinese=(G)Chinese english=(G)English language=(G)Language login=(G)Login Page firstpage=This is the first page,you can change the language in any pages if you like global__zh_CN.properties配置如下: id=编号 name=用户名 age=年龄 date=申请时间 username=(G)用户名 password=(G)密码 submit=(G)提交 chinese=(G)中文 english=(G)英文 language=(G)语言 login=(G)登录页面 firstpage=这是首页,你可以根据你的需求更改语言
2.package_en_US.properties与package_zh_CN.properties是包范围的配置文件,放在所需要的包内,基名必须package开头的。
3.LoginAction__en_US.properties与LoginAction__zh_CN.properties是Action范围资源文件,应放在LoginAction.java同一目录下:
ChangeLocale_en_US.properties与ChangeLocale_zh_CN.properties也是Action范围的资源文件,作用是用来切换国际化的。
LoginAction_en_US.properties配置如下: validate=Username or Password is validate! LoginAction_zh_CN.properties配置如下: validate=用户名或密码错误! ChangeLocale_en_US.properties配置如下: chinese=(A)Chinese english=(A)English language=(A)Language ChangeLocale_zh_CN.properties配置如下: chinese=(A)中文 english=(A)英文 language=(A)语言
4.action文件的配置
LoginAction.java代码如下:
@Action("/login")
@Results({ @Result(name = "loginSuc", location = "/firstpage.jsp"),
@Result(name = "loginErr", location = "/login.jsp") })
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String loginCheck() {
if ("admin".equals(username) && "admin".equals(password)) {
return "loginSuc";
} else {
addActionError(getText("validate"));
return "loginErr";
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
ChangeLocale.java的代码如下:
@Action("/changeLocale")
@Results({ @Result(name = "changeLocaleSuc", location = "/login.jsp") })
public class ChangeLocale extends ActionSupport {
private String key;
public String changeLocale() {
HttpSession session = ServletActionContext.getRequest().getSession();
Locale locale;
if (key.equals("1")) {
locale = Locale.CHINA;
} else {
locale = Locale.US;
}
ActionContext.getContext().setLocale(locale);
session.setAttribute("WW_TRANS_I18N_LOCALE", locale);
return "changeLocaleSuc";
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
ChangeLanguage.java的代码如下:
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
public class ChangeLanguage extends ActionSupport {
public Map<String, Locale> getLocales() {
Map<String, Locale> map = new HashMap<String, Locale>();
map.put(getText("chinese"), Locale.CHINA);
map.put(getText("english"), Locale.US);
return map;
}
}
5.struts.xml中要配置上国际化的信息
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="global"/> <!-- global为国际化配置文件的基名,配置上之后struts会首先默认读取此基名的配置文件 --> <constant name="struts.i18n.encoding" value="UTF-8"/> <constant name="struts.convention.action.fileProtocols" value="jar,zip" /> <constant name="struts.convention.action.includeJars" value=".*?/_wl_cls_gen.*?jar(!/)?" /> <constant name="struts.convention.action.suffix" value="Action" /> <constant name="struts.convention.action.mapAllMatches" value="true" /> <constant name="struts.convention.default.parent.package" value="struts-default" /> <constant name="struts.convention.package.locators" value="action,i18n" /> </struts>
5.jsp页面国际化的实现
login.jsp页面中,普通调用通过<s:text name="language"/>来实现,其中name为配置文件中的key名称。form表单中通过<s:textfield name="username" key="username"/>实现,key值为配置文件中的key名称。以此映射关系来对应中英文切换。
<body>
<center>
<table>
<tr>
<td><s:text name="language"/>:</td>
<td>
<a href="changeLocale!changeLocale?key=1"><s:text name="chinese"/></a>
<a href="changeLocale!changeLocale?key=0"><s:text name="english"/></a>
</td>
</tr>
</table>
<h1><s:property value="%{getText('login')}"/></h1>
<s:actionerror/>
<s:form action="login!loginCheck">
<s:textfield name="username" key="username"/>
<s:password name="password" key="password"/>
<s:submit key="submit"/>
</s:form>
</center>
</body>
firstpage.jsp页面:
<body>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<s:bean id="locales" name="com.yimao.i18n.ChangeLanguage"/>
<form name="form">
<s:select
key="language"
list="#locales.locales"
listKey="value"
listValue="key"
value="#SESSION_LOCALE==null?locale:#SESSION_LOCALE"
name="request_locale" onchange="selectLanguage_onchanged()"/>
</form>
<s:text name="firstpage"/>
</body>
页面实现效果:
点击语言栏的(A)中文连接页面变成中文显示:

点击语言栏的(A)英文连接页面变成英文显示:

英文状态下的提交结果:

中文状态下的提交结果:

在这里可以根据下拉列表中的提示进行中英文切换。
以上是比较简单的实现,更多的实现有待补充。
浙公网安备 33010602011771号