Grails i18n从数据库动态本地化

Grails i18n从数据库动态本地化,grails,internationalization,Grails,Internationalization,下面的代码是基于上面的链接实现的 class DatabaseMessageSource extends PluginAwareResourceBundleMessageSource { Ehcache messageCache def messageBundleMessageSource @Override protected MessageFormat resolveCode(String code, Locale loca

下面的代码是基于上面的链接实现的

 class DatabaseMessageSource extends PluginAwareResourceBundleMessageSource {
        Ehcache messageCache
        def messageBundleMessageSource

        @Override
        protected MessageFormat resolveCode(String code, Locale locale) {
            println code + " : " + locale.language
            def messageKey = new MessageKey(code, locale)
            def messageFormat = messageCache.get(messageKey)?.value

            if (!messageFormat) {
                I18nMessage i18nMessage = I18nMessage.findByCodeAndLanguageCode(code, locale.language)
                if (i18nMessage)
                    messageFormat = new MessageFormat(i18nMessage.text)
                else
                    messageFormat = super.resolveCode(code, locale)
                messageCache.put new Element(messageKey, messageFormat)
            }

            return messageFormat;
        }
在resources.groovy文件中,这个bean被配置为 如下代码所示

beans = {
    messageCache(EhCacheFactoryBean) {
        timeToLive = 500
    }
    messageSource(DatabaseMessageSource) {
        messageCache = messageCache
        basename = "WEB-INF/grails-app/i18n/messages"
    }
}
在gsp页面中,g:消息被调用,如下所示

1.<g:message code="someObject.create"/> 
2.<g:message code="someObject.create" default="Create"/>
3.<g:message code="someObject.create" args="['']"/> 
1。
2.
3.
对于g:message标记中给出的相同代码,1,2不显示数据库中给出的文本。第三个标记用法是显示数据库中添加的文本内容。1标记显示someObject.create。2个标签显示创建值,第3个标签显示添加的db文本


为什么1和2符号不在数据库中显示动态值?此外,resolveCode()仅被调用1次。

您是否尝试打开SQL日志记录以查看为1和2发出了什么查询?在转到SQL级别之前,groovy方法resolveCode()不会被调用1,2。听起来好像标记库正在使用另一种方法来解析消息代码。翻开源头,我看到: