JFinal:I18N标签

目前用JFinal做了一个小项目,遇到I18N问题的时候,看到JFinal仅提供了类方法的支持,就写了一个JSP标签在JSP页面上调用。

Vity`s life.

Step 1:开启JFinal i18n配置

  • 在src下增加资源文件,例如 ui_message_zh_CN.properties

  • 在Config类中添加I18N初始化代码

        @Override
	public void configConstant(Constants me) {

		this.loadPropertyFile("constants.properties");

		me.setDevMode(Boolean.valueOf(this.getProperty("app.devMode")));
		me.setViewType(ViewType.JSP);

		I18N.init("ui_message", null, null);

	}

Step 2:增加LocaleInterceptor对locale进行拦截设置

        @Override
	public void intercept(ActionInvocation ai) {
		Controller c = ai.getController();
		String tmp = c.getCookie(Const.I18N_LOCALE);
		String i18n = c.getRequest().getLocale().toString();
		if (!i18n.equals(tmp)) {
			ai.getController().setCookie(Const.I18N_LOCALE, i18n, Const.DEFAULT_I18N_MAX_AGE_OF_COOKIE);
		}
		ai.invoke();
	}

Step 3:编写I18NTag类和tld文件

public class I18NMessageTag extends TagSupport {

	private static final long serialVersionUID = -8380055495002243207L;

	private Logger log = Logger.getLogger(this.getClass());

	private String key;

	private String defaultValue;

	/**
	 * (non-Javadoc)
	 * 
	 * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
	 */
	@Override
	public int doStartTag() throws JspException {
		if (null == I18N.me()) {
			log.error("I18N_TAG:尚未初始化");
		} else {
			if (StringUtils.isBlank(key)) {
				log.error("I18N_TAG:key无效");
			} else {
				try {
					if (StringUtils.isBlank(defaultValue)) {
						pageContext.getOut().write(I18N.getText(key));
					} else {
						pageContext.getOut().write(I18N.getText(key, defaultValue));
					}
				} catch (IOException e) {
					log.error(e.getMessage(), e);
				}
			}
		}
		return super.doStartTag();
	}

	/**
	 * @return the key
	 */
	public String getKey() {
		return key;
	}

	/**
	 * @param key
	 *            the key to set
	 */
	public void setKey(String key) {
		this.key = key;
	}

	/**
	 * @return the defaultValue
	 */
	public String getDefaultValue() {
		return defaultValue;
	}

	/**
	 * @param defaultValue
	 *            the defaultValue to set
	 */
	public void setDefaultValue(String defaultValue) {
		this.defaultValue = defaultValue;
	}

}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
	<tlibversion>1.0</tlibversion>
	<jspversion>1.2</jspversion>
	<shortname>eip</shortname>
	<uri>/eip-taglib</uri>

	<tag>
		<name>i18n</name>
		<tagclass>com.mvity.eip.core.tag.I18NMessageTag</tagclass>
		<bodycontent>JSP</bodycontent>
		<attribute>
			<name>key</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>defaultValue</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>

</taglib>

PS:tld文档可放置在WEB-INF路径下。

Step 4:在JSP文档中引入tag lib并使用

<%@ taglib prefix="eip" uri="/eip-taglib"%>

.....

<div class="top_b">
    <eip:i18n key="bomp.login.title" />
</div>


搞定,收工!

你可能感兴趣的:(jFinal)