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)英文连接页面变成英文显示:
英文状态下的提交结果:
中文状态下的提交结果:
在这里可以根据下拉列表中的提示进行中英文切换。
以上是比较简单的实现,更多的实现有待补充。