4.3 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 aufwendig entwickelt werden, damit sie unter mehreren Sprachen lokalisierte Ausgaben lieferten. (Es ergaben sich bereits Probleme durch unterschiedliche Zeichenkodierungen. Dies umging aber der Unicode-Standard.) Es blieb das Problem, dass sprachabhängige Zeichenketten, wie alle anderen Zeichenketten auch, überall im Programmtext verteilt sind und eine nachträgliche Sprachanpassung nur aufwendig zu erreichen ist. Java bietet hier eine Lösung an: zum einen durch die Definition einer Sprache und damit durch automatische Formatierungen, und zum anderen durch die Möglichkeit, sprachenabhängige Teile in Ressourcen-Dateien auszulagern.
4.3.1 Sprachen und Regionen über Locale-Objekte
In Java repräsentieren Locale-Objekte geografische, politische oder kulturelle Regionen. Die Sprache und die Region müssen getrennt werden, denn nicht immer gibt eine Region oder ein Land die Sprache eindeutig vor. Für Kanada in der Umgebung von Quebec ist die französische Ausgabe relevant, und die unterscheidet sich von der englischen. Jede dieser sprachspezifischen Eigenschaften ist in einem speziellen Objekt gekapselt.
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 Großbritannien oder Frankreich: Locale greatBritain = new Locale( "en", "GB" ); Im zweiten Beispiel ist uns das Land egal. Wir haben einfach nur die Sprache Französisch ausgewählt, egal in welchem Teil der Welt. |
Die Sprachen sind durch Zwei-Buchstaben-Kürzel aus dem ISO-639-Code[31](http://www.loc.gov/standards/iso639-2/php/code_list.php) (ISO Language Code) identifiziert, und die Ländernamen sind Zwei-Buchstaben-Kürzel, die in ISO 3166[32](http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/index.html) (ISO Country Code) beschrieben sind.
final class java.util.Locale |
- Locale(String language)
Erzeugt ein neues Locale-Objekt für die Sprache (language), die nach dem ISO-693-Standard gegeben ist. - Locale(String language, String country)
Erzeugt ein Locale-Objekt für eine Sprache (language) nach ISO 693 und ein Land (country) nach dem ISO-3166-Standard. - public Locale(String language, String country, String variant)
Erzeugt ein Locale-Objekt für eine Sprache, ein Land und eine Variante. variant ist eine herstellerabhängige Angabe wie »WIN« oder »MAC«.
Die statische Methode Locale.getDefault() liefert die aktuell eingestellte Sprache. Für die laufende JVM kann Locale.setLocale(Locale) diese ändern.
Konstanten für einige Länder und Sprachen
Die Locale-Klasse besitzt Konstanten für häufig auftretende Länder und Sprachen. Statt für Großbritannien explizit new Locale("en", "GB") zu schreiben, bietet die Klasse mit Locale.UK eine Abkürzung. Unter den Konstanten für Länder und Sprachen sind: CANADA, CANADA_FRENCH, CHINA ist gleich CHINESE (und auch PRC bzw. SIMPLIFIED_CHINESE), ENGLISH, FRANCE, FRENCH, GERMAN, GERMANY, ITALIAN, ITALY, JAPAN, JAPANESE, KOREA, KOREAN, TAIWAN (ist gleich TRADITIONAL_CHINESE), UK und US.
Methoden von Locale
Locale-Objekte bieten eine Reihe von Methoden an, um etwa den ISO-639-Code des Landes preiszugeben.
Beispiel |
Gib für Deutschland zugängliche Informationen aus. Das Objekt out aus System und GERMANY aus Locale sind statisch importiert: Listing 4.1: com/tutego/insel/locale/GermanyLocal.java, main() out.println( GERMANY.getCountry() ); // DE |
Abbildung 4.1: UML-Diagramm der Locale-Klasse
final class java.util.Locale |
- 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 MissingResourceException 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. - static Locale[] getAvailableLocales()
Liefert eine Aufzählung aller installierten Locale-Objekte. Das Feld enthält mindestens Locale.US und unter Java 7 fast 160 Einträge.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.