Internationalisierung (I18N)

Bearbeitung über die Eclipse-IDE

Die Sprachdateien werden jetzt über den OSGi-Standardmechanismus geladen und nicht mehr über die alten messages.po* – Dateien. Dazu gibt es im Package com.sebulli.fakturama.rcp das Verzeichnis OSGI-INF/l10n. Hier stehen sämtliche Sprachdateien:

Die Bearbeitung dieser Dateien erfolgt ausschließlich(!) über die Datei bundle.properties. Klickt man diese an, öffnet sich der ResourceBundle-Editor:

Dieser Editor hat den Vorteil, daß man alle Sprachen auf einen Blick hat und bei einer Änderung (Anlegen / Ändern / Löschen eines Schlüssels) gleich sämtliche bundle-Dateien bearbeitet werden. Außerdem zeigt dieser Editor auch kyrillische und andere Zeichen an.

Die Schlüssel sind hierarchisch aufgebaut, wobei die Schachtelungstiefe theoretisch egal ist, aus Gründen der Übersichtlichkeit aber fünf Ebenen nicht überschreiten sollte.

Anlegen eines neuen Schlüssels

Ein neuer Schlüssel wird angelegt, indem man im ResourceBundle-Editor einen entsprechenden Eintrag anlegt.

Anschließend muß in der Klasse com.sebulli.fakturama.i18n.Messages (Bundle com.sebulli.fakturama.common) der entsprechende Eintrag auch bekannt gemacht werden. Dazu nimmt man den kompletten Eintrag (z. B. main.menu.file.exit.question) und wandelt ihn in camelcase-Schreibweise um:

public String mainMenuFileExitQuestion;

Verwendung eines Schlüssels

Der Zugriff im Programmcode erfolgt dann direkt über die Messages-Klasse:

// inject messages
     
@Inject
@Translation
protected Messages msg;
 
// ... some code ...
System.out.println("Hello " + msg.mainMenuFileExitQuestion);

 

Im Application-Model erfolgt der Zugriff über %schluessel:

Bearbeitung mit i18nEdit

Möchte man die Sprachdateien außerhalb der Eclipse-IDE bearbeiten, ist das auch möglich (sinnvoll beispielsweise bei reinen Übersetzern, die sich nicht mit den Tücken der IDE auseinandersetzen möchten). Es gibt dazu das Programm i18nedit. Dies ist ein älteres Java-Programm, das für unsere Zwecke aber völlig ausreichend ist.

(to be continued…)