JavaFX 2 和国际化加载属性文件

Posted

技术标签:

【中文标题】JavaFX 2 和国际化加载属性文件【英文标题】:JavaFX 2 and Internationalization loading properties files 【发布时间】:2016-09-20 23:14:37 【问题描述】:

如何加载多个 ResourceBundle 文件我有多个 fxml 文件,并且为每个文件创建了一个属性文件,例如:top.fxml top.properties 如何加载所有属性文件?

我尝试了类似的方法,但它不起作用

    Locale locale = new Locale("fr", "FR");
    ResourceBundle bundle = ResourceBundle.getBundle("i18n.bottom", locale);
    ResourceBundle bundle2 = ResourceBundle.getBundle("i18n.top", locale);

    FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
    loader.setResources(bundle);
    loader.setResources(bundle2);
    Parent root = loader.load();

【问题讨论】:

【参考方案1】:

我没有尝试过,但它应该就像每次加载之前设置捆绑一样简单:

FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
loader.setResources(bundle);
Parent firstBundleRoot = loader.load();
loader.setResources(bundle2);
Parent secondBundleRoot = loader.load();

请注意,这假设您正在尝试为不同的捆绑包生成多个节点树,每个节点树都由不同的捆绑包文本自定义(这可能不是您想要的)。

我确实感觉我可能遗漏了您的问题中的某些内容...


也许您正在尝试执行以下操作?

Java Multiple ResourceBundles Is it possible to include resource bundle files within a resource bundle

我认为这是一种创建某种大型资源包的解决方案,其中包括来自各种资源包的合并资源。因此,如果是这种情况,您可以先合并捆绑包,然后单独加载 FXML时间导致单个根窗格。

FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
loader.setResources(merge(bundle1, bundle2));
Parent root = loader.load();

merge(bundle1, bundle2) 是您根据链接问题中的答案自行开发的一些功能。

【讨论】:

谢谢我需要尝试,但第二个解决方案似乎是一个不错的解决方案

以上是关于JavaFX 2 和国际化加载属性文件的主要内容,如果未能解决你的问题,请参考以下文章

struts配置文件和国际化

JavaFX: 多语言适配

Spring boot 国际化自动加载资源文件问题

高级特性- 国际化

在 JavaFX 中管理 ComboBox 项

读取properties属性文件——国际化