Internationalisierung von Javaprogrammen und Hilfesystemen

I-Doetzken

Mitglied
Hallo

1.)
Welche praxistauglichen Tools gibt es zur Internationalisierung von Java-Projekten?

2.)
Wie kann ich ein internationalisiertes Hilfesystem realisieren?

zu 1 ###############################################
Wenn das Programm in z.B. 13 Sprachen übersetzt ist, dann hat man 13 Properties-Dateien.
Käme ein neuer Text hinzu, müsste man ihn in allen Dateien hinzufügen!
Das ist natürlich die totale Katasstrophe.

Im Moment mache ich das so, dass ich eine Datei mit folgender Form habe:
Java:
Snippet-----------------------
no_null
de: Die Zahl muss größer als 0 sein!
en: The number has to be bigger than 0!
es: El número debe ser superiour a 0!
fr: Le nombre doit être supérieur à 0!
it: ITALIANO
pl: POLISH
pt: Aqui não há nenhum 0!
Snippet-----------------------
no_tab_press_enter
de: Benutze die Enter-Taste!
en: Press enter!
es: Utiliza la tecla enter!
fr: Utilise la touche entrée!
it: ITALIANO
pl: POLISH
pt: Use a tecla Enter!

Ein kleines selbstgemachtes Programm wertet diese Datei zeilenweise aus und erstellt die *properties-Dateien.
Das funktioniert ganz gut, stößt aber an seine Grenzen bei mehrzeiligen Texten.
Da kommt es zu unschönen Notwendigkeiten:
Java:
Snippet-----------------------
howto_show_denominators
de: Du kannst Dir die Teiler anzeigen lassen,<br> dann gibt es f&uuml;r diese Aufgabe aber keinen Punkt!<br>
en: You can display the divisors,<br> but then you will not receive any points!<br>
es: Puedes hacer que se muestren los denominadores,<br>pero así no hay puntos para este ejercicio!<br>
fr: Tu peux afficher les dénominateurs, <br> mais alors cet exercice ne rapporte aucun point<br>
it: ITALIANO
pl: POLISH
pt: Pode escolher que sejam exibidos os denominadores,<br>mas o exercício não somará pontos!<br>
Snippet-----------------------
file_exists_overwrite?
de: Die Datei existiert bereits!\nMöchtest du sie überschreiben?
en: This file exists! Overwrite? 
es: El archivo ya existe!\n¿Desea sobreescribirlo?
fr: Le fichier existe d'ej`a!\nVeux-tu l'écraser?
it: ITALIANO
pl: POLISH
pt: O arquivo já existe!\nDeseja substitui-lo?

Unschön weil ein Zeilenumbruch mal "\n" und mal "<br>" ist.
Unschön weil Inhalt und Formatierung nicht wirklich getrennt sind.


zu 2 ###############################################

Welche Tools gibt es, um ein internationalisiertes Hilfesystem zu schreiben.
Im Moment habe ich einfach alle Hilfeseiten in HTML geschrieben und versuche mit vielen selbstgebauten bash-scripten der Sache Herr zu werden und den Übersetzern einigermaßen bequeme Ausgangsdateien zu erstellen, in denen sie den bisherigen Text mit ihren Übersetzungen ersetzen. das ist aber der totale Krampf.

Ich könnte mir vorstellen, dass ein einfaches opensource offline cms, ohne datenbank die Lösung wäre .... mmmmhhhh.

Vielen Dank für alle Hinweise!!
 

BlackViruZ

Aktives Mitglied
Wo genau ist denn bitte die Katastrophe wenn du bei 13 Dateien jeweils eine neue Zeile einfügst, statt in einer Datei 13 neue Zeilen -- die du btw vorher noch erst "suchen" musst (sprich die blocks suchen musst)

verstehe dein Problem nicht.
Zumal sich das doch mit verschiedenen Dateien am besten verarbeiten lässt - du lädst nur die Datei von welcher du auch das lokale brauchst, und die Resource Bundles z.b. sind afaik auch alle auf mehrere Dateien optimiert.

#EDIT:

