相关原理:
用不同国家的语言描述相同的信息,并放在各自对应的.properties属性文件中,程序根据运行时环境决定加载哪个文件。
整体项目结构要注意:
(jar包位置不要放错)
1.新建一个项目Struts2Demo。
2.在src下新建两个资源文件。
为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容基本是key-value对,其中key是程序使用的部分,而value是程序的显示部分。
message_en_US.properties(英文)
也可以这样用代码呈现
login.username=username
login.pwd=password
login.btn=login
check=Please check your language
chinese=chinese
english=english
message_zh_CN.properties(中文)
同样也可以这样用代码呈现
login.username=\u7528\u6237\u540D
login.pwd=\u5BC6\u7801
login.btn=\u767B\u5F55
check=\u8BF7\u9009\u62E9\u8BED\u8A00
chinese=\u4E2D\u6587
english=\u82F1\u6587
(其实关于国际化属性文件名的定义不仅仅可以在 struts.properties 中定义,也可以在 struts.xml 和 web.xml 这两个配置文件中定义。这里不做介绍。)
3.新建两个jsp页面。
index.jsp
(1)这里有一个i18n,他就是Internationalization(国际化)的英文缩写(Internationalization去掉头尾的i和n刚好还剩下18个字符)。它的使用目的就是在 Action 执行前查看 Session 中的 request_locale 参数的值是什么。如果是“ zh_CN ”它就将之后执行的所有 Action 的语言环境设置为中文语言环境。如果是“ en_US ”则是英文语言环境。
(2)新增两处按钮(中文|英文),其实是两处连接,实现切换语言功能。也可用以下标签实现按钮
<s:radioname="" list="" listKey=""listValue=""></s:radio>
(3)当要使用struts2的标签时,应引入taglib。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<!-- 局部定义使用哪一种国际化语音 -->
<s:i18n name="message">
<s:text name ="check" ></s:text><br />
<button><a href="check.action?request_locale=zh_CN">
<s:text name="chinese"></s:text>
</a></button>
<button><a href="check.action?request_locale=en_US">
<s:text name="english"></s:text>
</a></button>
<br/>
<form action="<%=basePath%>login.action" method="post">
<table>
<tr>
<!--s标签里的东西name要和properties文件里面的一致-->
<td><s:text name="login.username"/></td>
<td><input type="text" name="user.userName"/></td>
</tr>
<tr>
<td><s:text name="login.pwd"/></td>
<td><input type="text" name="user.password"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="<s:text name="login.btn"/>"/></td>
</tr>
</table>
</form>
</s:i18n>
</body>
</html>
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>欢迎页面</title>
</head>
<body>
欢迎您!
</body>
</html>
4.java包的导入
5.在src下新建LoginAction.java和ChangeLanguageAction.java
LoginAction.java
package com.hnpi.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String execute(){
return "success";
}
}
ChangeLanguageAction.java(这里对登录不做过多处理,直接登陆成功。)
package com.hnpi.action;
public class ChangeLanguageAction {
public String execute(){
return "success";
}
}
6.两个配置文件web.xml和struts.xml的配置
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 配置拦截器和国际化的资源-->
<!--name必须是这样写,调用它自带的资源,value和Properties的文件前缀一致,如message_en_US.properties -->
<constant name ="struts.costom.i18n.resources" value="message"></constant>
<package name="name" namespace="/" extends="struts-default">
<action name="check" class="com.hnpi.action.ChangeLanguageAction">
<result name="success">/index.jsp</result>
</action>
<action name="login" class="com.hnpi.action.LoginAction" method="execute">
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
7.运行效果
效果图1:
效果图2:
效果图3:
我们通过运行效果可以看到,已经成功实现了中英文切换,不同语言的切换只需要提供不同国家的语言资源文件即可。