- 浏览: 197389 次
- 性别:
- 来自: 芜湖
文章分类
- 全部博客 (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 1704[标题]:[原]MyEclipse location alre ... -
[原]Exception starting filter MyStruts2
2009-07-27 19:41 1018[标题]:[原]Exception starting filt ... -
[原]Struts2校验框架
2009-07-27 23:54 1094[标题]:[原]Struts2校验框架 [时间]:2009- ... -
[原]Struts2-拦截器
2009-08-01 00:21 1132[标题]:[原]Struts2-拦截器 [时间]:2009- ... -
[原]Struts2-文件上传与下载
2009-08-08 08:48 2156[标题]:[原]Struts2-文件上 ... -
[原]Struts2-深入探索
2009-08-29 20:32 1037[标题]:[原]Struts2-深入探索 [时间]:2009 ... -
[原]Struts2-整合JFreeChart
2009-09-03 17:10 1886[标题]:[原]Struts2-整合JFr ... -
[转]Java 小例子:数据持久化(保存数据到文件)
2009-03-16 11:00 1751说数据持久化,初学者可能还不太懂;但要说把数据保存到文件,这谁 ... -
[原]调试EL函数时,Tomcat提示NullPointerException
2009-04-03 19:02 895[标题]:调试EL函数时,Tomcat提示NullPointe ... -
[原]HelloWorldServlet
2009-05-27 22:16 909编译运行步骤: 1、将HelloWorldServlet.ja ... -
[原]getServletInfo()
2009-05-27 23:16 1354《JSP完全学习手册》学习心得之:getServletInfo ... -
[原]jsp:forward
2009-05-27 23:24 894《JSP完全学习手册》学习心得:jsp:forward Jud ... -
[原]jsp:param
2009-05-27 23:27 1548《JSP完全学习手册》学习心得:jsp:param param ... -
[原]request.getParameterValues()
2009-05-27 23:32 1191《JSP完全学习手册》学习心得:request.getPara ... -
[原]隐含对象config
2009-05-27 23:54 729《JSP完全学习手册》学习心得:隐含对象config < ... -
[原]cookie读写
2009-05-28 00:03 833《JSP完全学习手册》学习心得:cookie读写 <%@ ... -
[原]getHttpHeader
2009-05-28 00:14 824《JSP完全学习手册》学习心得:getHttpHeader g ... -
[原]向MySQL数据库插入Blob数据的问题
2009-06-03 23:45 3955[标题]:向MySQL数据库插 ... -
[原]SQL内外连接
2009-06-17 22:31 895-- Author:Winty(天堂露珠) -- Date: ...
相关推荐
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 ...五、 国际化-动态语言切换 37 09 自定义拦截器 38 10 类型转换 38 Struts2总结 39
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 ...五、 国际化-动态语言切换 37 09 自定义拦截器 38 10 类型转换 38 Struts2总结 39
struts是一个优秀的开源框架, 这个框架很好支持国际化,只要在资源文件中操作就可以实现,不需要改动原程式
[浪曦原创]Struts系列 第3讲 Struts与JSTL的国际化(zk001)
个人struts2框架学习后的梳理和总结,内容丰富,从配置文件到action类、result、ognl、类型转换器、国际化、拦截器、表单验证等等内容,还推荐了很多博客链接,有了它自学Struts2框架毫无压力!
struts2教程,一共有八个ppt。内容丰富。有:1、struts2配置与运行。2、类型转换器。3、 数据较验。4、拦截器。5、文件上传与下载。6、struts2国际化。7、 标签介绍。8、Struts2的插件。
书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。...
另外,Struts还提供了一系统实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息等。 <br/> 7、一个实例 <br/> 一个用户注册系统,用户通过网页输入相关信息...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...
6.4.2准备国际化资源文件 131 6.4.3调用国际化资源文件 134 6.5上传和下载 135 6.5.1文件上传的实现原理 135 6.5.2struts2文件上传实现方式 136 6.5.3struts2文件下载实现方式 141 本章小结 143 课后练习 ...
:springboot 结合 Thymeleaf Thymeleaf 模板引擎国际化操作 :springboot 结合 shiro 实现简单登入验证权限操作 :springboot 原生上传文件操作(包含 springboot1.5 和 2.0 版本) :springboot整合lombok、...
3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.9.1. 使用Singleton-helper类 4. 资源 4.1. 简介 4.2. ...
3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.9.1. 使用Singleton-helper类 4. 资源 4.1. 简介 ...
3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...
3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...
15.与Wicket的国际化 15.1。本土化 15.2。Wicket的本地化 15.3。捆绑查找算法 15.4。组件选择的本地化 15.5。国际化和模型 15.6。摘要 16. Wicket的资源管理 16.1。静态与动态资源 16.2。资源参考 16.3。包资源 16.4...