~~Title: Unterstützung für Mehrsprachigkeit~~ Die Unterstützung für Mehrsprachigkeit ist bereits in die Basiskomponenten von JVx integriert. Jede Komponente ermöglicht ohne weiteres zutun, die Übersetzung von beliebigen Texten. Alle Komponenten die Texte darstellen wie z.B. Button, Menu, MenuItem, Label übernehmen bereits die Übersetzung der angezeigten Texte. Vom Entwickler müssen nur die benutzerdefinierten Ausgaben wie z.B. Nachrichten, Fehlermeldungen, Fragen, usw. übersetzt werden. Und dazu reicht ein einziger Funktionsaufruf oder im Idealfall die Übersetzung der Texte selbst. Der Übersetzungsmechanismus benötigt keine speziellen Text Keys. Es wird empfohlen die Applikation durchgängig in einer Sprache zu erstellen und im Nachhinein oder parallel zur Entwicklung, die Übersetzung durchzuführen. == Anwendung == Wir haben eine Applikation erstellt und alle Texte sind Deutsch. Die Applikation muss nun aber auch Englisch unterstützen. Diese Anforderung war zu Beginn der Entwicklung nicht bekannt. Folgender Source Code stellt einen Frame mit Tabelle, GroupBox und Buttons dar: public class DBEditFrame extends UIInternalFrame { ... ... /** * Initializes the UI. *

* @throws Exception if the initialization throws an error */ private void initializeUI() throws Exception { UIGroupPanel group = new UIGroupPanel(); group.setText("Alle Kontakte"); group.setLayout(new UIBorderLayout()); UIGroupPanel groupBut = new UIGroupPanel(); groupBut.setText("Optionen"); group.setLayout(new UIFlowLayout()); UITable table = new UITable(); table.setDataBook(rdbContacts); UIButton butNew = new UIButton("Neuer Kontakt"); UIButton butDel = new UIButton("Löschen"); group.add(table); groupBut.add(butNew); groupBut.add(butDel); //same behaviour as centered component in BorderLayout setLayout(new UIBorderLayout()); add(group, UIBorderLayout.CENTER); add(groupBut, UIBorderLayout.EAST); setTitle("Kontakte"); setSize(new UIDimension(600, 500)); } ... ... } // DBEditFrame Die Übersetzung kann pro Komponente oder zentral definiert werden. Pro Komponente bedeutet, daß jede Komponente für idente Texte, eine unterschiedliche Übersetzung verwenden kann. Die zentrale Lösung übersetzt idente Texte immer gleich. Wenn eine Komponente keine eigene Übersetzung verwendet, dann wird automatisch die Parent Komponente nach einer Übersetzung gefragt. Wir definieren die Übersetzung zentral, auf oberster Ebene, sprich der Applikation: private void loadTranslation() { InputStream isTranslation = null; try { //load the locale specific translation isTranslation = ResourceUtil.getResourceAsStream ("/apps/firstapp/translation_en.xml"); //load the default translation if (isTranslation != null) { TranslationMap map = new TranslationMap(); Properties properties = new Properties(); properties.loadFromXML(isTranslation); map.setAsProperties(properties); getLauncher().setTranslation(map); } } catch (Exception e) { debug(e); } finally { if (isTranslation != null) { try { isTranslation.close(); } catch (Exception e) { //nothing to be done } } } } Die Übersetzungsdatei hat zumindest folgenden Inhalt: All contacts Options New contact Delete Contacts \\ **Anmerkung** Die Showcase Applikation ermöglicht den Wechsel zwischen Deutsch und Englisch. Im Source Code kann man eine vollständige Integration der Übersetzungen sehen. Folgende Übersetzungsdatei wird verwendet: Showcase Applikation* Anmeldung Willkommen Passwort ändern Anmeldeinformationen prüfen Sitzung ist abgelaufen! Passwort wurde geändert! Bitte ein neues Password eingeben und bestätigen. Bitte Ihren Benutzernamen und Passwörter eingeben. Bitte Ihren Benutzernamen und Passwort eingeben. Benutzername: Passwort: Passwort (neu): Passwort (bestätigen): Anmelden Ändern Abbruch Datei Anmeldung Abmelden Passwort ändern Beenden B Bearbeiten Speichern S Rückgängig Wiederherstellen Aktualisieren Fenster Karteireiter Ansicht Fenster Ansicht Alle Fenster schließen Hilfe Inhaltsverzeichnis Hilfe zu... Über... Hilfe generieren Applikationsinformationen* Die Karteireiter beinhalten zusätzliche Informationen. Über System Log Verwendete Logger Log Stufe Verbindung Parameter Wert OK Information Warnung Fehler Frage OK Abbruch Ja Nein Fehlerursache(n) OK Details Speichern unter... Datei öffnen Bitte wählen Sie die gewünschte Datei: Upload Beim Speichern der Daten ist ein Fehler aufgetreten! Möchten Sie dennoch das Fenster verlassen? Ungültiges Passwort für Benutzer '*0' Der Benutzer '*0' ist nicht mehr gültig! Der Benutzer '*0' wurde deaktiviert! Der Benutzer '*0' ist unbekannt! Das Sicherheitssystem kann keine Anmeldung durchführen! Das alte Passwort ist ungültig! Das Sicherheitssystem kann die Passwort Änderung nicht durchführen! Das neue Passwort muss sich vom alten Passwort unterscheiden! Bitte ändern Sie Ihr Passwort! Die neuen Passwörter sind unterschiedlich! Das neue Passwort darf nicht "leer" sein! Konfigurationsfehler: Fehlende Bezeichnung des Datenbanktreibers! Konfigurationsfehler: Fehlender Verbindungsdeskriptor! Konfigurationsfehler: Datenbank Anmeldedaten sind ungültig! Konfigurationsfehler: Datenbank Anmeldedaten sind ungültig! Konfigurationsfehler: Datenbanktreiber wurde nicht gefunden! Die Verbindung zur Datenbank kann nicht hergestellt werden! Der Sicherheitsmanager kann nicht verwendet werden! Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an! Ungültige Sitzungskennung! Die Sitzung ist nicht länger gültig! Die Methode '*' wurde nicht gefunden! Das Objekt '*' wurde nicht gefunden! Das Objekt '*' wurde nicht initialisiert! Undefinierte Objektbezeichnung! Die Sitzung wurde nicht gefunden! Die Sitzung wurde bereits geöffnet! Ein asynchroner Aufruf ist nicht erlaubt! Die Server Anfrage enthält ungültige Parameter! Die Serialisierung für die Server Anfragen wurde nicht gefunden! Ungültige Server-Anfragekennung! Die Maske '*' wurde nicht gefunden! Aufgrund von Sicherheitseinstelllug ist es nicht erlaubt die Maske zu öffnen! Die Kommunikation zum Server wurde unterbrochen! Einfügen Löschen Exportieren Kontakt Kontakte Ausbildung Schulung Schulungen Stammdaten Suchen Anrede Titel Vorname Nachname Strasse Land PLZ Ort Geb. SVNr Versicherung Dateiname Bild Sprache Benutzeroberfläche Tabellen Komponenten Blättern Oben* Links* Rechts* Unten* Schließen* Verschieben* Text Komponenten Gesperrt Standard Nicht änderbar Nicht änderbar * Deaktiviert Textfeld Textfeld (farbig) Passwort Auswahl (Text) Auswahl (Datum) Textbereich Tab Ansicht Kontroll Fenster Schließbares Fenster Modales Fenster MODALES Fenster öffnen Schließen Kopieren Aktiviert Gewählt Gewählt deaktiviert Kein Rahmen Feststell Button Nachrichten Neu Sub deaktiviert Einfach Einfach Checkbox deaktiviert Deaktiviert Neuer Detail Datensatz Bundesland Bezirk Detail zum Master Detail zum Detail Information anzeigen Warnung anzeigen Frage anzeigen Fehlermeldung anzeigen Ausnahmefall anzeigen Eine einfache Information ! Es sollte in Ordnung sein ... ! Alle Änderungen speichern ? Ein Fehler trat auf ! Ein unerwarteter Fehler! Die Definition: Ungültiges Passwort für Benutzer '*0' demonstriert den Wildcard Mechanismus für Übersetzungen. Mit * werden variable Textstellen definiert. Wenn mehrere Wildcards verwendet werden, kann per Index (beginnend bei 0) auf den Text zugegriffen werden.