0

我在国际化的 Spring MVC 网站中使用 Apache Velocity。

我想使用“在 X 秒内重定向”作为我的翻译人员将翻译的短语(消息键)。X 显然是可变的秒数,Javascript 会每秒更新页面以倒计时。

我想我会这样做:

#springMessageText("Redirecting in {0} seconds" ["<span class='seconds'>5</span>"])

但这显示:

Redirecting in <span class='seconds'>5</span> seconds

(不解析 HTML)。

需要能够将 HTML 标记放在那里,因为这就是 javascript 知道要更新翻译短语的哪一部分的方式。

我究竟做错了什么?

4

1 回答 1

2

更新答案:

我创建了一个名为 custom.vm 的自定义宏文件:

#macro( springMessageHtml $code, $args, $defaultValue)
    $springMacroRequestContext.getMessage($code, $args.toArray(), $defaultValue, false)
#end

在我的 velocity.properties 文件中,我更改了这一行以引用它: velocimacro.library=org/springframework/web/servlet/view/velocity/spring.vm,/velocity/custom.vm

现在在我看来(比如 sample.vm),我可以这样称呼它: #springMessageHtml("Redirecting in {0} seconds" ["<span class='seconds'>5</span>"])

较早的答案:

我在这里找到了答案:http: //feima2011.wordpress.com/2011/01/18/misc-notes/

#set($args = ["<span class='seconds'>5</span>"])
            $springMacroRequestContext.getMessage("Redirecting in {0} seconds",     
$args.toArray(), "", false)

#springMessageText只是一个调用 $springMacroRequestContext.getMessage() 的宏;通过直接调用它,我可以指定最后一个参数(是否转义 HTML 的布尔值)。

现在我可以拥有未转义的 HTML。也许最终我会编写一个名为 的新宏#springMessageHtml,它会调用 $springMacroRequestContext.getMessage() 并将 escapeHtml 参数设置为 False。然后在我看来,我只需要 1 行代码。

于 2013-08-30T22:29:07.933 回答