2010-05-11 4 views

Répondre

46

l'intérieur d'un contrôleur ou un taglib, vous pouvez utiliser les éléments suivants:

g.message(code: 'some.message') 

Cependant, à l'intérieur des classes de domaine ou de services, vous avez besoin d'injecter MessageSource et appeler la méthode getMessage() de la classe de Sping AbstractMessageSource. Cet extrait vous montre comment faire:

import org.springframework.context.i18n.LocaleContextHolder as LCH 
... 
class MyServiceOrMyDomain { 
    def messageSource 
    ... 
    messageSource.getMessage(code, msgArgs, defaultMsg, LCH.getLocale()) 
    ... 
} 
+0

Une réponse incroyable! Merci beaucoup! – Topera

+1

Juste pour aider quelqu'un qui pourrait avoir le même problème que moi - myArgs doit être un tableau d'objets, par exemple: messageSource.getMessage ("some.code", ["arg1"] comme Object [], " par défaut ", LCH.getLocale()) – MBozic

+2

J'utilise grails 2.1. Il semble que vous ne puissiez pas utiliser l'espace de noms g dans les contrôleurs. L'utilisation du message (code: "") fait le travail. Peut-être que vous avez seulement besoin de l'espace de noms g pour taglibs maintenant. http://grails.org/doc/2.1.0/guide/single.html#i18n –

10

Vous pouvez également importer la balise de validation lib et de l'utiliser de saisir la source du message.

import org.codehaus.groovy.grails.plugins.web.taglib.ValidationTagLib 
def g = new ValidationTagLib() 
g.message(error: error) 
+1

Mais calcule-t-il les paramètres régionaux de la requête en cours? – fabien7474

+0

@fabien Oui ça fonctionne – vickirk

+0

'g.message' semble être un meilleur moyen que' messageSource' car il nécessite moins de code, vous n'avez pas besoin de gérer les exceptions et vous savez déjà [comment l'utiliser] (http: // grails.org/doc/latest/ref/Tags/message.html). –

Questions connexes