我有一个支持国际化的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。只为客户端创建它。
您知道如何在服务器端显示国际化消息吗?
谢谢!
答案 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。