2010-05-11 9 views

Odpowiedz

46

Wewnątrz kontrolera lub TagLib, można użyć następujących:

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

Jednak wewnątrz klas lub usług domeny, trzeba wstrzyknąć MessageSource i zadzwoń (metoda) z klasy Sping AbstractMessageSource GetMessage. Ten fragment pokazuje jak to zrobić:

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

Niesamowita odpowiedź! Wielkie dzięki! – Topera

+1

Po to, aby pomóc komuś, kto może mieć taki sam problem jak ja - myArgs musi być tablicą obiektów, na przykład: messageSource.getMessage ("some.code", ["arg1"] jako Object [], " default ", LCH.getLocale()) – MBozic

+2

Używam grails 2.1. Wygląda na to, że nie możesz używać przestrzeni nazw g w kontrolerach. Użycie wiadomości (kod: "") wykonuje zadanie. Być może potrzebujesz teraz tylko przestrzeni nazw g dla taglibs. http://grails.org/doc/2.1.0/guide/single.html#i18n –

10

Można również importować walidacji tag lib i używać go chwycić źródło wiadomości.

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

Ale czy oblicza ustawienia regionalne bieżącego żądania? – fabien7474

+0

@fabien Tak, to jest – vickirk

+0

'g.message' wydaje się być lepszym sposobem niż' messageSource', ponieważ wymaga mniej kodu, nie musisz obsługiwać wyjątków i już wiesz [jak go używać] (http: // grails.org/doc/latest/ref/Tags/message.html). –

Powiązane problemy