Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Generics, innere Klassen
10 Die Klassenbibliothek
11 Threads und nebenläufige Programmierung
12 Datenstrukturen und Algorithmen
13 Raum und Zeit
14 Dateien und Datenströme
15 Die eXtensible Markup Language (XML)
16 Grafische Oberflächen mit Swing
17 Grafikprogrammierung
18 Netzwerkprogrammierung
19 Verteilte Programmierung mit RMI und Web–Services
20 JavaServer Pages und Servlets
21 Applets
22 Midlets und die Java ME
23 Datenbankmanagement mit JDBC
24 Reflection und Annotationen
25 Logging und Monitoring
26 Sicherheitskonzepte
27 Java Native Interface (JNI)
28 Dienstprogramme für die Java-Umgebung
Stichwort

Download:
- ZIP, ca. 14,1 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java ist auch eine Insel (8. Auflage) von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel (8. Auflage)

Java ist auch eine Insel (8. Aufl.)
8., aktual. Auflage, geb., mit DVD
1.475 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1371-4
Pfeil 13 Raum und Zeit
Pfeil 13.1 Weltzeit
Pfeil 13.2 Wichtige Datum-Klassen im Überblick
Pfeil 13.3 Sprachen der Länder
Pfeil 13.3.1 Sprachen und Regionen über Locale-Objekte
Pfeil 13.4 Internationalisierung und Lokalisierung
Pfeil 13.4.1 ResourceBundle-Objekte und Ressource-Dateien
Pfeil 13.4.2 Ressource-Dateien zur Lokalisierung
Pfeil 13.4.3 Die Klasse ResourceBundle
Pfeil 13.4.4 Ladestrategie für ResourceBundle-Objekte
Pfeil 13.5 Die Klasse Date
Pfeil 13.5.1 Objekte erzeugen und Methoden nutzen
Pfeil 13.5.2 Date-Objekte nicht immutable
Pfeil 13.6 Calendar und GregorianCalendar
Pfeil 13.6.1 Die abstrakte Klasse Calendar
Pfeil 13.6.2 Der gregorianische Kalender
Pfeil 13.6.3 Ostertage
Pfeil 13.6.4 Abfragen und Setzen von Datumselementen
Pfeil 13.7 Formatieren und Parsen von Datumsangaben
Pfeil 13.7.1 Ausgaben mit printf()
Pfeil 13.7.2 Mit DateFormat und SimpleDateFormat formatieren
Pfeil 13.7.3 Parsen von Datumswerten
Pfeil 13.8 Zum Weiterlesen


Galileo Computing - Zum Seitenanfang

13.4 Internationalisierung und Lokalisierung Zur nächsten ÜberschriftZur vorigen Überschrift

Soll ein Programm in jeder Kultur und jedem Sprachraum optimal laufen, ist auf eine ganze Reihe von Dingen zu achten:

  • Texte der Beschriftungen
  • Konventionen in Bezug auf Datum, Dezimalzahlen, Währungen, Telefonnummern
  • Ausrichtungen und Schreibrichtung
  • Grafiken, Farben
  • Töne, Musiken

In der Softwareentwicklung gibt es zwei Begriffe, die sich um sprachabhängige Programme drehen: Internationalisierung und Lokalisierung.

  • Internationalisierung. Die Internationalisierung eines Programms bedeutet, dass es so entwickelt und vorbereitet wurde, dass es unter beliebig vielen Sprachen arbeitet.
  • Lokalisierung. Die Lokalisierung ist der Prozess des Anpassens auf eine bestimmte neue Sprache.

Eine Software, die gleich internationalisiert entworfen wird, kann leicht auf andere Sprachen gebracht werden, und Unternehmen können schnell in neue Märkte eintreten. Java unterstützt das mit diversen Möglichkeiten:

  • Format-Klassen erleichtern die Formatierung von Datum und Zahlen.
  • ResourceBundle-Objekte ermöglichen unterschiedliche Sprachen durch Übersetzungs-Dateien.
  • Collator-Klassen aus dem java.text-Paket können sprachabhängig sortieren.
  • Swing kann Text und Komponenten mühelos von rechts nach links laufen lassen.

