struts利用在session中放一個(gè)local對(duì)象來(lái)達(dá)到設(shè)置當(dāng)前語(yǔ)言您的目的,默認(rèn)的情況下,struts根據(jù)網(wǎng)頁(yè)向后臺(tái)提交時(shí)所包含的編碼信息來(lái)提供缺省的local對(duì)象。這就是我們?yōu)槭裁纯梢酝ㄟ^(guò)更改網(wǎng)頁(yè)顯示語(yǔ)言設(shè)置,就能顯示不同語(yǔ)言文字的原因。struts在session中存放的這個(gè)local對(duì)象取名為Globals.LOCAL_KEY的值,因此利用這個(gè)原理我們就可以用編程的方式來(lái)手工切換整個(gè)應(yīng)用系統(tǒng)的語(yǔ)言。
struts國(guó)際化問(wèn)題的一個(gè)小例子:(根據(jù)下拉列表的選擇顯示不同語(yǔ)言的網(wǎng)站)
1,首先針對(duì)不同的語(yǔ)言,寫(xiě)不同的MessageResources.properties文件,比如說(shuō)簡(jiǎn)體中文是
MessageResources_zh_CN.properties,英文就是MessageResources_en_US.properties,然后對(duì)這些配置信
息文件同樣用native2ascii工具處理一次(打開(kāi)cmd輸入native2ascii然后把要顯示的中文輸入回車就ok了),把非ASCII碼統(tǒng)統(tǒng)轉(zhuǎn)為Unicode編碼。 放在classes文件夾下你指定的地方,這里是放在/web-inf/classes/com/下,
我寫(xiě)的兩個(gè)文件是;1,MessageResources_en_US.properties:內(nèi)容如下:
version=hello,you have choose the english version
MessageResources_zh_CN.properties內(nèi)容如下:
version=\u4f60\u597d,\u4f60\u5df2\u7ecf\u9009\u62e9\u4e86\u4e2d\u6587\u7248\u672c
(要注意的是:文件名中的zh和en代表語(yǔ)言的不能寫(xiě)錯(cuò),而CN和US代表國(guó)家可以不寫(xiě))
2,在struts-config.xml加入 <message-resources parameter="com.MessageResources" />注意com為包名。
3,測(cè)試頁(yè)面: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.相應(yīng)的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:相應(yīng)的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對(duì)象放到session里也可以用下面的方法:
//request.getSession().setAttribute(Globals.LOCALE_KEY, locale);//英文struts是把local對(duì)象放在了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"/>來(lái)調(diào)用version的值顯示不同的語(yǔ)言。(當(dāng)然要引入相關(guān)的tag)
也就是當(dāng)你選擇中文版然后提交就會(huì)顯示
你好,你選擇了中文版
當(dāng)你選擇英文版的時(shí)候就會(huì)顯示:
hello,you have choose the english version
試一下吧!