Struts2国际化介绍及详细说明

 

Struts2国际化介绍及详细说明


  

Struts2国际化介绍及详细说明

                                                                                                                

     我们来了解一下这个国际化:国际化是在软件设计和文档开发过程中,使得功能和代码设计能处理多种语言和文化习俗,在创建不同语言版本时,不需要重新设计源程序代码的软件工程方法。

      我们看struts2的国际化,首先在struts2的国际化,我们应必备的前提,首先如果我们要使用struts2的国际化,我们首先要在struts2中配置一个标签如:<constantname="struts.custom.i18n.resources"value="csdn"></constant>,这样我们就能使用struts2中的国际化了,但是这个配置必须的是你在你的struts2配置环境能用的基础上.

       我们在看具体的使用:

struts2的国际化分三种情况,同时也分三个范围,

1.前台页面的国际化,

2.Action类中的国际化,

3.配置文件的国际化。

       我们首先来看全局的国际化,

1>前台国际化:

       我们首先配置一下struts.xml文件中的配置,我们写一个例子:

如:

[html] view plain copy
  1. <!DOCTYPE struts PUBLIC  
  2.   
  3.    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.   
  5.    "http://struts.apache.org/dtds/struts-2.3.dtd">  
  6.   
  7.    <struts>  
  8.   
  9.    <constant name="struts.custom.i18n.resources" value="csdn"></constant>  
  10.   
  11.    <include file="struts-validate.xml"></include>  
  12.   
  13.    <package name="a" extends="struts-default" namespace="/">  
  14.   
  15.    </package>  
  16.   
  17.    </struts>  


解释一下,这个引入的标签名字是contant,这个name就是他的属性,在struts2原文件中的properties中可以找到,然后value就是他开始的前缀名字,其次,我们再来写两个文件,一个为csdn_en_US.properties,另一个为: csdn_zh_CN.properties,从这两个文件中,我们可以看到,他们是csdn这个开头的,en为语言,US是国家名字,总结来说是:

开始前缀_语言_国家.properties这样组成的,因为是全局的,所以我们放在src的根目录下, csdn_en_US.properties的内容为welcome=welcom{0} to beijing{1}\!  另一个csdn_zh_CN.properties,内容为:

我们再来写一个jsp的页面其内容为

[html] view plain copy
  1. <%-tags" prefix="s"%>  
  2. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  3. <%@ taglib uri="/struts String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.     <base href="<%=basePath%>">  
  10.     <title>My JSP 'index.jsp' starting page</title>  
  11.        <meta http-equiv="pragma" content="no-cache">  
  12.        <meta http-equiv="cache-control" content="no-cache">  
  13.        <meta http-equiv="expires" content="0">      
  14.        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  15.        <meta http-equiv="description" content="This is my page">  
  16.   </head>  
  17.   <body>  
  18.               <s:text name="welcome">  
  19.                      <s:param></s:param>  
  20.                      <s:param>中关村</s:param>  
  21.               </s:text>  
  22. </body>  
  23. </html>  

运行的结果为

如果你把浏览器改成应为的那么运行结果为

这就是全局的前台页面的国际化,

我们再来看标签的国际化,

标签的国际化一般用户错误信息的提示,,我们在写一个例子

在struts2.xml文件中配置了如下信息

<constantname="struts.custom.i18n.resources"value="csdn"></constant>

我们还是写上面的两个文件一个为csdn_en_US.properties,另一个为: csdn_zh_CN.properties,

在第一个文件中添加的内容为:    

第二个为:

我们在写一个页面

[html] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <%@ taglib uri="/struts-tags" prefix="s"%>  
  4. <%  
  5. String path = request.getContextPath();  
  6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  7. %>  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9.   
  10. <html>  
  11.   <head>  
  12.     <base href="<%=basePath%>">  
  13.     <title>My JSP 'index.jsp' starting page</title>  
  14.    <meta http-equiv="pragma" content="no-cache">  
  15.    <meta http-equiv="cache-control" content="no-cache">  
  16.    <meta http-equiv="expires" content="0">      
  17.    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  18.    <meta http-equiv="description" content="This is my page">  
  19.   </head>  
  20.   <body>  
  21.   <form action="${pageContext.request.contextPath}/csdn/add.action">  
  22.   
  23.   用户名:<input type="text" name="name"><input type="submit" value="提交">  
  24.   </form>  
  25. </body>  
  26. </html>  


运行结果为

.

我们在写一个错误的页面,也就是所如果报错那么就跳转到这个页面

[html] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <%@ taglib uri="/struts-tags" prefix="s"%>  
  4. <%  
  5. String path = request.getContextPath();  
  6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  7. %>  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <base href="<%=basePath%>">  
  12.     <title>My JSP 'index.jsp' starting page</title>  
  13.    <meta http-equiv="pragma" content="no-cache">  
  14.    <meta http-equiv="cache-control" content="no-cache">  
  15.    <meta http-equiv="expires" content="0">      
  16.    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  17.    <meta http-equiv="description" content="This is my page">  
  18.    <!-- 
  19.    <link rel="stylesheet" type="text/css" href="styles.css"> 
  20.    -->  
  21.   
  22.   </head>  
  23.   <body>  
  24.   <s:fielderror></s:fielderror>  
  25.   </body>  
  26. </html>  

