Ссылка на строку 29 в трассировке стека может указывать, что экземпляр
private StockWatcherConstants constants =
GWT.create(StockWatcherConstants.class);
не может быть создан.Я не смог найти текст для StockWatcherConstants
в вашем сообщении.
Как немец, который использует GWT с локализацией - обычно с Messages
вместо Constants
- я не помню, чтобы видел точно такую же ошибку,но есть некоторые распространенные подводные камни.
Пожалуйста, убедитесь, что ваши файлы свойств действительно закодированы в UTF-8. Как говорится в документации GWT, он не соответствует стандарту Java.
Также, пожалуйста, убедитесь, что ваш Module.gwt.xml
настроен правильно. Ваше приложение должно наследовать модуль интернационализации.
<inherits name="com.google.gwt.i18n.I18N"/>
Кроме того, вы должны объявить доступные локали,и выберите значение по умолчанию.
<extend-property name="locale" values="de"/>
<!-- <extend-property name="locale" values="en"/> -->
<!-- <extend-property name="locale" values="zh"/> -->
<set-property-fallback name="locale" value="de"/>
Чтобы изменить локаль, необходимо перезагрузить приложение.Локали компилируются в отдельные файлы JavaScript.
Если вы не хотите полагаться на HTTP-заголовок для локализации, вы можете установить локаль из файла cookie.
String localeCookie = Cookies.getCookie(LocaleInfo.getLocaleCookieName());
if(localeCookie != null) {
setLocale(localeCookie);
}
Следующее объявлениезатем требуется в другом месте.
protected void setLocale(String targetLocale) {
if (LocaleInfo.getCurrentLocale().getLocaleName().equals(targetLocale))
return;
Set<String> availableLocales =
new HashSet<String>(Arrays.asList(LocaleInfo.getAvailableLocaleNames()));
if (! availableLocales.contains(targetLocale))
return;
Cookies.setCookie(LocaleInfo.getLocaleCookieName(), targetLocale,
new Date(new Date().getTime() + COOKIE_LIFETIME));
Window.Location.reload();
}
Просто убедитесь, что вы также объявляете файл cookie локали в вашей Module.gwt.xml
.
<set-configuration-property name="locale.cookie" value="GWTlocale"/>
Вы можете использовать эту функцию setLocale () для изменения локалей в ответна событие пользовательского интерфейса.Однако из-за перезагрузки вы потеряете всю информацию о состоянии.
Если вы используете Places
, вы можете использовать второй файл cookie, чтобы вернуться туда, где вы были.
eventBus.addHandler(PlaceChangeEvent.TYPE, new PlaceChangeEvent.Handler() {
@Override
public void onPlaceChange(PlaceChangeEvent event) {
Cookies.setCookie(HISTORY_COOKIE,
historyMapper.getToken(event.getNewPlace()),
new Date(new Date().getTime() + COOKIE_LIFETIME));
}
});
При запуске ваше приложение будет просматривать файл cookie и, прежде всего, вы увидите то же место в новой локали.
String lastToken = Cookies.getCookie(HISTORY_COOKIE);
Place defaultPlace =
(lastToken != null ? historyMapper.getPlace(lastToken) : Place.NOWHERE);
if (defaultPlace == Place.NOWHERE)
defaultPlace = new BestPlaceToStartYourApplication();
historyHandler.register(placeController, eventBus, defaultPlace);
historyHandler.handleCurrentHistory();
Этот ответ немного более исчерпывающий, поскольку ваш вопрос так долго оставался без ответа,Надеюсь, это поможет вам начать интернационализацию в GWT.