# LiveLanguage Editor

CodeTutorial
Editor
Code Tipps
Mit LiveLanguage können Sie ein Java-Projekt erst einmal ohne Rücksicht auf internationale Sprachabhängigkeiten erstellen. Wenn Sie ihr Projektcode fertiggestellt ist können Sie Ihre Oberflächen für weitere Sprachen erweiter. Hierzu sind nur wenige Zeilen weiteren Codes notwendig.

## Die Idee:

Sie schreiben Ihr Java- Programm ganz normal ohne auf irgendwelche Sprachabhängigkeiten zu achten. Wenn Ihr Programm (vor allem die Oberflächen) nahezu fertiggestellt ist, fügen Sie LiveLanguage.jar als Bibliothek zu Ihrem Projekt hinzu. Dann müssen Sie in jeder Klasse, die sprachabhängig werden soll ein paar wenige Codezeilen hinzufügen (siehe Code Tutorial).
Haben Sie dies einmal gemacht, so brauchen Sie Ihr ausgeliefertes Programm nicht erneut kompilieren oder ausliefern um eine eine neue Sprache für Ihre Oberfläche hinzuzufügen!
LiveLanguage erstellt für Ihr Projekt eine Default-Sprachdatei, in der alle Swing-Oberflächenelemente aufgelistet sind mit den jeweiligen Benamungen, die Sie in Ihrem Code verwendet haben. In der Regel heißt diese Datei "Project.lng" (Den Namen können Sie ändern - siehe weiter unten).
Wenn mittels des LiveLanguage Editors eine Sprache hinzugefügt wird, so wird eine neue Sprachdatei mit Namen Project_xx.lng erzeugt, wobei für xx das Landkürzel verwendet wird. Eine deutsche Sprachdatei würde demnach Project_de.lng heißen (oder Project_DE_de.lng, wenn Sie explizit Deutschland als Sprache hinzugefügt haben). Die jeweiligen deutschen Benamungen können Sie mit Hilfe des LiveLanguage Editors ändern.
Wird Ihr Programm gestartet, so bestimmt LiveLanguage die auf dem Rechner eingestellte Sprache und versucht die entsprechende Sprachdatei zu laden und die Benamumgen aller Oberflächenelemente durch die entsprechenden Eintraäge der Sprachdatei zu ersetzen. Wird die Sprachdatei (oder ein Oberflächen in der Sprachdatei) nicht gefunden, so wird die Default-Sprachdatei verwendet, ist diese auch nicht vorhanden,so werden die original Benamungen aus Ihrem Code verwendet.

## Code Tutorial:

Bevor Sie den LiveLanguage Editor benutzen können müssen Sie Ihrem Projekt die LiveLanguage.jar als Library hinzufügen
und Ihren Java-Code um ein paar Zeilen erweitern:

