Mehrsprachigkeit mit ResourceBundle

UnkiDunki

Bekanntes Mitglied
Hi,

wie der Titel schon sagt, geht es mir darum, wie man "weitestgehend elegant" ein Programm mehrsprachig auslegen kann.
Dazu habe ich auch hier im Forum etwas passendes gefunden, nämlich mit ResourceBundle:
Java:
 ResourceBundle textbundle = ResourceBundle.getBundle("languages.German", locale);

languages.German wäre hier von SimpleTextResource abgeleitet, so dass ich mit
Java:
data.put("Button.cancel", "Abbrechen")
arbeite...

Jetzt ist die Frage, ob da meine Umsetzung wirklich gelungen ist (beim Programmstart setze ich die Variable textBundle mit dem Inhalt der Sprachdatei (statisch) und greife dann in jeder Klasse einfach mit
Java:
Language.textBundle.getString("Button.cancel")
darauf zu) und ob das Arbeiten mit einer einzigen Datei wirklich Sinn macht, oder ob ich das ganze irgendwie klassenspezifisch aufteilen sollte...

Ist das mit der statischen textBundle-Variable so ne gute Idee, oder wie kann man das ganze vielleicht noch verbessern? Vielleicht einen ganz anderen Weg gehen?

Danke im Voraus :)
 
Zuletzt bearbeitet:

The_S

Top Contributor
Inhalte von RessourceBundles werden eigentlich immer in Dateien ausgelagert und nicht im Programm selbst initialisiert. Zumindest hab ich es noch nirgends anders gesehen.
 

Landei

Top Contributor
Inhalte von RessourceBundles werden eigentlich immer in Dateien ausgelagert und nicht im Programm selbst initialisiert. Zumindest hab ich es noch nirgends anders gesehen.

Na ja, in unserer Firmenanwendung nicht, aber ich finde trotzdem, dass eine externe Quelle (Datei oder DB) die bessere Lösung ist.


@Fredowner: Eclipse oder NetBeans nehmen dir die Arbeit ab. Z.B. gibt es ein Werkzeug, das einem dabei hilft, eine Anwendung nachträglich zu "internationalisieren". Ich denke, so wie es dort gemacht wird, ist es "Standard", und ohne gute Gründe sollte man von diesem Stil nicht abweichen.
 
Zuletzt bearbeitet:

UnkiDunki

Bekanntes Mitglied
Hi,

danke für euer Feedback!

@The_S: Selbst in der API ResourceBundle (Java 2 Platform SE v1.4.2), wie ich gerade gesehen habe, wird ein meinem Anwendungsfall ähnlicher bzw. identischer solcher beschrieben.
Wie auch "Landei" meintest du "besser auslagern", aber wieso? Wo ist da der Vorteil? Bzgl. Schnelligkeit kann ich mir das z.B. nicht vorstellen, aber das muss nichts heißen...

@Landei: Von einem "Internationalisierungswerkzeug" (schweres Wort) habe ich noch nichts gehört. Verwende Eclipse und werde mich mal entsprechend umsehen. Danke für den Hinweis!
 
Zuletzt bearbeitet:

The_S

Top Contributor
@The_S: Selbst in der API ResourceBundle (Java 2 Platform SE v1.4.2), wie ich gerade gesehen habe, wird ein meinem Anwendungsfall ähnlicher bzw. identischer solcher beschrieben.
Wie auch "Landei" meintest du "besser auslagern", aber wieso? Wo ist da der Vorteil? Bzgl. Schnelligkeit kann ich mir das z.B. nicht vorstellen, aber das muss nichts heißen...

- Die Vertextung kann nachträglich einfach verändert werden, ohne das Programm neu compilieren zu müssen.

- Eine Textdatei mit

key1=value1
key2=value2
key3=value3

ist imho deutlich übersichtlicher als

Java:
data.put("key1", "value1");
data.put("key2", "value2");
data.put("key3", "value3");

- Du kannst die Ressourcen auch leicht und übersichtlich über mehrere Dateien verteilen

- Du hast die Vertextung nicht fest eincodiert im Quelltext

