2010-05-11 74 views

回答

46

内部控制器或标签库,你可以使用以下命令:

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

然而,领域类或服务里边,你需要注入为messageSource和调用的getMessage从自旋微观类AbstractMessageSource()方法。 该片段显示了如何做到这一点:

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

令人惊叹的答案!非常感谢! – Topera 2011-05-05 21:13:11

+1

只是为了帮助可能和我有同样问题的人 - myArgs必须是一个对象数组,例如:messageSource.getMessage(“some.code”,[“arg1”] Object [],“默认“,LCH.getLocale()) – MBozic 2012-10-10 17:58:38

+2

我使用的是grails 2.1。看起来你不能在控制器中使用g命名空间。使用消息(代码:“”)完成这项工作。也许你现在只需要taglibs的g命名空间。 http://grails.org/doc/2.1.0/guide/single.html#i18n – 2013-01-22 14:04:46

10

您也可以导入验证标记库,并用它抢消息源。

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

但它计算当前请求的区域设置吗? – fabien7474 2010-05-12 15:17:01

+0

@fabien是的它的确如此 – vickirk 2012-08-31 14:43:15

+0

g.message似乎是比messageSource更好的方法,因为需要更少的代码,您不必处理异常,并且您已经知道[如何使用它](http:// grails.org/doc/latest/ref/Tags/message.html)。 – 2013-09-24 17:39:09