Grails 2.5.5 - 如何改善服务层中错误消息的国际化?

时间:2016-11-25 18:58:02

标签: grails

我正在开发一个Web应用程序,其中我的业务逻辑需要几种类型的错误消息。

由于我的服务层,我有几次调用messageSource

def messageSource

同时,我的应用程序必须支持多种语言,因此我需要定义用户指定的Locale

要做到这一点,我得到的Locale如下:

def request = RequestContextHolder.currentRequestAttributes().request
Locale myLocale = RequestContextUtils.getLocale(request)

但我注意到这段代码在我的服务层中重复出现。即:

def myMethod(){
    ...
    messageSource.getMessage("message.code", [args] as Object[],"Default message",getLocale())
    ...
}

Locale getLocale(){
    def request = RequestContextHolder.currentRequestAttributes().request
    return RequestContextUtils.getLocale(request)
}

有没有优雅的方法在我的所有服务和控制器之间共享此方法?或者还有其他方法可以改善这种行为吗?

  

Grails 2.5.5 - Groovy 2.4.4

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以在Groovy特征中实现这些方法,然后在服务中使用特征。

<强>的src /常规/ COM /富/酒吧/ SessionLocale

trait SessionLocale {
    def getMessage(String code, String defaultMessage, Object [] args) {
        messageSource.getMessage(code, args, defaultMessage,getLocale())
    }

    Locale getLocale(){
        def request = RequestContextHolder.currentRequestAttributes().request
        return RequestContextUtils.getLocale(request)
    }
}

<强>的grails-app /服务/ COM /富/酒吧/ SomeService

class SomeService implements SessionLocale {
    def myMethod(){
        ...
        getMessage("message.code", "Default message", [args] as Object[])
        ...
    }
}