我从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;括号但仍然没有运气。 我真的想避免将这一句话分成多个较小的句子。
由于 克里斯托弗
答案 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;