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=u5927u5BB6u597DuFF01

再添加一份英文资源文件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}uFF0Cu4F60u597DuFF01

再修改英文资源文件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=u5168u5C40u8303u56F4-u6B22u8FCEu4FE1u606F

再添加一份英文资源文件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=u5305u8303u56F4-u6B22u8FCEu4FE1u606F

再添加一份英文资源文件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=Actionu8303u56F4-u6B22u8FCEu4FE1u606F

再添加一份英文资源文件ShowActionMessage_en_US.propertiess,其代码如下所示:

ActionMessage=Action-WelcomeMessage

2.4 资源文件加载顺序

假如在Action范围资源文件、包范围资源文件、全局资源文件中同时定义了相同的key以及value值,那么最终Action中取得的国际化信息为Action范围资源文件中指定key对应的value值。

下面来看资源文件加载顺序示意图,如图所示:

第三节 示例→实现用户自行选择语言环境站点

原文地址:https://www.cnblogs.com/studyLog-share/p/5475473.html