Grails: Как включить HTML-ссылку внутриатрибут по умолчанию? - PullRequest
3 голосов
/ 05 мая 2010

Я начинаю с 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 

Как мне добиться, чтобы я мог включить туда ссылку? Я пытался уйти от <> скобок, но все равно не повезло. Я действительно хотел бы не разбивать это одно предложение на несколько меньших предложений.

Спасибо Christoph

Ответы [ 3 ]

4 голосов
/ 17 февраля 2015

Замыкания могут использоваться для вложенных сообщений 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')}]"/>
4 голосов
/ 06 мая 2010

У вас есть два возможных способа:

<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" />
0 голосов
/ 09 сентября 2010

Я обычно создаю 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:







Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...