struts1的基本知识点—国际化

Java的国际化

国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母。国际化又称本地化(Localization,L10N)。
国际化相关的Java类
Java国际化主要通过如下3个类完成

java.util.ResourceBundle:用于加载一个资源包
java.util.Locale:对应一个特定的国家/区域、语言环境。
java.text.MessageFormat:用于将消息格式化


//这是获取计算机默认的语言环境
Locale locale1 = Locale.getDefault();
//读取国际化资源文件:baseName_国家代码_语言代码.如:MessageResource_zh_CN
ResourceBundle boundle1 = ResourceBundle.getBundle("MessageResource", locale1);
System.out.println(boundle1.getString("用户名"));

//创建一个英文环境的locale对象
Locale locale2 = new Locale("en","US");
//读取国际化资源文件
ResourceBundle boundle2 = ResourceBundle.getBundle("MessageResource", locale2);
//根据key来输出value
System.out.println(boundle2.getString("username"));

JAVA国际化流程
ResourceBundle根据Locale加载资源文件->返回一个ResourceBundle实例->ResourceBundle调用getString方法返回指定key对应的字符串


占位符的问题:
  资源文件:msg=你好,{0}!今天是{1}
  ResourceBundle bundle = ResourceBundle.getBundle("MessageResource", currentLocale);


  //获取key为msg的value
  String msg = bundle.getString("msg");
  //对占位符进行填充
  System.out.println(MessageFormat.format(msg,"Eason", new Date()));


  资源文件:
          MessageResource_en_US.properties

  MessageResource_zh_CN.properties


struts的国际化:


第一种方法:读取普通的资源文件(没有占位符的资源文件)
1、把MessageResource国际化资源文件写好key-value
如: login.username——用户名   login.passowrd——密码
login.username——username  login.password——password

2、在你的首页(index.jsp)写上链接
<a href="ChangeAction.do?lan=zh">中文</a>
<a href="ChangeAction.do?lan=en">English</a>

3、在你的struts-config.xml中配置baseName
<message-resources parameter="MessageResource"></message-resources>

4、写一个类继承Action并重写execute()方法
//接收参数
String lan = request.getParameter("lan");
//获取默认的Locale
Locale locale = (Locale) request.getSession().getAttribute(Globals.LOCALE_KEY);
//判断参数的语言代码
if("zh".equals(lan)){
//创建一个新的语言locale
locale = new Locale("zh","CN");
}else if("en".equals(lan)){
locale = new Locale("en","US");
}

//把locale写到Action中
this.setLocale(request, locale);

return mapping.findForward("ok");

5、在struts-config.xml中配置Action

<action path="/ChangeAction"
parameter="lan" 
type="com.jxau.action.ChangeAction">
<forward name="ok" path="/login.jsp"></forward>
</action>

6、在选择语言后的页面(login.jsp)中要用到bean标签
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<form action="User.do?command=addUser" method="post">
    <bean:message key="login.username"/>:<input type="text" name="username"><br>
    <bean:message key="login.password"/>:<input type="password" name="password">
    <input type="submit" value="<bean:message key="login.submit"/>">
    <input type="reset" value="<bean:message key="login.reset"/>">
    </form>
   
   7、在浏览器中访问你的index.jsp
   
  
  如何填充struts的占位符 
  根据上一个添加user的例子来实现此功能
  1、在添加用户的时候提交给UserAction中的addUser()
  DynaActionForm daf = (DynaActionForm)form;
String username = daf.getString("username");
String password = daf.getString("password");

//创建ActionMessages
ActionMessages msgs = new ActionMessages();
//根据资源文件的key来创建一个ActionMessage
ActionMessage msg = new ActionMessage("login.username.success", username); 

User user = new User();
user.setPassword(password);
user.setUsername(username);
//调用业务逻辑
new UserService().saveUser(user);

//把ActionMessage添加到ActionMessages中
msgs.add("abc", msg);

//把ActionMessages保存到request中
this.saveMessages(request, msgs);

return mapping.findForward("ok");
2、然后 根据返回的ActionForward来跳转到msg.jsp中
<bean:message key="login.username.success" arg0="${userForm.map.username}"/>
arg0就是从资源文件中key=login.username.success取值出来

//如果在ActionMessages中添加多个ActionMessage如:
msgs.add("abc", msg);
msgs.add("abc", msg);
msgs.add("abc", msg);

msgs.add("bbb", msg);
msgs.add("bbb", msg);

在msg.jsp中的页面就要用struts的html标签来对ActionMessages进行迭代
<html:messages id="a" message="true" property="bbb">
  ${a}
  </html:messages>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值