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 ...
随机推荐
- [NOIP2016]换教室(概率期望$DP$)
其实吧我老早就把这题切了--因为说实话,这道题确实不难啊--李云龙:比他娘的状压DP简单多了 今天我翻以前在Luogu上写的题解时,突然发现放错代码了,然后被一堆人\(hack\)--蓝瘦啊\(ORZ ...
- [转]未能加载文件或程序集 CrystalDecisions.Web Version=10.2.3600解决方法
找到你开发的机器上VS安装目录中的SDK\v2.0\BootStrapper\Packages\CrystalReports\CRRedist2005_x86.msi和SDK\v2.0\BootStr ...
- HDU 2087 剪花布条 (简单KMP或者暴力)
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- CentOS7.2安装RabbitMQ笔记
身为.NET程序员,用着宇宙级IDE,干什么事都变得越来越懒了,Windows操作系统在手,能通过桌面点点点的方式何必找其他罪受呢..于是RabbitMQ自然而然也就跑在Windows上了,说实话Wi ...
- 字符型设备驱动程序-first-printf以及点亮LED灯(二)
编译这几个函数之前要学一下:Linux 的几个操作命令. 学习地址:http://edu.51cto.com/lesson/id-101824.html 重要的命令 有4个 :分别是 1.lsmod, ...
- oracle安装程序异常终止解决办法
安装Oracle时总是会报程序异常终止,摸不着头脑,作为初学者一下就乱了分寸 工具/原料 Oracle软件包 win764位 方法/步骤 右击Oracle安装图标setup.exe,选 ...
- 在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all
在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all 前天来了个新需求, 有一个授权书的文件要点击下载, 需要在前端生成, ...
- iOS 11.4.1 正式版越狱
在 2018 年 Electra 最新能支持到 11.3.1 越狱,很长的一段时间 11.4 只能支持 Beta 版本,临近春节给了我们一个大礼物,终于支持 iOS 11.4-11.4.1,目前 iO ...
- React项目的最佳实践
项目代码 从零开始简书项目 从我第一次接触vue这个框架已经过了快一年的时间,陪伴我从前端小白到前端工程师,前端时间也是使用了 ts+vue这样的组合写代码,明显感觉vue与ts似乎没有产生比较好 ...
- 学习html的第一天
HTML 第一章: webde 运行环境: 1. 什么是HTML HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言:HyperText Markup Languge 超文本 就是网 ...