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

Mar*_*öll 8 java xml javafx fxml

如何在FXML文档中使用不同的语言来支持许多国家/地区?

Jam*_*s_D 24

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

具体来说,为要支持的每种语言创建文本文件,并将它们放在类路径中.该Javadoc文档ResourceBundle对命名方案的细节,但你应该有一个默认包通过定义BaseName.properties和捆绑其他语言和变形的定义BaseName_xx.properties.例如(使用resources类路径根目录中的目录):

资源/ UIResources.properties:

greeting = Hello
Run Code Online (Sandbox Code Playgroud)

资源/ UIResources_fr.properties:

greeting = Bonjour
Run Code Online (Sandbox Code Playgroud)

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

<Label text = "%greeting" />
Run Code Online (Sandbox Code Playgroud)

传递ResourceBundleFXMLLoaderdo:

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

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

ResourceBundle bundle = ResourceBundle.getBundle("/resources/UIResources", new Locale("fr"));
Run Code Online (Sandbox Code Playgroud)

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

public class MyController {

    @FXML
    private ResourceBundle resources ;

    // ...
}
Run Code Online (Sandbox Code Playgroud)