我正在尝试在Grails的i18n messageSource中添加一些额外的值。
默认的message.properties工作正常但我需要从远程资源加载一些额外的值(我知道它不好,但你知道,管理......)。
我试图通过Boostrap.groovy加载这些变量 例如:
def messageSource = new StaticMessageSource()
messageSource.addMessage("key1", new Locale("en"), "English Value")
messageSource.addMessage("key2", new Locale("de"), "Other Language Value")
当我尝试通过
在任何GSP中访问它们时<g:message code="key1" />
仅返回密钥,就好像StaticMessageSource中未设置的值一样。显然我对文档运气不太好。
Grails网站上没有任何内容,SpringFramework上几乎没有任何内容。 将不胜感激。
将另一组消息添加到messageSource会话的另一种方法!?
答案 0 :(得分:4)
messageSource
bean在Grails中使用PluginAwareResourceBundleMessageSource
类声明。当我需要更多的功能时,我创建一个grails plugin并配置上下文以加载Grails one的类intead。
类似的东西:
的src /常规/ MyMessageSource.groovy
class MyMessageSource extends PluginAwareResourceBundleMessageSource {
String getMessage(String key, Object[] args, Locale locale) {
String message
//handle your custom keys
if(key.contains('myCoolMessagePrefix') {
} else {
//or delegate to the default of Grails
message = super.getMessage(key, args, locale)
}
return message
}
}
插件描述符 - &gt; MyMessagesGrailsPlugin.groovy
def doWithSpring = {
//here we change the bean definition to use the customized messagesource
def beanconf = springConfig.getBeanConfig('messageSource')
def beandef = beanconf ? beanconf.beanDefinition : springConfig.getBeanDefinition('messageSource')
if (beandef) {
beandef.beanClassName = MyMessageSource.class.name
}
}
答案 1 :(得分:1)
我通过以下方式解决了类似问题:
messageSource(MyMessageSource){bean - &gt; bean.autowire =“byName”// - 这很重要 basenames =“WEB-INF / grails-app / i18n / messages” }