88251546 2014-07-13
这几天一直在研究怎么实现Freemarker的国际化问题,在网上找了很多的实现,有在生成模板时通过Java代码来加载资源文件的、有使用Spring标签的,但是这些用起来,都感觉不顺手,毕竟在使用Freemarker之前,一直使用的是JSP,而在JSP中使用的最多的标签,还是JSTL,所以又查了一些资料,将JSTL集成进了Freemarker当中。
下面对这三种方式,分别介绍:
1、使用Java代码加载资源文件:
ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("ApplicationResources"); ResourceBundleModel rsbm = new ResourceBundleModel(RESOURCE_BUNDLE, new BeansWrapper()); fmModel.put("bundle", rsbm);
通过上面的代码,将资源文件直接SET到传入模板的Map中,在模板中,通过下面的方式进行资源文件的国际化的调用:
${ bundle("webapp.name") }
2、通过使用Spring标签:
<#import "./commons/spring.ftl" as spring />
上面的代码,在模板代码中,引用入了Spring标签文件,这样就可以在模板文件中使用Spring的标签来进行国际化的操作了。在模板文件中使用下面的代码来进行国际化:
<@spring.message "webapp.name" />
而Spring标签的定义文件,在org.springframework.web.servlet包下的org\springframework\web\servlet\view\freemarker目录中,将其复制到你的工作目录,便可使用。
3、使用JSTL标签:
<#assign fmt=JspTaglibs["http://java.sun.com/jsp/jstl/fmt"] />
通过上面的代码,将JSTL标签引入到模板中,之后便可像在JSP中一样,来使用JSTL标签了。当然,写法要按照Freemarker的写法。如下:
<@fmt.message key="webapp.name" />
同样,要使用其他的JSTL标签,也使用同样的方式进行引用便可,下面是Core和FMT的引入例子:
<#assign c=JspTaglibs["http://java.sun.com/jsp/jstl/core"] /> <#assign fmt=JspTaglibs["http://java.sun.com/jsp/jstl/fmt"] />
字符串过于长的时候需要通过仅仅展示前4个,用...表示省略,<c:if test="${fn:length<=5}">${word.type}</c:if>href触发JavaScript事件:。<a