一、介绍
国际化Internationalization的首末字符I和N之间字符数是18,简称I18N
“国际化”是指一个应用程序在运行时,能够根据客户端请求所来自国家或地区语言的不同,而显示不同的语言界面。
比如:你的电脑是中文操作系统,这个应用程序的界面使用中文文字;客户端是英文操作系统,就显示英文界面。
国际化资源文件,后缀以properties作为扩展名,该文件以“键=值”(key=value)对的形式存储资源数据
二、命名格式:
1、资源文件名.properties
2、资源文件名_语言种类.properties
三、编码
在国际化时,所有的字符都要使用标准的编码方式,需要把中文字符转换为Unicode代码。
中文资源文件不能直接使用,必须转换为Unicode代码
Eclipse中,在globalMessages_zh_CN.properties文件中,在等式右边输入中文,自动转换为Unicode编码方式,如图所示:
三、应用实例
登陆时调用中文资源文件如下:
IE浏览器将英文[en-US]上移到顶部,如下:
重新打开浏览器登陆页面,此时调用英文资源文件,如下
Eclipse中实例目录结构,如下:
1、编写国际化资源文件,将这两个文件放在和struts.xml同一个目录
中文文件:globalMessages_zh_CN.properties
英文文件:globalMessages_en_US.properties
2、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter>
<!-- 配置Struts2核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 配置Struts2核心Filter的实现类 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 配置Filter拦截的URL -->
<filter-mapping>
<!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>
3、编写视图组件
(1)login.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!-- 使用text标签输出国际化消息 -->
<title><s:text name="loginTitle" /></title>
</head>
<body>
<s:form action="checkLogin" method="post">
<!-- 表单元素的key值与资源文件的key对应 -->
<s:textfield name="name" key="loginName"></s:textfield>
<s:password name="password" key="loginPassword"></s:password>
<s:submit key="loginSubmit"></s:submit>
</s:form>
</body>
</html>
(2)loginSuccess.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!-- 使用text标签输出国际化消息 -->
<title><s:text name="successPage" /></title>
</head>
<body>
<hr>
<s:text name="loginName" />:<s:property value="name" /><br>
<s:text name="loginPassword" />:<s:property value="password" /> </body>
</html>
4、编写业务控制器
LoginAction1.java
package loginAction; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class LoginAction1 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;
} public String execute() throws Exception{
if(getName().equals("QQ")&&getPassword().equals("123")){
ActionContext.getContext().getSession().put("name", getName());
return SUCCESS;
}else{
return ERROR;
}
} }
5、在struts.xml中配置Action和国际资源文件
<?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>
<!-- 使用Struts2中的I18N拦截器,并通过constant元素配置常量,指定国际资源文件名字,
value的值就是“资源文件名”
-->
<constant name="struts.custom.i18n.resources" value="globalMessages" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="I18N" extends="struts-default">
<action name="checkLogin" class="loginAction.LoginAction1">
<result name="success">/I18N/loginSuccess.jsp</result>
<result name="error">/I18N/login.jsp</result>
</action>
</package> </struts>