10.4 Sprachen der Länder
 
Programme der ersten Generation konnten nur mit fest verdrahteten Landessprachen und landesüblichen Bezeichnungen umgehen. Daraus ergaben sich natürlich vielfältige Probleme. Mehrsprachige Programme mussten aufwändig entwickelt werden, damit sie unter mehreren Sprachen liefen. Es ergaben sich bereits Probleme dadurch, dass unterschiedliche Zeichenkodierungen verwendet wurden. Dies wurde aber durch Unicode umgangen. Es bleibt das Problem, dass sprachabhängige Zeichenketten, wie alle anderen Zeichenketten auch, überall im Programmtext verteilt sind. Eine nachträgliche Sprachanpassung wird schwer. Java bietet hier eine Lösung an. Zum einen durch die Definition einer Sprache und damit automatische Formatierungen, und zum anderen durch die Möglichkeit, sprachenabhängige Teile in Ressourcen-Dateien auszulagern.
10.4.1 Sprachen in Java über Locale-Objekte
 
Eine Sprache (Locale) ist in Java eine Verbindung aus gesprochener Sprache und geografischer Region. Jede dieser sprachspezifischen Eigenschaften ist in einem speziellen Objekt gekapselt, das als Exemplar der Klasse Locale realisiert ist. Die Sprache und die Region müssen getrennt werden, denn nicht immer gibt eine Region oder ein Land die Sprache eindeutig vor. Für die Umgebung in dem Französisch sprechenden Teil von Kanada ist etwa der Kalender von Quebec relevant, und der unterscheidet sich von einem englischen Kalender.
Beispiel Sprach-Objekte werden immer mit dem Namen der Sprache und optional mit dem Namen des Landes beziehungsweise einer Region erzeugt. Im Konstruktor der Klasse Locale werden dann Länderabkürzungen angegeben, etwa für ein Sprach-Objekt für England oder Frankreich.
Locale greatBritain = new Locale( "en", "GB" );
Locale french = new Locale( "fr" );
|
Im zweiten Beispiel ist uns das Land egal. Wir haben einfach nur die Sprache Französisch ausgewählt, egal auf welchem Teil der Welt. Die Sprachen sind durch Zwei-Buchstabenkürzel aus dem ISO 639-Code identifiziert und die Ländernamen sind Zwei-Buchstabenkürzel, die in ISO 3166 beschrieben sind.
final class java.util.Locale
implements Cloneable, Serializable
|
|
Locale( String language )
Erzeugt ein neues Locale-Objekt für die Sprache language. |
|
Locale( String language, String country )
Erzeugt ein Locale-Objekt für language und das Land country. |
|
public Locale( String language, String country, String variant )
Erzeugt ein Locale-Objekt für language und das Land country in der Variante variant. variant ist eine herstellerabhängige Angabe, wie WIN für Windows, MAC für Macintosh und POSIX für POSIX. |
Konstanten für die wichtigen Länder
Da die Codes nicht immer so intuitiv einleuchtend sind, besitzt die Locale-Klasse ein paar Konstanten für häufig auftretende Länder und Sprachen. Für ein Locale-Objekt für Great Britain kann an Stelle von new Locale("en","GB") auch Locale.UK Verwendung finden. Unter den Konstanten sind: CANADA, CANADA_FRENCH, CHINA, CHINESE, ENGLISH, FRANCE, FRENCH, GERMAN, GERMANY, ITALIAN, ITALY, JAPAN, JAPANESE, KOREA, KOREAN, PRC, SIMPLIFIED_CHINESE, TAIWAN, TRADITIONAL_CHINESE, UK und US. Im Quellcode der Klasse Locale sind dazu einfach die entsprechenden Länderkürzel als Namen von Konstanten definiert. Zwei Beispiele:
static public final Locale FRANCE = new Locale("fr","FR","");
static public final Locale GERMANY = new Locale("de","DE","");
Methoden von Locale
Locale-Objekte lassen sich fragen, wie ihre Sprache heißt, die sie repräsentieren. Dazu bietet das Locale-Objekt eine Reihe von Methoden an:
final class java.util.Locale
Implements Cloneable, Serializable
|
|
String getCountry()
Liefert das Länderkürzel nach dem ISO 3166-Zwei-Buchstaben-Code. |
|
String getLanguage()
Liefert das Kürzel der Sprache im ISO 639-Code. |
|
String getVariant()
Liefert das Kürzel der Variante. |
|
final String getDisplayCountry()
Liefert ein Kürzel des Landes für Bildschirmausgaben. |
|
final String getDisplayLanguage()
Liefert ein Kürzel der Sprache für Bildschirmausgaben. |
|
final String getDisplayName()
Liefert den Namen der Einstellungen. |
|
final String getDisplayVariant()
Liefert den Namen der Variante. |
|
String getISO3Country()
Liefert die ISO-Abkürzung des Landes dieser Einstellungen und löst eine ExMissingResourceException aus, wenn die ISO-Abkürzung nicht verfügbar ist. |
|
String getISO3Language()
Liefert die ISO-Abkürzung der Sprache dieser Einstellungen und löst eine MissingResourceException aus, wenn die ISO-Abkürzung nicht verfügbar ist. |
Beispiel Die folgende Applikation gibt alle gefundenen Locale-Objekte aus. Wir erkennen an der Ausgabe auch die Unterschiede der Funktionen.
|
Listing 10.2
AllLocales.java
import java.util.*;
public class AllLocales
{
public static void main( String args[] )
{
Locale locs[] = Locale.getAvailableLocales();
for ( int i = 0; i < locs.length; i++ )
{
Locale l = locs[i];
System.out.print( l.getCountry() + ", " );
System.out.print( l.getLanguage() + ", " );
System.out.print( l.getVariant() + ", " );
System.out.print( l.getDisplayName() + ", " );
System.out.print( l.getDisplayCountry() + ", " );
System.out.print( l.getDisplayLanguage() + ", " );
System.out.print( l.getDisplayName() + ", " );
System.out.print( l.getDisplayVariant() + ", " );
System.out.print( l.getISO3Country() + ", " );
System.out.println( l.getISO3Language() );
}
}
}
Ein Ausschnitt der Ausgabe. Bemerkenswert ist, dass einige Angaben nicht gefüllt sind.
, ar, , Arabisch, , Arabisch, Arabisch, , , ara
AE, ar, , Arabisch (Vereinigte Arabische Emirate), Vereinigte Arabische Emirate,
Arabisch, Arabisch (Vereinigte Arabische Emirate), , ARE, ara
BH, ar, , Arabisch (Bahrain), Bahrain, Arabisch, Arabisch (Bahrain), , BHR, ara
DZ, ar, , Arabisch (Algerien), Algerien, Arabisch, Arabisch (Algerien), , DZA, ara
EG, ar, , Arabisch (Ägypten), ?gypten, Arabisch, Arabisch (Ägypten), , EGY, ara
Q, ar, , Arabisch (Irak), Irak, Arabisch, Arabisch (Irak), , IRQ, ara
JO, ar, , Arabisch (Jordanien), Jordanien, Arabisch, Arabisch (Jordanien), , JOR, ara
...
, zh, , Chinesisch, , Chinesisch, Chinesisch, , , zho
CN, zh, , Chinesisch (China), China, Chinesisch, Chinesisch (China), , CHN, zho
HK, zh, , Chinesisch (Hongkong), Hongkong, Chinesisch, Chinesisch (Hongkong), , HKG, zho
TW, zh, , Chinesisch (Taiwan), Taiwan, Chinesisch, Chinesisch (Taiwan), , TWN, zho
, en, , Englisch, , Englisch, Englisch, , , eng
US, en, , Englisch (Vereinigte Staaten von Amerika), Vereinigte Staaten von Amerika,
Englisch, Englisch (Vereinigte Staaten von Amerika), , USA, eng
|