我正在尝试使用Afterburner.fx (https://github.com/AdamBien/afterburner.fx/)在JavaFX中创建一个多语言软件。我不明白是否有一种方法可以设置或注入Afterburner视图使用的资源束,也不能理解是否有一种方法可以让不同的资源束对应不同的视图并在运行时更改资源束。
在普通的javafx中,可以为如下示例所示的fxml视图设置Resource Bundle,但是如何使用afterburner来实现这一点呢?
private void loadView(Locale locale) {
try {
FXMLLoader fxmlLoader = new FXMLLoader();
// Here, just the resource bundles name is mentioned. You can add support for more languages
// by adding more properties-files with language-specific endings like
// "E_13_Internationalization_fr.properties".
fxmlLoader.setResources(ResourceBundle.getBundle("E_13_Internationalization", locale));
Pane pane = (BorderPane) fxmlLoader.load(this.getClass().getResource("/E_13_Internationalization.fxml").openStream());
borderPane.setCenter(pane);
} catch (IOException ex) {
ex.printStackTrace();
}}
发布于 2016-06-29 05:30:22
要加载ResourceBundle,afterburner.fx将从包名+视图类的名称构建一个bundleName,例如:
packagename.ExampleView -> packagename.example //('View' at the ending gets removed)
packagename.ExampleApp -> packagename.exampleapp它用于ResourceBundle.getBundle(name)。
遵循该约定,您必须为每个视图创建一个单独的resourceBundle,并将其放入相应的视图包中。
如果您希望对所有视图使用不同的命名模式或单个resourceBundle,则可以在调用exampleView.getView()之前设置resourceBundle,然后exampleView.getView()将使用更新后的FMXLLoader初始化该resourceBundle。
public abstract class BaseView extends FXMLView {
public static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("bundleName");
public BaseView() {
this.bundle = RESOURCE_BUNDLE;
}
public BaseView(ResourceBundle bundle) {
this.bundle = bundle;
}
}https://stackoverflow.com/questions/38082417
复制相似问题