如题,此文是Grails的作者的一篇文章,无奈被墙,同时也为自己做个备份。
原文URL:http://graemerocher.blogspot.com/2010/04/reading-i18n-messages-from-database.html
In a recent consulting engagement, a client wanted to know how to go about reading i18n messages from the database rather than static properties files (the default in Grails). Considering how easy this is to do I was surprised when I Googled it that there was no information on how this is achieved.
Anyway it's dead simple. Just create a domain class that models a message:
class Message {
String code
Locale locale
String text
}
Then implement a class that extends the org.springframework.context.support.AbstractMessageSource class. In the example below I am using simple GORM finders to lookup a message using the code and locale
class DatabaseMessageSource extends AbstractMessageSource {
protected MessageFormat resolveCode(String code, Locale locale) {
Message msg = Message.findByCodeAndLocale(code, locale)
def format
if(msg) {
format = new MessageFormat(msg.text, msg.locale)
}
else {
format = new MessageFormat(code, locale )
}
return format;
}
}
Then wire it in using Spring by configuring a "messageSource" bean in the grails-app/conf/spring/resources.groovy file:
beans = {
messageSource(DatabaseMessageSource)
}
And that's it. Now you're serving messages from the database. Of course this is a terrible inefficient implementation since we're hitting the database for ever message code used in the application. However, it's pretty easy to introduce caching. Just create a cache key:
@Immutable
class MessageKey implements Serializable {
String code
Locale locale
}
Then configure an appropriate cache bean (I'm using Ehcache) in Spring and wire it into your MessageSource:
beans = {
messageCache(EhCacheFactoryBean) {
timeToLive = 500
// other cache properties
}
messageSource(DatabaseMessageSource) {
messageCache = messageCache
}
}
Finally, update your implementation to use caching:
class DatabaseMessageSource extends AbstractMessageSource {
Ehcache messageCache
@Override
protected MessageFormat resolveCode(String code, Locale locale) {
def key = new MessageKey(code,locale)
def format = messageCache.get(key)?.value
if(!format) {
Message msg = Message.findByCodeAndLocale(code, locale)
if(msg) {
format = new MessageFormat(msg.text, msg.locale)
}
else {
format = new MessageFormat(code, locale)
}
messageCache.put new Element(key, format)
return format
}
return format;
}
}
分享到:
相关推荐
### Ajax Development with Grails and Dojo #### 一、引言 在当今的Web开发领域,Ajax技术已经成为了提升用户体验的重要手段之一。它允许网页在不重新加载整个页面的情况下更新部分数据,从而提供了更加流畅的交互...
### Grails:初学者入门指南 #### 一、Grails框架简介 Grails是一个全栈式的Web应用开发框架,基于一系列成熟且广受好评的开源技术构建,如Spring、Hibernate、Ant、JUnit等。它充分利用了Groovy动态编程语言的...
getting started with grails chinese Grails入门指南书籍和源码----下载不扣分,回帖加1分,欢迎下载,童叟无欺 getting started with grails chinese Grails入门指南书籍和源码----下载不扣分,回帖加1分,欢迎...
非常好的grails教材, 建议grails程序员参考
《The Definitive Guide to Grails 2》是Grails框架深入学习的重要参考资料,由业界专家撰写,旨在为开发者提供全面、详尽的Grails 2技术指导。这本书结合了理论与实践,不仅介绍了Grails的基本概念,还涵盖了高级...
《Grails 2 的终极指南》是一本深入探讨Grails框架精髓的专业书籍,该书以英文撰写,旨在为读者提供全面、深入的Grails框架学习资料。Grails框架基于Groovy语言,是一种高度动态、敏捷的Java应用开发框架,它简化了...
10. **国际化与本地化**:源码可能会涉及i18n(国际化)和l10n(本地化)的配置和实现,帮助理解如何在Grails应用中支持多种语言。 通过深入研究《The Definitive Guide to Grails 2》的源代码,开发者不仅可以掌握...
9. **国际化与本地化**:Grails内置了i18n支持,允许开发者轻松处理多语言环境,提高应用的全球适用性。 10. **持续集成与部署**:Grails与常见的CI/CD工具如Jenkins、GitLab CI/CD等良好集成,方便自动化部署和...
Django的I18nFields 这是在存储多语言内容的另一种方法。 与 , 或之类的其他选项,它不需要数据库表,并且您可以重新配置可用的语言,而无需对数据库架构进行任何更改。 在constrast到 ,它不是具体到PostgreSQL。 ...
**国际化 (i18n) 支持** Grails 提供了对多语言环境的支持,通过 properties 文件管理不同语言的文本资源,便于实现应用程序的国际化。 **Grails 文档** "Grails 中文参考手册" 是一套详细的 Grails 学习资料,...
8. **国际化(i18n)**:Grails支持多语言环境,文档将介绍如何设置和使用国际化资源文件。 9. **插件系统**:Grails的插件系统极大地扩展了其功能,文档会讲解如何安装、使用及开发插件。 10. **测试**:文档会...
这本书《Getting Started with Grails 中文版》是为初学者准备的一份指南,帮助他们快速理解 Grails 框架的基本概念和工作流程。书中可能涵盖了以下内容: 1. **安装与配置**:介绍如何在各种操作系统上设置 Grails...
《Getting Started with Grails》是一本专为初学者设计的指南,旨在介绍使用Groovy语言构建的敏捷Web开发框架——Grails。Grails是基于Java平台的,它利用了Groovy的简洁性和灵活性,为开发者提供了高效且强大的工具...
12. **Internationalization (i18n)**: Grails 3.0.5支持多语言,通过资源包(messages.properties)进行本地化设置。 13. **RESTful服务**: Grails方便地创建RESTful Web服务,通过Controller和URL映射轻松实现...
Grails支持多语言环境,通过i18n资源文件管理不同语言的文本。了解如何配置和使用i18n,可以使应用更具全球化视野。 综上所述,Grails工具文档涵盖了从语言基础到框架核心的多个方面,深入学习并实践这些知识点,将...