读书人

初识Struts(8)-Struts国际化I18N

发布时间: 2012-11-18 10:51:21 作者: rapoo

初识Struts(八)----Struts国际化I18N

Struts框架很好的支持国际化,这主要从静态硬编码和动态文本消息两方面来实现的。

?

一、struts硬编码国际化问题

1、建立各版本的资源文件

?

资源文件是用于适应多语言环境,随着系统的语言环境的变化,读取不同的资源文件,显示对应的语言。propertes文件特点就是简单,?key=value存放一组配置,通俗点讲就相当于定义一个变量,在这个文件里面定义这些变量的值,在程序里面可以调用这些变量,好处就是,如果程序中的参数值需要变动,直接来改这个.property文件就可以了,不用再去修改源代码。资源文件的命名规则 baseName+Locale.properties,一个项目的baseName必须相同,如中文版的资源文件为MessageResources_zh_CN.properties,则英文版的资源文件为MessageResources_en_US.properties,还应该提供一个默认资源文件MessageResources.properties当找不到匹配版本的资源文件时就访问该文件。

各资源文件的代码为:

?MessageResources.properties:

# -- standard errors --

errors.header=<UL>

errors.prefix=<LI><font color="red">

errors.suffix=</font></LI>

errors.footer=</UL>

?

user.title=User Login

user.username=User Name

user.password=Password

user.button.login=Login

?

?

user.login.success={0},Login Success

user.login.userNameNotFound=User Name Not Found,Name=[{0}]

user.login.passwordError=Password Error

user.login.error=Login Error!!!!!!

user.login.success=Login Success!!!!!

? MessageResources_zh_CN.properties:* 注意:需要用jdk自带的工具nativa2ascii.exe(或集成propertiesEditor插件到MyEclipse)将中文转换为Unicode编码,下面是用propertiesEditor插件处理的:

# -- standard errors --

errors.header=<UL>

errors.prefix=<LI><font color="red">

errors.suffix=</font></LI>

errors.footer=</UL>

?

user.title=用户登录

user.username=用户名

user.password=密码

user.button.login=登录

?

user.login.success={0},登录成功!

user.login.userNameNotFound=用户名不存在,用户名=[{0}]

user.login.passwordError=密码错误

user.login.error=登录失败!!!

user.login.success=登录成功!!!!

? MessageResources_en_US.properties:

# -- standard errors --

errors.header=<UL>

errors.prefix=<LI><font color="red">

errors.suffix=</font></LI>

errors.footer=</UL>

?

user.title=User Login

user.username=User Name

user.password=Password

user.button.login=Login

?

user.login.success={0},Login Success

user.login.userNameNotFound=User Name Not Found,Name=[{0}]

user.login.passwordError=Password Error

user.login.error=Login Error!!!!!!

user.login.success=Login Success!!!!!

?

??? 2、配置:在struts-config.xml文件中导入资源文件:(其中res是包名)

?<message-resources parameter="res.MessageResource"/>

???????????????????????

??? 3、在jsp页面中用<bean:message/>标签引用资源文件中的key值:login.jsp:

<%@ page language="java" contentType="text/html; charset=GB18030"

??? pageEncoding="GB18030"%>

<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title><bean:message key="user.title"/></title>

</head>

<body>

?? <h1><bean:message key="user.title"/></h1>

?? <form action="login.do" method="post">

????? <bean:message key="user.username"/>:<input type="text" name="username"><br>

????? <bean:message key="user.password"/>:<input type="password" name="password"><br>

????? <input type="submit" value="<bean:message key="user.button.login"/>">

?? </form>

</body>

</html>

???

??? 这样就实现了Struts的硬编码国际化,当客户端本地语言环境为中文就显示中文:
初识Struts(8)-Struts国际化I18N
?
?为英文或其他语言就显示英文:
初识Struts(8)-Struts国际化I18N
?
初识Struts(8)-Struts国际化I18N

??? 4、利用struts中默认将Locale信息设置到session中的特性,可完成采用编程方式切换语言设置:
初识Struts(8)-Struts国际化I18N
?

?Action中的实现代码为:

???????????????????????? String lang= request.getParameter("lang");

????????????????????????

???????????????????????? LocalecurrentLocale = null;

???????????????????????? if("zh".equals(lang)){

??????????????????????????????????????? currentLocale= new Locale("zh","CN");

???????????????????????? }elseif("en".equals(lang)){

??????????????????????????????????????? currentLocale= new Locale("en","US");

???????????????????????? }

????????????????????????

???????????????????????? request.getSession().setAttribute(Globals.LOCALE_KEY,currentLocale);

????????????????????????

????????????????????????

???????????????????????? returnmapping.findForward("login");

?

???????????

? 二、? struts动态文本国际化处理步骤:

????????? 1、 在各资源文件中加入资源(如上面的资源文件代码)

?

??????? ??2、 在Action中创建国际化消息:

ActionMessages messages = new ActionMessages();

ActionMessage message = newActionMessage("user.login.success",username);

messages.add("loginSuccess", message);

?上面的ActionMessage消息必须add到ActionMessages消息集中

?

????????? 3、 传递国际化消息,调用savaMessages传递普通消息,调用saveErrors传递错误消息到相应的作用范围(如request):

this.saveMessages(request, messages);

this.saveErrors(request, messages);

<!----><!----><!---->

? ? ? ? ? 4、在Jsp页面显示国际化信息:

???? * 用<html:messages/>标签显示(可显示普通消息和错误消息,默认为错误消息,需设置message=true才显示普通消息):

??? * 用<html:errors/>标签显示错误消息:

   <html:errors />

?

到此,Struts的国际化问题基本解决。。。。。

读书人网 >软件架构设计

热点推荐