Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (2. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Java ist auch eine Insel (2. Auflage)
gp Kapitel 10 Raum und Zeit
  gp 10.1 Greenwich Mean Time (GMT)
  gp 10.2 Wichtige Datum-Klassen im Überblick
  gp 10.3 Zeitzonen und Sprachen der Länder
    gp 10.3.1 Zeitzonen durch die Klasse TimeZone repräsentieren
  gp 10.4 Sprachen der Länder
    gp 10.4.1 Sprachen in Java über Locale-Objekte
  gp 10.5 Einfache Übersetzung durch ResourceBundle-Objekte
  gp 10.6 Die Klasse Date
    gp 10.6.1 Objekte erzeugen und Methoden nutzen
    gp 10.6.2 Zeitmessung und Profiling
  gp 10.7 Calendar und GregorianCalendar
    gp 10.7.1 Die abstrakte Klasse Calendar
    gp 10.7.2 Der gregorianische Kalender
  gp 10.8 Formatieren der Datumsangaben
    gp 10.8.1 Mit DateFormat und SimpleDateFormat formatieren
    gp 10.8.2 Parsen von Datumswerten
    gp 10.8.3 Parsen und Formatieren ab bestimmten Positionen


Galileo Computing

10.5 Einfache Übersetzung durch ResourceBundle-Objekte  toptop

Sollen Java-Programme sprachunabhängig gestaltet werden, müssen alle Zeichenketten einer Landessprache durch symbolische Namen, wie Variablen, ersetzt werden. Wenn das Programm später eine Zeichenkette nutzen will, greift es auf die Variable zu, und diese soll dann die entsprechende Übersetzung enthalten. Die Verbindung zwischen den symbolischen Namen und den landessprachlichen Texten erfolgt in Java mit Hilfe der Klasse ResourceBundle. Dazu speichert ein ResourceBundle alle programmrelevanten Texte und Informationen für ein spezielles Land. In einer Datei werden die Variablennamen als Schlüssel und die landesabhängigen Zeichenketten als Werte gehalten. Der Aufbau eines ResourceBundle erinnert uns dabei stark an eine Property-Datei. Wir wollen daher mit dem Aufbau dieser Property-Datei beginnen und definieren eine Variable Hello. Da wir die Sprachen Englisch und Deutsch unterstützen wollen, legen wir zwei Dateien an. Die Dateinamen haben dabei einen speziellen Aufbau. Sie setzen sich aus dem Namen des ResourceBundle, einem Unterstrich (_), einer Landeskennung und der Dateiendung properties zusammen. Wollen wir unser ResourceBundle »HelloWorld« nennen, dann ergeben sich für die Ländercodes England »en« und für Deutschland »de« die folgenden Dateien:

Listing 10.3   HelloWorld_en.properties

# HelloWorld_en.properties
Hello=Hello World.

Listing 10.4   HelloWorld_de.properties

# HelloWorld_de.properties
Hello=Hallo Welt.

Kommentare beginnen mit einer Raute.

Als Nächstes kann das Programm folgen, welches die ResourceBundle-Dateien verwendet. Wir benötigen dazu ein Objekt der Klasse ResourceBundle, welches wir über eine Fabrik-Methode ResourceBundle.getBundle(name) bekommen. name ist dabei der Name des ResourceBundle. Die Methode wählt hier automatisch aufgrund der eingestellten Landessprache die passende Datei. Mit einer Referenz auf das aktuelle ResourceBundle-Objekt können wir mit Hilfe der Methode getString() auf die landesspezifische Meldung über einem Schlüssel zugreifen.

Beispiel   Bezüglich der beiden obigen Resource-Dateien mit der Variablen Hello setzt sich das Programm einfach zusammen.

Listing 10.5   InternationalHelloWorld.java

import java.util.*;

//java -Duser.language=en InternationalHelloWorld
//Hello World.

public class InternationalHelloWorld
{
  public static void main( String args[] )
  {
    String baseName = "HelloWorld";

    try
    {
      ResourceBundle bundle = ResourceBundle.getBundle( baseName );
      System.out.println( bundle.getString("Hello") );
    }
    catch ( MissingResourceException e ) {
      System.err.println( e );
    }
  }
}

Die Dateinamen für die jeweiligen ResourceBundle-Objekte können sehr variabel zusammengesetzt werden. Die nachfolgenden Bildungsgesetze verwendet die Java-Bibliothek:

bundleName_localeLanguage_localeCountry_localeVariant
bundleName_localeLanguage_localeCountry
bundleName_localeLanguage
bundleName_defaultLanguage_defaultCountry_defaultVariant
bundleName_defaultLanguage_defaultCountry
bundleName_defaultLanguage
bundleName

Die Suchreihenfolge ist dabei wie angegeben. Es können auch mehrere Resource-Dateien angegeben werden, die dann der Reihe nach durchlaufen werden, sodass dadurch Werte überschrieben werden können.

Abbildung





Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de