Sprachumstellung per Checkbox, Konzeptfrage

Status
Nicht offen für weitere Antworten.

Tallan

Bekanntes Mitglied
Hallo zusammen,

ich habe folgende Frage zum Konzept der Sprachänderung eines Programms.


Gehen wir von einem simplen Fall aus:

Ich möchte die Sprache per Menu ändern, hierzu sind im Menu die entsprechenden Checkboxicons angelegt.

Mein JFarme enthält nun sagen wir 3 Contents welche Sprachbestandteile haben.
1. Menu
2. Infofeld
3. Liste

Wenn ich nun per Menu die Sprache ändere muß der Actionlistener im Menu allerdings Referenzen auf die beiden anderen Objekt (2 und 3) haben damit dort entsprechend die Sprache geändert werden kann (per Methodenaufruf z.b).

Gibt es eine bessere Lösung oder muß ich dem entsprechenden Menu alle referenzen auf die Objekte mitgeben die in diesem Fall relevant sind?

Danke Vorab.
 

Tallan

Bekanntes Mitglied
ich würde eher über das Locale gehen, bzw. mit properties die sprachen implementieren. so dass du nur platzhalter für die token einsetzt und diese dynamisch gefüllt werden.

Trail: Internationalization (The Java™ Tutorials)

Das habe ich bereits zumindest wenn ich da nichts falsch verstanden habe gemacht

Code:
languageBundle = mainFrame.getLanguageBundle();
    	
	    language = new JMenu(languageBundle.getString("language"));

allerdings wenn ich das ganze jetzt per menu ändern möchte brauche ich ja einen listener der auf das menu reagiert und dementsprechend die sprache ändert.
Der Listener benötigt meines erachtens nun referenzen auf alle objekte die "sprachrelevant" sind, um diesen zu sagen das sie die sprache umstellen sollen.
Mein Frage ist jetzt, ob es keine alternative dazu gibt das ich z.b dem Listener nicht alle referenzen mitgeben muß.
 

Tallan

Bekanntes Mitglied
he? steh ich auf dem schlauch? :)

Internationalizing the Sample Program (The Java™ Tutorials > Internationalization > Introduction)

anhand dieser schritte kannst du dir den anzeigetext (felder, buttons) doch beim zeichnen dynamisch holen und setzten, wozu denn n listener? oder bin ich grad verwirrt und erkenn den ernst der lage nicht? :) wenns so ist, dann sorry

der listener wird benötigt um auf das drücken des menuknopfs zu reagieren :) und daraufhin soll die sprachänderung stattfinden. ich will im programm also während der laufzeit hin und her springen können.
 

Atze

Top Contributor
aber neu zeichnen musst du doch so oder so! also kannst du auch mit den neuen werten zeichnen, und musst bei dem event nur mit dem laden des neuen locales etc weitermachen

also wollte ja nicht sagen, dass du keinen listener brauchst! :) nur dass du dich da nicht mit den referenzen ärgern mussT :) den listener darfst / musst du ja behalten :)
 

Tallan

Bekanntes Mitglied
aber neu zeichnen musst du doch so oder so! also kannst du auch mit den neuen werten zeichnen, und musst bei dem event nur mit dem laden des neuen locales etc weitermachen

also wollte ja nicht sagen, dass du keinen listener brauchst! :) nur dass du dich da nicht mit den referenzen ärgern mussT :) den listener darfst / musst du ja behalten :)

soweit stimmen wir überein, aber um die "neuen" locals zu laden brauche ich doch die referenzen auf die objekte die die locals neu laden müssen um ihnen eben dies mitzuteilen oder?
 

Atze

Top Contributor
also beim umschalten gibt dir der event die info für die gewählte sprache, bspw US

damit lädst du n neues löööööcale:
locale = new Locale("en","US");

holst dir damit das passende Bundle:
messages = ResourceBundle.getBundle("MessagesBundle",
locale);

und beim nächsten mal haste am bspw. textfeld den richtigen string
String msg1 = messages.getString("greetings");
 

Tallan

Bekanntes Mitglied
also beim umschalten gibt dir der event die info für die gewählte sprache, bspw US

damit lädst du n neues löööööcale:
locale = new Locale("en","US");

holst dir damit das passende Bundle:
messages = ResourceBundle.getBundle("MessagesBundle",
locale);

und beim nächsten mal haste am bspw. textfeld den richtigen string
String msg1 = messages.getString("greetings");

soweit so gut so hab ich das ja, aber :
Code:
messages = ResourceBundle.getBundle("MessagesBundle", locale);
muß ich ja in den entsprechenden anderen klassen die davon abhängen auch ausführen?
 

Atze

Top Contributor
kannst du das nicht "globaler" designen, das alle benötigten klassen drauf zugreifen können?
 

Atze

