~~Title: Multilingual Support~~
Multilingual support is integrated in JVx´s core components. Each component allows the translation of text without further effort. All components that display text, such as Button, Menu, MenuItem, or Label, individually handle the translation of the displayed text.
The developer only has to translate user-defined outputs, such as messages, questions, error messages, etc. A single method call, or ideally the translation of the text itself, is sufficient.
The translation mechanism does not require special text keys. We recommend developing the application in one language and creating the translation separately, either in parallel or after completion.
== Usage ==
All of the text in an application we have created is in German. However, we just found out that English also has to be supported. This requirement was not known at the time of development.
The following source code represents a frame with a table, groupbox, and buttons:
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
The translation can be defined centrally or by component. "By component" means that each component can use different translations for identical texts. A central translation always uses the same translation for identical texts. If a component does not use its own translation, a translation is automatically requested from the parent component.
In this case the translation is defined centrally at the highest (i.e. application) level:
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
}
}
}
}
At a minimum, the translation file contains the following:
All contacts
Options
New contact
Delete
Contacts
\\
**Note**
The showcase application allows switching between German and English. A full integration of the translation can be viewed in the source code.
The following translation file is used:
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!
The definition:
Ungültiges Passwort für Benutzer '*0'
demonstrates the wildcard mechanism for translations.
Variable text passages are defined using *. If multiple wildcards are used, text can be accessed via index (beginning with 0).