如何在FXML文档中实现JavaFX的语言支持?

时间:2014-10-12 13:03:04

标签: java xml javafx fxml

如何在FXML文档中为视图提供不同语言以支持多个国家/地区?

1 个答案:

答案 0 :(得分:23)

使用ResourceBundles存储与语言环境相关的文本,并使用"%resourceKey"访问数据包中的数据。

具体来说,为要支持的每种语言创建文本文件,并将它们放在类路径中。 Javadocs for ResourceBundle具有命名方案的详细信息,但您应该有BaseName.properties定义的默认包以及BaseName_xx.properties定义的其他语言和变体的包。例如(使用类路径根目录中的resources目录):

资源/ UIResources.properties:

greeting = Hello

资源/ UIResources_fr.properties:

greeting = Bonjour

然后在你的FXML文件中你可以做

<Label text = "%greeting" />

ResourceBundle传递给FXMLLoader执行:

ResourceBundle bundle = ResourceBundle.getBundle("resources.UIResources");
FXMLLoader loader = new FXMLLoader(getClass().getResource("/path/to/FXML.fxml"), bundle);
Parent root = loader.load();

此代码将加载与默认语言环境相对应的资源包(通常是您在操作系统级别设置的语言环境),如果找不到相应的包,则返回默认语言环境。如果要强制它使用特定的包,可以执行

ResourceBundle bundle = ResourceBundle.getBundle("/resources/UIResources", new Locale("fr"));

最后,如果您需要访问FXML控制器中的资源包,可以将其注入ResourceBundle类型的字段并命名为resources

public class MyController {

    @FXML
    private ResourceBundle resources ;

    // ...
}