1. Eine Klasse sprachabhängig machen (meistens ist dies eine Oberfläche wie JFrame, JLabel, JTextField,...)
   In dem Konstruktor ihrer Klasse müssen Sie nachdem alle Komponenten instanziiert sind (meist nach initComponents()) eine Zeile hinzufügen
   public class MyFrame extends JFrame {
   public MyClass() {
   initComponents();
   LiveLanguage.addLanguageListener(this, null);
   }
   }
   Diesen Schritt müssen Sie in jeder Ihrer Klassen durchführen, die sprachabhängig werden sollen.
   Anstelle von 'null' können Sie auch einen String eingeben, der später den Namen der Sprachdateien bestimmt - siehe unter 3..
   Um String-Variablen (Members) ihrer Klasse sprachabhängig zu machen müssen Sie vor der Deklaration der Stringvariable die Annotation @LiveLanguageString hinzufügen.
   public class MyFrame extends JFrame {
   @LiveLanguageString
   private String m_StringLanguageSensitive; //Diese Variable wird durch LiveLanguage beeinflusst
   private String m_StringNoLanguage; //Diese Variable wird NICHT beeinflusst, da die Annotation fehlt
   ...........
2. Das Grundgerüst für Sprachen (eine Default-Sprachdatei) erstellen
   In Ihrer Main-Funktion müssen Sie eine Zeile hinzufügen, die vor der Auslieferung Ihres Programmes wieder entfernt werden kann.
   public static void main(String[] args) {
   java.awt.EventQueue.invokeLater(new Runnable() {
   public void run() {
   LiveLanguage.setWrite(true);
   MyProject o_MyProject = new MyProject();
   o_MyProject.setVisible(true);
   }
   });
   }
3. Die Default Sprachdatei erstellen
   Compilieren Sie Ihr Programm neu und starten Sie dieses. Versuchen Sie nun einmal sämtliche Frames ihres Programmes zu öffnen.
   Der Hintergrund: Es muss von allen sprachabhängigen Klassen einmal eine Instanz erzeugt werden (damit wird einmal jeweils die Zeile LiveLanguage.addLanguageListener(..) aufgerufen.
   LiveLanguage parsed Ihre Klasseninstanz und legt Einträge aller Member (Fields) in einer Sprachdatei an.
   Die Sprachdatei liegt in einem Ordner 'Languages' und hat standardmäßig den Namen 'Project.lng', falls Sie 'null' beim Aufruf von LiveLanguage.addLanguageListener(this, null) verwendet haben.
   Um die Sprachdatei anderst zu benamen oder für eine Klasse eine spezielle Sprachdatei anzulegen, können Sie anstelle von 'null' einen anderen Dateinamen (ohne Endung) angeben.
   Um für alle Klassen eine anderst benamte Sprachdatei anzulegen fügen Sie in Ihrer Main-Funktion folgende Zeile hinzu:
   ...
   LiveLanguage.setDefaultLanguageFileBaseName("MyName");
   ...
   Nun werden automatisch alle Sprachdateien MyName_xx.lng heißen (für xx wird das Localekey - sprachspezifische Kürzel verwendet).
4. Das Editieren von anderen Sprachen mit Hilfe des LiveLanguage Editors
   Hierzu starten Sie das LiveLanguage.jar und öffnen die Default-Sprachdatei (im Standardfall 'Project.lng).
   In der Tabelle des Editors sehen Sie
   in der ersten Spalte alle Oberflächenelemente/Member Ihrer sprachabhängigen Klassen: Classpath/Membername/Property
   in der zweiten Spalte die Inhalte, die Sie in Ihrem Programm zugewiesen haben.
   Ein kleines Beispiel:
   Ihr Code besitzt eine Klasse MyFrame und diese besitzt wiederum ein JLabel m_MyJLabel.
   Jlabels haben zwei Funktionen um den anzeigenden Text zu ändern setText(String p_Text) und setToolTipText(String p_ToolTipText), dementsprechend gibt es in der Sprachdatei zwei Einträge in der ersten Spalte:
   MyFrame/m_MYJLabel/text
   MyFrame/m_MYJLabel/toolTipText
   In der zweiten Spalte (Default) finden Sie die Einträge aus Ihrem Code.
   Anmerkung: Manche Elemente (Funktionen) erlauben null als Wert, um einen null -Wert mit der Sprachdatei zuzuweisen geben Sie als Text einfach null ein.
   Nun können Sie mithilfe der ComboBox des Editors eine weitere Sprache hinzufügen, es wird eine neue Spalte erzeugt. Hier können Sie die Inhalte in der jeweiligen Sprache eingeben.
   Wenn Sie auf speichern klicken wird für jede hinzugefügte Sprache eine neue Datei erstellt mit dem Localekey im Dateinamen. Im Standardfall wird z.B. für die deutsche Sprache die Datei Project_de.lng erzeugt.
5. Programm ausliefern
   Um Ihr Programm mit allen Sprachen auszuliefern müssen Sie den 'Languages'- Ordner mit den enthaltenen Sprachdateien zusammen mit Ihrem jar-File verpacken.
   Der Ordner 'Languages' muss sich auf der Höhe Ihres jar-Files befinden.
   Anmerkung: Vor der Auslieferung sollten Sie die Zeile (LiveLanguage.setWrite(true);) aus Ihrer Main-Funktion entfernen und Ihr Programm neu compilieren.

## Der Editor

| Hier können Sie eine Sprachdatei (*.lng) öffnen. Die Tabelle wird gefüllt. Die erste Spalte zeigt Ihnen die ClassMember mit ihren Eigenschaften an: Classpath/Membername/Property Die zweite Spalte zeigt Ihnen den Default-Inhalt an, wie er durch Ihr Programm zugewiesen wurde. Für jede hinzugefügte Sprache wird eine weitere Spalte angezeigt, in der Sie die Inhalte der jeweiligen Sprache anpassen können. Sie können meist auch HTML-Text verwenden, da viele Java Oberflächen (Swing) html-umsetzen können. Anmerkung: Sie dürfen auch die erste Spalte editieren, Sie müssen nur auf konsistente Klassenpfade achten Jederzeit können Sie in der ersten Spalte auch Kommentare einsetzen (da Kommentare keine gültigen Klassenpfade sind wird diese Zeile später nicht beachtet).
| Hier wird die komplette Tabelle gespeichert. Wobei jede Sprachenspalte in einer extra Sprachdatei abgelegt wird.
| Reihen berabeiten
| Eine neue Reihe wird über der ausgewählten Reihe hinzugefügt
| Eine neue Reihe wird unterhalb der ausgewählten Reihe hinzugefügt
| Die ausgewählte Zeile wird gelöscht
| Die ausgewählte Zeile wird eine Stelle nach oben geschoben
| Die ausgewählte Zeile wird eine Stelle nach unten geschoben
| Die Zeilenhöhe wird erweitert
| Die Zeilenhöhe wird erniedrigt
| Hilfe
| Die Hilfe wird angezeigt
| Sprachen hinzufügen
| in der ComboBox können Sie eine Sprache auswählen
| Die ausgewählte Sprache wird hinzugefügt
| Die ausgewählte Sprache wird aus der Tabelle entfernt
| Die ausgewählte Sprache wird gelöscht. Sie wird aus der Tabelle entfernt und die zugehörige Sprachdatei wird gelöscht.
| Suchen
| In der vorangestellten Textbox können Sie einen Suchtext eingeben dann mit diesem Button suchen. Wenn Sie mehrmals auf den Button klicken wird jeweils das nächste Suchergebnis angezeigt.
| Um in der Tabelle einen Eintrag zu ändern klicken Sie einfach doppelt auf die entsprechende Tabellenzelle. Wenn Sie in der ersten Spalte etwas ändern wollen, erscheint beim ersten Doppelklick eine Warbmeldung! Anmerkung: Die erste Spalte enthält den Objekt/Eigenschaftenpfad zu Ihrem Oberflächenelement. Im Code würden sie den Text eines Labels z.B. folgendemaßen ändern: MyFrame.m_MyLabel.setText("Hallo World); in der ersten Spalte der Tabelle sieht dies folgendemaßen aus: MyFrame/m_MyLabel/text Sie können jederzeit hier händisch Einträge erstellen, wenn Sie z.B. nur kleine Änderungen in Ihrem Code vorgenommen haben. Sie sollten nur auf die korrekte Schreibweise achten!

## Weitere Code-Tipps

null- Werte
Um einen null-Wert zuzuweisen geben Sie einfach in der entsprechendn Spalte/Zeile null ein.
Bei kleinen Änderungen im Programmcode
Die erste Spalte enthält den Objekt/Eigenschaftenpfad zu Ihrem Oberflächenelement.
Im Code würden sie den Text eines Labels z.B. folgendemaßen ändern:
MyFrame.m_MyLabel.setText("Hallo World);
in der ersten Spalte der Tabelle sieht dies folgendemaßen aus:
MyFrame/m_MyLabel/text
Sie können jederzeit hier händisch Einträge erstellen, wenn Sie z.B. nur kleine Änderungen in Ihrem Code vorgenommen haben.
Sie sollten nur auf die korrekte Schreibweise achten!
Event beim Wechseln der Sprache
Wenn Ihre Klasse darüber informiert werden soll, dass die Sprache gewechselt wurde, dann muss Ihre Klasse den LiveeLanguageListener implemnetieren und die event Funktion
public class MyFrame extends JFrame implements LiveLanguageListener {
......
public void eventLanguageChanged(Locale p_OldLanguage, Locale p_SelectedLanguage) {
//add your code here
}
......
Sprache im laufenden Programm wechseln
Wenn Sie die Sprache im laufenden Programm wechseln wollen so müssen Sie folgendes aufrufen:
LiveLanguage.selectLanguage(Locale p_Locale);
//wobei p_Locale die Locale der neu einzustellenden Sprache ist.
Etwas komfortabler geht es mit der JComboBox_Language, diese ist im LanguagePackage enthalten.
Die ComboBox listet nur die Sprachen auf, die Sie mit dem Editor installiert haben und stellt die Sprache automatisch um..
public class MyFrame extends JFrame {
JComboBox_Language m_ComboBox_Language;
public MyClass() {
initComponents();
m_ComboBoxLanguage = new JComboBox_Language;
m_ComboBoxLanguage.setLanguageListener(this)
//Only the installed languages will be displayed
//Todo add the Combobox to your GUI
........
Die aktuell eingestellte Sprache ermitteln
Locale o_Locale = LiveLanguage.getLocaleActual();