Einführung in das Multilanguage System

Dieser Dialog kann für jeden von BaseDialog, oder BaseDialogDialog abgeleiteten Dialog mit Hilfe der F12 Taste geöffnet werden.

Auf der Linken Seite werden nun die im Dialog enthaltenen Elemente angezeigt, die automatisch gefunden wurden. Auf der rechten Seite können nun die Übersetzungen eingepflegt werden.

Die Übersetztungen werden nun in einer Datei (APPHOME/translations/at.redeye.FrameWork.base.translation.TranslationDialog_de.properties) gespeichert. Der Dateiname ist der Name der Klasse, sowie das entsprechende Sprachkürzel.

Um die Übersetzung in die Jar Datei zu übernehmen, muß die Übersetzungsdatei in das selbe Verzeichnis kopiert werden, in dem sich auch die Klasse befindet. Alternativ kann die Datei auch im Verzeichnis translations, oder resources/translations abgelegt werden.

Die Datei muß allerdings umbenannt werden und zwar genau so, wie die Klasse heißt + die entsprechende Sprachendung.

Verwendung im Programm

Die Implemtierungssprache muß nicht im gesammten Programm konsitent sein. Die Implementierungssprache muß nur für den aktuellen Dialog konsistent sein.

Die Implementierungssprache wird im Konstruktor mit Hilfe der Funktion

    setBaseLanguage(String language);
festgelegt. Wird die implementierungssprache im Konstruktor nicht gesetzt, so wird der Wert der Root klasse übernommen. (Siehe auch: Root.getBaseLanguage())

Wurde die globale Implementierungssprache in der Root Klasse nicht festgelegt, so wird automatisch englisch (en) verwendet.

Für die Element, die automatisch vom Übersetzungsdialog gefunden werden, muß der Programmierer gar nichts weiter tun.

Funktionieren tut, das folgendermaßem: die Funktion doLayout() ist im BaseDialog Überladen und bevor doLayout() von der Parentklasse aufgerufen wird, wird in dem Dialog nach allen Label, Buttons, etc... gesucht und der Text, wenn eine Übersetztung zur verfügung steht ausgetauscht.
Somit können nur Element automatisch gefunden und übersetzt werden, die im Konstruktor erzeugt wurden und an die Maske angebunden sind.

Werden allerdings Texte dynamisch erzeugt, oder geändert, so muß die Funktion MlM() verwendet werden. zb:

    jLabelFoo.setText( MlM( "Speichern" ));

Ohne Basisdialog

Soll eine Klasse übersetzt werden, die nicht vom BaseDialog abgeleitet worden ist, so muß vorher in der Klasse bei allen Texten Root.MlM() verwendet werden. Um die Übersetzungstexte für die Klasse zu finden, kann mit
    Root.loadMlM4Class( Object obj, String impl_locale )
eine Überstzungsdatei geladen werden.
impl_locale ist dabei die Implementierungssprache.

Globale übersetzungsdatei

Findet BaseDialog.MlM() keine Überestzung, so wird Root.MlM() aufgerufen. Und Root sucht seinen Informationen in der globalen Überstzungsdatei, die entweder APPHOME/translations/trans_en.properties heißt, oder an einem Resourcepfad zu finden ist, der mit
    Root.setLanguageTranslationResourcePath(String path)
festgelegt wurde. Für diesen Pfad gibt es keinen standard Wert. Über diese globale Übersetzungsdatei ließe sich nur eine einige Übersetzungsdatei pflegen.

Bonecollector

Alle Nachrichten, die nicht übersetzt werden konnten, werden automatisch beim Beenden der Applikation in die Datei APPHOME/translations/trans_en_US.missing.properties geschrieben. Je nach ausgewählter Sprache natürlich. Dies sollte das suchen und finden fehlender Texte erleichtern.

Hilfetexte

Auch Hilfetexte können lokalisiert werden. Dazu muß nur die HTML Datei nach dem üblichen Schema angepasst werden.