JavaFX Internationalisierung zur Laufzeit

DefconDev

Bekanntes Mitglied
Hallo zusammen,

kann man zur Laufzeit irgendwie die Sprache ändern ohne jede Komponenten die Text enthält aufzurufen?

Zurzeit übergebe ich die Sprache direkt beim Aufbau des GUIs.
Code:
FXMLLoader loader = new FXMLLoader(getClass().getResource("/matchMakerView/MatchMaker_MainScene.fxml"), new Language("GER").getBundle());

Code:
Language lang = new Language("GER");
               
                //Root für die Spieler im Treeview
                spieler_MainRoot        = new CheckBoxTreeItem<Object>(lang.getBundle().getString("tv_PlayerRoot"));
                spieler_Root_aktiv        = new CheckBoxTreeItem<Object>(lang.getBundle().getString("tv_PlayerActive"));
                spieler_Root_Inaktiv    = new CheckBoxTreeItem<Object>(lang.getBundle().getString("tv_PlayerInactive"));

Ich komme zurzeit auf ca. 40-50 Componenten die ich mit solch einem Code aufrufen müsste. Empfinde ich als ziemlich statisch und ist verbunden mit einiger Schreibarbeit.


Den Versuch die Locale oder das RessourceBundle in der FXML zur Laufzeit zu ändern funktioniert nicht wirklich, zumin. finde ich keine Methode die zu ändern.

Jemand eine Idee was ich übersehe oder falsch mache.
 

Goekhan

Mitglied
Eine Alternative könnte wie folgt sein:
du legst am besten ein Listener an deine Variable: lang .an.
Änder sich der Inhalt rufst du eine Methode auf in der du über eine schleife in ein Array mit all deinen Componenten durch gehst, um die Anzeige an die neue Sprache anzupassen.
 

DefconDev

Bekanntes Mitglied
Das funktioniert nicht, die Componenten sind alle komplett verschieden, also die in ein Array zu packen oder ähnliches ist nicht machbar. Selbst wenn ich mit IDs arbeiten würde, müsste ich einen ziemlichen Aufwand betreiben.
 

DefconDev

Bekanntes Mitglied
Erst mal ein Dank für deine Antworten.

Weißt du zufälligerweise ob und wie man zur Laufzeit Strings in das args Argument permanent speichern kann?

Idee, der User wählt die Sprache und nach einem manuellen Neustart des Programms wird die Sprache geladen die er zuvor ausgewählt hat.
 

dzim

Top Contributor
Hm... Wozu gibt es noch einmal das ResourceBundle? Richtig: Für Internationalisierung von Anwendungen.

Wie kann man das mit JavaFX (also Properties) verheiraten? Hm... Las mich in meinem Repo nachschauen:
https://github.com/bgmf/poc/tree/master/shared/src/main/java/eu/dzim/shared/resource
Kern des Ganzen: Ein Interface und eine Implementierung, die ich in dem Beispiel mit Guice (also Dependency Injection) verwende - was aber absolut kein "Muss" ist!

Interface: https://github.com/bgmf/poc/blob/master/shared/src/main/java/eu/dzim/shared/resource/Resource.java
Implementierung: https://github.com/bgmf/poc/blob/ma...ava/eu/dzim/shared/resource/BaseResource.java
Und finales "Beispiel" hier: https://github.com/bgmf/poc/blob/ma...u/dzim/shared/resource/impl/ResourceImpl.java

Und um es irgendwo zu nutzen muss man nun entweder einen Listener auf die #localeProperty oder #resourceBundleProperty setzen (ich nutze, wenn dann das Erste) - und den Text mittels #getGuaranteedString oder so holen. Oder (was in den meisten Fällen mein präferierter Weg ist) ich binde einen zu übersetzenden Text (z.B. Label#textProperty) mittels der Methode #getBinding(key, params...) (wobei ich meistens nie einen Parameter brauche, daher kann man meist nur #getBinding(key) schreiben). Das ist denkbar einfach und in 99% aller fälle ausreichend.

Und die zu übersetzenden Texte? Properties-Dateien im Format <frei-wählbarer-name>[_<sprache>[_<land>]].properties. Man kann auch eigene Files einbinden, hab ich aber noch nie gebraucht und dünkt mich daher unnötig.
 

DefconDev