Die Vorbereitung kostet natürlich Zeit und gestalterische Klarheit. Ein Zuviel an Grafiken kann dabei der Lokalisierung im Wege stehen, etwa bei Handgesten, Bildern von Tieren, Gesichtern.


Galileo Computing - Zum Seitenanfang

13.4.1 ResourceBundle-Objekte und Ressource-Dateien Zur nächsten ÜberschriftZur vorigen Überschrift

Sollen Java-Programme sprachunabhängig gestaltet werden, müssen in der ersten Phase der Internationalisierung alle Zeichenketten einer Landessprache durch symbolische Namen ersetzt werden. Die Verbindung zwischen den symbolischen Namen und den landessprachlichen Texten übernimmt ein ResourceBundle-Objekt, hinter dem eine Lokalisierungs-Datei steht. Wenn das Programm später eine Zeichenkette nutzen will, greift es auf den symbolischen Namen zurück, die dann das ResourceBundle-Objekt auf die entsprechende Übersetzung überträgt. Die ResourceBundle-Objekte sind spezielle Assoziativspeicher, die alle programmrelevanten Texte und Informationen für ein spezielles Land repräsentieren. Ein wesentlicher Bestandteil von Java besteht in der Fähigkeit dieser Datenspeicher, sich die passenden Lokalisierungs-Dateien selbst herauszusuchen.


Galileo Computing - Zum Seitenanfang

13.4.2 Ressource-Dateien zur Lokalisierung Zur nächsten ÜberschriftZur vorigen Überschrift

Die Übersetzungen können aus Dateien oder einfachen Listen stammen; wir nehmen im Folgenden Dateien an. Da wir die Sprachen Englisch und Deutsch unterstützen wollen, legen wir im (frei wählbaren) Verzeichnis resources zwei Dateien an, eine für die englische und eine für deutsche Version:

Listing 13.2 resources/HelloWorld_en.properties

# HelloWorld_en.properties 
Hello=Hello World. 
Bye=Bye.

Listing 13.3 resources/HelloWorld_de.properties

# HelloWorld_de.properties 
Hello=Hallo Welt. 
Bye=Tschüss.

Die Datei enthält Schlüssel-Werte-Paare sowie Kommentare, die mit einer Raute beginnen. Mit einem Identifizierer – wie »Hello« – sind die landes-/sprachabhängigen Zeichenketten als Werte verbunden.

Die Dateinamen für die Ressourcen-Dateien haben dabei einen speziellen Aufbau. Sie setzen sich aus dem so genannten Basisnamen (hier »HelloWorld«), einem Unterstrich (»_«), einer Landeskennung und dem Datei-Suffix »properties« zusammen. Damit ergeben sich für die Sprachen Englisch und Deutsch die Dateinamen HelloWorld_en.properties und HelloWorld_ de.properties.

Eclipse-Icon Eclipse kann automatisch die Zeichenketten eines Programms in eine Datei auslagern. Dazu ist im Menü Source der Eintrag Externalize Strings… aufzurufen.


Galileo Computing - Zum Seitenanfang

13.4.3 Die Klasse ResourceBundle Zur nächsten ÜberschriftZur vorigen Überschrift

Um auf die Übersetzungsdateien zurückgreifen zu können, benötigen wir ein Objekt der Klasse ResourceBundle. Die Fabrikfunktion ResourceBundle.getBundle(name) liefert den Assoziativspeicher, wobei name der Basisname wie »HelloWorld« ist. Über den Schlüssel sucht die Methode getString() die landesspezifische Meldung heraus.

Listing 13.4 com/tutego/insel/bundle/InternationalHelloWorld.java

package com.tutego.insel.bundle; 
 
import java.util.*; 
 
