Inhaltsverzeichnis
Translate

GnuGetText-Werkzeuge für Delphi


Einführung

Übersicht

GnuGetText ist ein System zum Entwickeln von mehrsprachigen Anwendungen. Es werden diverse Programmiersprachen unterstützt, u.a. C, C++, Python und Java. Eine Unterstützung von Delphi (Pascal) fehlt allerdings.
Im Jahr 2003 wurde von Lars B. Dybdahl erstmals eine Erweiterung dieses Systems für Delphi bereit gestellt: GNU Gettext for Delphi. Leider gibt es seit 2008 keine nennenswerte Weiterentwicklung. Auch ist die Bedienung bei Anwendungen mit einer Unterstützung für mehrere Sprachen etwas umständlich. Das vorliegende Programmpaket bietet neben den überarbeiteten Versionen der Originalprogramme eine neue Bedienungsoberfläche (GgtTranslate), die alle erforderlichen Schritte für die Erstellung und Bearbeitung der Übersetzungen unter einem Dach zusammenfasst und mehrere weitere Werkzeuge zum Bearbeiten und Integrieren von Übersetzungen in eigene Programme.

Prinzip

Basis für alle Übersetzungen ist eine Delphi-Anwendung, bei der alle Texte (Strings), die dem Benutzer angezeigt werden, in einer Ausgangssprache, vorzugsweise in Englisch, angegeben werden. Aus den Programm-Quelltexten wird als erstes eine po-Schablone (Textdatei) mit den Strings in der Ausgangssprache (z.b. englisch) als Vorlage für die Übersetzungen erstellt. Aus dieser kann dann mit einem geeigneten Editor, wie z.B. PoEdit, die sprachspezifische po-Datei erzeugt werden, indem String für String übersetzt wird. Wenn später im Programm Änderungen der Strings gemacht oder neue Strings hinzugefügt werden, muss die sprachspezifische po-Datei nur noch aktualisiert werden. Alle bereits übersetzten Strings bleiben erhalten:

  1. Die po-Schablone wird, wie zuvor beschrieben, neu erstellt.
  2. Die vorhandene Übersetzung wird mit der neuen Schablone zusammengeführt.
  3. Die geänderte Übersetzungsdatei wird mit einem Texteditor (z.B. PoEdit) aktualisiert.

Beispiel für eine po-Datei

  msgid ""
  msgstr ""
  "Project-Id-Version: Delphi-Units - Deutsche Übersetzung\n"
  "POT-Creation-Date: 2023-08-31 17:05+0200\n"
  "PO-Revision-Date: 2023-08-31 17:06+0200\n"
  "Last-Translator: J. Rathlev <name@mail.de>\n"
  "Language-Team: J. Rathlev <name@mail.de>\n"
  "Language: de_DE\n"
  "MIME-Version: 1.0\n"
  "Content-Type: text/plain; charset=UTF-8\n"
  "Content-Transfer-Encoding: 8bit\n"
  
  #. Programmer's name for it: rsExecuteError
  #: UnitConsts.pas:47
  msgid "Error executing process"
  msgstr "Fehler beim Ausführen eines Prozesses"
  
  #. Programmer's name for it: rsAnyKey
  #: UnitConsts.pas:125
  msgid "Strike any key to continue ..."
  msgstr "Drücken Sie eine beliebige Taste, um fortzufahren ..." 

Der erste Abschnitt (header) enthält allgemeine Angaben zur Übersetzung, insbesondere das Kürzel für die verwendete Sprache (hier de_DE) und die verwendete Zeichencodierung (UTF-8). Darauf folgen die Abschnitte mit den einzelnen Strings im Originalwortlaut (msgid) und der zugehörigen Übersetzung (msgstr). Zeilen, die mit # beginnen, enthalten Kommentare, z.B. den Namen der Quelltext-Datei (UnitConsts.pas mit der Zeilennummer und weitere Hinweise.

Download der ausführlichen englischen Beschreibung.

Anpassung der Delphi-Quelltexte

Beim Erstellen der po-Schablone (s.o.) werden die folgenden Strings erkannt:

Außerdem muss in das Delphi-Programm die Unit GnuGetText.pas eingebunden sein (weitere Infos).

Konzept der Text-Domänen

Es gibt die Möglichkeit, Übersetzungen in verschiedene Text-Domänen zu unterteilen. Damit ist es möglich, Gruppen von Unterprogrammen (z.B. Units und Dialoge, die in verschiedenen Anwendungen zum Einsatz kommen) getrennt zu übersetzen. Die Standarddomäne für eine Anwendung heißt immer default. Die Namen anderer Domänen sind frei wählbar, müssen in den jeweiligen Quelltexten aber genauso angegeben werden (z.B. units)

Einbindung der Übersetzung in die Anwendung

Die so erstellte po-Datei (Text) wird dann noch in eine mo-Datei (binär) konvertiert. Damit diese beim Start der Anwendung gefunden wird, muss sie an einem ganz bestimmten Unterverzeichnis der exe-Datei befinden:
  locale\<Sprach-Id>\LC_MESSAGES\ (<Sprach-Id> = de, fr, es, etc.)

Beispiel:   c:\Program Files (x86)\Delphi GetText\locale\de\LC_MESSAGES\default.mo

Programme aus dem Original-GnuGettext-Paket

Für die Funktion der bereit gestellten Delphi-Werkzeuge werden einige Programme aus dem Original-GnuGettext-Paket benötigt:

Diese Dateien sind im Installationspaket enthaltenen, können aber auch bei GitHub herunter geladen werden. Die Quelltexte findet man auf dem Gnu-Portal.

Installation

Die beschriebenen Programm werden als Windows-Setup bereit gestellt. Nach dem Download wird das Setup durch Doppelklick gestartet. Zur Installation sind die Berechtigungen eines Administrators erforderlich. Während der Installation kann ausgewählt werden, ob die Programme des Pakets direkt über die Windows-Kontextmenüs gestartet werden können.


J. Rathlev, D-24222 Schwentinental, September 2023