Bekanntes Mitglied
Danke für deine Antwort. Ich denke mal für mein nächstes privat-Projekt werde ich das umsetzen, hatte aber gehofft es gibt eine sehr kleine Lösung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J FXML - Internationalisierung - Behandung key not found AWT, Swing, JavaFX & SWT 39
G Internationalisierung auf Knopfdruck AWT, Swing, JavaFX & SWT 4
L Internationalisierung mittels ResourceBundle und Menu HotKey AWT, Swing, JavaFX & SWT 6
N Grundsätzliche Frage zur Internationalisierung AWT, Swing, JavaFX & SWT 2
0 Ist "sequence.fallback" aus den font.properties zur Laufzeit änderbar AWT, Swing, JavaFX & SWT 0
Davee JavaFX ListView = null wenn ich sie in Laufzeit ändern will! AWT, Swing, JavaFX & SWT 16
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
S JavaFX ListView Inhalte während Laufzeit ändern AWT, Swing, JavaFX & SWT 23
Neumi5694 Schriftgröße zur Laufzeit AWT, Swing, JavaFX & SWT 4
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
M JavaFX ComboBox: Update zur Laufzeit AWT, Swing, JavaFX & SWT 16
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
B 3D-Grafik Java 3D Licht während Laufzeit ändern AWT, Swing, JavaFX & SWT 0
Joew0815 Dropdown meue während der Laufzeit ändern. AWT, Swing, JavaFX & SWT 6
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
U Swing JTextField zur Laufzeit auf Eingaben prüfen AWT, Swing, JavaFX & SWT 0
M LayoutManager Layout zur Laufzeit ändern AWT, Swing, JavaFX & SWT 8
SimonRap Swing JFrame Größe zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
A Panels in JavaFX zur Laufzeit erzeugen AWT, Swing, JavaFX & SWT 5
K Panel zu Laufzeit ändern AWT, Swing, JavaFX & SWT 6
D Änderungen einer Card des CardLayouts zur Laufzeit AWT, Swing, JavaFX & SWT 6
hdi Shift Modifier zur Laufzeit ermitteln AWT, Swing, JavaFX & SWT 3
S Swing Tabelleneigenschaften zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S GUI per XML zur Laufzeit laden AWT, Swing, JavaFX & SWT 5
R LookAndFeel LAF zur Laufzeit umschalten AWT, Swing, JavaFX & SWT 6
darekkay Swing Komponente zur Laufzeit neuinitialisieren AWT, Swing, JavaFX & SWT 6
C Swing Toolbar zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 5
H JFrame in der Laufzeit verändern AWT, Swing, JavaFX & SWT 11
Ollek Realisierung: JTable zur Laufzeit mit neuen Daten füllen AWT, Swing, JavaFX & SWT 3
S Swing JTextArea während der Laufzeit füllen AWT, Swing, JavaFX & SWT 5
Ollek Text in JTextField und JTextArea zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
R JFreeChart Skalierung zur Laufzeit ändern AWT, Swing, JavaFX & SWT 7
L systemtray zur laufzeit ändern AWT, Swing, JavaFX & SWT 2
N Swing Threads sollen Tabtitel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 4
F Swing Zur Laufzeit Bild laden und auf JPanel anzeigen AWT, Swing, JavaFX & SWT 4
A Komponenten zur Laufzeit entfernen AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
D LayoutManager GridBagLayout, Änderung zur Laufzeit AWT, Swing, JavaFX & SWT 4
S Canvas-Inhalt in Laufzeit ändern AWT, Swing, JavaFX & SWT 6
Q 3D-Grafik Cube Farbe setzen zur Laufzeit. AWT, Swing, JavaFX & SWT 10
E Swing JList zur Laufzeit hinzugefügt elemente nicht sichtbar?! AWT, Swing, JavaFX & SWT 2
E Swing Zur Laufzeit hinzegfügte Komponenten nicht sofort sichtbar?! AWT, Swing, JavaFX & SWT 4
G Swing Icons von JLabel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 3
S Java3D: Alle Objekte in BranchGroup löschen während Laufzeit AWT, Swing, JavaFX & SWT 3
A Swing JLabel in Laufzeit vergrößern AWT, Swing, JavaFX & SWT 3
U JTabbedPane: Layout-Probleme bei addTab zur Laufzeit AWT, Swing, JavaFX & SWT 2
A Komponente zur Laufzeit hinzufügen und RICHTIG anzeigen AWT, Swing, JavaFX & SWT 3
G StackOverflow nach einem Tag Laufzeit AWT, Swing, JavaFX & SWT 11
F Swing JTabbedPane: Zur Laufzeit die Tabreihenfolge ändern AWT, Swing, JavaFX & SWT 2
eQuest Swing Einem JFrame zur Laufzeit ein Panel zuweisen AWT, Swing, JavaFX & SWT 5
S initialnamen einer swing instanz zur laufzeit ändern AWT, Swing, JavaFX & SWT 5
M Swing JTable während Laufzeit beschreiben AWT, Swing, JavaFX & SWT 14
multiholle [Swing] GUI zur Laufzeit ändern AWT, Swing, JavaFX & SWT 7
L GUI Komponenten zur Laufzeit entfernen AWT, Swing, JavaFX & SWT 4
A SWT - Elemente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
N JList (JXList) ListCellRenderer zur Laufzeit ändern (Anzeigefehler) AWT, Swing, JavaFX & SWT 6
G Komponente zur Laufzeit tauschen. AWT, Swing, JavaFX & SWT 5
O Zeichnene auf ein Jpanel während der Laufzeit des Programms AWT, Swing, JavaFX & SWT 2
M Erzeugen von Komponenten während der Laufzeit AWT, Swing, JavaFX & SWT 6
T SWT/Eclipse Form Controls zur Laufzeit hinzufügen,GridLayout AWT, Swing, JavaFX & SWT 4
S Methode während ihrer Laufzeit abbrechen AWT, Swing, JavaFX & SWT 6
G Text zur Laufzeit einblenden? AWT, Swing, JavaFX & SWT 2
P SWT: Composi te zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 3
M Sprache zur Laufzeit ändern AWT, Swing, JavaFX & SWT 3
R JFrame: Inhalt zur Laufzeit ändern AWT, Swing, JavaFX & SWT 7
J GUI JPanel zur Laufzeit austauschen. AWT, Swing, JavaFX & SWT 6
DeeDee0815 LookAndFeel während der Laufzeit verstellen AWT, Swing, JavaFX & SWT 4
padde479 Look And Feel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
D Widget/Control während Laufzeit durch ein anderes ersetzen AWT, Swing, JavaFX & SWT 3
C Zeile aus Tabelle zur Laufzeit löschen AWT, Swing, JavaFX & SWT 6
C Inhalt JTextField zur Laufzeit ändern. AWT, Swing, JavaFX & SWT 14
B JButton während der Laufzeit in JLabel umwandeln AWT, Swing, JavaFX & SWT 3
P JTextArea veränder Größe während Laufzeit; GridBagLayout AWT, Swing, JavaFX & SWT 8
B JList zur Laufzeit aktualisieren AWT, Swing, JavaFX & SWT 2
R JTable: Column Titel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
D JComponets während der Laufzeit in ein Panel einfügen AWT, Swing, JavaFX & SWT 2
S Komponente zur Laufzeit hinzufügen & Vergrößern einschrä AWT, Swing, JavaFX & SWT 3
G SWT: wie aktualisiere ich ein Canvas zur Laufzeit? AWT, Swing, JavaFX & SWT 4
S Problem, neuen JInternalFrame zur Laufzeit anzuzeigen AWT, Swing, JavaFX & SWT 8
D JTable Header während Laufzeit ändern. AWT, Swing, JavaFX & SWT 3
C Dynamisches Zuweisen von Daten an eine JTable zur Laufzeit AWT, Swing, JavaFX & SWT 4
M Anzeigefehler nach langer Laufzeit der Applikation AWT, Swing, JavaFX & SWT 4
I JTextPane zur Laufzeit zeichnen AWT, Swing, JavaFX & SWT 2
G Java 1.5 Look&Feel zur Laufzeit auf 1.4 umstellen möglic AWT, Swing, JavaFX & SWT 2
F Look and Feel zur Laufzeit ändern macht Probleme AWT, Swing, JavaFX & SWT 3
G JTable zur Laufzeit Spalten und Zeilen hinzufügen AWT, Swing, JavaFX & SWT 7
M In einem JFrame Menüs & . während der Laufzeit verändern AWT, Swing, JavaFX & SWT 6
F SWT Image: Grösse des Bildes zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
D Elemente zur LaufZeit hinzufügen und löschen AWT, Swing, JavaFX & SWT 14
L Constraints während der Laufzeit verändern AWT, Swing, JavaFX & SWT 7
R setUndecorated und defaultLAF deco zur laufzeit AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben