Resource Bundle - Pflege der Property Dateien

RoCMe

Erfahrenes Mitglied
Hallo!

Ich arbeite zur Zeit an einer Applikation, die an diverse internationale Kunden ausgeliefert werden soll. Die Oberfläche ist mittels Resourcse Bundles komplett übersetzbar. Die Idee ist gut, aber ich bin mit der Umsetzung noch nicht ganz zufrieden.

Wir haben ein "standard" Projekt, von dem wir mit Overlaying kundenspezifische Projekte "ableiten" können. Im Std-Projekt sind zur Zeit vier Sprachen vorhanden - Deutsch, Englisch, Französisch und Italienisch. Hinzu kommen demnächst wahrscheinlich Dänisch und Schwedisch, eventuell in naher Zukunft auch noch Spanisch. Das macht dann in Summe schon 7 Properties Dateien, die gepflegt werden müssen.
Außerdem kommen bei kundenspezifischen Wording-Änderungswünschen die entsprechenden Dateien noch mal ins Kunden-Projekt, um die aus dem std-Projekt "geerbten" Übersetzungen zu überschreiben. Man denke z.B. an Kunden aus der Schweiz, die teilweise 4 Oberflächensprachen fordern - damit erhöht sich die Anzahl der zu pflegenden Dateien dann schneller, als uns lieb ist...

Nun sind die ersten Kunden mit ihren Applikationen in Produktion gegangen, sind sehr zufrieden und haben gleich reihenweise Ideen für Erweiterungen. Die meisten dieser Ideen verkaufen wir natürlich gerne auch den anderen Kunden - und einmal im Std-Projekt implementiert und mit einem "Schalter" versehen, lässt sich das auch sehr einfach realisieren.
Hinderlich sind nur die Übersetzungen, die jetzt ständig manuell "gemerged" werden müssen.

Zur Zeit habe ich ein Skript geschrieben, das 2 Property Dateien vergleicht: Kommentare, Leerzeilen und die Bezeichner werden aus der ersten Datei übernommen, die Übersetzungen werden jedoch aus der zweiten Datei gezogen, wenn sie dort vorhanden sind.
Damit ist zunächst nur noch die Pflege einer "Referenzdatei" notwendig. Einmal mit jeder anderen Datei verglichen, sind auch in diesen alle neuen Properties vorhanden - in der Referenzsprache. Aus der Referenzdatei entfernte, weil nicht mehr benötigte Properties werden auch entfernt. Als Erweiterung könnte ich jetzt noch eine automatisierte Ausgabe einbauen, die die neu gefundenen Properties ausgibt, um sie dann den Übersetzern zu nennen.

Aber geht das nicht auch einfacher? Wie löst ihr das? Gibt es vielleicht die Möglicheit, das Resource Bundle hierarchisch zu durchsuchen? Also, Wenn in dieser Sprache nicht vorhanden, dann gucke doch mal bei Englisch?
Und wie macht ihr das mit den kundenspezifischen Änderungen? Auch da schwebt mir irgendwas hierarchisches vor: Am liebsten möchte ich einfach ein Property Datei für kundenspezifisches Wording, und was dort nicht gefunden wird, wird im std Property File gesucht. Dazu habe ich aber noch nichts gefunden :-(

Für Anregungen bin ich dankbar :-)

Gruß,

RoCMe
 
Würde mich auch ziemlich interessieren.

Um welches GUI-Toolkit handelt es sich? SWT oder Swing? Ich vermute, dass es für SWT dafür schon eine fertige Lösung gibt...

Edit: bei SWT/Eclipse RCP gibt es unter anderem Babel, http://www.eclipse.org/babel/ , das ist aber noch in Entwicklung (nicht fertig).
 
Hallo,


Java ResourceBundles bieten schon ein mehrstufiges Konzept an bzw. arbeiten standardmäßig hierarchisch.
1) Default
2) Language
3) Country
4) Variant

Damit kannst du beispielsweise immer gleiche Texte / Format-Patterns etc. in default definieren
und die unterschiede dann jeweils in einer weiteren Stufe überschreiben.

Beispiel:
Java:
package de.tutorials;

import java.util.Locale;
import java.util.ResourceBundle;

public class HierarchicalResourceBundleExample {
  public static void main(String[] args) {
    ResourceBundle bundle = ResourceBundle.getBundle("de.tutorials.Resources",new Locale("de","DE","customer"));
    for(String s : "a,b,c,d".split(",")){
      System.out.println(s + " " +  bundle.getString(s));  
    }
  }
}

de/tutorials/Resources.properties:
Code:
a=a_standard
b=b_standard
c=c_standard
d=d_standard

de/tutorials/Resources_de.properties:
Code:
b=b_de
c=c_de

de/tutorials/Resources_de_DE.properties:
Code:
b=b_de_DE
d=d_de_DE

de/tutorials/Resources_de_DE_customer.properties:
Code:
d=d_de_DE_customer

Ausgabe:
Code:
a a_standard
b b_de_DE
c c_de
d d_de_DE_customer



Gruß Tom
 
:-)

Vielen Dank Tom, manchmal ist die Lösung so simpel... Mir war bewusst, dass ich für verschiedene Länder und Sprachen eigene Resource Bundles definieren kann, die dann hierarchisch durchsucht werden - aber von der variant-Einstellung im Locale hatte ich bis jetzt nie etwas gehört :)
Damit lässt sich alles genau so lösen, wie ich mir das vorgestellt habe!

@ genodeftest
Es handelt sich hier um eine Web-Applikation mit JSF. Aber Toms Erläuterungen sollten sich mit so ziemlich jeder GUI verstehen :)
 
Die Lösung von Tomas kannte ich auch. Allerdings habe ich nicht so einfach gedacht. Ich habe dich so verstanden, dass du das Problem hast, dass die Sprachdateien bei Änderung des Quellcodes jeweils für jede einzelne Sprache überprüft werden mössen...
 
Zurück