struts(il8n) 实现国际化的一个例子
[code]
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
[/code]