Struts2国际化介绍及详细说明

  

Struts2国际化介绍及详细说明

                                                                                                                10级学员 乔宇课堂笔记

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

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

       我们在看具体的使用:

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

1.前台页面的国际化,

2.Action类中的国际化,

3.配置文件的国际化。

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

1>前台国际化:

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

如:

<!DOCTYPE struts PUBLIC

   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

   "http://struts.apache.org/dtds/struts-2.3.dtd">

   <struts>

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

   <include file="struts-validate.xml"></include>

   <package name="a" extends="struts-default" namespace="/">

   </package>

   </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的页面其内容为

<%-tags" prefix="s"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts 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>My JSP 'index.jsp' starting page</title>
       <meta http-equiv="pragma" content="no-cache">
       <meta http-equiv="cache-control" content="no-cache">
       <meta http-equiv="expires" content="0">    
       <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
       <meta http-equiv="description" content="This is my page">
  </head>
  <body>
              <s:text name="welcome">
                     <s:param>你</s:param>
                     <s:param>中关村</s:param>
              </s:text>
</body>
</html>


运行的结果为

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

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

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

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

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

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

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

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

第二个为:

我们在写一个页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="/struts-tags" prefix="s"%>
<%
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>My JSP 'index.jsp' starting page</title>
   <meta http-equiv="pragma" content="no-cache">
   <meta http-equiv="cache-control" content="no-cache">
   <meta http-equiv="expires" content="0">    
   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
   <meta http-equiv="description" content="This is my page">
  </head>
  <body>
  <form action="${pageContext.request.contextPath}/csdn/add.action">

  用户名:<input type="text" name="name"><input type="submit" value="提交">
  </form>
</body>
</html>


运行结果为

.

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

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="/struts-tags" prefix="s"%>
<%
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>My JSP 'index.jsp' starting page</title>
   <meta http-equiv="pragma" content="no-cache">
   <meta http-equiv="cache-control" content="no-cache">
   <meta http-equiv="expires" content="0">    
   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
   <meta http-equiv="description" content="This is my page">
   <!--
   <link rel="stylesheet" type="text/css" href="styles.css">
   -->

  </head>
  <body>
  <s:fielderror></s:fielderror>
  </body>
</html>


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

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

Action中写入

package cn.csdn.action;
import com.opensymphony.xwork2.ActionSupport;
public class loginAction extends ActionSupport{
   private String name;
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String add(){

      System.out.println("-------------执行了方法");

      return SUCCESS;
   }
}


我们在loginAction-validation.xml写入

<!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">
         <param name="tirm">true</param>
         <message key="name"></message>
      </field-validator>
      </field>
</validators>

好了现在就可以运行了:

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

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

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

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

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

package cn.csdn.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class loginAction extends ActionSupport{
   private String name;
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   @Override
   public void validate() {
      if ("".equals(name.trim())) {
         this.addFieldError("names", "names.error");
      }
   }
   public String add(){
      System.out.println("执行了方法");
      return SUCCESS;
   }
}

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

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

<%@ taglib uri="/struts-tags" prefix="s"%>
<%
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>My JSP 'index.jsp' starting page</title>
   <meta http-equiv="pragma" content="no-cache">
   <meta http-equiv="cache-control" content="no-cache">
   <meta http-equiv="expires" content="0">    
   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
   <meta http-equiv="description" content="This is my page">
   <!--
   <link rel="stylesheet" type="text/css" href="styles.css">
   -->
  </head>
  <body>
<s:text name="names.error"></s:text>
  </body>
</html>

 

我们再来测试一下

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

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

和这样就是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页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="/struts-tags" prefix="s"%>

<%
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>My JSP 'index.jsp' starting page</title>

   <meta http-equiv="pragma" content="no-cache">

   <meta http-equiv="cache-control" content="no-cache">

   <meta http-equiv="expires" content="0">    

   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

   <meta http-equiv="description" content="This is my page">

   <!--

   <link rel="stylesheet" type="text/css" href="styles.css">

   -->

  </head>

  <body>
  <s:text name="welcome">
      </s:text>

  </body>

</html>

 

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

 

这就是package的国际化

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

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

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

我们再来运行一下项目

看结果

  

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值