基于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. 基于cookie和session的登录验证

    settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions ...

  2. Django视图(一)

    Django视图(一) 一. 概述 作用:视图接受web请求,并相应请求 本质:视图是自定义的一个python中的函数 响应内容:正常视图,重定向视图,错误视图(404,500,400) 响应过程: ...

  3. Markdown语法初体验

    前言 由于把博客主题样式换了,所以改用Markdown语法,让代码看起来更加舒服一些. 照葫芦画瓢 这里是H1标题(===) 这里是H2标题(---) 使用一个#号 使用两个#号 使用三个#号 引用 ...

  4. Spring(十四)之编程性事务(续)

    Spring 编程式事务管理 编程式事务管理方法允许你在对你的源代码编程的帮助下管理事务.这给了你极大地灵活性,但是它很难维护. 在我们开始之前,至少要有两个数据库表,在事务的帮助下我们可以执行多种 ...

  5. Genymotion集成到Eclipse

    在Eclipse中使用Genymotion Google的ADT中自带的模拟器速度太慢,可以使用Genymotion代替.关于Genymotion的安装方法,可以直接访问官网,需要注册账号,因为创建模 ...

  6. 学习一份百度的JavaScript编码规范

    JavaScript编码规范 1 前言 2 代码风格 2.1 文件 2.2 结构 2.2.1 缩进 2.2.2 空格 2.2.3 换行 2.2.4 语句 2.3 命名 2.4 注释 2.4.1 单行注 ...

  7. angular2jsonp如何跨域请求百度API进行定位

    前提,百度api的申请,不会的可以百度一下,下面是连接 http://lbsyun.baidu.com/index.php?title=webapi/ip-api 1.appMoudle里引入 imp ...

  8. 用JavaScript获取URL参数的方法之一

    若地址栏URL为:abc.html?m=tomms&c=allsearchlist&pageNo=1&pageNum=20&text=1 <script> ...

  9. STM32 HAL库学习系列第5篇 定时器TIM---编码器接口模式配置

    cube基本配置,外设开启编码器,串口2 可能大家在设置的时候有这个错误 错误:error:  #20: identifier "TIM_ICPOLARITY_BOTHEDGE" ...

  10. QEMU 模拟运行 VxWorks 6.6

    QEMU 模拟运行 VxWorks 6.6 项目简介 本项目是在 Windows 系统编译运行 X86 平台 VxWorks 6.6 系统,使用的模拟软件是 qemu for Windows Host ...