`

转 struts2国际化详解

 
阅读更多

Struts2的国际化
资源文件的命名:basename_language_country.properties
JAVA国际化
如果系统同时存在资源文件、类文件,系统将以类文件为主,而不会调用资源文件。
对于简体中文的Locale,ResourceBundle搜索资源的顺序是:
(1)baseName_zh_CN.class
(2)baseName_zh_CN.properties
(3)baseName_zh.class
(4)baseName_zh.properties
(5)baseName.class
(6)baseName.properties

 
Struts2的国际化入门

Struts2国际化是建立在Java国际化的基础上的,一样是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle
加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的消息--整个过程与JAVA程序的国家化完全相同,只是
Struts2框架对JAVA程序国际化进行了进一步封装,从而简化了应用程序的国际化。
Struts2需要国际化的部分
类型转换:
数据校验:
验证框架xml配置文件的国际化:RegisterAction-validation.xml文件<message key="username.xml.invalid"/>

JSP页面的国际化:<s:text name="addUser"/>

Action的国际化:利用ActionSupport类提供的getText()方法.

 

Struts2中加载全局资源文件

struts.xml
<constant name="struts.custom.i18n.resources" value="baseName"/>

struts.properties
struts.custom.i18n.resources=baseName


访问国际化消息

Struts2访问国际化消息主要有如下三种方式:
(1)JSP页面:<s:text name="key"/>
(2)Action类中:使用ActionSupport类的getText方法。
(3)表单元素的Label里:为表单元素指定一个key属性

输出带占位符的国际化消息

Struts2中提供了如下两种方式来填充消息字符串中的占位符

(1)JSP页面,在<s:text.../>标签中使用多个<s:param.../>标签来填充消息中的占位符。
(2)Action中,在调用getText方法时使用getText(String aTextName,List args)或getText(String key, String[] args)方法来填充占位符。
除此之外,Struts2还提供了对占位符的一种替代方式,这种方式允许在国际化消息资源文件中使用表达式,对于这种方式,则可避免在使用国际化消息时还需要为占位符传入参数

值。

如下在消息资源中使用表达式
succTip=${username}, 欢迎, 您已经登录!
在上面的消息资源中,通过使用表达式,可以从ValueStack中取出该username属性值,自动填充到该消息资源中。

加载资源文件的方式
(1)加载全局资源文件: <constant name="struts.custom.i18n.resources" value="baseName"/>
(2)包范围资源文件 :为Struts2指定包范围资源文件的方法是,在包的根路径下建立多个文件名为package_language_country.properties的文件,一旦建立了
   这个系列的国际化资源文件,应用中处于该包下的所有Action都可以访问该资源文件。需要注意的是上面的包范围资源文件的baseName就是package,不是Action所在的包名。
(3)Action范围资源文件:在Action类文件所在的路径建立多个文件名为ActionName_language_country.properties的文件。
(4)临时指定资源文件:<s:i18n.../>标签的name属性指定临时的国际化资源文件

加载资源文件的顺序
Action中加载资源文件,假设我们在某个ChildAction中调用了getText("user.title"),Struts 2.0的将会执行以下的操作:
(1)优先加载系统中保存在ChildAction的类文件相同位置,且baseName为ChildAction的系列资源文件。
(2)如果在(1)中找不到指定key对应的消息,且ChildAction有父类ParentAction,则加载系统中保存在ParentAction的类文件相同位置,且
   baseName为ParentAction的系列资源文件。
(3)如果在(2)中找不到指定key对应的消息,且ChildAction有实现接口IChildAction,则加载系统中保存在IChildAction的类文件相同位置,且
   baseName为IChildAction的系列资源文件。
(4)如果在(3)中找不到指定key对应的消息,且ChildAction有实现接口ModelDriven(即使用模型驱动模式),则对于getModel()方法返回的model对象,
   重新执行第(1)步操作。
(5)如果在(4)中找不到指定key对应的消息,则查找当前包下baseName为package的系列资源文件。
(6)如果在(5)中找不到指定key对应的消息,则沿着当前包上溯,直到最顶层包来查找baseName为package的系列资源文件。
(7)如果在(6)中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。
(8)如果经过上面的步骤一直找不到key对应的消息,将直接输出该key的字符串值。


对于在JSP中访问国际化消息,则简单的多,他们又可以分为两种形式:
(1)对于使用<s:i18n.../>标签作为父标签的<s:text.../>标签、表单标签的形式:
   a、将从<s:i18n.../>标签指定的国际化资源文件中加载指定key对应的消息。
   b、如果在a中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。
   c、如果经过上面步骤一直找不到该key对应的消息,将直接输出该key的字符串值。

(2)如果<s:text.../>标签、表单标签没有使用<s:i18n.../>标签作为父标签:
    直接加载struts.custom.i18n.resources常量指定baseName的系列资源文件。如果找不到该key对应的消息,将直接输出该key的字符串值。

 

允许用户自行选择程序语言

Struts2国际化的运行机制
    在Struts2中,可以通过ActionContext.getContext().setLocale(Locale arg)设置用户的默认语言。
为了简化设置用户默认语言环境,Struts2提供了一个名为i18n的拦截器(Interceptor),并且将其注册在默认的拦截器中(defaultStack)。
    i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale的参数。如果该参数存在,拦截器就将其作为参数,转换成Locale对象,
并将其设为用户默认的Locale(代表国家/语言环境)。
 除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名为
WW_TRANS_I18N_LOCALE的属性,则该属性指定的Locale将会作为浏览者的默认Locale。
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<script. type="text/javascript">
function langSelecter_onChanged()
{
 document.getElementById("langForm").submit();
}
</script>
<%-- 设置SESSION_LOCALE为用户session中的WW_TRANS_I18N_LOCALE属性值 --%>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<%-- 使用lee.Locales创建locales实例 --%>
<s:bean id="locales" name="lee.Locales">
 <%-- 为locales实例传入current参数值,如果SESSION_LOCALE为空,则返回ValueStack中locale属性值(即用户浏览器设置的Locale) --%>
 <s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
</s:bean>

<%-- 让用户选择语言的表单 --%>
<form. action="<s:url/>" id="langForm"
    style="background-color:#bbbbbb; padding-top: 4px; padding-bottom: 4px;">
    <s:text name="languag"/>
 <s:select label="Language" list="#locales.locales" listKey="value" listValue="key"
        value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
        name="request_locale" id="langSelecter"
        nchange="langSelecter_onChanged()" theme="simple"/>
</form>

在其他页面中包含该页面:

<s:include value="selectlanguage.jsp"/>
在struts.xml文件中增加Action通配符的配置:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 <constant name="struts.custom.i18n.resources" value="messageResource"/>
 <constant name="struts.i18n.encoding" value="GBK"/>
    <package name="lee" extends="struts-default">
  <!-- 使用通配符定义Action的name -->
  <action name="*">
   <!-- 将请求转发给/WEB-INF/jsp/路径下同名的JSP页面 -->
   <result>/WEB-INF/jsp/{1}.jsp</result>
  </action>
    </package>
</struts>

分享到:
评论

相关推荐

    Struts2国际化详解

    Java国际化支持实例 博文链接:https://zmx.iteye.com/blog/461474

    struts2 properties配置详解

    自己学会的,保存的学习网页,给大家分享 struts2 国际化

    Struts2开发详解

    Struts2开发详解,讲述Struts2开发中的详细配置,已经它的验证,国际化等。

    Struts2属性文件详解

    该属性指定Struts 2应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文件名以英文逗号(,)隔开. struts.diSPAtcher.parametersWorkaround 对于某些Java EE服务器,不支持HttpServlet Request...

    Struts2的国际化支持及JDK对国际化的支持深入详解

    Struts2的国际化支持及JDK对国际化的支持深入详解,是一段视频,讲解细致

    Struts2实现国际化+天气webservice接口+股票webservice接口

    Struts2实现国际化+天气webservice接口+股票webservice接口,源代码可直接使用,用MyEclipse直接导入

    struts2 详解文档

    配置国际化全局资源文件、输出国际化信息 输出带有占位符的国际化信息 配置包范围国际化资源文件 配置Action范围国际化资源文件 ognl表达式 Struts 2常用标签解说 使用标签防止表单重复提交 Struts 2+...

    IBM Struts2培训PPT.7z

    IBMStruts2培训PPT (大全集) 主讲:刘雷 完整实用 ...第六章:struts2国际化.ppt 第七章:Struts2验证机制.ppt 第八章:struts2文件上传下载.ppt 第九章:struts2拦截器.ppt + Struts2开发详解.ppt

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    加载附加的国际化属性文件(不包含.properties后缀) struts.custom.properties Location of additional configuration properties files to load 加载附加的配置文件的位置 struts.devMode Whether Struts ...

    Struts2入门教程(全新完整版)

    1.action级别下的国际化 47 2.配置package的资源文件 48 3.app级别的资源文件 48 4.使用资源文件的原理 49 5.选择使用资源文件 49 八、验证机制 50 1.基于手工编码的校验 50 简析校验流程: 53 2.基于XML配置形式的...

    Struts所有标签详解

    里面包括&lt;html&gt;&lt;bean&gt;&lt;logic&gt;&lt;tiles&gt;&lt;nested&gt;&lt;br&gt;五组标签库的详细... 另外还有国际化(文字国际化/图片国际化)、 表单验证,以及验证框架 例子是用JBuilder2006做的 绝对经典!!!!!!!!!!!!!

    struts2 ppt 教程 十章

    第一章:认识体验Struts 2 第二章:struts2架构剖析 第三章:struts2配置详解 ...第六章:struts2国际化 第七章:struts2验证 第八章:struts2文件上传下载 第九章:struts2拦截器 第十章:struts2类型转换

    struts2详解

    对struts2的内部详细讲解 例如:struts xml struts2的action使用 以及国际化 验证等技术

    Struts2高级应用

    Struts2Ajax刷新,验证框架,国际化详解。

    Struts2+Spring+Hibernate3.2+整合文档及事例程序.zip

    properties文件即i18n国际化多国语言版的用法,struts2前台校验,对输入的数据进行验证validators struts2 OGNL 表达式详解 struts2 #,*,%

    低清版 大型门户网站是这样炼成的.pdf

    2.5.3 自定义国际化struts 2校验错误消息 92 2.5.4 struts 2的自带校验器 92 2.6 struts 2的拦截器 94 2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100...

    struts框架资料

    很好的struts框架资料,包括java web编程基础、struts入门、struts详解、struts国际化和数据验证

    Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架...

    应付struts2考试有这个就够了.docx

    包含过滤器,国际化等所有的代码以及详解,如web.xml,struts.xml,java包,jsp包,struts考试有这个就够了

    ActionForward和国际化

    详解Struts2的国际化!ActionForward的使用 ActionForward的默认行为是转发,如果想重定向,需要在标签中配置 redirect="true" 比如: &lt;forward name="login" path="/login.jsp" redirect="true"/&gt;

Global site tag (gtag.js) - Google Analytics