neo's nice place neo's nice place sitemap
neo's nice place
main
about me
berlin
guestbook
links
links
miscellaneous
sitemap
 

 

Properties und Internationalisierung


Properties

Die Properties-Klasse ist ein Mittel, um Attribute von Java-Programmen zu managen.In Properties-Klassen sind Paare von Schlüsselworten und Werten definiert. Diese Klassen enthalten nur Strings, man kann Schlüsselwort-Wert-Paare von einem Stream einlesen oder an einem Stream ausgeben.
Beim Starten eines Programms mit properties werden zuerst die default properties aus der im Quelltext spezifizierten Datei geladen, dann Werte, die in der letzten Sitzung gespeichert wurden, und das Programm startet dann mit diesen Werten initialisiert.Während das Programm läuft, können durch den User properties verändert werden, beim Beenden werden Werte für das nächste Mal gespeichert.
Beispielcode: Laden der gespeicherten Daten

Properties defaultProps = new Properties(); //ein neues Properties-Objekt wird kreiert
FileInputStream in = new FileInputStream ("defaultProperties");
defaultProps.load (in); //die Daten aus der Datei defaultProperties werden eingelesen
in.close();
Properties applicationProps = new Properties (defaultProps); //schafft applicationProps und nitialisiert es
in = new FileInputStream ("appProperties"); //lädt die Werte der vorigen Sitzung
applicationProps.load (in); in.close();

Beispielcode: Speichern von Werten in einem properties-Objekt

FileOutputStream out = new FileOutputStream ("appProperties");
applicationProps.store (out , "Kommentar"); //store ab JDK1.2 bei früherer Version save
out.close();

Mit put (Object key , Object value) kann man Wertepaare zu einem Properties Objekt hinzufügen, mit remove (Object key) kann man sie entfernen.
Ein Beispielprogramm zum download (Bingo) gibt es im Java Tutorial - Properties weitere Informationen dort oder in der Java api - Properties

Internationalisierung

Um Programme so zu schreiben, dass sie von Usern aus anderen Ländern in der von ihnen gewünschten Sprache gespielt werden können, sollte man beim programmieren einige Richtlinien beachten. Alle Programmelemente, die je nach Sprache/Land unterschiedlich sind, werden nicht direkt im Quelltext, sondern in extraResourceBundle-Dateien definiert.
länderspezifische Elemente sind zum Beispiel:
-alle Textmeldungen, die der User sieht
-Beschriftungen von GUI-Elementen
-Uhrzeit- und Datumsangaben

Locale

Locale-Objekte sind Identifier die aus einem Kürzel für die Sprache z.B. de für Deutsch, fr für Französisch oder en für Englisch, und einem für das Land z.B. DE (Deutschland), FR (Frankreich), US (USA) und GB (Grossbritannien) bestehen. Eine Liste der zulässigen Paarungen (Sprache,Land) bekommt man mit getAvailableLocales() (Kürzel) bzw getDisplayName() (Sprache und Land ausgeschrieben)
vollständige Liste der Sprachenkürzel
vollständige Liste der Länderkürzel
Beispielquelltext:

Locale usenglischlocale = new Locale ("en" , "US"); //amerikanisches Englisch
Locale deutschlandlocale = new Locale ("de" , "DE"); //deutsch, in Deutschland
Locale deutschlocale = new Locale ("de" , ""); //deutsch

ResourceBundle

ResourceBundle-Dateien sind Sätze von Unterklassen mit gleichen Basisnamen, aber unterschiedlichen Namenserweiterungen. Ein paar Beispiele für solche Dateinamen:
MessageBundle.properties
MessageBundle_de.properties
MessageBundle_de_DE.properties
MessageBundle_fr_FR.properties //PropertyResourceBundle
ButtonBundle_en_GB.class //ListResourceBundle

ResourceBundle-Dateien enthalten immer Paare von Schlüsselwort und Wert. Man unterscheidet zwischen PropertyResourceBundles, die nur Strings enthalten, und ListResourceBundles, die alles mögliche enthalten können,beispielsweise GUI-Elemente, Bilder oder Musik.
Beispielcode:
PropertyResourceBundles enthalten Paare von Strings

//MessageBundle_de_DE.properties
greetings = Hallo
name = Wie ist ihr Name?
ade = Danke, dass Sie ?Torfu? gespielt haben. Auf Wiedersehen. //Wie soll unser Spiel heissen?
//MessageBundle_en_US.properties
greetings = Hello
name = What's your name?
ade = Thanks for playing ?Torfu?. Goodbye.

ListResourceBundles enthalten Arrays von Paaren aus Schlüsselwort und Wert

//ButtonBundle_de_DE.class
Object[][] content = {
{"OkKey" , "Okay"};
{"CancelKey" , "Abbruch"};
}

Im Quelltext erfolgt der Aufruf der ResourceBundle mittels ResourceBundle.getBundle(BundleName,LocaleName); zum Beispiel:

public class I18NBeispiel {
public static void main (String[] args) {
String sprache, land;
if (args.length != 2) { //Falls fehlerhafte Eingaben gemacht wurden,
sprache = new String ("de"); //wird ein Locale als default definiert
land = new String ("DE");
}
else {
sprache = new String (args[0]);
land = new String (args[1]); }
Locale locale = new Locale (sprache , land);
ResourceBundle messages;
messages = ResourceBundle.getBundle ("MessageBundle" , locale);
System.out.println (messages.getString ("greetings"));
System.out.println (messages.getString ("name"));
System.out.println (messages.getString ("ade"));
}
}

Weitere Informationen und Beispielprogramme (nur Java Quelltext leider ohne ResourceBundle-Dateien) gibt es im Java-Tutorial - Internationalisierung

Beispiel zum Download
I18NBeispiel.java
MessageBundle_de_DE.properties
MessageBundle_en_US.properties

von Maren Settekorn

top

sitemap