Grails i18n从数据库动态定位

时间:2015-01-20 13:09:54

标签: grails internationalization

Grails i18n From Database but Default Back To File

以下代码基于以上链接实现。

 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:message,如下所示

1.<g:message code="someObject.create"/> 
2.<g:message code="someObject.create" default="Create"/>
3.<g:message code="someObject.create" args="['']"/> 

对于g:message标记中给出的相同代码,1,2不显示数据库中给出的文本。第3个标记用法显示数据库中添加的文本内容。 1个标签显示someObject.create。 2 Tag显示Create value,3rd tag显示添加的db文本。

为什么1和2符号不显示数据库中的动态值?并且还只调用了resolveCode()1次。

0 个答案:

没有答案