大家好,
我对Java Swings和Applets有所了解,但我刚开始使用JavaFX和FXML,因为我编写了一个示例,我被困在这里。
这里我要显示菜单名称"文件"用其他语言(比如德语),所以我必须从控制器文件(java代码)中的变量中获取它的值(德语)。
MenuCtrl.java
public class MenuCtrl extends BorderPane{
public static String fileMenuName = "Datei";
}
Menu.fxml
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Open" />
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
如何在
上面的第1行使用fileMenuName变量<Menu mnemonicParsing="false" text="File">
所以我得到了
<Menu mnemonicParsing="false" text="Datei">
当我用谷歌搜索时,我只是如何使用JavaFX Scene Builder工具在FXML中构建UI组件,而不是如何说FXML使用java文件的变量
请提前帮助我
答案 0 :(得分:3)
你做错了。我假设你的代码在 com.abc.def 包中。现在翻译包 com.abc.bundles 创建文件MyStrings.properties:
fileMenuName =文件
在同一个地方创建MyStrings_de.properties:
fileMenuName = Datei
更改你的fxml:
<Menu mnemonicParsing="false" text="%fileMenuName">
注意%将指示fxml loader这是需要在资源中找到的变量。
现在在java中添加这样的东西(我假设你的fxml文件在 com.abc.view 中):
Locale locale = Locale.getDefault(); // or: Locale locale = new Locale("de");
ResourceBundle bundle = ResourceBundle.getBundle("com.abc.bundles.MyStrings", locale);
FXMLLoader loader = new FXMLLoader();
loader.setResources(bundle);
loader.setLocation(MyMain.class.getResource("/com/abc/view/Menu.fxml"));
/* do something with result */ loader.load();
通过这种方式,您无需在代码中对代码进行硬编码,将来翻译应用程序会更容易。 MyStrings.properties是默认文件,如果找不到更好的匹配,将使用该文件。所以例如如果您没有MyStrings_pl.properties并且将使用pl语言,那么它将回退到默认值。但是既然你有MyStrings_de.properties并且将使用de语言,那么它将使用它。
如果您需要使用代码中的翻译,请使用:
String name = bundle.getString("fileMenuName");