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

标签 java xml javafx fxml

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

最佳答案

使用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 Controller 中的资源包,您可以将其注入(inject)类型为 ResourceBundle 并命名为 resources 的字段:

public class MyController {

    @FXML
    private ResourceBundle resources ;

    // ...
}

关于java - 如何在FXML文档中实现对JavaFX的语言支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325403/

相关文章:

xml - 如何使用 rexml 将 XML 文档正确地插入到另一个文档中?

javafx - 如何在 JavaFX 中将 FontAwesome 升级到版本 5

macos - 通过双击文件将参数传递给JavaFx应用程序

JavaFX 12 - list 主要属性的签名文件摘要无效

java - 将 LIKE 与 ojdbc7.jar 一起使用时出现 SQLSyntaxErrorException

java - 当键盘出现时屏幕没有向上滚动

java - 为什么我在这里收到错误?

Java TCP 心跳无法正常工作

python - 使用 Python 和 minidom 进行 XML 解析

java - java类JAVA中的Spring xml配置重写