Я использую интернационализацию I18N в Vaadin.У меня есть класс Интернационализация с методом getText.
public static String getText(String key) {
String returnValue = "";
String value = "";
String space = " ";
Locale locale = new Locale("de", "DE");
try {
// session specific locale stored in attribute "locale"
// if you want add a new language then add a new else if with the
// new Locale like ("fr", "FR").
if (VaadinServletService.getCurrentRequest() != null) {
if ((Locale) VaadinServletService.getCurrentServletRequest().getSession().getAttribute("locale") != null) {
if (VaadinServletService.getCurrentServletRequest().getSession().getAttribute("locale").toString().equals("en_EN")) {
locale = new Locale("en", "US");
} else if (VaadinServletService.getCurrentServletRequest().getSession().getAttribute("locale").toString().equals("de_DE")) {
locale = new Locale("de", "DE");
}
}
}
ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale);
value = bundle.getString(key);
returnValue = new String(value.getBytes("ISO-8859-1"), "UTF-8");
} catch (MissingResourceException e) {
// Missing key
try {
// return the Key
String keyString = key.replace("_", space);
returnValue = new String(keyString.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return returnValue + space;
}
Я могу вызывать этот метод отовсюду, чтобы использовать этот getText()
метод.Мои компоненты получают текст интернационализации, вызывая этот метод следующим образом: label.setCaption(Internationalization.getText("Willkommen"));
Теперь у меня есть две кнопки «DE» и «EN» для языков немецкий и английский.В ClickListener этих кнопок я установил новый языковой стандарт следующим образом:
btnLanguageDE.addClickListener(e -> {
VaadinServletService.getCurrentServletRequest().getSession().setAttribute("locale", new Locale("de", "DE"));
});
btnLanguageEN.addClickListener(e -> {
VaadinServletService.getCurrentServletRequest().getSession().setAttribute("locale", new Locale("en", "EN"));
logger.debug("Internationalization change to: EN");
});
Проблема в том, что если я нажимаю на кнопку, они устанавливают локальный, но не перезагружают компоненты на странице.,Он меняется только если я перезагрузил страницу вручную.Я пытался назвать это UI.getCurrent().getPage().getLocation();
, но без эффектов.
Как я могу перезагрузить компоненты с фактической локалью?