Struts 2(七):国际化
基于Struts 2的Web应用国际化开发非常简单,其中Struts 2的国际化包括如下几部分:校验提示信息国际化、类型转换提示信息国际化、Action信息国际化以及JSP页面国际化。
第一节 JSP页面国际化
要实现JSP页面国际化,首先需要添加并配置相应的国际化资源文件,然后在JSP页面中通过指定Text标签的name属性为相应的Key值从而实现国际化。JSP页面国际化有两种方式:一种是加载全局资源文件完成国际化,另一种是指定临时资源文件完成国际化;下面将分别介绍这两种方式的国际化操作
1.1 加载全局资源文件完成国际化
在一般情况下,可以将国际化信息放到国际化资源文件中,然后在struts.xml文件中配置该资源文件为全局的,这样就可以在JSP文件中很方便的访问到该资源文件,从而实现JSP页面国际化。
下面首先来添加一份中文资源文件jspInterResource_zh_CN.properties,其代码如下所示:
welcomeMessage=\u5927\u5BB6\u597D\uFF01
再添加一份英文资源文件jspInterResource_en_US.properties,其代码如下所示:
welcomeMessage=Hello,everyone\!
打开struts.xml配置文件,在struts根节点下添加一个常量节点constant用来配置全局资源文件,其代码如下所示:
<constant name="struts.custom.i18n.resources" value="jspInterResource"></constant>
下面这段代码主要演示如何通过Struts 2标签库中的Text标签输出国际化信息:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>欢迎信息</title></head>
<body>
<s:text name="welcomeMessage"></s:text><!--输出国际化资源文件!-->
</body>
</html>
解说:上述代码中添加了一个<s:text>标签,该标签的name属性为"welcomeMessage",表示用来输出国际化资源文件中Key为"welcomeMessage"的信息。
1.2 指定临时资源文件完成国际化
前面的示例在struts.xml文件中配置全局资源文件,这样的资源文件在每个JSP文件中都可以使用。那如何才能使得资源文件不通过struts.xml文件配置,同样能被JSP页面调用呢?可以在需要调用国际化资源文件的JSP页面中通过<s:i18n >标签来指定临时资源文件,这样就可以通过指定Key值来找到国际化信息了。
下面这段代码主要演示如何通过Struts 2标签库中的Text标签结合i18n标签输出临时资源文件中的国际化信息:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>欢迎信息</title></head>
<body>
<s:i18n name="jspInterResource"><!--指定临时资源文件名-->
<s:text name="welcomeMessage"></s:text><!--输出国际化资源文件!-->
</s:i18n>
</body>
</html>
解说:上述代码添加了一个i18n标签,通过其name属性来设置资源文件名,该资源文件只在i18n标签内部才有用,离开该标签就无法使用了。
1.3 为资源文件传递参数
可以在Text标签中添加一个<s:param>标签来来传递参数给资源文件。资源文件则可以通过占位符的形式来接受参数值。
首先修改中文资源文件jspInterResource_zh_CN.properties,为资源文件添加占位符,其代码如下所示:
welcomeMessage={0}\uFF0C\u4F60\u597D\uFF01
再修改英文资源文件jspInterResource_en_US.properties,其代码如下所示:
welcomeMessage=Hello,{0}\!
下面这段代码主要演示如何通过Struts 2标签库中的param标签来传递参数:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>欢迎信息</title></head>
<body>
<s:i18n name="jspInterResource"><!--指定临时资源文件名-->
<s:text name="welcomeMessage"><!--输出国际化资源文件!-->
<s:param>James</s:param><!-- 传递参数 -->
</s:text>
</s:i18n>
</body>
</html>
解说:上述代码通过<s:param>标签传递参数,其参数值为James
1.4 资源文件加载顺序
前面介绍了两种JSP完成国际化的方式,一种是通过全局资源文件,一种是通过临时资源文件。那到底它们之间的加载顺序是如何的呢?
下面来介绍资源文件加载顺序,其规则如下:
(1)如果使用了<s:i18n/>指定了临时资源文件,则先从临时资源文件中查找指定key对应的value值。
(2)如果在临时资源文件中没有找到指定的key对应的value值,则查找全局资源文件中该key对应的value值。
(3)如果在全局资源文件中仍没找到指定的key对应的value值,则直接输出key值。
(4)如果没有使用<s:i18n/>指定了资源文件,则直接查找全局国家化资源文件中该key对应的value值。如果没找到指定的key对应的value值,则直接输出key值。
第二节 Action国际化
Struts 2中的Action可以通过指定全局资源文件、包范围资源文件、Action范围资源文件这三种方式实现国际化。
2.1 加载全局资源文件完成国际化
Action可以通过加载全局资源文件的方式获得国际化信息从而完成国际化,全局文件必须存放地址在项目的WEB-INF/classes目录下。
首先来添加一份中文资源文件GlobalInterResource_zh_ CN.properties,其代码如下所示:
ActionMessage=\u5168\u5C40\u8303\u56F4-\u6B22\u8FCE\u4FE1\u606F
再添加一份英文资源文件GlobalInterResource_en_US.properties,其代码如下所示:
ActionMessage=Global-WelcomeMessage
打开struts.xml配置文件,在struts根节点下添加一个常量节点constant用来配置全局资源文件,其代码如下所示:
<constant name="struts.custom.i18n.resources" value="GlobalInterResource"></constant>
配置完全局的资源文件,就可以在Action中通过getText方法来取得国际化信息了,getText方法是在ActionSupport中定义的,所以要使用该方法必须首先将Action继承ActionSupport类。
下面这段代码主要演示如何通过ActionSupport类中的getText方法获得全局资源文件中的国际化信息:
package com.sanqing.action;
import com.opensymphony.xwork2.ActionSupport;
public class ShowActionMessage extends ActionSupport {
private String actionMessage; //actionMessage属性
public String getActionMessage() { //设置actionMessage属性值
return actionMessage;
}
public void setActionMessage(String actionMessage) {//获得actionMessage属性值
this.actionMessage = actionMessage;
}
public String execute() throws Exception {
actionMessage = this.getText("ActionMessage");// 取得国际化信息
return this.SUCCESS;
}
}
解说:上述代码中添加了一个actionMessage属性,该属性用来保存从资源文件中取得的国际化信息。
添加完Action后,需要在struts.xml中配置该Action,其配置代码如下:
<package name="struts2" extends="struts-default">
<action name="showActionMessage" class="com.sanqing.action.ShowActionMessage">
<result name="success">/ShowActionMessage.jsp</result>
</action>
</package>
从配置中可以看到成功输出页面为,所以需要添加该页面,其代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>国际化信息</title></head>
<body>${actionMessage}</body>
</html>
解说:上述代码使用EL表达式输出Action中的属性
2.2 加载包范围资源文件完成国际化
下面来介绍包范围资源文件,包范围资源文件的好处在于不需要在struts.xml文件中配置。不同包下的Action使用不同的包范围资源文件,能够很好的将资源文件进行归类。包范围资源文件可以也只能被该包下的Action访问。包范围资源文件的命名规则为package_语言_国家.properties,下面在com.sanqing.action包下添加中英文的包范围资源文件。
首先来添加一份中文资源文件package_zh_CN.properties,其代码如下所示:
ActionMessage=\u5305\u8303\u56F4-\u6B22\u8FCE\u4FE1\u606F
再添加一份英文资源文件package_en_US.properties,其代码如下所示:
ActionMessage=Package-WelcomeMessage
2.3 加载Action范围资源文件完成国际化
下面来介绍Action范围资源文件,Action范围资源文件同样不需要在struts.xml文件中配置。Action范围资源文件只能被所对应的Action访问,其他Action无法访问。Action范围资源文件的命名规则为ActionNamee_language_ country.properties,文件保存必须保存在Action同目录下。下面将为ShowActionMessage添加Action范围中英文资源文件。
首先来添加一份中文资源文件ShowActionMessage_zh_CN.properties,其代码如下所示:
ActionMessage=Action\u8303\u56F4-\u6B22\u8FCE\u4FE1\u606F
再添加一份英文资源文件ShowActionMessage_en_US.propertiess,其代码如下所示:
ActionMessage=Action-WelcomeMessage
2.4 资源文件加载顺序
假如在Action范围资源文件、包范围资源文件、全局资源文件中同时定义了相同的key以及value值,那么最终Action中取得的国际化信息为Action范围资源文件中指定key对应的value值。
下面来看资源文件加载顺序示意图,如图所示:

