`
agile_boy
  • 浏览: 558154 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[转载] Reading i18n messages from the database with Grails

阅读更多

   如题,此文是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 Dojo

    ### Ajax Development with Grails and Dojo #### 一、引言 在当今的Web开发领域,Ajax技术已经成为了提升用户体验的重要手段之一。它允许网页在不重新加载整个页面的情况下更新部分数据,从而提供了更加流畅的交互...

    Getting Started with Grails

    ### Grails:初学者入门指南 #### 一、Grails框架简介 Grails是一个全栈式的Web应用开发框架,基于一系列成熟且广受好评的开源技术构建,如Spring、Hibernate、Ant、JUnit等。它充分利用了Groovy动态编程语言的...

    Grails入门指南书籍和源码----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    getting started with grails chinese Grails入门指南书籍和源码----下载不扣分,回帖加1分,欢迎下载,童叟无欺 getting started with grails chinese Grails入门指南书籍和源码----下载不扣分,回帖加1分,欢迎...

    getting started with grails 中文版

    非常好的grails教材, 建议grails程序员参考

    The definitive guide to grails 2 英文版 书 代码

    《The Definitive Guide to Grails 2》是Grails框架深入学习的重要参考资料,由业界专家撰写,旨在为开发者提供全面、详尽的Grails 2技术指导。这本书结合了理论与实践,不仅介绍了Grails的基本概念,还涵盖了高级...

    the definitive guide to grails 2

    《Grails 2 的终极指南》是一本深入探讨Grails框架精髓的专业书籍,该书以英文撰写,旨在为读者提供全面、深入的Grails框架学习资料。Grails框架基于Groovy语言,是一种高度动态、敏捷的Java应用开发框架,它简化了...

    The definitive guide to grails_2 源代码

    10. **国际化与本地化**:源码可能会涉及i18n(国际化)和l10n(本地化)的配置和实现,帮助理解如何在Grails应用中支持多种语言。 通过深入研究《The Definitive Guide to Grails 2》的源代码,开发者不仅可以掌握...

    Grails权威指南 Grails权威指南

    9. **国际化与本地化**:Grails内置了i18n支持,允许开发者轻松处理多语言环境,提高应用的全球适用性。 10. **持续集成与部署**:Grails与常见的CI/CD工具如Jenkins、GitLab CI/CD等良好集成,方便自动化部署和...

    django-i18nfield:将国际化字符串存储在Django模型中并提供完整格式支持

    Django的I18nFields 这是在存储多语言内容的另一种方法。 与 , 或之类的其他选项,它不需要数据库表,并且您可以重新配置可用的语言,而无需对数据库架构进行任何更改。 在constrast到 ,它不是具体到PostgreSQL。 ...

    Grails中文参考手册

    **国际化 (i18n) 支持** Grails 提供了对多语言环境的支持,通过 properties 文件管理不同语言的文本资源,便于实现应用程序的国际化。 **Grails 文档** "Grails 中文参考手册" 是一套详细的 Grails 学习资料,...

    Grails1.1中文文档

    8. **国际化(i18n)**:Grails支持多语言环境,文档将介绍如何设置和使用国际化资源文件。 9. **插件系统**:Grails的插件系统极大地扩展了其功能,文档会讲解如何安装、使用及开发插件。 10. **测试**:文档会...

    Getting-Started-with-Grails-Chinese

    这本书《Getting Started with Grails 中文版》是为初学者准备的一份指南,帮助他们快速理解 Grails 框架的基本概念和工作流程。书中可能涵盖了以下内容: 1. **安装与配置**:介绍如何在各种操作系统上设置 Grails...

    Getting-Started-with-Grails-Chinese.rar_Getting Started_grails

    《Getting Started with Grails》是一本专为初学者设计的指南,旨在介绍使用Groovy语言构建的敏捷Web开发框架——Grails。Grails是基于Java平台的,它利用了Groovy的简洁性和灵活性,为开发者提供了高效且强大的工具...

    grails-3.0.5-ga (2/2)

    12. **Internationalization (i18n)**: Grails 3.0.5支持多语言,通过资源包(messages.properties)进行本地化设置。 13. **RESTful服务**: Grails方便地创建RESTful Web服务,通过Controller和URL映射轻松实现...

    Grails 工具文档

    Grails支持多语言环境,通过i18n资源文件管理不同语言的文本。了解如何配置和使用i18n,可以使应用更具全球化视野。 综上所述,Grails工具文档涵盖了从语言基础到框架核心的多个方面,深入学习并实践这些知识点,将...

Global site tag (gtag.js) - Google Analytics