- Wenn es auf Speicherplatz ankommt und die viele Texte hast (bspw. bei Java ME Anwendungen), können Texte in einer Textdatei besser gezippt werden, als wie in compiliertem Code.

- ...
 

UnkiDunki

Bekanntes Mitglied
Hi,

ok, danke. Das sind ein paar sehr überzeugende Argumente und ich denke, dass ich das in Textdatei(en) auslagern werde.
Ich habe jetzt allerdings noch zwei Fragen:

1.) Womit realisiere ich das? Wirklich mit RessourceBundle oder vielleicht doch mit Properties. Damit ist eine Internationalisierung ja auch möglich und wie ich gesehen habe, gibt es da die Möglichkeit mit Platzhaltern zu arbeiten, die man während der Laufzeit setzen kann. Das ist ja sehr praktisch...

2.) Wenn ich mich für eine dieser Möglichkeiten entschieden habe, bleibt die Frage des "Wie", wobei ich mir nicht sicher bin, ob sich das mit der Wahl von Properties dann nicht von alleine regelt?!? Jedenfalls frage ich mich, ob man in jeder benötigten Klasse die Sprachdatei neu einliest oder irgendwie ein mal zu Programmbeginn in einer statischen Klasse, um darauf dann von überall zugreifen zu können. So hatte ich es mit ResourceBundle realisiert.

Danke schon mal :)
 

Landei

Top Contributor
ResourceBundles sind dafür gemacht worden, Properties nicht. Und wie gesagt: Jede moderne IDE sollte dich bei der Internationalisierung unterstützen.
 

Meru

Bekanntes Mitglied
Mit Eclipse kann man mit Rechtsklick auf ein Package oder eine Java-Datei gehen, dann <Source (alternativ ALT+SHIFT+S)>, dann <Externalize Strings>. Damit legst du dann ein entsprechendes File über den Wizard an.


Anschließend kannst du mit dem wunderbaren PlugIn <ResourceBundleEditor_v0.7.7.zip> diese Datei öffnen und dann mehrere Sprachen hinzufügen. Ist eigentlich recht simpel gehalten und sehr übersichtlich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L OOP Wohin mit dem ResourceBundle für Mehrsprachigkeit? Allgemeine Java-Themen 1
D Implementierung einer Mehrsprachigkeit, wichtig ? Allgemeine Java-Themen 5
D Internationalisierbarkeit / Mehrsprachigkeit Allgemeine Java-Themen 6
W Saubere Lösung für das Auslesen einer Html Seite (Mehrsprachigkeit) Allgemeine Java-Themen 5
A Mehrsprachigkeit eines Programmes Allgemeine Java-Themen 13
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
S URLClassLoader findet ResourceBundle nicht Allgemeine Java-Themen 0
H ResourceBundle während Laufzeit bearbeiten Allgemeine Java-Themen 3
E ResourceBundle.getBundle() Problem Allgemeine Java-Themen 6
A Classpath ResourceBundle Problem bzgl. Pfade bzw. Pfade (auch in Eclipse) generell? Allgemeine Java-Themen 7
firefexx ResourceBundle laden Allgemeine Java-Themen 2
R ResourceBundle in Servlets verwenden Allgemeine Java-Themen 13
S ResourceBundle: Locale Datei in Jar finden Allgemeine Java-Themen 3
C Reload ResourceBundle Allgemeine Java-Themen 6
S Resourcebundle - mehrzeiligen Text erlauben Allgemeine Java-Themen 3
R ResourceBundle-Verständnisproblem Allgemeine Java-Themen 3
P Mehrsprachig programmieren ResourceBundle Allgemeine Java-Themen 6
A ResourceBundle ohne LOCALE funkt nicht. Allgemeine Java-Themen 4
G Tomcat ResourceBundle Allgemeine Java-Themen 7
L Alle Keys eines ResourceBundle Allgemeine Java-Themen 3
T ResourceBundle aus .jar auslesen > MissingResourceExcepti Allgemeine Java-Themen 4
S ResourceBundle findet Resource nicht Allgemeine Java-Themen 4
J ResourceBundle / properties-datei während der Laufzeit verän Allgemeine Java-Themen 6

Ähnliche Java Themen


Oben