Struts——国际化问题

一、Struts的国际化

    Struts是一种支持国际化的MVC的WebFramework。可是如何来使用struts国际化是一个问题。下面我们来探讨一下,如何实现Struts的国际化。Web程式的国际化涉及到3个层面。

第一、jsp部分的输入/输出;

第二、应用处理程序的国际化;

第三、DB的国际化问题。

  

这里主要探讨的是jsp部分的输入/输出问题。

 

 

步骤1:配置struts国际化

 

在struts-config.xml中配置message-resources标签

 

 

<message-resourcesparameter="resources.MessageResources" />

 

其中的参数是国际化配置文件MessageResource.properties的文件名。

 

步骤2:提供国际化配置文件

 

中文:MessageResource_zh_cn.properties

 

英文:MessageResource_en_us.properties

 

源文件:resource.properties表示中文信息

 

在源文件resource.properties中硬编码中文信息

errors.header=<UL>
errors.prefix=<fontcolor="red"><LI>
errors.suffix=</LI></font>
errors.footer=</UL>
login.form.field.username=用户
login.form.field.password=密码
login.form.button.login=登录
login.success={0},登录成功
login.user.not.found=用户不能找到,用户名称=【{0}】
login.password.error=密码错误


 

然后用java中提供的工具把这些信息转换为unicode放到相应国际化文件中。

 

MessageResource_zh_cn.properties文件中

 

errors.header=<UL>
errors.prefix=<fontcolor="red"><LI>
errors.suffix=</LI></font>
errors.footer=</UL>
login.form.field.username=\u7528\u6237
login.form.field.password=\u5bc6\u7801
login.form.button.login=\u767b\u5f55
login.success={0},\u767b\u5f55\u6210\u529f
login.user.not.found=\u7528\u6237\u4e0d\u80fd\u627e\u5230\uff0c\u7528\u6237\u540d\u79f0=\u3010{0}\u3011
login.password.error=\u5bc6\u7801\u9519\u8bef


 

步骤3:在jsp页面上用struts标签<bean:message>来读取国际化消息文本

 

引入标签:

<%@ tagliburi="http://struts.apache.org/tags-html"prefix="html"%>  
<%@ tagliburi="http://struts.apache.org/tags-bean"prefix="bean"%>    
 
<formaction="login.do" method="post">
<bean:messagekey="login.form.field.username"/>:<input type="text"name="username"><br>
<bean:messagekey="login.form.field.password"/>:<inputtype="password" name="password"></br>
<inputtype="submit" value="<bean:messagekey="login.form.button.login"/>">
</form>


 

bean:message中的属性key指的是国际化文件中的键。

 

 

 

步骤四、利用Struts默认将locale放到Session的特性,完成语言切换:

public ActionForwardexecute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
Stringlang = request.getParameter("lang");
Localelocale = Locale.getDefault();
if("zh".equals(lang)) {
locale= new Locale("zh", "CN");
}elseif ("en".equals(lang)) {
locale= new Locale("en", "US");
}
//将Locale设置到session中
//request.getSession().setAttribute(Globals.LOCALE_KEY,locale);
this.setLocale(request,locale);
returnmapping.findForward("index");
}


动态信息国际化:

public ActionForwardexecute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
LoginActionFormlaf = (LoginActionForm)form;
Stringusername = laf.getUsername();
Stringpassword = laf.getPassword();        
UserManageruserManager = new UserManager();
ActionMessagesmessages = new ActionMessages();
try {
userManager.login(username,password);                
//创建国际化消息文本
ActionMessagemessage = new ActionMessage("login.success", username);
messages.add("login_success_1",message);
//传递国际化消息
this.saveMessages(request,messages);
returnmapping.findForward("success");
}catch(UserNotFoundExceptione) {
e.printStackTrace();
//创建国际化消息文本
ActionMessageerror = new ActionMessage("login.user.not.found", username);
messages.add("error_1",error);                        
//传递国际化消息
this.saveErrors(request,messages);
}catch(PasswordErrorExceptione) {
e.printStackTrace();
//创建国际化消息文本
ActionMessageerror = new ActionMessage("login.password.error");
messages.add("error_2",error);                        
//传递国际化消息
this.saveErrors(request,messages);
}
returnmapping.findForward("error");
}
 


jsp页面:

<body>
<ahref="login.jsp">登录</a> <br>
<ahref="changeLang.do?lang=zh">中文</a>   <ahref="changeLang.do?lang=en">英文</a>
<p>
<ahref="login_jstl.jsp">登录(jstl)</a> 
  </body>


动态国际化消息读取:

<body>
<html:messagesid="msg" message="true">
<bean:writename="msg"/>
</html:messages>
</body>


 

 

 

 配置国际化Action和资源文件:

 

<actionpath="/changeLang"
type="com.tgb.struts.ChangeLanguageAction"
>
<forwardname="index" path="/index.jsp"/>
</action>
 
 <message-resourcesparameter="res.MessageResources" />


 

res.MessageResources表示的是res包下的MessageResources文件。



     

你可能感兴趣的:(Struts——国际化问题)