小编典典

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

java

如何在FXML文档中为视图提供不同的语言以支持许多国家?


阅读 213

收藏
2020-11-16

共1个答案

小编典典

ResourceBundle小号来存储区域设置相关的文本,并使用访问包中的数据"%resourceKey"

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

资源/UIResources.properties:

greeting = Hello

资源/UIResources_fr.properties:

greeting = Bonjour

然后在您的FXML文件中,您可以执行

<Label text = "%greeting" />

传递ResourceBundleFXMLLoader做:

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控制器中的资源包,则可以将其注入type ResourceBundle和name 字段中resources

public class MyController {

    @FXML
    private ResourceBundle resources ;

    // ...
}
2020-11-16