2014-10-12 74 views

回答

18

使用ResourceBundles来存储区域相关文本,并使用"%resourceKey"来访问数据包中的数据。

具体来说,为您想要支持的每种语言创建文本文件,并将它们放在类路径中。 Javadocs for ResourceBundle具有关于命名方案的详细信息,但您应该有一个默认包,其定义为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控制器资源包,你可以把它注射到ResourceBundle类型和名称resources的场:

public class MyController { 

    @FXML 
    private ResourceBundle resources ; 

    // ... 
} 
+0

我无法将ResourceBundle放在ContextMenu上。你能帮我吗 – Krismorte 2016-02-17 02:40:46

+0

实际上,对于那些还在怀疑的人来说,bundle参数要作为第二个参数放在load方法或构造函数的调用中! – 2016-10-28 14:16:36

+0

@AlexandrePieroux答案没有明确说明这一点吗? “要将'ResourceBundle'传递给'FXMLLoader'呢......” – 2016-10-28 14:21:55