GWT:在服务器代码中访问i18n消息

Mic*_*ael 7 java gwt

我有一个扩展com.google.gwt.i18n.client.Messages类的接口,我用它来检索我的GWT应用程序中的i18n消息.它看起来像这样:

public interface MyMessages extends com.google.gwt.i18n.client.Messages {
  @DefaultMessage("Hello world")
  @Key("message1")
  String message1();

  @DefaultMessage("Hello again")
  @Key("message2")
  String message2();

  //...
}
Run Code Online (Sandbox Code Playgroud)

通常,我使用GWT.create()如下所示创建它的实例:

private MyMessages messages = GWT.create(MyMessages.class);
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于服务器端代码,只能用于客户端代码(它会抛出错误,说GWT.create()仅在客户端代码中可用).

类似问题的答案指向一个单独的库,您可以下载它可以让您访问服务器上的i18n消息,但我不想下载任何额外的库(这似乎是一个简单的问题,必须有一个简单解决方案).

总结:如何在服务器端代码中访问我的i18n消息? 谢谢.

van*_*nje 8

在服务器端,您可以使用标准的Java本地化工具,如ResourceBundle.看这里的教程如何使用它.

// Create a ResourceBundle out of your property files
ResourceBundle labels =
  ResourceBundle.getBundle("LabelsBundle", currentLocale);

// Get localized value
String value = labels.getString(key);
Run Code Online (Sandbox Code Playgroud)

从属性文件创建接口并通过延迟绑定提供实现的GWT特定方法不能在服务器端Java上使用.

如果您无所畏惧并愿意花时间,您可以实现代码生成步骤来读取属性文件并为您的消息接口生成实现类.这正是Google GWT编译器在幕后所做的事情.

  • 我在我的GWT项目中使用Maven,其中一个好处就是它会查看您的Messages.properties文件并自动为您生成一个Messages接口.使用ResourceBundle可以工作,但我仍然讨厌为服务器端代码单独做一些事情.也许谷歌说,"设计良好的应用程序不需要在服务器端访问i18n消息." (2认同)