【问题】语言版本的选择依赖于浏览器的设置,能否允许用户在不修改浏览器属性的前题下,设置应用程序的语言环境?答案:可以
【解决问题的背景知识】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" onchange="langSelecter_onChanged()"></s:select> </s:form>
4.实现显示