Top Contributor
ne, müssen die ja garnicht selber machen, da brauchst du halt ne art filter, der das event mitbekommt, das benötigte locale lädt und allen klassen zur verfügung stellt
 

Tallan

Bekanntes Mitglied
Das Bundle steht allen Klassen zur verfügung, aber das alleine Reicht nicht :

mein Bundle liegt im MainFrame, dieser beinhaltet z.b das
Menu und ein Infofeld.
Im Menu wird jetzt die Spracheinstellung für das Bundle(im MainFrame) geändert, hier passiert jetzt noch garnichts, erst durch erneutes abfragen der per bundle.getString....
erhalte ich die gewünschten Daten. D.h ich muß dies auch für das Infofeld ausführen, womit ich eine Referenz auf dieses Brauche um eine entsprechende Methode aufzurufen.
 

Landei

Top Contributor
Ich halte es generell für eine gaanz schlechte Idee, die Sprache zur Laufzeit zu wechseln, denn diese Funktion wird im Lebenszyklus eines normalen Programms in der Regel höchsten 1 (in Worten: EIN) Mal aufgerufen. Wenn man sowieso ein Properties-File oder so hat, bietet sich eine kleines separates "Sprachwechsel-Tool" an. Natürlich sollte ein eventuell vorhandener Installer auch schon die Sprache abfragen.
 

tfa

Top Contributor
Ich halte es generell für eine gaanz schlechte Idee, die Sprache zur Laufzeit zu wechseln, denn diese Funktion wird im Lebenszyklus eines normalen Programms in der Regel höchsten 1 (in Worten: EIN) Mal aufgerufen. Wenn man sowieso ein Properties-File oder so hat, bietet sich eine kleines separates "Sprachwechsel-Tool" an. Natürlich sollte ein eventuell vorhandener Installer auch schon die Sprache abfragen.

Die Sprache im laufenden Betrieb umstellen zu können, ist absolut keine schlechte Idee. Bei uns ist das eine Anforderung. Die Software wird an vielen verschiedenen Standorten eingesetzt, Anwender arbeiten auch oft außerhalb ihrer Heimatländer. In Belgien ist es z.B. Gesetz, dass eine Software sich jeder Zeit auf Niederländisch und Französisch betreiben lässt. Für Service und Entwickler ist es auch praktisch, eben mal die Sprache umschalten zu können, wenn man etwa einen Bugreport aus dem Ausland bekommt oder jemanden telefonisch was erklären möchte.

Rein technisch ist so ein Feature auch kein großes Problem. Wir gehen den ganzen Swing-Komponentenbaum durch. Jede Komponente hat einen eindeutigen Namen, über den in den Property-Dateien der lokalisierte Text geholt werden kann. So kann man auch Tabellenheader, Tooltips usw. verwalten.
 

Tallan

Bekanntes Mitglied
Die Sprache im laufenden Betrieb umstellen zu können, ist absolut keine schlechte Idee. Bei uns ist das eine Anforderung. Die Software wird an vielen verschiedenen Standorten eingesetzt, Anwender arbeiten auch oft außerhalb ihrer Heimatländer. In Belgien ist es z.B. Gesetz, dass eine Software sich jeder Zeit auf Niederländisch und Französisch betreiben lässt. Für Service und Entwickler ist es auch praktisch, eben mal die Sprache umschalten zu können, wenn man etwa einen Bugreport aus dem Ausland bekommt oder jemanden telefonisch was erklären möchte.

Rein technisch ist so ein Feature auch kein großes Problem. Wir gehen den ganzen Swing-Komponentenbaum durch. Jede Komponente hat einen eindeutigen Namen, über den in den Property-Dateien der lokalisierte Text geholt werden kann. So kann man auch Tabellenheader, Tooltips usw. verwalten.

richtig technisch ist das kein problem, die frage ist allerdings wie man es am besten umsetzt:)

