`

struts1.x的国际化

 
阅读更多

一,基本的国际化

步骤1:配置struts国际化

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

<message-resource parameter="MessageResource"/>

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

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

中文:MessageResource_zh_cn.properties

英文:MessageResource_en_us.properties

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

在源文件resource.properties中硬编码中文信息
user.title=用户登录
user.username=用户
user.password=密码
user.button.login=登录

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

MessageResource_zh_cn.properties文件中

user.title=\u7528\u6237\u767b\u5f55
user.username=\u7528\u6237
user.password=\u5bc6\u7801
user.button.login=\u767b\u5f55

MessageResource_en_us.properties文件中

user.title=User Login
user.username=User Name
user.password=Password
user.button.login=Login

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

引入标签:

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

<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>

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

一个local对应一个session

二,国际化的切换

jsp页面:

  <a href="changelang.do?lang=zh">中文</a>&nbsp&nbsp&nbsp<a href="changelang.do?lang=en">英文</a>

添加一个Action:

public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  String lang = request.getParameter("lang");
  

//得到Locale
  Locale currentLocale = Locale.getDefault();
  if ("zh".equals(lang)) {

       //自定义Locale
   currentLocale = new Locale("zh", "CN");
  }else if("en".equals(lang)) {
   currentLocale = new Locale("en", "US");
  }

  //自己设置Locale
  //request.getSession().setAttribute(Globals.LOCALE_KEY, currentLocale);
  //调用struts中提供的方法设置Locale
  this.setLocale(request, currentLocale);
  return mapping.findForward("index");
 }

 配置国际化action:

<action path="/changelang"
    type="com.bjsxt.struts.ChangeLanguageAction"
  >
   <forward name="index" path="/index.jsp"/>
  </action>

 <message-resources parameter="res.MessageResources" />

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

三,动态信息的国际化

如果是与后台交互的数据,那么在国际化文件中就用占位符进行配置

resource.properties源文件:

user.login.success={0},登录成功
user.not.found=用户不能找到,用户名称=[{0}]
user.password.error=密码错误
user.login.error=登录失败

MessageResource_zh_cn.properties文件:

user.login.success={0},\u767b\u5f55\u6210\u529f
user.not.found=\u7528\u6237\u4e0d\u80fd\u627e\u5230\uff0c\u7528\u6237\u540d\u79f0=[{0}]
user.password.error=\u5bc6\u7801\u9519\u8bef
user.login.error=\u767b\u5f55\u5931\u8d25

MessageResource_en_us.properties文件:

user.login.success={0},Login Success
user.not.found=User Not Found,UserName[{0}]
user.password.error=Password Error
user.login.error=Login Error

Action中的代码:

package com.bjsxt.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

/**  
 * 用户登录的Action
 * @author Administrator
 *
 */
public class LoginAction extends Action {
 
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  LoginActionForm laf = (LoginActionForm)form;
  String username = laf.getUsername();
  String password = laf.getPassword();

  ActionMessages messages = new ActionMessages();
  try {
   UserManager.getInstance().login(username, password);
   
   //创建国际化消息文本
   ActionMessage message = new ActionMessage("user.login.success", username);
   //ActionMessage message = new ActionMessage("user.login.success", new Object[]{username});//其中Object数组表示的是占位符
   messages.add("loginSuccess1", message);

   ActionMessage message1 = new ActionMessage("user.login.success", username);
   messages.add("loginSuccess2", message1);
   
   //传递国际化消息文本
   this.saveMessages(request, messages);
   return mapping.findForward("success");
  }catch(UserNotFoundException unfe) {
   unfe.printStackTrace();
   
   //创建国际化消息文本
   ActionMessage message = new ActionMessage("user.not.found", username);
   messages.add("error1", message);
   
   //传递国际化消息文本
   this.saveErrors(request, messages);
  }catch(PasswordErrorException pee) {
   pee.printStackTrace();
   //创建国际化消息文本
   ActionMessage message = new ActionMessage("user.password.error");
   messages.add("error2", message);
   
   //传递国际化消息文本
   this.saveErrors(request, messages);
  }
  return mapping.findForward("error");
 }

}

一个ActionMessage表示一条国际化信息。

Action配置:

<message-resources parameter="res.MessageResources" />

分享到:
评论

相关推荐

    struts1.x 最简洁国际化 源代码

    struts1 国际化 源代码 struts1 国际化 工程

    Struts1.x 国际化

    eclipse国际化插件jinto 博文链接:https://gdf84.iteye.com/blog/215239

    Struts1.x_Project.zip

    使用Struts框架构建的简易订餐系统 理解MVC、DAO编码方式 包含I18N国际化、Struts自动验证

    Struts1.x_SQL2005增删改查分页验证国际化

    Struts1.x_SQL2005增删改查分页验证国际化

    Struts1.x 的核心源码(研究下框架怎样构成)

    经过老师讲解,猜写的Struts1.x 的核心源码 不含国际化,标签库,和数据验证,很简单

    JAVA WEB典型模块与项目实战大全.part4

    第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2.X) 第24章 数据汇聚系统(Struts 2.X+Spring+iBATIS) 第25章 投票管理系统(Struts 2.X+Spring+...

    JAVA WEB典型模块与项目实战大全.part2(第二卷)

    第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2.X) 第24章 数据汇聚系统(Struts 2.X+Spring+iBATIS) 第25章 投票管理系统(Struts 2.X+Spring+...

    JAVA WEB典型模块与项目实战大全.part3(第三卷)

    第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2.X) 第24章 数据汇聚系统(Struts 2.X+Spring+iBATIS) 第25章 投票管理系统(Struts 2.X+Spring+...

    JAVA WEB典型模块与项目实战大全.part1(第一卷)

    第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2.X) 第24章 数据汇聚系统(Struts 2.X+Spring+iBATIS) 第25章 投票管理系统(Struts 2.X+Spring+...

    Struts2入门教程(全新完整版)

    10.为什么要使用struts2代替struts1.x 7 二、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置相关 8 4.分工合作include:指定多个配置文件 10 5.tomcat认证访问 10 6.初识拦截器 11 7....

    struts2.1.6+spring2.5.6

    主要是对struts2.1.6+spring2.5.6的整合,其中有struts2.x国际化,验证......

    struts2标签库

    struts2 标签 国际化 文件上传 校验 拦截器 struts2.0的标签库(简介) 用过struts1.x的人都知道,标签库有html、bean、logic、tiles, 而struts2.0里的标签却没有分类,只用在jsp头文件加上 ...

    Jinto实现struts国际化的插件

    实现struts国际化的插件,JInto 0.12.0 ZIP archive (for Eclipse 3.3.x and 3.4.x).zip

    Java求职面试宝典各大公司常考知识点

    4.7. struts如何实现国际化 9 4.8. struts2.0的常用标签有哪些 10 4.9. struts中怎么配置form-bean、action、tiles 10 4.10. logic标签有哪几个? 12 4.11. action是单实例还是多实例,为什么? 13 4.12. ...

    Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架...

    JAVA WEB典型模块与项目实战大全

    第22章 用户登录模块(struts 2.x+guice+国际化)  22.1 用户登录概述  22.2 关于用户登录的基础知识——国际化资源  22.3 关于用户登录的基础知识——guice框架  22.4 用户登录的具体实现  22.5 小结  ...

    Java.Web整合开发王者归来.part1

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等; 第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容; 第5篇为Hibernate...

    Java.Web整合开发王者归来.part1(共3部分)

    第3篇为高级篇,内容包括JSTL标签库的 使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等 ;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate...

Global site tag (gtag.js) - Google Analytics