加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

spring-JSP自定义标记中的i18n翻译

发布时间:2020-12-15 01:18:56 所属栏目:大数据 来源:网络整理
导读:是否可以编写自定义JSP标记以获取i18n消息密钥并输出给定??请求的翻译短语? 通常,在JSP / JSTL中,我这样做: fmt:message key="${messageKey}"fmt:paramarg1/fmt:param/fmt:message 我得到翻译短语.现在,我需要执行以下操作(这样做有充分的理由): custom:t

是否可以编写自定义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成为静态类的静态成员.

最佳答案
我不使用Spring,但是在“普通” JSP中,您可以借助Filter或Servlet将ResourceBundle实例放入会话范围

ResourceBundle bundle = ResourceBundle.getBundle(basename,request.getLocale());
request.getSession().setAttribute("bundle",bundle);

像在EL中使用其他bean一样,在JSP中对其进行处理.

${bundle[messageKey]}

Spring必须有可能将其作为bean放入会话范围.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读