Struts2国际化

有时候我们访问国际性的网站,发现有个语言切换的功能:若选择“简体中文”,页面显示语言为简体中文;若选择“繁体中文”,页面显示语言为繁体中文;若选择“英语”,页面显示语言为英语。

这是怎么实现的呢?靠配置文件。在这个配置文件里,通常选英语为基础语言,再与别的语言配对,以达到多种语言国际化的目的。

比如,简体中文国际化的配置文件中的内容是这样的:

China=中国

Province=广东

而繁体中文国际化的配置文件中的内容是这样的:

China=中國

Province=廣東

下面就修改上节课中的程序,来体会一下Struts的国际化流程。

1 将login.jsp中的“登录页面”改为“loginPage”,“用户名”改为“user”“密码”改为“pass”,改完后的login.jsp中的内容如下:

[java] view plain copy
 
 
  1. <%@ page language="java" contentType="text/html; charset=GBK"  
  2.     pageEncoding="GBK"%>  
  3. <%@taglib prefix="s" uri="/struts-tags"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=GBK">  
  8. <title><s:text name="loginPage" /></title>  
  9. </head>  
  10. <body>  
  11.     <s:form action="login">  
  12.         <s:textfield name="username" key="user" />  
  13.         <s:textfield name="password" key="pass" />  
  14.         <s:submit key="login" />  
  15.     </s:form>  
  16. </body>  
  17. </html>  

2 welcome.jsp中的“成功页面”改为“succPage”,“登录成功!”改为“SuccTip”,并在s:text下面添加一行<s:param>${sessionScope.user}</s:param>

修改后的内容为:

[html] view plain copy
 
 
  1. <%@ page language="java" contentType="text/html; charset=GBK"  
  2.     pageEncoding="GBK"%>  
  3. <%@taglib prefix="s" uri="/struts-tags"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <title><s:text name="succPage" /></title>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=GBK">  
  9. </head>  
  10. <body>  
  11.     <s:text name="succTip">  
  12.         <s:param>${sessionScope.user}</s:param>  
  13.     </s:text>  
  14.     <br />  
  15. </body>  
  16. </html>  

这里s:param表示传参,参数的值由${sessionScope.user}决定,这里sessionScope.user表示会话中的user属性。这个user就是login.jsp中的key=”user”,由LoginAction.Java动态提供。

下面就在LoginAction.java中添加user的值。具体是在return “success”之前添加代码:

ActionContext.getContext().getSession().put("user" , getUsername());

    

  添加完后,整个LoginAction.java中的代码为:

[java] view plain copy
 
 
  1. package com.example.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionContext;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5.   
  6. public class LoginAction extends ActionSupport  
  7. {  
  8.     private static final long serialVersionUID = 1L;  
  9.   
  10.     private String username;  
  11.     private String password;  
  12.       
  13.     public String getUsername()  
  14.     {  
  15.         return username;  
  16.     }  
  17.     public void setUsername(String username)  
  18.     {  
  19.         this.username = username;  
  20.     }  
  21.       
  22.     public String getPassword()  
  23.     {  
  24.         return password;  
  25.     }  
  26.     public void setPassword(String password)  
  27.     {  
  28.         this.password = password;  
  29.     }  
  30.     //定义处理用户请求的execute方法  
  31.     public String execute() throws Exception  
  32.     {  
  33.         if (getUsername().equals("zheng") && getPassword().equals("123456") )  
  34.         {  
  35.             ActionContext.getContext().getSession()  
  36.             .put("user" , getUsername());  
  37.             return "success";  
  38.         }  
  39.         else  
  40.         {  
  41.             return "error";  
  42.         }  
  43.     }  
  44. }  

3 error.jsp中的“失败页面”改为“errorPage”,“登录失败”改为“failTip”,改完后的内容为:

[java] view plain copy
 
 
  1. <%@ page language="java" contentType="text/html; charset=GBK"  
  2.     pageEncoding="GBK"%>  
  3. <%@taglib prefix="s" uri="/struts-tags"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7.     <title><s:text name="errorPage"/></title>  
  8.     <meta http-equiv="Content-Type" content="text/html; charset=GBK">  
  9. </head>  
  10. <body>  
  11.     <s:text name="failTip"/>  
  12. </body>  
  13. </html>  

4 在struts.xml中指定全局国际化资源文件

<constant name="struts.custom.i18n.resources" value="zh"/>

添加后的struts.xml中的内容如下:

[html] view plain copy
 
 
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5. <!-- 指定Struts 2配置文件的根元素 -->  
  6. <struts>  
  7.     <!-- 指定全局国际化资源文件 -->  
  8.     <constant name="struts.custom.i18n.resources" value="zh"/>  
  9.     <!-- 指定国际化编码所使用的字符集 -->  
  10.     <constant name="struts.i18n.encoding" value="GBK" />  
  11.   
  12.     <!-- 所有的Action定义都应该放在package下 -->  
  13.     <package name="action" extends="struts-default">  
  14.         <action name="login" class="com.example.action.LoginAction">  
  15.             <!-- 定义三个逻辑视图和物理资源之间的映射 -->  
  16.             <result name="error">/error.jsp</result>  
  17.             <result name="success">/welcome.jsp</result>  
  18.         </action>  
  19.     </package>  
  20.       
  21. </struts>  

    上面value=”zh”指定了国际化资源文件的名称为zh,所以我们还应该在src目录下新建一个配置属性文件zh.properties,内容如下:

[html] view plain copy
 
 
  1. loginPage=登录页面  
  2. errorPage=错误页面  
  3. succPage=成功页面  
  4. failTip=对不起,您不能登录!  
  5. succTip=欢迎,{0},您已经登录!  
  6. User=用户名  
  7. Pass=密码  
  8. Login=登录  

因为编码格式的原因(properties文件的编码格式为ISO-8859-1),上述的内容在properties文件中会显示成:

[html] view plain copy
 
 
  1. loginPage=u767Bu5F55u9875u9762  
  2. errorPage=u9519u8BEFu9875u9762  
  3. succPage=u6210u529Fu9875u9762  
  4. failTip=u5BF9u4E0Du8D77uFF0Cu60A8u4E0Du80FDu767Bu5F55uFF01  
  5. succTip=u6B22u8FCEuFF0C{0}uFF0Cu60A8u5DF2u7ECFu767Bu5F55uFF01  
  6. User=u7528u6237u540D  
  7. Pass=u5BC6u7801  
  8. Login=u767Bu5F55  

 

5 配置完成后,运行程序。

右击login.jsp-->Run As-->Run on Server,运行结果为:

输入用户名“zheng”和密码“123456”,跳转到登录成功的页面:

退回登录页面,输入错误的用户名或密码,或什么都不输入,跳转到登录失败的页面:

原文地址:https://www.cnblogs.com/grimm/p/6732715.html