概述
国际化也叫 I18N,是 Internationalization 的简称。Struts2 国际化是建立在 Java 国际化基础上,只是 Struts2 框架对 Java 国际化进行了进一步封装,从而简化了应用程序的国际化。
使用
全局国际化
1、在类路径下新建 properties 资源文件,文件名为如下格式:
名称_en_uS.properties // 英文
名称_zh_CN.properties // 中文
例如:
# message_zh_CN.properties
name=姓名不能为空
# message_en_US.properties
name=name can't be null
2、在 struts.xml
中配置常量:
<constant name="struts.custom.i18n.resources" value="message"/>
3、接下来就可以获取资源文件中国际化后的内容了:
// 在 Action 中获取
package com.zze.action;
import com.opensymphony.xwork2.ActionSupport;
public class I18NAction extends ActionSupport {
@Override
public String execute() throws Exception {
String name = getText("name");
System.out.println(name); // 姓名不能为空
return super.execute();
}
}
<!-- 在 JSP 中获取 -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>国际化测试</title>
</head>
<body>
<s:text name="name"/>
</body>
</html>
<!-- 配置文件中获取 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<!--通过 key 取出国际化文本-->
<message key="name"></message>
</field-validator>
</field>
</validators>
Action范围国际化
1、在 Action 所在的包下创建 properties 资源文件,文件名为如下格式:
Action名_zh_CN.properties // 中文
Action名_en_US.properties // 英文
2、直接在 Action 中使用即可,使用方式同全局一致。
包范围国际化
1、在需国际化的包下新建 properties 资源文件,文件名格式如下:
package_zh_CN.properties // 中文
package_en_US.properties // 英文
2、接下来在当前包及子包中都能使用该国际化资源文件。
<!-- JSP 中获取 -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>国际化测试</title>
</head>
<body>
<s:i18n name="com/zze/action/package">
<s:text name="msg"/>
</s:i18n>
</body>
</html>
补充
使用占位符
# com/zze/action/package_zh_CN.properties
wel=欢迎 {0}
<!-- JSP 中传参并获取 -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>国际化测试</title>
</head>
<body>
<s:i18n name="com/zze/action/package">
<s:text name="wel">
<s:param>张三</s:param>
</s:text>
</s:i18n>
</body>
</html>
// Action 中传参并获取
import com.opensymphony.xwork2.ActionSupport;
public class I18NAction extends ActionSupport {
@Override
public String execute() throws Exception {
String wel = getText("wel", new String[]{"张三"});
System.out.println(wel); // 欢迎 张三
return super.execute();
}
}
评论区