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这两个文件
我们再来运行一下项目
看结果

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这两个文件
我们再来运行一下项目
看结果
