- 浏览: 202037 次
- 性别:
- 来自: 芜湖
文章分类
- 全部博客 (139)
- 软件 (0)
- Pattern (6)
- CSDN导入 (19)
- Struts (3)
- [网站分类]1.网站首页原创 (27)
- [网站分类]6.转载区 (4)
- Hibernate (10)
- Error (8)
- [网站分类]2.Java新手区 (20)
- Java (8)
- [网站分类]4.其他技术区 (10)
- Web (1)
- C++ (2)
- Algorithm (4)
- Linux (2)
- Skill (1)
- Tech (2)
- Note (2)
- [网站分类]3.非技术区 (1)
- Database (1)
- Winty (7)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
最新评论
-
haohao-xuexi02:
很不错哦。
O'Reilly cos上传组件的使用(1/3) - 上传文件 -
yoin528:
useUnicode=true&charact ...
[原]向MySQL数据库插入Blob数据的问题 -
xiaoqing20:
下载来看看!呵呵
[原]Struts2类型转换 -
xiaoqing20:
[原]Struts2类型转换
[标题]:[原]Struts2-国际化
[时间]:2009-8-9
[摘要]:Struts2 internationalization
[关键字]:浪曦视频,Struts2应用开发系列,WebWork,Apache,国际化,i18n,multi-lingual,多语言,资源文件
[环境]:struts-2.1.6、JDK6、MyEclipse7、Tomcat6
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys
[正文]:
首先要在struts.xml中配置全局国际化文件Basename为message:
<constant name="struts.custom.i18n.resources" value="message
" />
1、JSP页面的国际化
a.普通信息国际化
在src目录下新建message.properties(optional,没有zh_CN和en_US等资源文件时就会找message.properties),新建对应的中文和英文properties为:
message_zh_CN.properties、message_en_US.properties。
/StrutsHelloWorld/src/message
_en_US.properties:
wintys.i18n.title=Register
/StrutsHelloWorld/src/message
_zh_CN.properties:
wintys.i18n.title=注册
在JSP页面中使用:
<s:text name="wintys.i18n.title" />
在浏览器中访问时,会根据不同的Locale显示相应的国际化信息。
b.表单信息国际化
同样是在message_zh_CN.properties、message_en_US.properties中配置key=value。
JSP页面中的表单:
<s:form action="...">
......
<s:textfield name="name" key="wintys.i18n.name" />
......
</s:form>
没有国际化时是用<s:textfield label="name" />,国际化后应该用<s:textfield name="name" key
="wintys.i18n.name" />
注意,国际化时,表单的theme不能为simple
。
c.国际化标签<s:i18n />
除了可以使用<s:text />国际化,还可以使用<s:i18n />。<s:text />会在message_XX_XX.properties中查找key(如果有包级别、类级别的properties,则会优先应用包级别和类级别的properties)。而<s:i18n name="basename"/>则在basename指明的文件(/src/basename_XX_XX.properties)中查找key。
/StrutsHelloWorld/src/messagefile_en_US.properties:
wintys.i18n.desc = description
wintys.i18n.addition = {0} , additional information
/StrutsHelloWorld/src/messagefile_zh_CN.properties:
wintys.i18n.desc = "u8BF4"u660E
wintys.i18n.addition ={0} , "u989D"u5916"u4FE1"u606F
使用如下:
<s:i18n name="messagefile
">
<s:text name="wintys.i18n.desc"/><br/>
<s:text name="wintys.i18n.addition">
<s:param>Hello</s:param>
</s:text>
</s:i18n>
2、Action中的国际化
ActionSupport类中有一系列重载的getText()方法,用于国际化。
一句话:addActionError(getText
("wintys.i18n.name.invalid"));。addFieldError()也类似。
/StrutsHelloWorld/src/wintys/struts2/i18n/I18nAction.java
:
import com.opensymphony.xwork2.ActionSupport;
/**
*
* @author Winty (wintys@gmail.com)
* @version 2009-8-9
* @see http://wintys.blogjava.net
*/
public class I18nAction extends ActionSupport {
private static final long serialVersionUID = 2188344424923390101L;
private String name;
private int age;
//此处省略了getter and setter
@Override
public void validate() {
if(name == null || "".equals(name.trim()) ){
//before i18n
//addActionError("name should not be empty");
//after i18n
//带参数也可以:getText(String key , String[] args);
addActionError(getText("wintys.i18n.name.invalid"));
}
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
3、验证框架的国际化
一句话:<message key
="wintys.i18n.age.conversion.error" />。
还可以使用<message>${getText("name.invalid")}</message>。
/StrutsHelloWorld/src/wintys/struts2/i18n/I18nAction-validation.xml:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="age">
<field-validator type="conversion" short-circuit="true">
<!-- before i18n:<message>age conversion error</message> -->
<message key="wintys.i18n.age.conversion.error" />
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<!-- <message>age range: ${min} ~ ${max}</message> -->
<message key="wintys.i18n.age.exceed.range"/>
</field-validator>
</field>
</validators>
4、局部国际化文件
前面所定义的key都是在全局国际化文件message_XX_XX.properties中定义的,也可以定义包级别和类级别的properties,其中key的优先级是:类级别>包级别>全局。
a.包级别properties
在包中新建"package
_XX_XX.properties"。
/StrutsHelloWorld/src/wintys/struts2/i18n/package
_en_US.properties:
wintys.i18n.age = Age
wintys.i18n.submit = Submit
/StrutsHelloWorld/src/wintys/struts2/i18n/package
_zh_CN.properties:
wintys.i18n.age = \u5E74\u9F84
wintys.i18n.submit = \u63D0\u4EA4
b.类级别properties
在包中新建"类名_XX_XX.properties"。
/StrutsHelloWorld/src/wintys/struts2/i18n/I18n
Action_en_US.properties:
wintys.i18n.age = Age(class level)
wintys.i18n.submit = Submit(class level)
/StrutsHelloWorld/src/wintys/struts2/i18n/I18n
Action_zh_CN.properties:
wintys.i18n.age = \u5E74\u9F84(\u7C7B\u7EA7\u522B)
wintys.i18n.submit = \u63D0\u4EA4(\u7C7B\u7EA7\u522B)
注意:包级别、类级别properties只有在jsp页面提交到action,正在显示的页面是.action时,才能被读取并显示。
5、其它
a.Struts国际化由I18n拦截器实现(xwork-2.1.2.jar/com.opensymphony.xwork2.interceptor.I18nInterceptor)。
b.在浏览器中设置不同的语言首选项即可看到国际化的效果。
6、详细代码
/StrutsHelloWorld/WebRoot/i18n/input.jsp:
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>register</title>
<meta http-equiv="pragma" content="no-cache">
</head>
<body>
<s:actionerror/>
<s:text name ="wintys.i18n.title" />
<s:form action="i18n" >
<!--s:textfield name="name" label="姓名"/ -->
<!-- s:textfield name="age" label="年龄" / -->
<!-- s:submit name="submit" value=" 提交 " / -->
<s:textfield name="name" key ="wintys.i18n.name"></s:textfield><br/>
<s:textfield name="age" key="wintys.i18n.age"></s:textfield><br/>
<s:submit name="submit" key="wintys.i18n.submit"></s:submit>
</s:form>
<s:i18n name="messagefile">
<s:text name="wintys.i18n.desc"/><br/>
<s:text name="wintys.i18n.addition">
<s:param>Hello</s:param>
</s:text>
</s:i18n>
</body>
</html>
/StrutsHelloWorld/WebRoot/i18n/output.jsp:
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'output.jsp' starting page</title>
</head>
<body>
姓名:<s:property value="name"/><br/>
年龄:<s:property value="age"/><br/>
</body>
</html>
struts.xml配置:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 定义全局错误信息资源文件message.properties -->
<constant name="struts.custom.i18n.resources" value="message" />
<package name="MyStruts" extends="struts-default">
<!-- 国际化 -->
<action name="i18n" class="wintys.struts2.i18n.I18nAction ">
<result name="success">/i18n/output.jsp</result>
<result name="input">/i18n/input.jsp</result>
</action>
</package>
</struts>
/StrutsHelloWorld/src/message_en_US.properties:
wintys.i18n.name.invalid=NAME should not be empty.
wintys.i18n.age.conversion.error = age conversion error.
wintys.i18n.age.exceed.range = age exceed range: ${min} ~ ${max}
wintys.i18n.name = Name(global level)
wintys.i18n.age = Age(global level)
wintys.i18n.submit = Submit(global level)
/StrutsHelloWorld/src/message_zh_CN.properties:
wintys.i18n.name.invalid =\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
wintys.i18n.age.conversion.error =\u5E74\u9F84\u8F6C\u6362\u9519\u8BEF
wintys.i18n.age.exceed.range =\u5E74\u9F84\u8D85\u51FA\u8303\u56F4\: ${min} ~ ${max}
wintys.i18n.name = \u59D3\u540D(\u5168\u5C40)
wintys.i18n.age = \u5E74\u9F84(\u5168\u5C40)
wintys.i18n.submit =\u63D0\u4EA4(\u5168\u5C40)
[参考资料]:
[1] 《浪曦视频之Struts2应用开发系列》
[2] 【Java EE】struts2国际化 : http://www.cnitblog.com/intrl/archive/2009/04/18/56464.html
[3] Struts2 的国际化 : http://hi.baidu.com/countryroadtao/blog/item/4ac77e2b6ec3c4305243c125.html
[附件]:
源代码 :
Struts_helloworld_i18n.zip
- Struts_helloworld_i18n.zip (5.6 KB)
- 下载次数: 10
发表评论
-
[原]MyEclipse location already exists
2009-07-27 00:37 1737[标题]:[原]MyEclipse location alre ... -
[原]Exception starting filter MyStruts2
2009-07-27 19:41 1053[标题]:[原]Exception starting filt ... -
[原]Struts2校验框架
2009-07-27 23:54 1126[标题]:[原]Struts2校验框架 [时间]:2009- ... -
[原]Struts2-拦截器
2009-08-01 00:21 1162[标题]:[原]Struts2-拦截器 [时间]:2009- ... -
[原]Struts2-文件上传与下载
2009-08-08 08:48 2197[标题]:[原]Struts2-文件上 ... -
[原]Struts2-深入探索
2009-08-29 20:32 1076[标题]:[原]Struts2-深入探索 [时间]:2009 ... -
[原]Struts2-整合JFreeChart
2009-09-03 17:10 1913[标题]:[原]Struts2-整合JFr ... -
[转]Java 小例子:数据持久化(保存数据到文件)
2009-03-16 11:00 1779说数据持久化,初学者可能还不太懂;但要说把数据保存到文件,这谁 ... -
[原]调试EL函数时,Tomcat提示NullPointerException
2009-04-03 19:02 927[标题]:调试EL函数时,Tomcat提示NullPointe ... -
[原]HelloWorldServlet
2009-05-27 22:16 934编译运行步骤: 1、将HelloWorldServlet.ja ... -
[原]getServletInfo()
2009-05-27 23:16 1396《JSP完全学习手册》学习心得之:getServletInfo ... -
[原]jsp:forward
2009-05-27 23:24 919《JSP完全学习手册》学习心得:jsp:forward Jud ... -
[原]jsp:param
2009-05-27 23:27 1607《JSP完全学习手册》学习心得:jsp:param param ... -
[原]request.getParameterValues()
2009-05-27 23:32 1225《JSP完全学习手册》学习心得:request.getPara ... -
[原]隐含对象config
2009-05-27 23:54 754《JSP完全学习手册》学习心得:隐含对象config < ... -
[原]cookie读写
2009-05-28 00:03 860《JSP完全学习手册》学习心得:cookie读写 <%@ ... -
[原]getHttpHeader
2009-05-28 00:14 850《JSP完全学习手册》学习心得:getHttpHeader g ... -
[原]向MySQL数据库插入Blob数据的问题
2009-06-03 23:45 3990[标题]:向MySQL数据库插 ... -
[原]SQL内外连接
2009-06-17 22:31 921-- Author:Winty(天堂露珠) -- Date: ...
相关推荐
Struts2提供了许多内置的拦截器,如`params`(用于参数预处理),`exception`(处理异常),`i18n`(国际化支持),`modelDriven`(模型驱动),`validation`(表单验证)等。这些拦截器可以灵活组合,以满足各种...
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 ...五、 国际化-动态语言切换 37 09 自定义拦截器 38 10 类型转换 38 Struts2总结 39
ActionSupport是Struts2提供的一个基类,它实现了许多通用的功能,如验证、国际化等。继承自ActionSupport的Action可以更方便地实现复杂的业务逻辑。 #### 四、Struts2高级特性 ##### 4.1 高级特性概述 Struts2...
这些示例通常包括了从简单的“Hello World”程序到复杂业务逻辑的实现,覆盖了Struts2的各种特性,如表单处理、国际化、文件上传、AJAX集成等。 在深入学习Struts2的过程中,你需要掌握以下几个核心知识点: 1. **...
Struts还提供了国际化、异常处理等特性,简化了Web应用的开发。 2. **Hibernate框架**:Hibernate是一个强大的对象关系映射(ORM)工具,它将Java对象与数据库表进行映射,实现了数据层的解耦。开发者可以使用面向...
在这个“美河原创视频.struts2系列讲座配套word”中,主要讲解了如何在Struts2中实现国际化(i18n)功能,这是现代Web应用开发中的一个重要组成部分,使得应用能够适应不同国家和地区用户的语言需求。 首先,应用程序...
Struts2的核心特性包括动作映射、拦截器、结果类型、国际化和主题支持等。它的优点在于提供了丰富的插件和强大的表单验证机制,使得视图层与业务逻辑层解耦,便于维护和扩展。 Spring框架则是一个全面的企业级应用...
在"Struts8"这个文件中,可能包含了基于MyEclipse开发的Struts2项目实例,通过这些源代码和注释,你可以深入了解Struts2的实践应用,包括如何配置Action、编写拦截器、处理表单提交、实现国际化等。这将是一个很好的...
[浪曦原创]Struts系列 第3讲 Struts与JSTL的国际化(zk001)
它的优势在于强大的表单验证、国际化支持以及与各种视图技术的集成。 压缩包内的"TestSSi"可能是项目的名字或者一个关键的目录或文件,代表了整合后的测试案例。在这个案例中,开发者可能创建了一个简单的Web应用,...
5. **国际化和本地化**:Struts支持多语言环境,通过资源包(.properties文件)实现国际化和本地化。开发者可以为不同的地区和语言提供相应的文本和格式。 6. **标签库**:如testtag1.rar、testtag2.rar、testtag3....
- **章节概述**:虽然具体内容未给出,但根据书名推测,这一章可能会涉及Struts2中的验证机制和国际化支持。这些都是确保应用程序质量和用户体验的重要方面。 - **可能的关键知识点**: - Struts2中的验证框架 -...
6. **STRUTS2插件和拦截器**:Struts2的插件机制可以扩展其功能,例如,国际化的插件可以实现多语言支持。拦截器则在Action调用前后执行,可用于日志记录、权限验证等。 7. **数据持久化**:投票系统通常需要将用户...
Struts2提供了一套完整的请求处理机制,包括拦截器、结果类型和国际化支持等,使得开发者可以更专注于业务逻辑的编写。 Mybatis是一个轻量级的持久层框架,它简化了数据库操作,通过XML或注解方式配置SQL语句,将...
验证框架允许使用国际化资源文件来定制错误消息,这样可以方便地根据不同语言环境展示错误信息。在`struts.properties`或`struts-nls.properties`文件中指定资源文件的路径。 6. **跳过验证** 在某些情况下,可能...
4. **国际化与本地化**:Struts2提供了内置的国际化支持,使得应用可以轻松地适应不同的语言环境。 5. **数据校验**:Struts2有强大的数据校验框架,可以在Action执行前对用户输入进行验证,提高了应用的安全性和...
然而,在国际化(I18N)的应用场景下,Struts2资源文件在JSP页面中显示乱码的问题常常困扰着开发者。本文将深入探讨这一问题,并详细介绍两种有效的解决方案。 ### Struts2资源文件与乱码问题 Struts2框架通过资源...