1

我有一个支持国际化的 GWT 应用程序(在客户端)。

我有一个消息类:

/**
 * Interface to represent the messages contained in resource bundle:
 */
public interface Messages extends com.google.gwt.i18n.client.Messages {

  /**
  * Translated "No".
  * 
  * @return translated "No"
  */
  @DefaultMessage("No")
  @Key("NO")
  String NO();
}

我有两个属性 Messages.properties 和 Messages_fr.properties。

我也有这个配置:

<inherits name="com.google.gwt.i18n.I18N" />
<extend-property name="locale" values="fr" />
<set-configuration-property name="locale.useragent" value="Y"/>

在客户端我这样做:

private final Messages messages = GWT.create(Messages.class);
//...
messages.NO(); 

具有国际化的客户端正在工作,但如果我在服务器端添加以下这些行:

private final Messages messages = GWT.create(Messages.class);

我有一个错误,因为 GWT.create 它仅适用于客户端。

你知道如何在服务器端显示国际化消息吗?

谢谢!

4

2 回答 2

2

不是一个具体的答案,但不幸的是,GWT 目前不支持完全重用服务器上的客户端消息文件,尽管正在进行将其添加到 GWT 的工作。John Tamplin 在 GWT Meet-up 2013 上发表了关于在服务器端重用客户端消息的进展和问题的演讲。您可以在 meetup youtube 频道上找到演示文稿。

于 2013-08-06T15:52:07.457 回答
2

请记住,GWT 将客户端 java 代码转换为 javascript,以便浏览器可以执行它。这就是为什么您的服务器无法对您的 Messages 类做任何事情并抛出错误的原因。查看 com.google.gwt.i18n.client.Messages 中的包客户端?这是客户端代码,所以最后是js。

服务器端代码国际化的良好开端可能是http://docs.oracle.com/javase/tutorial/i18n/

您仍然可以在客户端代码中使用您正在使用的 .properties,但您必须使用纯 Java 方法来访问它们。一个例子是:

ResourceBundle bundle = ResourceBundle.getBundle("com.example.client.i18n.myresource");
bundle.getString("stringToRetrieve");
于 2013-08-06T11:29:50.257 回答