zoukankan      html  css  js  c++  java
  • 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值。

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

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

  • 相关阅读:
    关于高精度的那些事 ~
    LOJ #10002. 喷水装置
    [HAOI2008]糖果传递
    题解 CF1404B 【Tree Tag】
    题解 CF1407E 【Egor in the Republic of Dagestan】
    唯美歌词
    CF做题总结
    CSP2020游记
    数论
    hash好题
  • 原文地址:https://www.cnblogs.com/studyLog-share/p/5475473.html
Copyright © 2011-2022 走看看