struts2 国际化 区域属性选择

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


猜你喜欢

转载自blog.csdn.net/qq_35097794/article/details/79993013