Struts2实现国际化简单示例

开发国际化的应用程序时,有一个功能是必不可少的——让用户快捷地选择或切换语言。在Struts 2.0中,通过ActionContext.getContext().setLocale(Locale arg)可以设置用户的默认语言。不过,由于这是一个比较普遍的应用场景(Scenario),所以Struts 2.0为您提供了一个名i18n的拦截器(Interceptor),并在默认情况下将其注册到拦截器链(Interceptor chain)中。它的原理为在执行Action方法前,i18n拦截器查找请求中的一个名为"request_locale"的参数。如果其存在,拦截器就将其作为参数实例化Locale对象,并将其设为用户默认的区域(Locale),最后,将此Locale对象保存在session的名为“WW_TRANS_I18N_LOCALE”的属性中。

下面开始简单的演示一下:

Locales类,后续待用JavaBean

package jp.co.ricoh.action.i18n;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class Locales {
	public Map<String,Locale> getLocales(){
		Map<String,Locale> locales = new HashMap<String,Locale>();
		locales.put("American English", Locale.US);
		locales.put("Simplified Chinese", Locale.CHINA);
		return locales;
	}
}















 

在struts.xml中添加

<action name="I18nAction" class="jp.co.ricoh.action.i18n.I18nAction">
    <result>/i18n/i18n.jsp</result>
   </action>

 

下面i18n.jsp的内容:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<script type="text/javascript">
	function langSelecter_onChanged(){
		document.langForm.submit();
	}
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Internationalization</title>
</head>
<body>
	<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"></s:set>
	<s:bean name="jp.co.ricoh.action.i18n.Locales" id="locales"></s:bean>
	<form action="I18nAction" name="langForm" 
    style="background-color: powderblue; padding-top: 4px; padding-bottom: 4px;">
    Language: <s:select label="Language" 
        list="#locales.locales" listKey="value"    listValue="key"
        value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
        name="request_locale" id="langSelecter" 
        onchange="langSelecter_onChanged()" theme="simple"/>
	</form>
	<s:text name="helloworld"></s:text>
</body>
</html>

 

在浏览器中敲入:

http://localhost:8080/ricoh/i18n/i18n.jsp

 

<!--StartFragment -->
选择“American English”
<!--StartFragment -->

-------------------------------------------------------------------------

package jp.co.ricoh.action.i18n;

import com.opensymphony.xwork2.ActionSupport;

public class I18nAction extends ActionSupport {
	/**
	 * 
	 */
	private static final long serialVersionUID = -6713811430767941801L;

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return super.execute();
	}
}

 

猜你喜欢

转载自tojaoomy.iteye.com/blog/1451832
今日推荐