und es macht sehr wohl sinn, da in diesem fall personen verschiedener nationalitäten abwechselnd an dem rechner arbeiten weshalb multilanguage unerlässlich ist
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JavaFX CheckBox mit ChangeListener AWT, Swing, JavaFX & SWT 1
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J JavaFx TableView mit CheckBox AWT, Swing, JavaFX & SWT 4
karlmasutra Java FX Checkbox abfragen AWT, Swing, JavaFX & SWT 2
J SceneBuilder TableView Checkbox AWT, Swing, JavaFX & SWT 1
M JAVAFX Checkbox mit URL verlinkung AWT, Swing, JavaFX & SWT 4
A checkbox mit allen tabllen aus datenbank befüllen AWT, Swing, JavaFX & SWT 8
D JIDE TreeComboBox mit checkbox-en kombinieren AWT, Swing, JavaFX & SWT 2
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Developer_X Java JTable - Combobox + Checkbox - Cellrenderer + Editor AWT, Swing, JavaFX & SWT 3
F JTable mit Checkbox AWT, Swing, JavaFX & SWT 1
T SWT checkbox in table AWT, Swing, JavaFX & SWT 6
M JavaFX TableView mit CheckBox als Boolean AWT, Swing, JavaFX & SWT 5
Z DefaultTableModel + checkbox AWT, Swing, JavaFX & SWT 0
S Swing JTable zusätzliche Spalte mit einer Checkbox einfügen AWT, Swing, JavaFX & SWT 7
A JXTreeTable mit Checkbox AWT, Swing, JavaFX & SWT 2
P Listenelemente über Checkbox löschen AWT, Swing, JavaFX & SWT 6
D Checkbox - Datenbankausgeben AWT, Swing, JavaFX & SWT 31
A Swing JTable benutzt keine Checkbox für Booleans AWT, Swing, JavaFX & SWT 9
M Swing Dropbox / Checkbox in JTable AWT, Swing, JavaFX & SWT 3
D SWT CheckBox auslesen (Window Builder Pro) AWT, Swing, JavaFX & SWT 2
A Swing Bug in Swing? Wenn checkbox disabled reagiert ActionListener nicht AWT, Swing, JavaFX & SWT 5
T disabled Checkbox soll trotzdem Focus bekommen AWT, Swing, JavaFX & SWT 9
C Checkbox-zustände in einem JFrame speichern AWT, Swing, JavaFX & SWT 8
C SWT CheckBox AWT, Swing, JavaFX & SWT 6
B Swing DefaultTableModel, Checkbox in Spalte AWT, Swing, JavaFX & SWT 4
C Checkbox in Liste deaktivieren und paintComponent explizit aufrufen AWT, Swing, JavaFX & SWT 12
N JTable RadioButton statt Checkbox AWT, Swing, JavaFX & SWT 4
Semox Swing Random Checkbox JApplet AWT, Swing, JavaFX & SWT 14
S Checkbox AWT, Swing, JavaFX & SWT 4
Z AWT Auf bestimmte Checkbox einer Checkboxgroup zugreifen AWT, Swing, JavaFX & SWT 3
C jtable checkbox in header / spaltenüberschrift AWT, Swing, JavaFX & SWT 4
O CheckBox in Jtable - Listener darauf?? AWT, Swing, JavaFX & SWT 3
W ButtonGroup, Checkbox, A oder B oder gar nix AWT, Swing, JavaFX & SWT 3
T Checkbox in einer Tabelle AWT, Swing, JavaFX & SWT 10
G Checkbox AWT, Swing, JavaFX & SWT 7
A Checkbox-Choice Eventproblem (CMV) AWT, Swing, JavaFX & SWT 2
T Checkbox & Textfield AWT, Swing, JavaFX & SWT 5
S Checkbox oder String in JTable-Spalte AWT, Swing, JavaFX & SWT 4
L Checkbox in Tabelle AWT, Swing, JavaFX & SWT 6
G Checkbox, die eine Endlosschleife ausführt AWT, Swing, JavaFX & SWT 3
R CheckBox drücken, sodass eine Aktion ausgeführt wird AWT, Swing, JavaFX & SWT 5
F Häkchen erscheint nicht bei anklicken von Checkbox in JTable AWT, Swing, JavaFX & SWT 4
T Doppelte Abfrage eine Checkbox vermeiden AWT, Swing, JavaFX & SWT 2
F Checkbox transparent machen ? AWT, Swing, JavaFX & SWT 2
N TableModel mit CheckBox? AWT, Swing, JavaFX & SWT 5
D [JList]Checkbox einbinden ? AWT, Swing, JavaFX & SWT 3
L Checkbox in JTable (again), bei true Daten in Header AWT, Swing, JavaFX & SWT 7
F JTable mit Checkbox macht Probleme AWT, Swing, JavaFX & SWT 4
C Aktion nach Auswahl einer Checkbox AWT, Swing, JavaFX & SWT 6
W CheckBox in Jtree AWT, Swing, JavaFX & SWT 6
G Bild als Checkbox bzw gerasteten Button? AWT, Swing, JavaFX & SWT 3
J jTable + jTextarea & checkbox AWT, Swing, JavaFX & SWT 6
V CheckBox in Tabelle zeichnen AWT, Swing, JavaFX & SWT 2
D CheckBox ändert Status nur, wenn sie FocusOwner ist AWT, Swing, JavaFX & SWT 2
C commando mit checkbox AWT, Swing, JavaFX & SWT 5
T selected checkbox AWT, Swing, JavaFX & SWT 2
T Checkbox AWT, Swing, JavaFX & SWT 10
N Checkbox mit mehreren Strings belegen? AWT, Swing, JavaFX & SWT 6
H Konzeptfrage (MVC) AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben