`
liuyinhuan
  • 浏览: 27659 次
  • 性别: Icon_minigender_1
  • 来自: 广东中山
文章分类
社区版块
存档分类
最新评论

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

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

 

    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的国际化问题基本解决。。。。。

1
0
分享到:
评论

相关推荐

    Struts2 in action中文版

    第2章 初识Struts 2 16 2.1 声明性架构 16 2.1.1 两种配置 16 2.1.2 声明架构的两种方式 17 2.1.3 智能默认值 20 2.2 简单的HelloWorld示例 20 2.2.1 部署示例应用程序 20 2.2.2 探索HelloWorld应用程序 24 2.3 使用...

    STRUTS基础

    7. **国际化(Internationalization, i18n)**:Struts支持多语言环境,通过资源包(Resource Bundle)来实现不同语言的文本和消息。 在“第08章 初识Java EE经典MVC框架Struts”的源代码中,你可以看到以下几个...

    深入浅出Struts2(附源码)

    第2章初识Struts 14 2.1 Struts的优点 14 2.2 Struts的动作处理流程 15 2.3 拦截器 17 2.4 Struts配置文件 18 2.4.1 struts.xml文件 19 2.4.2 struts.properties文件 26 2.5 Struts应用程序示例 26 2.5.1 ...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    在计算机文档里,国际化(internationalization)通常简写为i18n,这是因为这个单词的第一个字母是i,最后一个字母是n,i和n之间总共有18个字母。与国际化相对应的是本地化,指让一个具备国际化支持的应用程序支持...

Global site tag (gtag.js) - Google Analytics