Posted on 2007-10-19 20:45
瘋狂 閱讀(2966)
評論(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
試一下吧!