如何在FXML文档中实现JavaFX的语言支持?
如何在FXML文档中使用不同的语言来支持许多国家/地区?
使用ResourceBundle
来存储与语言环境相关的文本,并使用"%resourceKey"
访问包中的数据。
具体来说,为要支持的每种语言创建文本文件,并将它们放在类路径中。 ResourceBundle
的Javadocs有关于命名方案的详细信息,但您应该有BaseName.properties
定义的默认包以及BaseName.properties
定义的其他语言和变体的BaseName_xx.properties
。 例如(使用类路径根目录中的resources
目录):
资源/ UIResources.properties:
greeting = Hello
资源/ UIResources_fr.properties:
greeting = Bonjour
然后在你的FXML文件中就可以了
要将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 ; // ... }