【问题】语言版本的选择依赖于浏览器的设置,能否允许用户在不修改浏览器属性的前题下,设置应用程序的语言环境?答案:可以
【解决问题的背景知识】Struts2框架提供了i18n拦截器,它的作用如下:
(1)i18n拦截器在执行Action方法前,自动查找请求中的一个名为request_locale的参数。如果该参数存在,拦截器将其转换成Locale对象,并设为用户默认的Locale。
(2)i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为“WW_TRANS_I18N_LOCALE”的属性中。
【解决问题的背景知识】Struts2框架提供了i18n拦截器,它的作用如下:
(1)i18n拦截器在执行Action方法前,自动查找请求中的一个名为request_locale的参数。如果该参数存在,拦截器将其转换成Locale对象,并设为用户默认的Locale。
(2)i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为“WW_TRANS_I18N_LOCALE”的属性中。
(3)一旦用户Session中存在一个名为“WW_TRANS_I18N_LOCALE”的属性,则该属性指定的Locale将会作为浏览者的默认Locale。
【具体步骤】
1、在资源文件中增加一个key-value对
英文中加入: language=Select Language
中文中加入(需要转码): language=选择语言
2、创建JavaBean类Locales.java,关键代码如下:
public class Locales {
private Locale current;
private Map<String,Locale> locales;
public Locale getCurrent() {
return current;
}
public void setCurrent(Locale current) {
this.current = current;
}
public Map<String, Locale> getLocales() {
Map<String, Locale> locales=new Hashtable<String, Locale>();
locales.put("Simplified Chinese", Locale.CHINA);
locales.put("American English", Locale.US);
return locales;
}
3、在login.jsp中添加如下代码
(1)网页的<head>与</head>之间添加:
<script type="text/javascript">
function langSelecter_onChanged() {
document.langForm.submit();
}
</script>
解析:定义JavaScript函数,其功能是提交表单(在下拉列表框中设置onchange事件处理函数,当列表框的值发生变化时调用)
(2)在login.jsp 的<body>中添加如下代码
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']">
<s:bean name="com.edu.entity.Locales" id="locales">
<s:param name="current"
value="SESSION_LOCALE==null?locale:SESSION_LOCALE" />
</s:bean>
</s:set>
<s:form action="language" name="langForm">
<s:select list="#locales.locales" key="language" listKey="value"
listValue="key" value="#locales.current" name="request_locale"
οnchange="langSelecter_onChanged()"></s:select>
</s:form>
4.实现显示