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 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-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-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 |
||||||