Freemarker的国际化及使用JSTL

这几天一直在研究怎么实现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"] />

相关推荐