Я пытался выучить GWT. Я заполнил пример приложения StockWatcher в учебнике .
Затем я перешел к следующему шагу: Интернационализация (I18N).
В руководстве по I18N вы создадите интерфейсы Message и Constant вручную. Один из файлов сообщений выглядит следующим образом:
public interface StockWatcherMessages extends Messages {
@DefaultMessage("''{0}'' is not a valid symbol.")
String invalidSymbol(String symbol);
@DefaultMessage("Last update: {0,date,medium} {0,time,medium}")
String lastUpdate(Date timestamp);
}
Обратите внимание на параметр типа Date
в одном из методов. Это позволяет мне передать экземпляр Date
, когда я вызываю этот метод, и он отображается локально. Это сработало просто отлично.
GWT также имеет инструмент i18nCreator, который можно использовать для генерации этих интерфейсов для вас на основе соответствующих файлов .properties
.
Я использую gwt-maven-plugin для сборки моего приложения и также поддерживает использование i18nCreator в качестве автоматической части вашей сборки .
Так что моя проблема в том, что когда я использую i18nCreator, явно или через плагин maven, я получаю интерфейс Message, подобный этому:
public interface StockWatcherMessages extends com.google.gwt.i18n.client.Messages {
@DefaultMessage("''{0}'' is not a valid symbol.")
@Key("invalidSymbol")
String invalidSymbol(String arg0);
@DefaultMessage("Last update: {0,date,medium} {0,time,medium}")
@Key("lastUpdate")
String lastUpdate(String arg0);
}
Аргумент lastUpdate
теперь является строкой. Это приводит к тому, что остальная часть моего кода, который вызывает этот метод с экземпляром Date
, не скомпилируется.
Как я могу заставить i18nCreator создавать интерфейсы, используя подходящие типы Java, кроме Strings? У меня возникла эта проблема с Date
, но я думаю, что она может возникнуть с другими типами, такими как Money
или Double
или с чем-либо еще.