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

avatar
Eyjafl
1 июля 2021 в 18:11
71
0
0

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

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

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

Ответы (0)