Lokalisierung API

Ab der Wrapper Version 3.5.0, wurde die Programmcodebasis internationalisiert und folglich fähig, lokalisiert ausgeführt zu werden. Die Internationalisierungen und die Lokalisierungsmethode des Wrappers können auch genutzt werden, um Ihre Java-Anwendungen mit relativem geringen Codierungsaufwand zu lokalisieren.

Die grundlegenden Schritte für die Implementierung einer Wrapper-basierten Lokalisierung sind:

Sie können Ihre Anwendung auf jede Sprache, die Ihre Distribution unterstützt, lokalisieren und das mit jedem Betriebsystem. Japanisch, Spanisch, Deutsch, Französich, Russich, Chinesisch, Koreanisch, Italienisch, Portugiesisch, Niederländisch, Dänisch, Ungarisch, Hindi, Griechisch, Arabisch, Rumänisch, Ukrainisch, Türkisch, Malaiisch. (Wenn sie eine Sprache vermissen, die Sie gerne haben möchten, können Sie uns gerne frei kontaktieren, und wir werden die Sprache im nächsten Release hinzufügen.)

1. Hinzufügen der WrapperResources-Instanz

Zuallererst muß eine Java-Anwendung, die die Lokalisierungsmethoden des Wrappers benutzt, die WrapperResources-Instanz hinzufügen. Es gibt verschiedene Wege, dies zu tun. Der am meisten empfohlene Weg ist es, eine statische Variable, die die WrapperResources-Instanz in einer einheitlichen Klasse Ihres Projekts enthält, zu platzieren und eine statische "getter"-Methode zu erstellen. Auf diese Art können die Klassen Ihres Projekts auf die WrapperResource zugreifen und Nachrichten lokalisieren. In der getter-Methode können Sie die WrapperResource-Klasse durch Aufruf der WrapperManager.loadWrapperResources(java.lang.String, java.lang.String) erstellen.

static WrapperResource instance & getter method
private static WrapperResources m_res;

public static WrapperResources getRes()
{
    if ( m_res == null )
    {
            // Synchronisieren und dann erneuter Check, um zu vermeiden, dass diese Methode endlos synchronisiert.
            synchronized( Unique.class )
            {
                if ( m_res == null )
                {
                    m_res = WrapperManager.loadWrapperResources( "myapp",
                        WrapperSystemPropertyUtil.getStringProperty( "wrapper.lang.folder", "../lang" ) );
                }
            }
    }
    return m_res;
}

Der erste Parameter der WrapperManager.loadWrapperResources() ist die Domäne, z.B. der Name, auf den der Wrapper versuchen wird, die Ressourcendatei zu laden. Z.B. wenn der Wrapper versucht, über die obige getter myapp_XX.mo (XX ist die Sprachenabkürzung) von dem Speicherort, der in der wrapper.lang.folder-Eigenschaft spezifiziert ist, zu laden. Wenn diese Eigenschaft nicht festgelegt ist, wird versucht, von dem "../lang"-Verzeichnis zu laden.

2. Markieren Sie die Nachrichten für die Lokalisierung

Das Markieren aller Nachrichten, die Sie lokalisieren möchten, ist sehr wahrscheinlich der am meisten Zeit beanspruchende Teil in der Inbetriebnahme der Lokalisierung. Sie müssen durch das Projekt gehen und Ihre Nachrichten mit der getString()-Methode einhüllen.

plain-getString-Beispiel
System.out.println( Unique.getRes().getString( "A test message." ) );

Wenn Sie Variablen mit in Ihre Ausgabe einfliessen lassen müssen, nutzen Sie bitte die getString(java.lang.String, java.lang.Object[]) Methode. Alle Variablen werden in ein Objekt-Array abgelegt. Der Einfachheit halber stellt die WrapperResources auch ein paar Wrapper-Methoden für bis zu 5 Objekte zur Verfügung.

getString-Beispiel mit 2 Variablen
int number = 2;
String msg = "test";
System.out.println( Unique.getRes().getString( "A {0} message with {1} variables.", msg, number ) );

Der erste Parameter der getString()-Methode kann auch verschiedene Formate definieren. Für mehr Informationen dbzgl. sehen Sie bitte in die "java.text.MessageFormat documentation"-Dokumentation.

NOTE

Bitte beachten Sie, dass die Java-Versionen unter 1.6 nicht in der Lage sind, grundlegende Datentypen (int, boolean, float, etc.) Objekten zuzuteilen. In diesem Fall ziehen Sie es bitte in Betracht, die entsprechende Wrapper-Klasse(java.lang.Integer, java.lang.Boolean, java.lang.Float, etc.) zu nutzen.

3. Erstellen und Vorbereiten von mo-Dateien

Das Layout des Lokalisierungsprozesses des Wrappers ist ähnlich zu GNU gettext. Deshalb ist es der einfachste Weg, die Nachricht-Ressourcenvorlage mit xgettext zu erstellen.

Nutzen Sie bitte xgettext, um eine Nachricht-Ressourcenvorlage zu erstellen :
xgettext -d myapp -o ./lang/myapp.pot [project source files]

Dies erstellt eine pot-Datei. Bitte beachten Sie, dass für Java-Dateien xgettext nach dem Schlüsselwort "getString("..")" sucht. Wenn Sie ein anderes Schlüsselwort hinzufügen möchten, fügen Sie dies bitte mit dem Parameter "-k [Schlüsselwort]" hinzu. Die Ressoucendateien jeder Sprache basieren auf dieser Vorlage. Um eine Ressourcendatei für eine bestimmte Sprache zu erstellen, führen Sie bitte Folgendes aus:

Nutzen Sie bitte xgettext, um eine Nachrichtenressource zu erstellen:
msginit --locale=ja --input=./lang/myapp.pot --output=./lang/myapp_ja.po

Dies wandelt die Datei in eine editierbare Po-Datei um. Sie oder Ihr Übersetzer können beginnen, diese Po-Datei zu übersetzen. Sie/er kann entweder einen Klartext-Editor oder einen Editor (e.g. "poedit", oder "Gtranslator", etc.) für po-Dateien benutzen.

Nachdem die Übersetzung beendet wurde, kompilieren sie bitte die Po-Datei (durch den Po-Editor oder msgfmt), was die Umwandlung in eine mo-Programmdatei durchführt. Wenn nicht bereits geschehen, platzieren Sie die mo-Datei zu den anderen mo-Dateien des Wrappers. Ihre Anwendung wurde lokalisiert.

Das Setup für die Lokalisierung Ihrer Anwendung wurde beendet! Für Informationen bezüglich, wie Ihre Anwendung auszuführen ist, sehen Sie bitte in die Eigenschaften von wrapper.lang.