疯狂

STANDING ON THE SHOULDERS OF GIANTS
posts - 481, comments - 486, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

struts(il8n)实现国际化的一个例子

Posted on 2007-10-19 20:45 疯狂 阅读(2958) 评论(7)  编辑  收藏

   struts利用在session中放一个local对象来达到设置当前语言您的目的,默认的情况下,struts根据网页向后台提交时所包含的编码信息来提供缺省的local对象。这就是我们为什么可以通过更改网页显示语言设置,就能显示不同语言文字的原因。struts在session中存放的这个local对象取名为Globals.LOCAL_KEY的值,因此利用这个原理我们就可以用编程的方式来手工切换整个应用系统的语言。
struts国际化问题的一个小例子:(根据下拉列表的选择显示不同语言的网站)

1,首先针对不同的语言,写不同的MessageResources.properties文件,比如说简体中文是
MessageResources_zh_CN.properties,英文就是MessageResources_en_US.properties,然后对这些配置信
息文件同样用native2ascii工具处理一次(打开cmd输入native2ascii然后把要显示的中文输入回车就ok了),把非ASCII码统统转为Unicode编码。 放在classes文件夹下你指定的地方,这里是放在/web-inf/classes/com/下,
我写的两个文件是;1,MessageResources_en_US.properties:内容如下:
version=hello,you have choose the english version
MessageResources_zh_CN.properties内容如下:
version=\u4f60\u597d,\u4f60\u5df2\u7ecf\u9009\u62e9\u4e86\u4e2d\u6587\u7248\u672c
(要注意的是:文件名中的zh和en代表语言的不能写错,而CN和US代表国家可以不写)
2,在struts-config.xml加入 <message-resources parameter="com.MessageResources" />注意com为包名。
3,测试页面:index.jsp
<form name="form1" method="post" action="chooselocal.do">
  <select name="il8n_info">
      <option value="zh">中文版</option>
    <option value="en">英文版</option>
  </select>
  <input type="submit" value="submit"><p>
  </form>
4.相应的actionform:

package com.il8n;

import org.apache.struts.action.ActionForm;

public class il8nActionForm extends ActionForm {
 private String il8n_info;
 
public String getIl8n_info() {
 return il8n_info;
}

public void setIl8n_info(String il8n_info) {
 this.il8n_info = il8n_info;
}

}

5:相应的acrion:

package com.il8n;

import java.util.Locale;

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

import org.apache.struts.Globals;
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;

public class il8nAction extends Action {

 @Override
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  il8nActionForm il8naf = (il8nActionForm)form;
  ActionMessages messages = new ActionMessages();
 
  Locale locale = null;
  if("zh".equals(il8naf.getIl8n_info())){
   locale = new Locale("zh","CN");
  }else if("en".equals(il8naf.getIl8n_info())){
   locale = new Locale("en","Us");
  }
  this.setLocale(request, locale);//将local对象放到session里也可以用下面的方法:
  //request.getSession().setAttribute(Globals.LOCALE_KEY, locale);//英文struts是把local对象放在了session里面
  return mapping.findForward("success");
 }
 
}

6:struts-config.xml中的配置:
<form-beans>
<form-bean name="il8nActionForm" type="com.il8n.il8nActionForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/chooselocal"
        type="com.il8n.il8nAction"
        name="il8nActionForm"
        scope="request"
>
<forward name="success" path="/index.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="com.MessageResources" />
然后在index.jsp中使用<been:message key="version"/>来调用version的值显示不同的语言。(当然要引入相关的tag)
也就是当你选择中文版然后提交就会显示
你好,你选择了中文版
当你选择英文版的时候就会显示:
hello,you have choose the english version

试一下吧!


评论

# re: struts(il8n)实现国际化的一个例子  回复  更多评论   

2007-10-22 23:01 by 求学者
\u4f60\u597d,\u4f60\u5df2\u7ecf\u9009\u62e9\u4e86\u4e2d\u6587\u7248\u672c

问下你这个如何实现的。

我想把 这句话 (这个指令他从头到尾只有出现在这一长串里面)

转为上边的形式 如何实现? 谢谢了

# re: struts(il8n)实现国际化的一个例子  回复  更多评论   

2007-10-23 19:08 by freeman1984
开始->运行->cmd->输入:native2ascii 然后回车。
输入你要转的中文回车就可以了;
比如输入你那句话:这个指令他从头到尾只有出现在这一长串里面。会显示:
\u8fd9\u4e2a\u6307\u4ee4\u4ed6\u4ece\u5934\u5230\u5c3e\u53ea\u6709\u51fa\u73b0\u
5728\u8fd9\u4e00\u957f\u4e32\u91cc\u9762

ok了!!!!

# re: struts(il8n)实现国际化的一个例子  回复  更多评论   

2008-06-16 22:07 by fy_iceworld
进入页面时鼠标上有一个动画特效,不便于浏览。

# re: struts(il8n)实现国际化的一个例子  回复  更多评论   

2008-08-27 13:50 by chua
同样的问题,可不可以把鼠标上的动画特效去掉,确实不便于浏览。

# re: struts(il8n)实现国际化的一个例子  回复  更多评论   

2009-05-21 16:47 by yueyue
非常好!刚好我要用这个,好久没搞了,看了你的一下子就搞出来了。多谢了!

# re: struts(il8n)实现国际化的一个例子  回复  更多评论   

2014-12-03 16:27 by 花战魂
你的配置有穿越了

# re: struts(il8n)实现国际化的一个例子  回复  更多评论   

2016-04-26 22:26 by 正常
在啥地方

只有注册用户登录后才能发表评论。


网站导航: