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