mistake.ws

Lingus Hilfe

Einleitung

Das hier ist keine wirkliche Bedienungsanleitung oder Hilfe, eher ein Crashkurs, um den schnellen Einstieg möglich zu machen. Hier wird erklärt, welche Schritte notwendig sind, um eine Applikation zu übersetzen. Wenn es danach noch Probleme gibt bin ich für Fragen jeglicher Art offen und per Mail oder über das Forum erreichbar.

Inhalt

Projekt vorbereiten

Zu aller erst muss das Delphi-Projekt für Lingus vorbereitet werden. Dazu sind die folgenden Schritte notwendig.

  • Das zu übersetzende Projekt mit Delphi öffnen.
  • Die Datei LanguageObjects.pas (aus LingusOrdner\pas) mit ins Projekt aufnehmen - entweder die Datei dem Projekt hinzufügen (nicht gut) oder dem Suchpfad hinzufügen (gut).
  • Units, die später auf die Übersetzungen zugreifen sollen, brauchen LanguageObjects im uses-Abschnitt.
  • Eigenschaften von Objekten (zur Zeit Caption und Hint) werden später von Lingus automatisch ermittelt, Strings müssen im Code bearbeitet werden. Zum Beispiel wird aus 'Hallo Welt' ein _('Hallo Welt'), ähnlich wie bei gettext. Eine Ausnahme ist der String '-'. Dieser wird von Lingus ignoriert.
  • In das Create-Ereignis oder den Konstruktor von Formularen muss Language.Translate(Self); hinzugefügt werden, damit die übersetzten Texte für die Komponenten übernommen werden. Von der Funktion gibt es auch eine Überladung - dort kann man PreTranslate und PostTranslate angeben, also Prozeduren, die jeweils vor und nach dem Übersetzen ausgeführt werden. Wurde Language keine Sprache zugewiesen, wie unter "Weiteres" beschrieben wird, wird die zu verwendende Sprache automatisch ermittelt. Wird die vom Benutzer verwendete, in Windows eingestellte, Sprache gefunden, wird diese verwendet. Falls nicht, wird Englisch verwendet. Ist auch Englisch nicht vorhanden, wird die als erste gefundene Sprache aus dem Lingus-Projekt benutzt.

Projekt übersetzen

Nach der Vorbereitung des Projektes kommt es zur Verwendung von Lingus.

  • Lingus starten und ein neues Projekt mit "Datei" -> "Neu..." anlegen.
  • Projekteinstellungen vornehmen und im nächsten Schritt das eben angepasste Delphi-Projekt importieren.
  • Texte können jetzt bearbeitet werden - im Programm sind links die aus dem Quelltext ermittelten Texte aufgelistet, rechts lassen sich die Übersetzungen bearbeiten.
  • Nach dem Übersetzen der Texte sollte das neue Lingus-Projekt gespeichert werden - ich benutze in dieser Anleitung als Dateiname ProjektOrdner\res\language.lpf.
  • Sofern vor dem Speichern nicht in den Programmeinstellungen "Resourcendatei bei Speichern exportieren" deaktiviert wurde, wurde beim Speichern die Datei ProjektOrdner\res\language.res erzeugt, welche jetzt nur noch dem Delphi-Projekt hinzugefügt werden muss.
  • Die Projektdatei des Delphi-Projektes öffnen (.dpr) und unter die Zeile {$R *.res} eine neue Zeile mit {$R res\language.res} hinzufügen, so werden die Texte bei der Kompilierung mit in die Ausgabedatei übernommen.

Übersetzungen nach Änderungen am Quelltext synchronisieren

Nach Änderungen von Komponententexten und Strings im Delphi-Projekt muss das Lingus-Projekt mit diesem synchronisiert werden.

  • Lingus starten und die zum Delphi-Projekt gehörende .lpf-Datei öffnen.
  • Im Menü von Lingus "Projekt" -> "Mit Quelltext vergleichen..." wählen.
  • Projektordner auswählen und Datenimport durchführen.
  • Änderungen können jetzt bequem verwaltet werden. Wurde ein neuer String gefunden, wird dieser mit entsprechendem Symbol dargestellt, wenn ein String aus dem Lingus-Projekt nicht im Quelltext gefunden wurde ebenso. In dem Synchronisierungsdialog werden die Möglichkeiten geboten, dem Lingus-Projekt neu gefundene Texte hinzuzufügen, alte Texte zu entfernen oder einen String aus dem Delphi-Projekt, der im Lingus-Projekt nicht gefunden wurde, da er sich verändert hat, einem bereits übersetzten zuzuordnen.

Weiteres

  • Während der Laufzeit die Programmsprache ändern

    Um die Programmsprache zu ändern, muss die im initialization-Abschnitt erstellte LanguageList aus LanguageObjects.pas benutzt werden, um die Eigenschaft CurrentLanguage von Language zu setzen, wie im folgenden Beispiel gezeigt wird.
    Wichtig ist dabei der anschließende Aufruf von Language.Translate(Self); in allen geöffneten Formularen, um die Änderung zu übernehmen.

    for i := 0 to LanguageList.Count - 1 do
      if LanguageList[i].Available then
      begin
        if LanguageList[i].ID = 'en' then
        begin
          Language.CurrentLanguage := LanguageList[i];
          Break;
        end;
      end;
    Language.Translate(Self);
    

    Alle Objekte in LanguageList sind vom Typ TLanguage. Sie haben die Eigenschaften ID, Name und Available. ID ist die Abkürzung, zum Beispiel "en" oder "de". Name ist der Name der Sprache wie "English" oder "German". Available gibt an, ob die Sprache im aktuellen Projekt vorhanden ist.

  • Übersetzungen aus Datei laden

    Um Übersetzungen aus einer .lpf-Datei zu laden, muss Language.LoadFromFile('Pfad\Datei.lpf') benutzt werden. Dies sollte passieren, bevor an irgendeiner Stelle Language.Translate() aufgerufen wird, ansonsten wird das Wechseln der aktiven Sprache unter Umständen nicht richtig funktionieren, wenn sich die als Resource eingebetteten Übersetzungen von denen aus der geladenen .lpf-Datei unterscheiden.

  • Symbole für Sprachen

    Die Datei LanguageIcons.pas (aus LingusOrdner\pas) beinhaltet die Klasse TLanguageIcons. Wenn eine Instanz dieser Klasse erstellt wurde, lässt sich auf die Symbole der verschiendenen Sprachen zugreifen. Dazu muss in der .dpr-Datei des Delphi-Projektes die Zeile {$R res\lang_icons.res} hinzugefügt werden, nachdem diese Datei aus LingusOrdner\res\ nach ProjektOrdner\res\ kopiert wurde. Zur Zeit sind nur Symbole für Deutsch, Englisch und Französisch enthalten. Die Eigenschaft List von TLanguageIcons ist eine ImageList, die mit den Symbolen der Sprachen befüllt wird. Der Index in dieser Liste für eine bestimmte Sprache lässt sich mit der Funktion GetIconIndex() herausfinden. Um zum Beispiel den Index für die Sprache deutsch zu erhalten, muss IconList.GetIconIndex('de') benutzt werden. Ausserdem gibt es noch die Funktion CreateIcon(), die ein TIcon zu einer bestimmten Sprache zurückliefert. Dieses muss anschließend vom Benutzer freigegeben werden.