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