是否可能使GWT i18n中的消息方法过载

时间:2011-06-09 11:09:11

标签: java gwt internationalization overloading

我对可本地化的GWT项目实施了com.google.gwt.i18n.client.Messages

但似乎无法重载方法。这是一个Bug还是有原因?

public interface CommonMessages extends Messages {

    public static final CommonMessages INSTANCE = GWT.create( CommonMessages.class );

    @DefaultMessage( "The entered text \"{0}\" contains the illegal character(s) \"{1}\" ." )
    String textValidatorError( String o, String e );

    @DefaultMessage( "The entered text \"{0}\" contains illegal character(s)." )
    String textValidatorError( String o );
}

提出:

        Rebinding common.client.i18n.CommonMessages
 [java] Invoking generator com.google.gwt.i18n.rebind.LocalizableGenerator
 [java]    Processing interface common.client.i18n.CommonMessages
 [java]       Generating method body for textValidatorError()
 [java]          [ERROR] Argument 1 beyond range of arguments: The entered text "{0}" contains the illegal character(s) "{1}" .

1 个答案:

答案 0 :(得分:4)

您的Messages接口依赖于属性文件。 因为您的接口具有使用相同名称的方法,所以gwt会尝试在同一文件中查找属性textValidatorError两次。 它第一次寻找具有2个参数的属性,并找到它。第二次它正在寻找一个带有1个参数的属性,并找到一个有两个...因此错误。

使用@Key批注指定不同的属性名称。

public interface CommonMessages extends Messages {

  public static final CommonMessages INSTANCE = GWT.create( CommonMessages.class );

  @DefaultMessage( "The entered text \"{0}\" contains the illegal character(s) \"{1}\" ." )
  String textValidatorError( String o, String e );

  @DefaultMessage( "The entered text \"{0}\" contains illegal character(s)." )
  @Key("textValidatorErrorAlternate")
  String textValidatorError( String o );
}