如何解决JSP定制标记中的i18n翻译
我不使用Spring,但是在“普通” JSP中,您可以ResourceBundle
借助Filter
或将实例放入会话范围Servlet
ResourceBundle bundle = ResourceBundle.getBundle(basename, request.getLocale());
request.getSession().setAttribute("bundle", bundle);
像在EL中使用其他bean一样,在JSP中对其进行处理。
${bundle[messageKey]}
Spring必须有可能将其作为bean放入会话范围。
解决方法
是否可以编写自定义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成为静态类的静态成员。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。