这个页面就会把错误信息显示出来

同样我们创建一个action和一个loginAction-validation.xml文件放在也action一个目录下,这个一个 校验器,相信大家已经看过了,

Action中写入

[java] view plain copy
  1. package cn.csdn.action;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3. public class loginAction extends ActionSupport{  
  4.    private String name;  
  5.    public String getName() {  
  6.       return name;  
  7.    }  
  8.    public void setName(String name) {  
  9.       this.name = name;  
  10.    }  
  11.    public String add(){  
  12.   
  13.       System.out.println("-------------执行了方法");  
  14.   
  15.       return SUCCESS;  
  16.    }  
  17. }  

我们在loginAction-validation.xml写入

[html] view plain copy
  1. <!DOCTYPE validators PUBLIC  
  2.       "-//Apache Struts//XWork Validator 1.0.3//EN"  
  3.       "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4. <validators>  
  5.    <field name="name">  
  6.       <field-validator type="requiredstring">  
  7.          <param name="tirm">true</param>  
  8.          <message key="name"></message>  
  9.       </field-validator>  
  10.       </field>  
  11. </validators>  
  12.   
  13. 好了现在就可以运行了:  

如果是中的界面,我们运行的结果为

如果是应为的界面,运行的结果为

和这样就是标签的国际化了

我们最后看这个Action类中的国际化:

我们还是以上面的例子为例,我们不在使用哪个校验器.我们把action改为

[java] view plain copy
  1. package cn.csdn.action;  
  2. import java.util.Date;  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. public class loginAction extends ActionSupport{  
  5.    private String name;  
  6.    public String getName() {  
  7.       return name;  
  8.    }  
  9.    public void setName(String name) {  
  10.       this.name = name;  
  11.    }  
  12.    @Override  
  13.    public void validate() {  
  14.       if ("".equals(name.trim())) {  
  15.          this.addFieldError("names""names.error");  
  16.       }  
  17.    }  
  18.    public String add(){  
  19.       System.out.println("执行了方法");  
  20.       return SUCCESS;  
  21.    }  
  22. }  

我们在properties这个国际化文件中吧名字分别改成name.error和name.error

我们把页面改成<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

[html] view plain copy
  1. <%@ taglib uri="/struts-tags" prefix="s"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.     <base href="<%=basePath%>">  
  10.     <title>My JSP 'index.jsp' starting page</title>  
  11.    <meta http-equiv="pragma" content="no-cache">  
  12.    <meta http-equiv="cache-control" content="no-cache">  
  13.    <meta http-equiv="expires" content="0">      
  14.    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  15.    <meta http-equiv="description" content="This is my page">  
  16.    <!-- 
  17.    <link rel="stylesheet" type="text/css" href="styles.css"> 
  18.    -->  
  19.   </head>  
  20.   <body>  
  21. <s:text name="names.error"></s:text>  
  22.   </body>  
  23. </html>  
  24.   
  25.    

我们再来测试一下

如果是中的界面,我们运行的结果为

如果是应为的界面,运行的结果为

和这样就是action的国际化了

 

上面介绍的都是全局的,我们下面来看package这个级别的

在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源。当查找指定key的消息时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的资源文件中寻找。

我们以第一个例子为例,但是这个packge的国际化必须由一个action跳转到一个页面,才能显示出来,而不能想全局的那样直接就能显示出来,

       所以我们跳转到error.jsp的时候显示出来

配置该包的文件:

Package_en_US.properties

Package_zh_CN.properties

我们看一下error.jsp页面

[html] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <%@ taglib uri="/struts-tags" prefix="s"%>  
  4.   
  5. <%  
  6. String path = request.getContextPath();  
  7.   
  8. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  9. %>  
  10.   
  11. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  12.   
  13. <html>  
  14.   
  15.   <head>  
  16.   
  17.     <base href="<%=basePath%>">  
  18.   
  19.     <title>My JSP 'index.jsp' starting page</title>  
  20.   
  21.    <meta http-equiv="pragma" content="no-cache">  
  22.   
  23.    <meta http-equiv="cache-control" content="no-cache">  
  24.   
  25.    <meta http-equiv="expires" content="0">      
  26.   
  27.    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  28.   
  29.    <meta http-equiv="description" content="This is my page">  
  30.   
  31.    <!-- 
  32.  
  33.    <link rel="stylesheet" type="text/css" href="styles.css"> 
  34.  
  35.    -->  
  36.   
  37.   </head>  
  38.   
  39.   <body>  
  40.   <s:text name="welcome">  
  41.       </s:text>  
  42.   
  43.   </body>  
  44.   
  45. </html>  
  46.   
  47.    

在测试一下就是显示了一下这个welcome这个文件.我们看一下运行的结果

  

这就是package的国际化

我们在来看一下这个action的国际化

如这个包的结构,我们必须在action的目录下创建这个ActionClassName_国家_语言.properties这样的文件,

和上面的例子一样为了区分我们改变了这个porperties这两个文件

我们再来运行一下项目

看结果

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章