grails log.info $ {message i18n support?

时间:2014-06-12 14:23:46

标签: grails

                //log.info "${message(code: 'default.mylabel.label', default: 'My Default output: $myVariable', args: [${message(code: 'ignore.myVariable.label', default: '$myVariable'})])}"
                //log.info "${g.message(code: 'default.mylabel.label', default: 'My Default output: '+myVariable, args: [myVariable])}"
                def ff="${message(code: 'default.mylabel.label', default: 'My Default output: ')}"

                log.info "${ff}"

如果我删除$ {然后它将其余部分作为字符串返回但是在尝试将$ {message传递给log.info时它返回此消息,即不接受散列映射

,我尝试了各种各样的事情
    Caused by: groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (java.util.LinkedHashMap) values: [[code:default.something.label, ...]]

任何人都知道在log.info调用中是否有支持i18n的方法?

更新 这是在主应用程序中返回的消息,其中log.info为pumped from a plugin。我已将此尝试的页面作为链接创建,并在运行时将上述错误消息返回到主应用程序。

2 个答案:

答案 0 :(得分:1)

以下是我在Config文件中的log4j配置,您的代码正在为我工​​作

log4j = {
appenders {
    rollingFile name: 'catalinaOut', maxFileSize: 1024, fileName: "catalina.out"
    file name: 'stacktrace', file: "catalina.out", layout: pattern(conversionPattern: '%c{2} %m%n')
}

environments {
    development {
        debug 'grails.app.controllers', 'stdout'
        debug 'grails.app.services'
    }
    production {
        root {
            debug 'grails.app', 'catalinaOut'
            debug 'grails.app', 'stdout'
            error 'catalinaOut'
            warn 'catalinaOut'
            info 'catalinaOut'
            additivity = true
        }
    }
}

error stacktrace: "StackTrace"

error 'org.codehaus.groovy.grails.web.servlet',  //  controllers
        'org.codehaus.groovy.grails.web.pages', //  GSP
        'org.codehaus.groovy.grails.web.sitemesh', //  layouts
        'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
        'org.codehaus.groovy.grails.web.mapping', // URL mapping
        'org.codehaus.groovy.grails.commons', // core / classloading
        'org.codehaus.groovy.grails.plugins', // plugins
        'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
        'org.springframework',
        'org.hibernate',
        'net.sf.ehcache.hibernate'
}

答案 1 :(得分:0)

问题可能没有正确的问题是通过服务访问i18n。答案结果是这样的:

    import org.springframework.context.i18n.LocaleContextHolder as LCH
        class MailingListEmailService {
        def messageSource

def someAction() { 
 log.info messageSource.getMessage('default.mylabel.label', ["${recipientToList}","${recipientToList}"].toArray(), "MY DEFAULT VALUE IF NOT DEFINED", LCH.getLocale())
}
        }

这是在我的messages.properties文件中查找名为default.mylabel.label的密钥,它传递了两个变量,在这个测试中它本身是一个数组,然后是默认值,如果没有找到则最后显示站点运行的语言环境。

如果你从服务中闪烁消息同样的事情,但我想你需要通过request.getLocale(),因为消息是用户而不是运行服务器的日志文件......