//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。我已将此尝试的页面作为链接创建,并在运行时将上述错误消息返回到主应用程序。
答案 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(),因为消息是用户而不是运行服务器的日志文件......