Und dadurch, dass es getrennte Dateien sind kann man es auch ganz leicht arbeitsteilig übersetzen lassen (von verschiedenen Übersetzern/Teams) ohne, dass anschließen noch ein mergen der Arbeitsergebnisse stattfinden muss.
 

musiKk

Top Contributor
1. Ist bei Java schon dabei.
2. Siehe oben. Es ist Usus, für jede Sprache eine eigene Datei zu haben. Im Bedarfsfall auch für jede Komponente. In großen Programmen können Tausende Strings zu übersetzen sein.
 

Empire Phoenix

Top Contributor
hm schön sauber wäre ja ne mini db mit tabellen für alles, wo dann für jede sprache ne spalte ist. und ne neue Zeile ist dann nen ener eintrag, mit enstprechendem not null kann man auch sciherstellen das nirgetwo was vergessen wird. Ist aber minimaler overkill^^.
 

I-Doetzken

Mitglied
Wo genau ist denn bitte die Katastrophe wenn du bei 13 Dateien jeweils eine neue Zeile einfügst, statt in einer Datei 13 neue Zeilen -- die du btw vorher noch erst "suchen" musst (sprich die blocks suchen musst)

Ich finde es schwieriger sicherzustellen, dass in allen *properties-Dateien dieselben Textplatzhalter sind, als in einer Datei.
Wenn ich im Java-Code einen neuen Textplatzhalter einfüge, füge ich folgendes dazu:
Java:
Snippet-----------------------
some_foo_text
de: DEUTSCH
en: ENGLISH
es: ESPANOL
fr: FRANCAIS
it: ITALIANO
pl: POLISH
pt: PORTUGUES

Ich habe also eine Datei, in der alle Textplatzhalter mit jeweils allen Sprachen sind.
Diese datei schicke ich, wenn sich etwas geändert hat an die Übersetzer.
Jeder Übersetzer bekommt also eine Kopie, fügt seine Übersetzungen ein und schickt mir die Datei zurück.
Mit einem kleinem Programm werden die jeweiligen Übersetzungen in der "Master-Datei" aktualisiert und dann werden die *properties-Dateien geschrieben.
Das heißt am Schluss habe ich auch viele einzelne Dateien.

Manchmal gehen die Dateien etwas hin und her und einige Übersetzte berichten, dass sie von den Übersetzungen der anderen profitieren.

1. Ist bei Java schon dabei.
Genau so mache ich es auch.

So wie ich es mache klappt das auch und es ist einigermaßen komfortabel, aber ich kann mir nicht vorstellen, dass es kein Tool gibt, was diese Aufgabe nicht viel besser erledigt, als meine homebrew-Lösung.


* Schön wäre eine GUI für die Übersetzer, so dass sie gar nicht in einer UTF-8 Datei ("Kann ich das nicht einfach mit WORD machen?") mit festgelegter Struktur schreiben müssen.
* Schön wäre die Möglichkeit die Strings und die Übersetzungen kommentieren und sogar diskutieren zu können.
...

Zu meiner zweiten Frage: Wie kann ich ein internationalisiertes Hilfesystem realisieren?
Kennt jemand ein FOSS-Offline-CMS das keine DB braucht ??

Vielen dank für alle Tipps.
 

BlackViruZ

Aktives Mitglied
Ich habe also eine Datei, in der alle Textplatzhalter mit jeweils allen Sprachen sind.
Diese datei schicke ich, wenn sich etwas geändert hat an die Übersetzer.
Jeder Übersetzer bekommt also eine Kopie, fügt seine Übersetzungen ein und schickt mir die Datei zurück.
Mit einem kleinem Programm werden die jeweiligen Übersetzungen in der "Master-Datei" aktualisiert und dann werden die *properties-Dateien geschrieben.
Das heißt am Schluss habe ich auch viele einzelne Dateien.
Und wie willst handelst du dass, wenn ein Übersetzer eine vorhandene Zeile ändert welche sich danach in den unterschiedlichen master-dateien unterscheidet?
Quasi der fall seines SVN Merges ? Ich mein nur - wenn du da schon so ein fancy Tool für schreibst..

