基于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(七):国际化的更多相关文章

  1. Struts框架的国际化

    本文将通过一个详细的实例来展示Struts框架的国际化,使用的版本号是struts1.1. 案例:在一个页面上有一个下拉框,下拉框中有3个国家的语言选项,各自是"中文简体".&qu ...

  2. 使用 Struts 2 实现国际化

    struts2国际化(I18N) 国际化也叫I18N,是Internationalization的简称.Struts2国际化是建立在Java国际化基础上,只是Struts2框架对Java国际化进行了进 ...

  3. 菜鸟学Struts——I18N对国际化的支持

    大家肯定都喜欢玩游戏吧. 对于是一个游戏迷的话,肯定玩过不少很棒的经典单机游戏.比方说,国产的<古墓丽影>.<刺客信条>.<鬼泣>国产的仙剑.古剑等.在众多游戏系列 ...

  4. Struts(七):action配置文件之通配符映射

    通配符映射:一个Web应用可能有成百上千个action声明,可以使用struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系. 通配符映射规则: 若找到多个匹配,没有通配符的那个将胜 ...

  5. struts配置文件和国际化

    一.加载包struts2-core-2.3.24.1.jar struts-default.xml :各种栈 org.apache.struts2 -->> default.propert ...

  6. 【JavaEE企业应用实战学习记录】struts国际化

    <%-- Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 16:26 To change this tem ...

  7. Struts第八篇【资源国际化、对比JSP的资源国际化】

    资源国际化 我们在学JSTL标签的时候就涉及到了资源国际化,,,但是呢,在JSP的章节我并没有写博文来讲解怎么弄-.一方面感觉JSP的资源国际化好麻烦,另一方面是感觉用的地方很少-..因此就没有深入去 ...

  8. Struts的拦截器

    Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...

  9. 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

    轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...

随机推荐

  1. C/C++——指针,引用做函数形参

    函数中的形参是普通形参的时,函数只是操纵的实参的副本,而无法去修改实参. 引用形参是对实参的直接操纵,指针形参是对 它所指向的值(*p) 的直接操纵,但是对于这个指针变量(p)来说,依然只是副本. 指 ...

  2. FireFox新标签页打开搜索和书签

    FireFox更新,发现界面完全不适应,虽然他是越做越丑,但是也没办法,一直用FireFox,许多书签,保存的密码现在都记不住了,只能靠保存的自动填充.... 进入正题,FireFox更新了之后,搜索 ...

  3. 1、Web Service-开始入坑(基础简介)

    1.关于Schema 具体介绍:https://baike.baidu.com/item/Schema/15286221?fr=aladdin 几个重要的知识点: 2.HTTP协议 具体介绍看博文:h ...

  4. $_cookie的使用

    设置并发送 cookie: <?php $value = "my cookie value"; // 发送一个简单的 cookie setcookie("TestC ...

  5. 我的QT5学习之路(四)——信号槽

    一.前言 前面说了Qt最基本的实例创建.控件以及工具集的介绍,相当于对于Qt有了一个初次的认识,这次我们开始认识Qt信号通信的重点之一——信号槽. 二.信号槽 信号槽是 Qt 框架引以为豪的机制之一. ...

  6. webapi 异常处理

    参考:https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/error-handling/exception-handling ①HttpR ...

  7. Java中CSS&JS篇基础笔记

    HTML就是由一组标签所组成的.HTML的字体标签: <font>标签: 属性:color,size,face HTML的排版标签: h标签:标题标签. p标签:段落标签. b标签:加粗标 ...

  8. 分布式架构学习-Consul集群配置

    简介 之前公司用的是Consul进行服务发现以及服务管理,自己一直以来只是用一下,但是没有具体的深入,觉得学习不可以这样,所以稍微研究了一下. 网上有很多关于Consul的介绍和对比,我这里也不献丑了 ...

  9. BZOJ 4520: [Cqoi2016]K远点对(k-d tree)

    Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1162  Solved: 618[Submit][Status][Discuss] Descripti ...

  10. SQL 列转行 分组去重并合并多条记录

    继上篇<SQL 列转行 合并多条记录>后,有网友反馈新的需求还是不太会用. 现举例说明 一,网友需要如下的效果: 其实,这个需求依然可以我上篇的方法进行解答,但为了实现分组,需要disti ...