struts2的页面语言切换

来源:互联网 发布:电脑视频桌面软件 编辑:程序博客网 时间:2024/06/05 08:47

页面语言切换用到的是I18nInterceptor拦截器

jsp页面


<a href="testI18n.action?request_locale=en_US">English</a>    <a href="testI18n.action?request_locale=zh_CN">中文</a><br><a href="index.jsp">index page</a><br><s:text name="time"><s:param value="date"/></s:text><br><s:text name="password"></s:text><s:form><s:textfield label="%{getText('name')}"/><s:textfield key="name"/><s:textfield key="password"/><s:submit key="submit"/></s:form>


对应的action

public class TestI18nAction extends ActionSupport{private static final long serialVersionUID = 1L;private Date date;public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public String execute(){this.date = new Date();String name = getText("name");System.out.println(name);String time = getText("time", Arrays.asList(date));System.out.println(time);return Action.SUCCESS;}}


至于URL的请求参数为什么是request_locale,这是由拦截器的源码决定的


public class I18nInterceptor extends AbstractInterceptor {    private static final long serialVersionUID = 2496830135246700300L;    protected static final Logger LOG = LoggerFactory.getLogger(I18nInterceptor.class);    public static final String DEFAULT_SESSION_ATTRIBUTE = "WW_TRANS_I18N_LOCALE";    public static final String DEFAULT_PARAMETER = "request_locale";    public static final String DEFAULT_REQUESTONLY_PARAMETER = "request_only_locale";    protected String parameterName = DEFAULT_PARAMETER;    protected String requestOnlyParameterName = DEFAULT_REQUESTONLY_PARAMETER;    protected String attributeName = DEFAULT_SESSION_ATTRIBUTE;

所以只要每次请求都经过拦截器,且请求参数有指定语言的话,就能显示指定的语言格式(从国际资源文件中找)