//$java -Duser.language=en com.tutego.insel.bundle.InternationalHelloWorld 
public class InternationalHelloWorld 
{ 
  public static void main( String[] args ) 
  { 
    String baseName = "resources.HelloWorld"; 
 
    try 
    { 
      ResourceBundle bundle = ResourceBundle.getBundle( baseName ); 
      System.out.println( bundle.getString("Hello") ); 
    } 
    catch ( MissingResourceException e ) { 
      System.err.println( e ); 
    } 
  } 
}

Galileo Computing - Zum Seitenanfang

13.4.4 Ladestrategie für ResourceBundle-Objekte topZur vorigen Überschrift

Die Methode getBundle() sucht automatisch anhand der eingestellten Landessprache die passende Datei aus dem Klassenpfad. (Aus diesem Grund heißt unser Basisname »resources.HelloWorld« und nicht nur einfach »HelloWorld«.) Die Dateinamen für die jeweiligen ResourceBundle-Objekte können sehr variabel zusammengesetzt werden, wobei getBundle() die nachfolgenden Bildungsgesetze verwendet und bei der Dateisuche mit der speziellsten Beschreibung beginnt:

  • bundleName_localeLanguage_localeCountry_localeVariant
  • bundleName_localeLanguage_localeCountry
  • bundleName_localeLanguage
  • bundleName_defaultLanguage_defaultCountry_defaultVariant
  • bundleName_defaultLanguage_defaultCountry
  • bundleName_defaultLanguage
  • bundleName

Sind mehrere Ressourcen-Dateien im Klassenpfad, so integriert sie getBundle(). Eine Datei wie HelloWorld_de.properties erweitert (und überschreibt unter Umständen) die Inhalte von HelloWorld.properties. Eine localeCountry ist zum Beispiel »CH« (das ist keine Variante), was zu einem Dateinamen HelloWorld_de_CH.properties führt.

Listing 13.5 resources/HelloWorld_de_CH.properties

Hello=Grüezi.

Die Anfrage bundle.getString("Hello") liefert »Grüezi«, und bundle.getString("Bye") retourniert »Tschüss« aus der übergeordneten Datei. Die Datei HelloWorld_de_CH.properties überschreibt die hochdeutschen Wörter aus HelloWorld_de.properties mit Wörtern auf Schwyzerdütsch, was wiederum Wörter aus HelloWorld.properties überschreiben würde. Um das Programm zu testen, ändert folgende Zeile vor getBundle() die Sprache:

Locale.setDefault( new Locale("de", "CH") );

Gibt es dann eine Datei wie HelloWorld_de_CH.properties, aber HelloWorld_de.properties fehlt und die eingestellte Sprache ist nur Deutsch und nicht ausschließlich Schweizerdeutsch, so beachtet getBundle() die Datei HelloWorld_de_CH.properties nicht, sondern nur eventuell vorgelagerte Dateien wie HelloWorld.properties.


abstract class java.util.ResourceBundle

  • static ResourceBundle getBundle( String baseName )
    Liefert das ResourceBundle für einen Basisnamen. Eine MissingResourceException folgt, wenn kein Resource-Bundle mit diesem Basisnamen gefunden werden konnte.
  • String getString( String key )
    Gibt den mit key assoziierten Wert von diesem Resource-Bundle oder von den Vätern zurück.

Die einfache Fabrikfunktion getBundle() bezieht zum Ansprechen der Dateien die Standard-Sprache aus Locale.getDefault().



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  Zum Katalog
Zum Katalog: Java ist auch eine Insel





Java ist auch eine Insel
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Tipp
Zum Katalog: Coding for Fun





 Coding for Fun


 Buchempfehlungen
Zum Katalog: Objektorientierte Programmierung





 Objektorientierte
 Programmierung


Zum Katalog: Einstieg in Eclipse 3.4






 Einstieg in
 Eclipse 3.4


Zum Katalog: Java 6 lernen mit Eclipse






 Java 6 lernen
 mit Eclipse


Zum Katalog: NetBeans Platform 6






 NetBeans
 Platform 6


Zum Katalog: Java und XML






 Java und XML


Zum Katalog: Visual C# 2008






 Visual C# 2008


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
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, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de