【发布时间】:2011-04-12 11:21:32
【问题描述】:
是否可以编写自定义 JSP 标记来获取 i18n 消息密钥并输出给定请求的翻译短语?
通常在 JSP/JSTL 中,我会这样做:
<fmt:message key="${messageKey}"><fmt:param>arg1</fmt:param></fmt:message>
我得到了翻译短语。现在我需要执行以下操作(这是有充分理由的):
<custom:translate key="${messageKey}" arg="arg1"/>
但我不知道如何在自定义标记代码中查找翻译。 TagSupport 基类提供了一个 pageContext,我可以从中获取一个具有 Locale 的 ServletRequest...但是我如何查找翻译的键?
我使用 Spring 3.0,在我的 application-context.xml 中,我定义了一个 ReloadableBundleMessageSource,所以我可以调用:
messageSource.getMessage(
key, new Object[] {arg}, pageContext.getRequest().getLocale()
);
但我认为我不能将 messageSource 注入自定义标签,可以吗?否则我可以实例化一个新的,但它会为每次调用加载我的数以万计的翻译吗?我不想诉诸于让 messageSource 成为静态类的静态成员。
【问题讨论】:
-
同样的问题 - 我在几个不同的 JSP 中有逻辑,它们根据 bean 中的值确定项目的状态,并且更愿意将其设为自定义标记,但我不确定如何从我的 messages.properties 文件中获取人性化的“状态”。我想一种选择是让标签返回消息密钥,然后在
标签中使用它,但这看起来非常混乱...... -
这实际上是我最终所做的,将消息键和参数数组作为 2 个单独的新 pageContext 属性返回。然后我做了一个
标签: spring jsp internationalization jstl jsp-tags