ResourceBundle.getBundle und OSGi

Julius
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 237
Registriert: 5. Okt 2005 15:52

ResourceBundle.getBundle und OSGi

Beitrag von Julius »

Hallo,

im Zuge der Übung bin ich auf ein Problem gestoßen, bei dem ich bisher keine Fortschritte machen konnte.

Es geht um das Laden der Properties-Datei für die Lokalisierung der Anwendung. Das Laden soll dabei, wie auch im Original-Code, die Methode java.util.ResourceBundle.getBundle übernehmen. Nach den Ausführungen der Vorlesung über OSGi ist mir prinzipiell klar, dass bei diesem Aufruf die Übergabe des richtigen Classloaders entscheidend ist. Nur wie komme ich nun an den Classloader des Bundles heran, in dessen Verzeichnis die Properties-Datei liegt? Kann mir dazu jemand einen Tipp geben? Alle Versuche führten bisher zu einer java.util.MissingResourceException. Bisher verwende ich noch kein Fragment für die Lokalisierung, die Properties-Dateien liegen also im Hauptbundle.

Ich wäre sehr dankbar für einen kleinen Tipp.

Benutzeravatar
satabin
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 25. Feb 2010 15:32

Re: ResourceBundle.getBundle und OSGi

Beitrag von satabin »

Hallo,

Wenn deine Messages Klasse in deinem Bundle ist, der Aufruf:

Code: Alles auswählen

Messages.class.getClassLoader()
gibt dir den ClassLoader für Messages, in diesem Fall, den Bundle ClassLoader. Der original Code ist korrekt, wenn die richtige(n) Datei(en) in deinem Bundle Jar ist(sind). Schau mal, ob du dein Bundle richtig verpackt hast.

Lucas
Arrière les Esquimaux ! Je rentre seul. Un matador rentre toujours seul ! Plus il est grand, plus il est seul. Je vous laisse à vos banquises, à vos igloos, à vos pingouins. ¡ Por favor Señora ! À quelle heure le train pour Madrid ?

Benutzeravatar
satabin
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 25. Feb 2010 15:32

Re: ResourceBundle.getBundle und OSGi

Beitrag von satabin »

Hi,

Ich habe das Problem gefunden. Eine Datei fehlt im ui Package, die die standard Sprache definiert.
Die Datei kann hier herunterladen werden, und ich aktualisiere dann das Paket auf der Webseite (in 3 bis 4 Stunden verfügbar).

Lucas
i18n-default.zip
(1.11 KiB) 45-mal heruntergeladen
Arrière les Esquimaux ! Je rentre seul. Un matador rentre toujours seul ! Plus il est grand, plus il est seul. Je vous laisse à vos banquises, à vos igloos, à vos pingouins. ¡ Por favor Señora ! À quelle heure le train pour Madrid ?

Xaero
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 173
Registriert: 8. Feb 2006 20:06

Re: ResourceBundle.getBundle und OSGi

Beitrag von Xaero »

Und wo ist die Datei?
Sehe keine, die ich herunterladen kann.

Benutzeravatar
satabin
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 25. Feb 2010 15:32

Re: ResourceBundle.getBundle und OSGi

Beitrag von satabin »

Xaero hat geschrieben:Und wo ist die Datei?
Sehe keine, die ich herunterladen kann.
Das Forum mag kein .properties, jetzt als ZIP verfügbar
Arrière les Esquimaux ! Je rentre seul. Un matador rentre toujours seul ! Plus il est grand, plus il est seul. Je vous laisse à vos banquises, à vos igloos, à vos pingouins. ¡ Por favor Señora ! À quelle heure le train pour Madrid ?

Xaero
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 173
Registriert: 8. Feb 2006 20:06

Re: ResourceBundle.getBundle und OSGi

Beitrag von Xaero »

Ich habe eine kleine Frage zu der Sprachänderung:
Muss sich die Sprache automatisch ändern im Flashcard-Bundle, wenn ich die Sprache umstelle oder nur, wenn ich das Flashcard-Bundle starte?

Benutzeravatar
satabin
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 25. Feb 2010 15:32

Re: ResourceBundle.getBundle und OSGi

Beitrag von satabin »

Momentan ist es so, dass die Sprache des Systems genommen wird, wenn sie bekannt ist, sonst ist die Sprache Englisch.
Um zu testen, ob die Sprache tatsächlich geändert wird, kann man die Java Anwendung mit der Option -Duser.language starten, oder sogar die Sprache des Systems ändern :). Man kann auch im Quellcode die Sprache ändern, mit der der ResourceBundle geladen wird (aber es ist unschön und nur zu testen)

Code: Alles auswählen

// Sprache des Systems
ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault(), ...);
// Französisch (siehe http://java.sun.com/javase/6/docs/api/java/util/Locale.html)
ResourceBundle.getBundle(BUNDLE_NAME, Locale.FRENCH, ...);
In der Lösung ist es uns wichtig, dass die Sprache dynamisch mit der Sprache des Systems (oder mittels einer Konfigurationsdatei) gesetzt wird, wenn verfügbar.
Arrière les Esquimaux ! Je rentre seul. Un matador rentre toujours seul ! Plus il est grand, plus il est seul. Je vous laisse à vos banquises, à vos igloos, à vos pingouins. ¡ Por favor Señora ! À quelle heure le train pour Madrid ?

Julius
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 237
Registriert: 5. Okt 2005 15:52

Re: ResourceBundle.getBundle und OSGi

Beitrag von Julius »

satabin hat geschrieben:Hallo,

Wenn deine Messages Klasse in deinem Bundle ist, der Aufruf:

Code: Alles auswählen

Messages.class.getClassLoader()
gibt dir den ClassLoader für Messages, in diesem Fall, den Bundle ClassLoader. Der original Code ist korrekt, wenn die richtige(n) Datei(en) in deinem Bundle Jar ist(sind). Schau mal, ob du dein Bundle richtig verpackt hast.

Lucas
Hallo Lucas,

danke für die Hilfe. Habe es nun testen können. Ich nutze das Eclipse Plugin für Knopflerfish. Beim Bundle Packaging hat dieses standardmäßig nur die verwendeten libs und die .classs-Dateien des Bundles in die Jar eingepackt. Das hat dazu geführt, dass neben den .properties-Dateien auch die .png-Dateien für die GUI nicht enthalten waren. Jetzt funktioniert dieser Teil schon einmal.

Antworten

Zurück zu „Archiv“