第三节 示例→实现用户自行选择语言环境站点
Struts 2(七):国际化的更多相关文章
- Struts框架的国际化
本文将通过一个详细的实例来展示Struts框架的国际化,使用的版本号是struts1.1. 案例:在一个页面上有一个下拉框,下拉框中有3个国家的语言选项,各自是"中文简体".&qu ...
- 使用 Struts 2 实现国际化
struts2国际化(I18N) 国际化也叫I18N,是Internationalization的简称.Struts2国际化是建立在Java国际化基础上,只是Struts2框架对Java国际化进行了进 ...
- 菜鸟学Struts——I18N对国际化的支持
大家肯定都喜欢玩游戏吧. 对于是一个游戏迷的话,肯定玩过不少很棒的经典单机游戏.比方说,国产的<古墓丽影>.<刺客信条>.<鬼泣>国产的仙剑.古剑等.在众多游戏系列 ...
- Struts(七):action配置文件之通配符映射
通配符映射:一个Web应用可能有成百上千个action声明,可以使用struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系. 通配符映射规则: 若找到多个匹配,没有通配符的那个将胜 ...
- struts配置文件和国际化
一.加载包struts2-core-2.3.24.1.jar struts-default.xml :各种栈 org.apache.struts2 -->> default.propert ...
- 【JavaEE企业应用实战学习记录】struts国际化
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 16:26 To change this tem ...
- Struts第八篇【资源国际化、对比JSP的资源国际化】
资源国际化 我们在学JSTL标签的时候就涉及到了资源国际化,,,但是呢,在JSP的章节我并没有写博文来讲解怎么弄-.一方面感觉JSP的资源国际化好麻烦,另一方面是感觉用的地方很少-..因此就没有深入去 ...
- Struts的拦截器
Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...
- 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)
轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...
随机推荐
- 解决windows7无法连接CentOS7系统中oracle问题:ORA-12514 TNS 监听程序当前无法识别
linux开启后终端按下面输入(容易忘记,记录下): [oracle@localhost ~]$ lsnrctl stop #先关闭监听服务 [oracle@localh ...
- ethersjs运行时出现的问题
1.在运行部署在ganache1.1.0上的合约中的某个函数时,出现了这样的问题,之前部署在geth上时并没有这样的问题 userdeMacBook-Pro:test-ethers user$ nod ...
- 如何在ubuntu中安装CP-ABE
cpabe依赖pbc,pbc依赖gmp,gmp依赖M4.bison.flex,所以先安装后面的 安装m4 $ sudo apt-get install m4 安装 flex 安装 bison 1 ...
- Qt中QScrollArea类的简单使用心得
平台:windows 64位 Qt版本:5.5.1 MinGW 32bit 根据自己目前的需求简单说下怎么在QScrollArea滚动窗口中实现多个控件的滚动显示,先看看最 ...
- HDU 2087 剪花布条 (简单KMP或者暴力)
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1208 跳格子题(很经典,可以有很多变形)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1208 Pascal's Travels Time Limit: 2000/1000 MS (Java ...
- oracle 查看表空间以及剩余量
--1.查看表空间的名称及大小 SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tabl ...
- java中的序列化问题
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间.序列化是 ...
- OpenID Connect Core 1.0(四)使用授权码流验证(上)
3.1 使用授权码流验证(Authentication using the Authorization Code Flow) 本节描述如何使用授权码流执行验证.当使用授权码流时,会从令牌终结点返回的所 ...
- 一点一点看JDK源码(〇)
一点一点看JDK源码(〇) liuyuhang原创,未经允许进制转载 写在前面: 几乎所有的大神都会强调看源码,也强调源码的重要性: 但是如何看源码,源码看什么?看了什么用?看了怎么用? 困扰很多人, ...