像常量一样的GWT接口

时间:2016-07-13 09:17:59

标签: java gwt localization

在我的应用程序中,我需要使用动态本地化,所以我不能使用Constants接口。我确实使用了一段时间的常量,但现在我需要在不编译的情况下更改文本,所以我必须找到其他方法。

所以我现在正在使用Dictionary。问题是,当我现在想在UiBinder中使用文本时,我只能使用没有参数的方法。所以我创建了类“StringIdentifiers”,我在MyConstants中使用了相同的方法,但是我必须在这里为每个返回指定String的方法指定一个主体。

例如,我有:

Dictionary locale = Dictionary.getDictionary("myJsObjectWithStrings");

//and then the methods for returning the actual strings from the JS object
String loading(){
   return locale.get("loading");
}

我希望这个方法只有

String loading();

因为其余部分与get()方法中出现为String参数的方法的名称始终相同。可能甚至在JS对象中缺少String时返回一些默认值。但我不知道该怎么做。我检查了Constants界面,但我真的不明白那里的代码。有人可以举个例子来说明如何实现这样的事情吗?

1 个答案:

答案 0 :(得分:0)

GWT中没有标准功能可以执行此操作,但您可以自己创建一个。这有点紧张,但它应该通过使用GWT生成器机制来工作。在全球范围内,它应该如下工作:

  1. 使用方法名称创建一个接口(例如MyMessages)。
  2. 要使用它,请使用MyMessages message = GWT.create(MyMessages.class)。您需要文字message.loading()
  3. 的地方
  4. 创建一个生成实现该接口的类的生成器。这个类将在编译时创建,并且应该包含接口方法的实现,就像你的例子一样。
  5. gwt.xml文件中添加generate-with标记,以使其有效。
  6. 这是一个简短的解释,但我希望它有所帮助。有关生成器的更多背景信息,请参阅:What is the use GWT generator?http://blog.arcbees.com/2015/05/26/how-to-write-gwt-generators-efficiently/

    您甚至可以重复使用i18n的一些GWT注释来添加例如默认文本。将注释添加到您的界面,并在生成器中扫描注释并在代码生成部分中使用它。