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

本文介绍Struts框架如何通过静态硬编码和动态文本消息实现国际化,包括资源文件的配置、使用及编程方式切换语言。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 的硬编码国际化,当客户端本地语言环境为中文就显示中文:

 
  为英文或其他语言就显示英文:

 

    4 、利用struts 中默认将Locale 信息设置到session 中的特性,可完成采用编程方式切换语言设置:

 

  Action 中的实现代码为:

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

                        

                         Locale currentLocale = null;

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

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

                         }else if("en".equals(lang)){

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

                         }

                        

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

                        

                        

                         return mapping.findForward("login");

 

           

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

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

 

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

ActionMessages messages = new ActionMessages();

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

messages.add("loginSuccess", message);

  上面的ActionMessage 消息必须addActionMessages 消息集中

 

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

this.saveMessages(request, messages);

this.saveErrors(request, messages);

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

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

    <html:messages id="mes" message="true" property="loginSuccess">
       <bean:write name="mes"/>
    </html:messages>

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

   <html:errors />

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值