Struts2的国际化是建立在java国际化的基础之上的,因此具有强大的国际互能力。Struts2运行时自动检测当前的
Location,然后使用RsourceBundle加载对应的Locale资源文件。因为Struts2对java的国际化进行了封装,因此国际化起来更简单,用户一般提供不同国家的消息资源即可。在Struts2的国际化包含三个部分:前台的国际化,Action中的国际化,验证配置文件的国际化。
在Struts2中加载全局资源文件
国际化的前提是如何让Struts2能够加载到国际化消息资源文件。加载国际化消息资源文件的方式有两种。
1.在src目录下创建一个struts.propertied文件,服务器启动时会自动加载该文件。在这个文件中写入
struts.custom.i18n.resources=globalResourceMessages,服务器会自动加载前缀为globalResourceMessages的资源文件。
2.或者在struts.xml文件中添加<constant name="strtus.custom.i18n.resources" value="globalResourceMessages">
</constant>服务器会自动加载前缀为globalResourceMessages的资源文件。如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="strtus.custom.i18n.resources" value="globalResourceMessages">
<package name="struts2resource" extends="struts-default">
...
</package>
</struts>
Struts2访问国际化消息
访问国际化消息资源文件时Struts2国际化的重要组成部分,在struts2中访问国际化消息主要有以下四种方式:
(1)JSP页面:<s:text name="key">,如下:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><s:text name="title"></s:text></title>
</head>
<body>
//输出国际化消息中的内容
<s:text name="content"></s:text>
<s:form action="resourceaction">
<s:textfield name="user" key="user"></s:textfield>
<s:password name="pass" key="pass"></s:password>
<s:submit key="submit"></s:submit>
</s:form>
</body>
</html>
在src目录下的struts.properties文件的内容:
struts.custom.i18n.resources=globalResourceMessages
globalResourceMessages_zh_CN.properties文件的内容
title=\u8BBF\u95EE\u6D88\u606F\u6587\u4EF6
content=\u8FD9\u662F\u4E2D\u6587\u9875\u9762
user=\u7528\u6237
pass=\u5BC6\u7801
string.null=\u7528\u6237\u4E0D\u80FD\u4E3A\u7A7A
submit=\u767B\u5F55
welcome={0},\u6B22\u8FCE\u4F60{1}
上面的<s:text name="content"></s:text>将会输出content=\u8FD9\u662F\u4E2D\u6587\u9875\u9762,也就是这是中文页面。
globalResourceMessages_en_US.properties文件的内容:
title=Access information
content=This is English
user=User
pass=Pass
string.null=user not null\!
submit=Submit
welcome={0},welcome to {1}
(2)Action类中:使用ActionSupport类的getText方法.
下面的这个Action对前面提交过来的数据的处理,
package action;
import com.opensymphony.xwork2.ActionSupport;
public class ResourceAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String user;
@Override
public String execute() throws Exception {
//输出资源文件中content的值
System.out.println(getText("content"));
//以下在ACtion中输出带占位符的国际化消息
String s[] ={getUser(),"理央silence!"};
String msg = getText("welcome",s);
System.out.print(msg);
return super.execute();
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
}
其中,String msg = getText("welcome",s)是调用getText(String aTextNmae,List args)或getText(String key,String[] args)方法来田中占位符。
(3)表单元素:在标签中指定一个key
在第一个使用JSP页面时就已经使用了该表单元素<s:submit key="submit"></s:submit>
(4)验证文件(XXX-validation.xml):在<message>中指定一个key:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="user">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="string.null"></message>
</field-validator>
</field>
</validators>
其中<message key="string.null"></message>就是指定消息资源文件。