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。听起来好像标记库正在使用另一种方法来解析消息代码。翻开源头,我看到: