Grails 2.5.5 - 如何提高服务层错误消息的国际化?

标签 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)
}

是否有任何优雅的方法可以在我的所有服务和 Controller 之间共享此方法?或者有其他方法可以改善这种行为吗?

Grails 2.5.5 - Groovy 2.4.4

谢谢!

最佳答案

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

src/groovy/com/foo/bar/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/services/com/foo/bar/SomeService

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

关于Grails 2.5.5 - 如何提高服务层错误消息的国际化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810992/

相关文章:

spring - 如何在Grails中排除依赖关系?

templates - Grails 布局可以调用模板吗?

file - Grails-通过附加程序登录文件

grails - 更改grails中注入(inject)服务的名称

grails - 如何在IntelliJ中获取Grails的所有源代码

grails - 确定数据类型

grails - Grails Spring Security s2ui-override

Grails - 如何计算任何操作所花费的执行时间?

grails - Grails 3.0和Spring Security

rest - Grails Spring Security REST 插件 - token 存储失败