从数据库加载GET消息

时间:2010-04-04 20:38:34

标签: java gwt internationalization

在GWT中,通常使用如下界面加载i18n字符串:

public interface StatusMessage extends Messages {
   String error(String username);
   :
}

然后从 StatusMessage.property 文件加载实际字符串:

error=User: {0} does not have access to resource

这是一个很好的解决方案,但是我的客户端对于将i18n字符串放在数据库中的要求是不可置信的,因此可以在运行时更改它们(尽管它不是要求它们实时更改)。

一种解决方案是创建一个异步服务,该服务采用消息ID 用户区域设置并返回一个字符串。我已经实现了这个并且发现它非常难看(它引入了大量与服务器的额外通信,加上它使得属性占位符替换相当复杂)。

所以我的问题是这个,我可以用一些好的方式实现一个自定义消息提供程序,它可以一次性加载来自后端的消息(对于当前用户会话)。如果它也可以挂钩到默认的GWT消息机制,那么我会非常高兴(即我可以创建一个像上面这样的界面并继续使用好的 {0},{1} ... 财产置换格式)。

欢迎在GWT中使用干净的数据库驱动消息的其他建议。

4 个答案:

答案 0 :(得分:3)

GWT的内置Dictionary课程是向前发展的最佳方式。这是关于如何使用它的official documentation

答案 1 :(得分:1)

假设您的应用程序每个区域设置有500条消息,每条消息平均有60个字符。当用户登录或选择他的语言时,我不会考虑加载所有这些:它是< 50k的数据,如果您可以假设宽带连接可用,则不应该是一个问题...您的“一举”建议。我已经在一个GWT应用程序中执行了此操作,但它不是消息,而是从数据库中读取的属性。

答案 2 :(得分:1)

我想你可能会发现这篇文章很有用: http://googlewebtoolkit.blogspot.com/2010/02/putting-test-data-in-its-place.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot/NWLT+(Google+Web+Toolkit+Blog)&utm_content=Google+Reader

您可以做的是设置TextResource然后,您可以在运行时更改文本。我没有尝试过,但我非常有信心这会有用。

答案 3 :(得分:0)

为了优化性能,您可以将消息放在js资源中,例如:http://host.com/app/js/messages.js?lang=en,然后将此资源映射到servlet,该servlet将从缓存中获取消息字典(例如,单例bean) )并将其写入回复。

为了进一步优化,您可以:
- 将参数放入资源URL,例如:... / messages.js?lang = en& version = {上次更新消息的日期}
- {最后更新的消息日期}存储在DB中的某处 - 每当用户更新消息时,{最后更新的消息日期}将发生变化 - 在对浏览器的响应中,将Cache-control设置为您希望告诉浏览器缓存您的消息。