zoukankan      html  css  js  c++  java
  • 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" />

  • 相关阅读:
    ZOJ3513_Human or Pig
    ZOJ2083_Win the Game
    ZOJ2725_Digital Deletions
    ZOJ2686_Cycle Gameu
    UVALive
    ZOJ2290_Game
    ZOJ3067_Nim
    P3159 [CQOI2012]交换棋子(费用流)
    P3153 [CQOI2009]跳舞(最大流多重匹配)
    P3121 [USACO15FEB]审查(黄金)Censoring (Gold)(ac自动机)
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1954706.html
Copyright © 2011-2022 走看看