velocity+struts1国际化

来源:互联网 发布:国进民退 知乎 编辑:程序博客网 时间:2024/06/08 01:27

1、web.xml中制定加载ActionServlet

<servlet><servlet-name>ServletAction</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet>

2、struts-config.xml中制定资源文件名

<!DOCTYPE struts-config PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN""http://struts.apache.org/dtds/struts-config_1_3.dtd"><struts-config><message-resources parameter="msg"></message-resources></struts-config>

3、编写资源文件,如:msg_zh_CN.properties和msg_en_US.properties


4、velocity-tools配置文件tools.xml添加

<tool key="msg" class="org.apache.velocity.tools.struts.MessageTool"/>

5、在页面中引用:

$msg.error


另外一种使用velocity做国际化的方式是直接使用velocity-tool中自带的ResourceTool类

1、在velocity-tools配置问加你tools.xml添加:

<tool key="msg" class="org.apache.velocity.tools.generic.ResourceTool" bundles="msg"/>
2、编写资源文件,如:msg_zh_CN.properties和msg_en_US.properties

3、在页面中引用:

$msg.error


使用ResourceTool完成语言的手动切换:

经调试,ViewToolContext类中的putToolProperties会对locale进行设定

 protected void putToolProperties()    {        putToolProperty(REQUEST, getRequest());        if (this.getRequest() != null) {        super.putToolProperty(LOCALE_KEY, getRequest().getLocale());        }        putToolProperty(RESPONSE, getResponse());        putToolProperty(SESSION, getSession());        putToolProperty(SERVLET_CONTEXT_KEY, getServletContext());        putToolProperty(PATH_KEY, ServletUtils.getPath(getRequest()));    }

略作修改:

protected void putToolProperties()    {        putToolProperty(REQUEST, getRequest());        if (this.getRequest() != null) {        String lang = (String)this.getRequest().getSession().getAttribute(LANG_KEY);        if (lang != null && !"".equals(lang)) {        String locales[] = lang.split("_");        super.putToolProperty(LOCALE_KEY, new Locale(locales[0], locales[1]));        } else {        super.putToolProperty(LOCALE_KEY, getRequest().getLocale());        }        }        putToolProperty(RESPONSE, getResponse());        putToolProperty(SESSION, getSession());        putToolProperty(SERVLET_CONTEXT_KEY, getServletContext());        putToolProperty(PATH_KEY, ServletUtils.getPath(getRequest()));    }

在页面将要设置的locale通过servlet设置到session中即可