displaytag国际化有两种:
1)、根据struts环境,系统在启动时判断当前系统语言环境,选择加载哪种资源文件,
displaytag_en.properties和displaytag_zh.properties ,该方法已有无数人在做了,不在详述。
2)、在原有displaytage标签中唯独没有对struts2提出的语言适配器。没关系,其适配器如下:
/*
* Copyright (C) 2009 caiguoxing@ultrapower.com.cn/caiguoxing@126.com
* 满足display1.1版本对struts2国际化适配器补充。
* 请在引用该段代码时保留作者信息。
*
*/
import java.util.Iterator;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
import org.apache.struts2.views.jsp.TagUtils;
import org.displaytag.localization.I18nResourceProvider;
import org.displaytag.localization.LocaleResolver;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.LocaleProvider;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.util.OgnlValueStack;
public class I18nStruts2Adapter implements LocaleResolver, I18nResourceProvider, LocaleProvider
{
public Locale resolveLocale(HttpServletRequest request)
{
HttpSession session = request.getSession();
Locale oc= (Locale) session.getAttribute("locale");
// System.out.println("oc:"+oc);
return oc;
}
public String getResource(String resourceKey, String defaultValue, Tag tag, PageContext pageContext)
{
String key = resourceKey == null ? defaultValue : resourceKey;
String message = null;
OgnlValueStack stack = TagUtils.getStack(pageContext);
Iterator iterator = stack.getRoot().iterator();
do
{
if (!iterator.hasNext())
break;
Object o = iterator.next();
if (!(o instanceof TextProvider))
continue;
TextProvider tp = (TextProvider)o;
message = tp.getText(key, defaultValue);
break;
} while (true);
return message;
}
public Locale getLocale() {
return ActionContext.getContext().getLocale();
}
}
2.在 加入displaytag_en.properties和displaytag.properties 中加入
locale.provider==com..I18nStruts2Adapter
locale.resolver==com..I18nStruts2Adapter