2016-06-28 1 views
0

Я пытаюсь создать многоязычное программное обеспечение в JavaFX, используя Afterburner.fx (https://github.com/AdamBien/afterburner.fx/). Я не могу понять, есть ли способ установить или внедрить пакет ресурсов, используемый представлением Afterburner, и если есть способ иметь разные пакеты ресурсов для разных представлений и изменения набора ресурсов во время выполнения.Установить и изменить набор ресурсов с Afterburner.fx

В простом javafx можно установить набор ресурсов для представления fxml, как показано в примере ниже, но как это сделать с дожигателем?

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(); 
} 

}

ответ

0

Чтобы загрузить ResourceBundle afterburner.fx строит bundleName из PackageName + имя вашего вида класса, например, :

packagename.ExampleView -> packagename.example //('View' at the ending gets removed) 
packagename.ExampleApp -> packagename.exampleapp 

, который используется для ResourceBundle.getBundle(name).

Следуя этому соглашению, вы должны создать отдельный ResourceBundle для каждого своего вида и поместить его в соответствующий пакет представлений.

Если вы хотите использовать другой шаблон именования, или один ResourceBundle для всех ваших взглядов, вы можете установить 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://github.com/AdamBien/afterburner.fx/blob/master/src/main/java/com/airhacks/afterburner/views/FXMLView.java

Смежные вопросы