![]() |
|
In Java steht das Konzept der Internationalisierung zur Verfügung, um Anwendungen entwickeln zu können, deren Benutzeroberflächen Bezeichnungen in landesspezifischer Sprache enthalten. Manchmal wird der Begriff Internationalisierung auch mit i18n abgekürzt, da im Englischen 18 Buchstaben zwischen dem ersten i und dem letzten n des Worts Internationalization stehen. Ein internationalisiertes Programm weist die folgenden Kennzeichen auf:
Unter der Lokalisierung versteht man den Prozess, Software an eine spezielle Region oder Sprache anzupassen, indem spezifische Komponenten hinzugefügt werden und Text übersetzt wird. Der Begriff Lokalisierung wird meist als l10n abgekürzt, da im Englischen 10 Buchstaben zwischen dem l und dem n des Worts Localization stehen. Der Kontext, in dem derartige sprachspezifische Bezeichnungen gespeichert werden, wird in Java auch als Locale bezeichnet. Den größte Zeitbedarf der Lokalisierungsphase nimmt die Übersetzung von Text in Anspruch. Andere Datentypen, wie bspw. Klangdateien oder Bilder, müssen oft nur dann angepasst werden, wenn sie kulturabhängig sind. Java garantiert in diesem Zusammenhang, dass die Formatierung von Datumsangaben, Zahlen und Währungen an lokale Erfordernisse automatisch durchgeführt wird. Das folgende Beispiel illustriert die grundsätzliche Verwendung dieses Konzepts. Die zum detaillierten Verständnis notwendigen Bestandteile werden im Anschluss genauer erläutert. Das folgende Programm begrüßt in zwei Zeilen einen Benutzer: Offensichtlich ist das Programm für Anwender im englischsprachigen Raum ungeeignet. Da die Anwendung nicht multilingual arbeitet, muss der Entwickler die Texte ins Englische übersetzen. Meist sind allerdings Übersetzer nicht gleichzeitig Programmierer, so dass die Texte aus dem Quellcode in Textdateien gespeichert werden müssen, bevor sie von einem Übersetzer bearbeitet werden können. Das Programm muss weiterhin derart flexibel sein, dass es Texte auch in anderen Sprachen anzeigen kann. Problematisch hierbei ist, dass meist a priori unbekannt ist, welche Sprachen dies sein werden. Der Endbenutzer muss daher in der Lage sein, die jeweilige Sprache zur Laufzeit angeben zu können. Dieses Problem ist ein typischer Anwendungsbereich der Internationalisierung. Der internationalisierte Code, der keinerlei hart verdrahtete Texte mehr beinhaltet, lautet hierzu folgendermaßen:
import java.util.*; static public void main(String[] args) { String sprache; sprache = new String("en"); } else { sprache = new String(args[0]); } } } Das internationalisierte Programm ist flexibel, da es dem Endbenutzer die Möglichkeit einräumt, seine Sprache und sein Land in der Kommandozeile anzugeben. In den folgenden Beispielen werden die Texte erst auf französisch (der Sprach-Code für französisch ist fr, der Landes-Code ist FR für France) und dann in englischer Sprache (der Sprach-Code für englisch ist en, der Landes-Code ist US für United States) angezeigt.
Aufruf: java I18NBeispiel fr FR Ausgabe: Allo. Bienvenue en Java.
Aufruf: java I18NBeispiel en US Ausgabe: Hello. Welcome in Java. Betrachtet man den internationalisierten Code näher, so bemerkt man, dass die vorher fest verdrahteten deutschen Texte verschwunden sind. Das Programm ist nun aus den folgenden zwei Gründen weltweit ausführbar: Erstens sind keine Texte fest im Code integriert und zweitens wird der Sprach-Code zur Laufzeit angegeben. Eine erneute Übersetzung ist zur Lokalisierung nicht erforderlich; das Programm ist bereits international einsetzbar. Eine wichtige Frage ist nun, wohin die Texte, die fest in das Programm integriert waren, verschoben worden sind. Die hierzu notwendigen Schritte werden im Folgenden beschrieben:
Ein Properties File, das in einem reinen Textformat mit einem beliebigen Texteditor erzeugt wird, speichert Informationen über Charakteristika eines Programms oder einer Umgebung. Im Beispiel speichern die Properties Files die Übersetzungen der Texte, die angezeigt werden sollen. Standardmäßig benennt man das Properties File mit MessagesBundle.properties und fügt die folgenden Zeilen ein:
einleitung = Hallo Nachdem die Texte in einem Properties File angelegt sind, kann dieses in verschiedene Sprachen übersetzt werden. Änderungen des Quellcodes sind hierzu nicht erforderlich. Ein Französisch-Übersetzer würde bspw. ein Properties File MessagesBundle_fr_FR.properties erzeugen, das folgende Zeilen enthält:
einleitung = Allo
Hierbei sollte beachtet werden, dass die Texte rechts der Gleichheitszeichen übersetzt wurden, nicht aber die Bezeichner auf der linken Seite. Diese Schlüssel dürfen nicht verändert werden, da sie vom Programm referenziert werden, wenn der übersetzte Text geladen wird. Wichtig ist weiterhin der Name des Properties Files. Der Name der Datei MessagesBundle_fr_FR.properties beinhaltet den Sprach-Code fr und den Landes-Code FR. Diese Codes werden verwendet, wenn ein Locale-Objekt angelegt wird.
aLocale = new Locale("fr","FR"); Das vorgeschlagene Programm arbeitet flexibel, da es anstelle fest integrierter Sprach- und Landes-Codes Eingaben aus der Kommandozeile zur Laufzeit akzeptiert:
String sprache = new String(args[0]);
Locale-Objekte haben lediglich identifizierende Wirkung. Nach der Definition einer Locale wird diese an andere Objekte übergeben, die Aufgaben wahrnehmen, wie bspw. die Formatierung von Datumsangaben oder Währungen. Diese Objekte werden dann auch als Locale-sensitiv bezeichnet, da ihr Verhalten in Abhängigkeit von der Locale variiert. Das im Folgenden beschriebene ResourceBundle ist ein Beispiel eines Locale-sensitiven Objekts.
nachricht = ResourceBundle.getBundle("MessagesBundle",currentLocale) ;
Die Argumente, die an die getBundle-Methode übergeben werden, identifizieren die Properties Files, auf die anschließend zugegriffen wird. Das erste Argument, in diesem Fall MessagesBundle, bezeichnet hierbei die Familie der Properties Files.Die Locale, das zweite Argument der getBundle-Methode, spezifiziert, welche der MessagesBundle-Dateien ausgewählt werden soll. In dem Moment, in dem die Locale erzeugt wird, wird sowohl der Sprach- als auch der Landes-Code an deren Konstruktor übergeben. Hierbei ist zu beachten, dass im Namen des Properties Files der Sprach- und Landes-Code dem MessagesBundle-Objekt folgen.
String text1 = nachrichten.getString("einleitung");
Vor der detaillierten Erklärung der weiterführenden Internationalisierungskonzepte sei kurz auf Aspekte hingewiesen, die im Kontext der Internationalisierung nicht zu vernachlässigen sind. Viele Programme sind anfangs nicht internationalisiert (wenn sie zum ersten Mal geschrieben werden). Zur Umwandlung in eine internationalisierte Version sind die folgenden Gesichtspunkte zu beachten:
Im Folgenden werden die Eigenschaften der Internationalisierung im Detail erläutert. |
|
|