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