Manchmal gehen die Dateien etwas hin und her und einige Übersetzte berichten, dass sie von den Übersetzungen der anderen profitieren.
Was spricht dagegen, dass über ein Network Storage zu lösen? Alle haben zugriff auf einen Ordner wo die verschiedenen dateien liegen, und in zwischenständen zieht ein entwickler die Änderungen ins SVN rüber. Oder die Übersetzer haben Tortoise SVN und greifen damit dann selbst drauf zu. Selbiges für andere Versionierungslösungen
Oder falls ihr keine Versionierung benutzt - zurück zum Netzlaufwerk ^^.



* Schön wäre eine GUI für die Übersetzer, so dass sie gar nicht in einer UTF-8 Datei ("Kann ich das nicht einfach mit WORD machen?") mit festgelegter Struktur schreiben müssen.
* Schön wäre die Möglichkeit die Strings und die Übersetzungen kommentieren und sogar diskutieren zu können.
zum ersten kann ich nur sagen, dass es ja wohl kein Problem sein dürfte ein kleines Tool zu schreiben, welches mittels SWING GUI Änderungen für die Übersetzer in den .properties Files vereinfachen.. (Damit könnte man dann beispielsweise auch sicherstellen, dass alle Properties Files die gleichen Attribute beinhalten)

Zum zweiten - klingt irgenwie nach nem.. Forum..

Zu meiner zweiten Frage: Wie kann ich ein internationalisiertes Hilfesystem realisieren?
Hilfesystem ist ein sehr weitläufiger Begriff, was verstehst Du darunter?
 

musiKk

Top Contributor
Ich finde es schwieriger sicherzustellen, dass in allen *properties-Dateien dieselben Textplatzhalter sind, als in einer Datei.

Dafür gibt es Tooling. Wenn ich mich recht erinnere kann Eclipse neben dem reinen Sammeln von zu übersetzenden Strings auch feststellen, ob die Keys in den Lokalisierungsdateien vollständig sind und diese auch aufräumen. Ist aber schon ne Weile her, dass ich damit was gemacht habe.
 

I-Doetzken

Mitglied
Hallo,

@ BlackViruZ: Ich bin von der Art und Weise, wie ich das im Moment mache, nicht überzeugt und such deswegen neue Möglichkeiten.

Es wundert mich ein bisschen, dass es für die Internaztionalisierung von Java-Projekten keine Tools gibt, denn das ist ja ein aufwendiger Prozess.
* Viele (nichtprogrammierende) Menschen sind eingebunden, die technischen Hürden sollten für sie möglichst niedrig sein, umfangreiche Installationen und Konfigurationen von notwendigen Programmen sollen auf ein Mindestmaß reduziert sein.
* Die Aussagen der Texte müssen von den Übersetzern erst mal begriffen werden, um dann gut übersetzt werden zu können. Dazu kann es sehr hilfreich oder sogar notwendig sein, die Textplatzhalter, die im Java-Code stehen, zu kommentieren.

Ich bin auf GNU-gettext gestoßen.
Das sieht sehr interessant aus, ich muss mal sehen, ob man das für Java-Projekte nutzen kann.

@ MusiKk: Danke für den Tipp, das klingt interessant, ich werde es mir mal ansehen.


Vielen Dank für alle bisherigen und weiteren Anregungen.
Wenn ich DIE Lösung finde, sage ich Bescheid.
 

Wildcard

Top Contributor
Es wundert mich ein bisschen, dass es für die Internaztionalisierung von Java-Projekten keine Tools gibt, denn das ist ja ein aufwendiger Prozess.
Was meinst du mit keine Tools? ???:L
Eclipse kann automatisch externalisieren und prüfen ob die externalisierten Daten konsistent sind (keine fehlenden, oder unnötigen keys). Für die Mehrsprachigkeit gibt es verschiedene Plugins, zum Beispiel den Resource Bundle Editor. Damit kann jeder DAU die original Properties in n Sprachen übersetzen, sieht welche keys in welcher Sprache fehlen und sieht die verschiedenen Übersetzungen untereinander.
Ich sehe jetzt nicht was dir da noch fehlt.
 

Ähnliche Java Themen

Neue Themen


Oben