1.硬编码国际化
编程步骤
(1)在struts-config.xml文件中指定资源属性文件的位置和名称【参考struts提供的空项目中】:
<message-resources parameter="MessageResources" />
其中的MessageResources就是资源文件命名的baseName。这时的资源文件是放在src根目录下的,如果存在于src下的resource文件夹下,则这里parameter的值应为resource.MessageResources。
(2)创建不同版本的国际化资源文件,以登录为例,我们创建4个properties文件
A:source.properties
user.title=用户登录
user.username=用户
user.password=密码
user.button.login=登录
B:对应的MessageResources_zh_CN.properties,通过native2ascii命令转化的unicode编码
user.title=\u7528\u6237\u767b\u5f55
user.username=\u7528\u6237
user.password=\u5bc6\u7801
user.button.login=\u767b\u5f55
C:对应的MessageResources_en_US.properties,英文版本的资源文件
user.title=User Login
user.username=User Name
user.password=Password
user.button.login=Login
D:默认的MessageResources.properties文件,也采用英文
user.title=User Login
user.username=User Name
user.password=Password
user.button.login=Login
(3)在login.jsp文件中引入
<%@ taglib prefix="bean" uri="http://jakarta.apache.org/struts/tags-bean" %>
(4)用<bean:message key="keyyy"/>标签替换硬编码文件,如下所示:
原始的JSP文件
<form action="login.do" method="post" >
用户:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form>
替换后的JSP文件
<form action="login.do" method="post" >
<bean:message key="user.username"/>:<input type="text" name="username"/><br/>
<bean:message key="user.password"/>:<input type="password" name="password"/><br/>
<input type="submit" value="<bean:message key="user.button.login"/>"/>
</form>
(5)结果会根据浏览器设置和操作系统设置的语言不同而显示不同的登录页面。
2.因为struts是把Locale信息存放在session中,因此我们可以手动的设置Locale信息,以便选择不同的登录语言。
(1)index.jsp
<a href="changeLanguage.do?lang=zh">中文</a> <a href="changeLanguage.do?lang=en">英文</a>
(2)action
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获取参数
String lang=request.getParameter("lang");
//穿件Locale
Locale lc=Locale.getDefault();
//判断
if(lang.equals("zh")){
lc=new Locale("zh","CN");
}else if(lang.equals("en")){
lc=new Locale("en","US");
}
//放入session
request.getSession().setAttribute(Globals.LOCALE_KEY, lc);
//或者使用Action提供的方法
// this.setLocale(request, lc);
return mapping.findForward("indexPage");
}
因为这里只有一个参数,所以采用了传统的获取参数的方法,而没有使用ActionForm。
可见把Locale信息设置到session有两种方式。
(3)在struts-config.xml文件中添加action配置(省略)。