PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: ResourceBundle + Swing



itsme
27-12-2003, 09:11
Hallo mal wieder! :)

Ich arbeite gerade an einer Applikation mit einer Swing Oberfläche. Die Oberflächenelemente werden mit ResourceBundles internationalisiert. Das klappt alles auch sehr gut. Jetzt will ich einen Button einbauen um die Sprache zu ändern. Wie kann ich jetzt bei allen Elementen auf die neue Sprache bzw. das Bundle umstellen? Muss ich das alles manuell erledigen oder gibt es dafür automatische Funktionen?

peschmae
28-12-2003, 14:20
Ich glaube das musst du von Hand machen. Dürfte - wenn du von Anfang daran gedacht hast - nicht zu schwierig sein - schliesslich musst du beim Programmstart ja auch all die Sachen erst einmal einstellen.

Auf jeden Fall ist das im entsprechenden Beispiel aus "CoreJava 2" genauso implementiert - du machst halt einfach eine "updateLabelText()" - Methode, die du sowohl beim Programmstart als auch sonst zum TextNeusetzen verwendest.

Ein iterieren über alle GUI-Elemente scheint nicht möglich zu sein - schliesslich kann Java ja nicht wissen, welcher Text aus dem Ressource-Bundle zu welchem Widget deiner Benutzeroberfläche gehört.

MfG Peschmä

itsme
28-12-2003, 16:04
Ich habs jetzt auch manuell gemacht. Ist nicht schwierig, aber ich mache nicht gerne Dinge die ich auch automatisch Java machen lassen könnte... :)

itsme
30-12-2003, 14:09
Hmm, ein Problem habe ich allerdings noch.

Es gibt 3 Sprachdateien:

MyProgram.properties - Englisch, Standard
MyProgram_de.properties - Deutsch
MyProgram_en.properties - Englisch

Wenn ich jetzt im deutschen File einen Key lösche und bundle.getString(key) ausführe, dann bekomme ich nicht eine Exception sondern einfach der Wert aus der Standarddatei. So können dann die Sprachen auf dem GUI ziemlich durcheinander geraten...weiss jemand wie ich das verhindern kann? Einfach eine Exception auf die ich dann reagieren kann wäre gar nicht übel...

anda_skoa
30-12-2003, 15:13
Original geschrieben von itsme
Wenn ich jetzt im deutschen File einen Key lösche und bundle.getString(key) ausführe, dann bekomme ich nicht eine Exception sondern einfach der Wert aus der Standarddatei.

Das ist bei i18n ansich die normale Vorgehensweise, weil sonst das Programm unbedienbar wird.

Die Vollständigkeit der Übersetzung ist etwas, was man genauso testen muss wie das korrekte Funktionieren der Applikation selbst.

Ciao,
_

itsme
30-12-2003, 15:47
Das ist grundsätzlich alles alles richtig, aber es wäre doch trotzdem nett wenn ich z.B. mit getKeys() nur die Keys bekomme, die auch wirklich im Bundle drin sind. Dann wäre es auch sehr einfach zum überprüfen ob alle Files die gleichen Keys enthalten.

anda_skoa
07-01-2004, 14:05
Ich kenn mich mit Bundles nicht aus, aber so gefühlsmäßig würde ich sagen, dass es Property Files sind, also solche von java.util.Properties.

Wenn du es damit öffnest, hast du sicher nur die vorhandenen Keys.

Ciao,
_