Как обновить метки после изменения локали в TornadoFX?

#kotlin #javafx #localization #internationalization #tornadofx

Вопрос:

В TornadoFX у каждого Component есть messages свойство, которое используется для поиска сообщений в текущей локали. Проблема в том, что когда я использую это свойство для установки сообщений в своих элементах управления, привязка не устанавливается, поэтому при изменении ничего не обновляется FX.locale . Проблема кажется очевидной, но как она обычно решается?

Я вижу следующие решения:

  1. Создайте некоторый файл конфигурации, который будет считываться при запуске, затем обновляйте его каждый раз при изменении локали и попросите пользователя перезапустить приложение, чтобы обновить пользовательский интерфейс.
    • Мне не нравится такой подход, потому что в моем приложении еще нет файла конфигурации, и я не хочу создавать его только для этой цели.
  2. Перезагрузите все Component s, когда изменится языковой стандарт.
    • Я устал от этого, но при таком подходе весь пользовательский интерфейс теряет свое текущее состояние из-за перезагрузок, и я хотел бы избежать этого.
  3. Добавьте прослушиватели FX.localeProperty() и обновите все messages свойства, когда они будут обновлены, а также свяжите все метки каждого Component из них с соответствующим messages содержимым, чтобы они также обновлялись при FX.localeProperty() обновлении (проще говоря, обновляется язык -> обновляются сообщения ->> метки обновляются).
    • Я тоже пробовал это, но у меня проблемы с порядком слушателей и привязками. В каждом Component из них я делаю следующее: в init блоке , который я делаю FX.localeProperty().onChange { ... } , messages свойство переназначается в соответствии с новым языковым стандартом, чем в root инициализации , через которую я связываю каждую метку Bindings.createStringBinding , поэтому при обновлении он получает новое соответствующее messages содержимое FX.localeProperty() . Проблема в том, что, как кажется, сначала запускаются привязки меток, и только после этого onChange команда запускается и обновляет messages свойство.