Struts开发教程之动态访问国际化资源(国家/语言切换)。要修改国家/语言其根本就是要修改请求中的request_locale属性值!!!
目的:为动态地访问国际化资源文件,实现让用户自行选择语言的功能,只需要提供一个下拉列表框,在下拉列表框中列出本应用所支持的各种语言并且,当用户选择下拉列表中的某个选项时,系统将该下拉列表项的值设置为request_locale参数提交(select的name属性设置为request_locale)。
为此,可以将系统中支持的语言放在一个Map中,通过jsp页面中迭代该map对象,就可以在页面上列出应用所支持的全部语言。
案例:用户可自由切换语言。
登录界面i18n.jsp:
[html] view plain copy print?
<%@pagelanguage=“java”import=“java.util.*”pageEncoding=“utf-8”%>
<%@taglibprefix=“s”uri=“/struts-tags”%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
%>
”>
name=“request_locale”onchange=“changeLocale()”>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
Action:(testI18n.java)
[java] view plain copy print?
packagecom.action;
importjava.util.HashMap;
importjava.util.Locale;
importjava.util.Map;
importjava.util.ResourceBundle;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionSupport;
publicclasstestI18nextendsActionSupport{
privateLocalelocale;
publicLocalegetLocale(){
returnlocale;
}
publicvoidsetLocale(Localelocale){
this.locale=locale;
getLocales();
}
publicvoidgetLocales(){//关键代码
Mapmap=newHashMap(2);
if(locale==null){//防止为空的情况!
locale=Locale.getDefault();
}
ResourceBundleresourceBundle=ResourceBundle.getBundle(”globalMessage”,locale);
map.put(resourceBundle.getString(”huizhi.en”),Locale.US);
map.put(resourceBundle.getString(”huizhi.cn”),Locale.CHINA);
ActionContext.getContext().getSession().put(”map”,map);//保存到session范围内
}
publicStringexecute(){
returnSUCCESS;
}
}
国际化资源文件:globalMessage_zh_CN.properties[html] view plain copy print?
loginUser=\u7528\u6237\u540D
loginPassword=\u7528\u6237\u5BC6\u7801
loginSubmit=\u63D0\u4EA4
language=\u9009\u62E9\u8BED\u8A00
huizhi.en=\u7F8E\u56FD\u82F1\u8BED
huizhi.cn=\u7B80\u4F53\u4E2D\u6587
loginUser = \u7528\u6237\u540D
loginPassword = \u7528\u6237\u5BC6\u7801
loginSubmit = \u63D0\u4EA4
language = \u9009\u62E9\u8BED\u8A00
huizhi.en = \u7F8E\u56FD\u82F1\u8BED
huizhi.cn = \u7B80\u4F53\u4E2D\u6587
globalMessage_en_US.propreties [html] view plain copy print?
loginUser=LoginUser
loginPassword=LoginPassword
loginSubmit=Submit
language=selectlanguage
huizhi.en=AmericanEnglish
huizhi.cn=SimplifiedChinese
loginUser = LoginUser
loginPassword = LoginPassword
loginSubmit =Submit
language = select language
huizhi.en = American English
huizhi.cn = Simplified Chinese
Action(LoginAction)
[java] view plain copy print?
packagecom.action;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionSupport;
publicclassLoginActionextendsActionSupport{
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringexecute(){
returnSUCCESS;
}
}
struts.xml配置:[html] view plain copy print?
”-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1.7//EN”
“https://struts.apache.org/dtds/struts-2.1.7.dtd”>
/welcome.jsp
/index.jsp
/i18n.jsp
/welcome.jsp
/index.jsp
/i18n.jsp
完成效果:


有一点小问题就是当进行语言切换的时候,提交按钮的值value=”“,如上图所示,不知原因。