[JavaFX] Kann man die Änderung der Sprache kompakter umsetzen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Möchtest du so etwas die grafische Oberfläche multilingual gestalten? Dafür solltest du Resource Bundles verwenden, die bei Bedarf dynamisch ausgetauscht werden.

Ich habe einmal zwei Artikel herausgesucht, die jeweils eine Beispielimplementation zeigen.

In kurz hier erklärt: Für die Texte werden Platzhalter bestimmt, die wiederum für die Texte der Oberflächenkomponenten (bspw. in deiner FXML) gesetzt werden. In einzelnen XML-Dateien (eine XML-Datei für eine Sprache) werden die Platzhalter mit den richtigen Texten assoziiert. Je nachdem, welche Sprache angezeigt werden soll, wird die entsprechende XML-Datei geladen.

Für den Language Switcher kann man eine ComboBox nehmen.


verreisterNutzer  29.01.2022, 14:27

Ich denke , dass es - auch wenn es keineswegs spürbar ist - länger dauert bzw. aufwendiger ist, wenn man immer eine neue FXML-Datei laden lässt, anstatt dass man einfach den Text mit

public void loadLang(String lang) {
    locale = new Locale(lang);
    bundle = ResourceBundle.getBundle("lang", locale);
    choice_AutoClicker.setText(bundle.getString("VARIABLE"));
}

verändert. Stimmt meine Vermutung oder ist es ganz anders zu beschreiben?

0
regex9  29.01.2022, 20:58
@verreisterNutzer

Wie man vorgeht, sollte man wohl besser am Aufbau der Oberfläche abwägen (auch im Hinblick darauf, inwiefern sich das Programm noch weiterentwickeln soll). Es gibt öfter statische Komponenten, deren Texte zwar übersetzt werden müssen, die sich aber sonst nicht ändern. Für all diese Komponenten Bindings anzulegen, würde zusätzliche Code-Zeilen und erfordern und zur Laufzeit würden die dafür nötigen Objekte auch Speicherplatz verbrauchen. Womöglich ist das immer noch nicht so aufwendig wie das erneute Lesen und Parsen der FXML-Datei, dafür aber erspart man sich im Projektcode einen Fokus auf unwichtige View-Elemente. Ziel eines gut wartbaren Projekts ist es ja, View-Logik möglichst in der FXML-Datei zu belassen.

1
verreisterNutzer  29.01.2022, 23:00
@regex9

Stimmt, absolut, es ist wirklich viel schöner, wenn alles über mehrere FXML-Dateien laufen. Das ganze Gedöns steht ja dann in der .fxml-Datei, wo ich sowieso nur alle paar Jahre reinschaue.

Ich habe zuerst die Methode ausprobiert, wo ich einfach die Texte ändere, dann die mit dem FXML-Wechsel. Beides ausprobiert - für eins entschieden.

Also dieser FXML-Wechsel heißt View-Logik oder ist es eine Art?

0
regex9  30.01.2022, 00:39
@verreisterNutzer

Das Wechseln der FXML hat keinen Namen/Fachbegriff.

Mit View-Logik meinte ich Folgendes: Es macht Sinn, alles was mit der grafischen Oberfläche (View) zutun hat, möglichst von jeglichem anderen Code zu trennen. Zum einen kann das ein Projekt übersichtlicher/geordneter machen und zum anderen flexibler (es fällt einfacher, diesen Teil gegen einen anderen auszutauschen; Stichwort: Lose Kopplung). Schau dir Entwurfsmuster wie MVC oder MVVM an.

1