GWT Maven插件:在Messages类中生成非String参数

Mic*_*ael 6 java gwt maven

我的"Messages.properties"文件中有一个属性,它有一个使用数字格式的参数:

my.message=File exceeds {0,number,0.0}MB.
Run Code Online (Sandbox Code Playgroud)

当我运行gwt:i18nMaven目标时,它会Messages根据我的"Messages.properties"文件中的属性生成一个接口(正常情况下):

public interface Messages extends com.google.gwt.i18n.client.Messages {
  //...

  @DefaultMessage("File exceeds {0,number,0.0}MB.")
  @Key("my.message")
  String my_message(String arg0);

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

问题是方法参数是a String.当我运行应用程序时,它给了我一个错误,因为message参数需要一个数字,但是提供了一个String(错误消息是,"Only Number子类可以被格式化为数字").

如何配置Maven让它将此参数更改为数字(如a floatNumber)?谢谢.

Ren*_*ato 2

鉴于上述讨论,我决定补充我之前的答案。首先,据我所知,您无法使用现有的 i18n Maven 目标(以及 GWT 的 I18NCreator)来执行所要求的操作。其次,在对我建议的生成器解决方案进行更多研究后,我发现:

  • Michael 是对的,您不会在编译时使用接口方法查找属性(GWT 中的罪过),如上面所建议的那样发现错误。然而,这仍然是最简单/最快的方法。
  • 您可以通过编写自己的接口来确保编译时检查,该接口与属性文件保持最新,每个属性都有一个方法,然后让生成器编写一个实现该接口的类。请注意,当您更改属性文件上的属性时,只需更改您编写的接口即可。如果您正确编写了生成器,则永远不需要再次更改它!关于方法名称的最佳方法可能是遵循 GWT:如果属性名为 the.prop.one,则方法名称为 the_prop_one(..)。
  • 如果您确实不想手动维护界面,我能想到的唯一方法是您编写自己的 I18NCreator 版本。这是因为maven目标i18n不是GWT编译器参数,而是调用maven插件
    根据类路径中找到的属性文件编写消息/常量接口。因此,如果您编写自己的 I18NCreator,则
    还必须编写一个 Maven 插件,以便在编译 GWT 应用程序之前调用它。或者,为了更简单,您可以在每次更改属性文件密钥时手动运行 I18NCreator(使用古老的 java 命令来运行它)(当然,
    当仅更改实际消息时,无需运行它) )。

就我个人而言,我只会编写和维护我的属性文件以及手动镜像它的界面。生成器将始终查看属性文件并生成与属性相对应的方法(根据实际消息使用所需的任何参数),因此如果您编写的接口反映了属性文件,则生成器生成的类将始终正确实施。