Нужно ли отмечать каждый текст, который должен быть переведен вручную, и определять его перевод?
Вам следует использовать ResourceBundles для хранения / чтения переводов строк.
Как работает переключение языков в Java / Vaadin?
Вам необходимо предоставить класс, который реализует I18NProvider
. Документацию об этом можно найти здесь
После правильной реализации вы сможете вызывать getTranslation("HelloWorld")
для любого Компонента (и, следовательно, для любого представления, поскольку они должны расширять компонент), чтобыполучить перевод ключа «HelloWorld», определенного в ResourceBundle-файле текущего UI-Locale.
Представления, которые расширяются LocaleChangeObserver
, уведомляются при изменении локали, и затем вы можете снова позвонить getTranslation("HelloWorld")
, чтобы найти перевод недавно установленного языка.
Я бынравится интегрировать поле со списком, которое меняет язык каждого текста в этом приложении.
См. этот мой ответ , где я разместил пример кода компонента Select
это действует как переключатель языка. Он использует ResourceBundle и I18NProvider. (Вы также можете использовать ComboBox, но с другой стороны, вы можете отображать только строку для выбранного значения)
Важная часть в этом коде состоит в том, что у Select есть ValueChangeListener
, который устанавливает языковой стандартVaadinSession, который, в свою очередь, вызовет localeChange
метод LocaleChangeObserver, который ваше представление теперь должно реализовать. В методе localeChange вы можете повторно перевести переводимые строки каждого компонента в представлении;установить новые тексты в Labels
, установить новые метки и заполнители для TextFields
и т. д. и т. д.
Насколько сложно реализовать эту функцию в существующем проекте?
Это очень сильно зависит от вашего определения complex
и от того, насколько вы уже знакомы с ResourceBundles. Конечно, есть и менее сложные темы, но I18N никогда не бывает легким. На мой взгляд, Vaadin проделал огромную работу, предоставив разработчикам способ использования I18N в наших приложениях.