Monat: Juni 2014

JavaFX- Internationalisierung / i18n in FXML Dateien

Hallo zusammen,
in diesem Beitrag möchte ich euch erklären wie man i18n am Besten in JavaFX umsetzt.
Dies geht dank der Integration von i18n in SceneBuilder relativ einfach.
Alle Beispiele sind mit SceneBuilder 2.0 erstellt.

Erstellen einer Java Properties Datei

  • Erstelle eine Properies Datei: „myapp_de.properties“
  • Lege sie zum Beispiel in deinen Resources Ordner
  • Öffne die Datei in deiner IDE oder in einem Texteditor
  • Schreibe in die erste Zeile
    my.sample.key=Hallo Welt

 

Arbeiten mit i18n im JavaFX SceneBuilder

  • Öffnet / Erstellt eine .fxml Datei mit SceneBuilder
  • Klickt nun im SceneBuilder auf „Preview“ -> „Internationalization“ -> „Set Resource… “
    scene_builder_select
  • Wählt dort nun eure „myapp_de.properties“ Datei aus
  • Jetzt klickt auf ein Element welches Text enthält
  • Jetzt klickt auf der rechten Seite neben dem Text Feld auf das kleine Zahnrad.
    Dann auf „Replace with internationalized string“
    scene_builder_tokey
  • Nun wird das Textfeld automatisch in ein Key Feld umgewandelt
  • Dort kommt jetzt der Key aus der Properties Datei rein („my.sample.key“)
  • Nach verlassen des Feldes sollte der SceneBuilder automatisch den Wert aus der Properties Datei ziehen, sprich „Hallo Welt“
  • Die FXML abspeichern

 

Sprache beim Laden einer FXML Datei festlegen

  • Nun geht es im Quellcode um das Laden einer FXML mit einer bestimmten Sprache.
  • Das sieht nun folgendermaßen aus:

 ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

 URL fxmlURL = classLoader.getResource("fxmls/myview.fxml");
 InputStream inputStream = classLoader.getResource("bundles/myapp_de.properties").openStream();
 ResourceBundle bundle = new PropertyResourceBundle(inputStream);

 FXMLLoader loader = new FXMLLoader(fxmlURL, bundle);
 Parent p = loader.load();

 Stage stage = new Stage();
 stage.setScene(new Scene(p));
 stage.show();

  • Ich gehe davon von aus das die .fxml Dateien und die .properties Dateien in einem resources Ordner liegen.
    Die Struktur sieht folgendermaßen aus:

java.de.app
………..|——-Main.java

<resources>
………..|——-bundles
………………….|————–myapp_de.properties
………………….|————–myapp_en.properties
………..|——-fxmls
………………….|————–myview.fxml

 

Es ist zu beachten das die Sprache nicht währen des Betriebs geändert werden kann. Das bedeutet des die Stage neu gestartet werden muss damit eine Sprachänderung wirksam wird.

 

Download
Beispielprojekt: i18nTest.zip (3KB)