国际化站点网

时间:2020-03-06 14:23:35  来源:igfitidea点击:

我正在使用freemarker,SiteMesh和Spring框架。
对于页面,我使用$ {requestContext.getMessage()}从message.properties获取消息。但是对于装饰者来说,这是行不通的。如何使国际化适用于sitemesh?

解决方案

我们必须使用fmt taglib。

首先,在装饰器的fisrt行上添加sitemesh和fmt的taglib。

<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
<%@ taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt"%>
<fmt:setBundle basename="messages" />

在我的示例中,i18n文件是messages.properties。然后,我们需要使用fmt标签来使用消息。

<fmt:message key="key_of_message" />

如果我们更喜欢模板和freemarker servlet,则可以在模板中输入以下内容:

<#assign fmt=JspTaglibs["http://java.sun.com/jstl/fmt"]>
<@fmt.message key="webapp.name" />

并在web.xml中:

<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>messages</param-value>
</context-param>