Grails:如何在<g:message>默认属性中包含html链接?</g:message>

时间:2010-05-05 16:47:44

标签: grails internationalization

我从Grails开始,想要一个包含多语言内容的页面。

我开始使用正常工作的标签。 但这就是我想要做的事情:

我想在文本中包含默认语言的默认文本,以避免在文件之间来回切换。

<g:message code="homepage.feature.headline1" default="This is an english text" />

以上作品。

但是现在我有一条消息应该包含这样的链接:

<g:message code="homepage.feature.headline1" default="This is an english text with <a href='somefile.html'>a link</a>" />

这给了我一个例外:

org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Grails tags were not closed! [[<g:message>]] in GSP 

如何实现我可以在那里添加链接?我试过逃避&lt;&gt;括号但仍然没有运气。 我真的想避免将这一句话分成多个较小的句子。

由于 克里斯托弗

3 个答案:

答案 0 :(得分:4)

您有两种可能的方式:

<g:message code="homepage.feature.headline1" default="This is an english text with ${'<a href=\'somefile.html\'>a link</a>'}" />

<% def link = "<a href='somefile.html'>a link</a>"%>
<g:message code="homepage.feature.headline1" default="This is an english text with $link" />

答案 1 :(得分:4)

闭包可用于嵌套的i18n消息。我发现链接生成需要额外的逻辑时很有用。

<g:message code="homepage.feature.headline1" default="This is an english text with a {0}" encodeAs="raw" args="[link(controller: 'someController', action: 'someAction') { message(code:'homepage.feature.headline1.link')}]"/>

答案 2 :(得分:0)

我通常创建2条消息:原始消息和要替换的其他密钥。这使得创建链接成为可选。考虑提供两个密钥(将验证保留在此代码段之外):

packagesUpdate.error.server.unreachable=The packages repository server "{0}" is unreachable. This usually happens behind a network proxy server.
packagesUpdate.error.server.proxyReplace=network proxy server
  • 替换控制器中的字符串,例如,在ref msgWithLink:

    def msg = message(code: 'packagesUpdate.error.server.unreachable')
    def proxyReplace = message(code:'packagesUpdate.error.server.proxyReplace')
    def msgWithLink = msg.replace(proxyReplace,
        "<a href='/csvn/packagesUpdate/available'>${proxyReplace}</a>")
    
  • 替换g:message标记:

    &LT; g:set var =“msg”value =“$ {message(code:'packagesUpdate.error.server.unreachable')}”/&gt;

    &LT; g:set var =“proxyReplace”value =“$ {message(code:'packagesUpdate.error.server.proxyReplace')}”/&gt;

    &LT; g:set var =“link”value =“$ {proxyReplace}”/&gt;

    &LT; g:set var =“msgWithLink”value =“$ {msg.replace(proxyReplace,link)}”/&gt;