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

时间:2016-05-23 22:46:35

标签: java javafx-2 resourcebundle properties-file

如何加载多个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 个答案:

答案 0 :(得分:1)

我没有尝试过,但它应该只是在加载之前每次设置捆绑包这么简单:

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

请注意,这假设您要执行的操作是为不同的包生成多个节点树,每个包都由不同的包文本(可能不是您想要的)自定义。

我觉得我可能在你的问题中遗漏了一些东西......

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

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

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

merge(bundle1, bundle2)是根据相关问题中的答案自行开发的功能。