![]() |
|
Als Anwendungsbeispiel soll die Oberfläche, in der die Schiffe des Spielers platziert werden können, internationalisiert werden. Hierzu wird die Klasse SchiffFenster verwendet, die bereits in Kapitel 4.6 erläutert wurde. Zuerst werden alle Textbausteine, die bisher hart im Code verdrahtet waren, in zwei Properties Files gespeichert (File 1, File 2).
# Properties File fuer Deutsche Version Textlabel1 = Zum Setzen der Schiffe bitte Anfangs- und Endposition mit der Maus markieren Textlabel2 = Zum Entfernen der Schiffe bitte Anfangs- und Endposition nochmals mit der Maus markieren ship2 = 2-er Schiff # Properties File for English Version Textlabel1 = To set ship mark start and end position with mouse Textlabel2 = To delete ship mark start and end position with mouse again ship2 = 2-Ship Die in den Properties Files verwendeten Variablennamen müssen anschließend im Code der Klasse SchiffFenster reflektiert werden. Die neue Klasse SchiffFenster sieht dann wie folgt aus:
import java.awt.*; SpielCanvas sc1; //Internationalisierungsinformation Die letzten vier Variablen sind zur Internationalisierung der Klasse notwendig. Es sollte auch darauf geachtet werden, dass das Package java.util importiert wird. Der Konstruktor der Klasse wird wie folgt verändert:
public SchiffFenster(Spielfeld s, Container c) { language = new String("en"); messages = ResourceBundle.getBundle("MessagesBundle",currentLocal e); Im Beispiel wird der US-amerikanische Text für die Benutzeroberfläche eingebunden, wozu auf das Properties File MessagesBundle_en_US.properties zugegriffen wird. Die nun folgenden Anweisungen sind mit den in Kapitel 4.6 angegebenen Kommandos identisch.
this.s = s; //Spielfeld des Benutzers //Infofelder In den nun folgenden Anweisungen werden die Informationsfelder der Schiffe angelegt. Hierbei wird internationalisierter Text verwendet. Anstatt diesen direkt anzugeben, werden die Daten, die im Properties File gespeichert sind, eingefügt.
zeigeQuadrat(messages.getString("ship2"), false, 0); southPanel = new Panel(); label1 = new Label(messages.getString("Textlabel1"), Label.LEFT); label2 = new Label(messages.getString("Textlabel2"), Label.LEFT); } In der nun folgenden Methode zeigeQuadrat wird der fertig-Button internationalisiert.
protected void zeigeQuadrat(String name, boolean val, int schiffNummer) { panel1 = new Panel(); label3 = new Label(name); // Anlegen der Buttons //Internationalisierte Version } panel2.add(panel1); } Die noch fehlenden Komponenten der Klasse SchiffFenster sind im Folgenden der Vollständigkeit halber angegeben. Die weiteren Klassen des Beispiels, wie auch der Text der Fehlermeldung, wurden hierbei nicht internationalisiert. Dies sei dem Leser zur Übung überlassen. Die Bildschirmausgabe der internationalisierten Version ist in Abb. 6-1angegeben.
Abb. 6.1: Internationalisierte (US-amerikanische) Version der Benutzeroberfläche
public void actionPerformed(ActionEvent e) { if (s.schiffZahl == 0){ repaint(); } else { Object anker = sc1.getParent(); anker = ((Component) anker).getParent(); FehlerFenster dialog = new FehlerFenster((Frame)anker, "Erst alle Schiffe setzen!!"); dialog.setVisible(true); } } } |
|
|