(1)建立中文版资源文件——globalMessages_GBK.properties,其代码如下:
title.login = 登录页面
label.username = 姓名
label.password = 密码
item.submit = 登录
item.reset = 重置
message.success = 你已成功登录。现进入了主页。
message.failure = 你登录失败。现进入注册页面,请注册你的信息。
实际上你的代码打出来后是这样子的:
title.login = \u767B\u5F55\u9875\u9762
label.username = \u59D3\u540D
label.password = \u5BC6\u7801
item.submit = \u767B\u5F55
item.reset = \u91CD\u7F6E
message.success = \u4F60\u5DF2\u6210\u529F\u767B\u5F55\u3002\u73B0\u5728\u8FDB\u5165\u4E86\u4E3B\u9875\u3002
message.failure = \u4F60\u5DF2\u767B\u5F55\u5931\u8D25\u3002\u73B0\u5728\u8FDB\u5165\u6CE8\u518C\u9875\u9762\uFF0C\u8BF7\u6CE8\u518C\u4F60\u7684\u4FE1\u606F\u3002
(2)建立英文版资源文件——globalMessages_en_US.properties,其代码如下:
title.login = Login Page
label.username = Input your username
label.password = Input your password
item.submit = Submit
item.reset = Reset
message.success = you're successful to login in.Now you've entered the main page.
message.failure = you fail to login in.You need register your infomation.
重点来了,在国际化中,所有的编码都要使用标准的编码方式,需要把中文符转化为Unicode代码,否则在国际化处理时页面会出现乱码。中文资源文件是不能直接使用的,必须转化为编制的编码方式。一般使用JDK自带的native2ascii工具进行中文资源文件编码方式转换。
(3)将中文资源文件中的中文字符转化为Unicode编码。
将中文资源文件globalMessages_GBK.properties中中文字符转化为Unicode代码,并生成符合资源文件的命名规则的新文件:globalMessages_zh_CN.properties,其实现方法是在资源文件所在的文件夹下(必须设置后JDK的访问路径)输入:
native2ascii -encoding UTF-8 globalMessages_GBK.properties globalMessages_zh_CN.properties
比如我的globalMessages_GBK.properties在F:\elipse\Struts2_day04\src,那么我就在Dos下先进入到F:\elipse\Struts2_day04\src,然后再敲上面的代码,然后就会生成一个globalMessages_zh_CN.propertiese文件。
这个文件就是我们需要的中文版资源文件。
(4) 在struts.xml配置文件中配置资源文件
<struts>
<!-- value中的值就是常量值,即国际化资源文件的名字 -->
<constant name="struts.custom.i18n.resources" value="globalMessages"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
</struts>
Struts2的国际化应用案例
基于Struts2,设计一个适用于中英文的登录系统。
该系统的组件有:
(1)登录页面(国际化login.jsp)、成功登录页面(国际化loginsuccess.jsp)。
(2)两个资源文件:支持英文登录的细纹编码文件、支持中文登录的汉字编码文件。
(3)登录验证的控制器LoginAction类。该控制其的业务逻辑是:如果验证成功,则跳转到loginsuccess.jsp页面,否则重新返回到登录页面login.jsp。
国际化login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 使用text标签输出国际化消息 -->
<title><s:text name="title.login"/></title>
</head>
<body>
<s:form action="checkLogin" method="post">
<!-- 表单元素的key值与资源文件的key对应 -->
<s:textfield name="name" key="label.username" size="20"></s:textfield>
<s:password name="password" key="label.password" size="22"></s:password>
<s:submit key="item.submit"></s:submit>
</s:form>
</body>
</html>
国际化loginsuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 使用text标签输出国际化信息 -->
<title><s:text name="message.success"/></title>
</head>
<body>
<hr>
<s:text name="label.username" />:<s:property value="name"/><br>
<s:text name="label.password" />:<s:property value="password"/><br>
</body>
</html>
LoginAction.java
package Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String name;
private String password;
private String tip; //用于定义标题信息
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
@Override
public String execute() throws Exception {
if(getName().equals("QQ") && getPassword().equals("123")) {
ActionContext.getContext().getSession().put("name", getName());
return "success";
}
else
return "error";
}
}
struts.xml
<struts>
<constant name="struts.custom.i18n.resources" value="globalMessages"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="default" namespace="/" extends="struts-default">
<!-- 国际化 -->
<action name="checkLogin" class="Action.LoginAction">
<result name="success">/国际化loginSuccess.jsp</result>
<result name="error">/国际化login.jsp</result>
</action>
</package>
</struts>