服务器端的GWT国际化(i18n)

时间:2013-08-06 08:42:30

标签: gwt internationalization

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

我有一个Messages类:

/**
 * 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。只为客户端创建它。

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

谢谢!

2 个答案:

答案 0 :(得分:2)

请记住,GWT会在javascript中转换客户端java代码,以便浏览器可以执行它。这就是为什么您的服务器无法对您的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");

答案 1 :(得分:2)

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