Artikelformat

I18n Property-Dateien für GWT automatisch erzeugen

Internationalisierung ist bei Webanwendungen ein wichtiges Thema und so gibt es auch viele Ansätze die Mehrsprachigkeit in eine Anwendung zu bekommen. GWT nutzt einen Ansatz der zum Teil auf speziellen Interfaces beruht. Da man diesen Programmcode nicht an ein Übersetzerbüro geben kann, muss man eine übersichtlichere Struktur generieren lassen.

Für GWT-Entwickler ist es ein alter Hut, aber alle anderen werden es sicher interessant finden, wie GWT mit i18n umgeht:
Hierfür werden verschiedene Interfaces angeboten, von denen man dann sein spezielles INterface ableiten muss. Besonders häufig wird man auf Constants und Messages treffen. Constants stellt nicht parametrisierbare Texte bereit, Messages hingegen schon. Zum Beispiel „Montag“ im Gegensatz zu „Hallo {0}“. Wobei „{0}“ durch einen Eingabewert ersetzt wird.
Die eigenen Interfaces bieten dann Methoden an, die man in seinem Code verwendet und die dann durch den jeweiligen Text ersetzt werden. Im Interface wird üblicherweise ein Defaultwert definiert und man kann die java-üblichen properties-Dateien neben das Interface legen, sodass eine Sprache je properties-Datei definiert ist. Beim endgültigen Kompilieren wird je Sprache und Browser-Kombination eine JavaScript-Datei erzeugt. So hat jeder Benutzer nur den Code, den er in diesem Moment benötigt.

Ein Interface sieht bspw so aus:

import com.google.gwt.i18n.client.Constants;

public interface I18nMainPageConstants extends Constants {

    @DefaultStringValue("Alle")
    public String all();

    @DefaultStringValue("Einstellungen")
    public String settings();

}

Nun ist es aber so, dass man als Entwickler beim programmieren der Anwendung Konstanten über den Code hinzufügt. D.h. man ruft eine nicht existente Methode eines i18n-Interfaces auf und wird (hoffentlich) von der IDE darauf hingewiesen, dass die Methode nicht existiert. Diese kann man sich dann automatisch anlegen lassen und muss nur noch den Defaultwert definieren. Also wächst das Interface. Wenn man nun weitere Sprachen nutzen möchte, benötigt man eine properties-Datei. Zum einen, weil man neben der Defaultsprache auch andere anbieten möchte und weil diese Key-Value-Dateien gut an ein Übersetzungsbüro gegeben werden können.

Die Generierung kann man händig durchführen, oder man nutzt die Boardmittel von GWT. Es wird eine Annotation bereitgestellt, die man an das Interface schreibt und somit angibt, das eine properties-Datei erzeugt werden soll. Somit sieht das Interface so aus:

import com.google.gwt.i18n.client.Constants;
import com.google.gwt.i18n.client.LocalizableResource.Generate;

@Generate(format = "com.google.gwt.i18n.server.PropertyCatalogFactory")
public interface I18nMainPageConstants extends Constants {

    @DefaultStringValue("Alle")
    public String all();

    @DefaultStringValue("Einstellungen")
    public String settings();

}

Tipp:
Wenn man beim Aufruf des gwtc noch die Option -extra angibt mit einem entsprechenden Verzeichnis, bspw „extras“, dann werden in dieses Verzeichnis die properties Dateien generiert. Dies hilft insbesondere dann, wenn man viele solcher Dateien nutzt.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.