在 TornadoFX 中,每个Component都有一个messages用于在当前语言环境中查找消息的属性。问题是当我使用这个属性在我的控件中设置消息时,没有设置绑定,所以当我更改FX.locale. 问题似乎很明显,但通常如何解决呢?
我看到以下解决方案:
- 创建一些配置文件,将在启动时读取,然后在每次更改语言环境时更新它,并要求用户重新启动应用程序以更新 UI。
- 我不喜欢这种方法,因为我的应用程序还没有配置文件,我不想仅仅为此目的创建一个配置文件。
- 当语言环境发生变化时,重新加载所有
Components。- 我已经厌倦了这一点,但是通过这种方法,整个 UI 由于重新加载而失去了当前状态,我想避免这种情况。
- 添加监听器
FX.localeProperty()并在更新时更新所有messages属性,并将每个标签的所有标签绑定Component到相应的messages内容,因此它们也会在更新时FX.localeProperty()更新(简单地说,语言环境已更新 -> 消息已更新-> 标签已更新)。- 我也试过这个,但我对监听器的顺序和绑定有问题。在每个
Component我执行以下操作:在init我执行的块中,根据新的语言环境FX.localeProperty().onChange { ... }重新分配属性,而不是在初始化中我通过绑定每个标签,因此它在更新时获取新的相应内容。问题是,看起来,首先,标签的绑定被触发,然后才触发指令并更新属性。messagesrootBindings.createStringBindingmessagesFX.localeProperty()onChangemessages
- 我也试过这个,但我对监听器的顺序和绑定有问题。在每个