2010-05-05 3 views
3

Je commence avec Grails et je veux avoir une page avec un contenu multilingue. J'ai commencé à utiliser l'étiquette qui fonctionne bien. Mais voici ce que je veux faire:Grails: comment inclure un lien html dans un attribut par défaut <g:message>?

Je veux inclure le texte par défaut de la langue par défaut dans le texte, pour éviter de basculer entre les fichiers.

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

Les travaux ci-dessus.

Mais maintenant je un ai un message qui devrait inclure un lien comme celui-ci:

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

Cela me donne une exception:

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

Comment puis-je obtenir que je peux inclure un lien là-bas ? J'ai essayé d'échapper aux parenthèses < mais toujours pas de chance. Je voudrais vraiment éviter de diviser cette phrase en plusieurs phrases plus petites.

Merci Christoph

Répondre

4

Vous avez deux façons possibles:

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

ou

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

Merci Fabien. Je vais avec Option1. L'avantage est que le développeur de modèle peut déjà voir le texte par défaut sans regarder dans le message.properties. L'option 2 est bonne aussi mais trop de code à cet effet. Merci Christoph – Christoph

0

Je crée généralement 2 messages: l'original et la clé autre à remplacer. Cela rend facultatif de créer le lien ou non. Considérant les deux clés sont fournies (en laissant la vérification de cet extrait):

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 
  • Remplacement de la chaîne dans le dispositif de commande, par exemple sur 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>") 
    
  • remplacement, dans la g : tag message:

    < g: var set = valeur de "msg" = "$ {message (code: 'packagesUpdate.error.server.unreachable')}" />

    < g: var = set "proxyReplace" value = "$ {message (code: 'packagesUpdate.error.server.proxyReplace')}" />

    < g: var set = valeur "lien" = "$ {proxyReplace} »/>

    < g: var set = "" value = "$ {msgWithLink msg.replace (proxyReplace, lien)}"/>

4

Closures peuvent être utilisés pour les messages i18n imbriqués . Je trouve cela utile lorsque la génération de liens a besoin d'une logique supplémentaire.

<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')}]"/> 
Questions connexes