Wiki-KopieMirror

Dies ist ein Mirror des Wikis von pascal.chat. Bearbeiten, Verlauf und Anmeldung finden dort statt.

Getting translation strings right/de

Deutsch · English · Español · Français · Русский · 日本語

Diese Seite enthält einige grundlegende Bemerkungen darüber, wie man Übersetzungstrings richtig hinbekommt vom Anfang an und aus der Sichtweise eines Originalautors (d.h. zumeist eines Programmierers).

"Richtig hinbekommen" (To get it right) bedeutet in diesem Zusammenhang, dass die Übersetzungsstrings für eine leichtere nachfolgende Übersetzung richtig vorbereitet wurden, und dass die Originalversion an die grundlegenden Erfordernisse für ihren Einsatz angepasst wurde.

Obwohl hier versucht wurde, so sprachneutral wie möglich zu bleiben, besteht de facto eine leichte Einseitigkeit zugunsten des Englischen. Es liegt in Ihrem Ermessen, Richtlinien zu erweitern oder diejenigen zu verwerfen, die nicht auf Ihre Situation passen. (Oder vielleicht fügen Sie sie auch an diese Seite an?)

Allgemeines

Um Probleme zu vermeiden, stellen Sie einfach sicher, dass zuallererst die Originalstrings in Ordnung sind - dafür gibt es einige Gründe:

Versuchen Sie deshalb, sicher zu stellen, dass die Schreibweise korrekt ist - nehmen Sie ein Wörterbuch zur Hand, wenn Sie sich unsicher sind (z.B. 1).

Benutzen Sie verständliche und bekannte Phrasen für die Situation, die Sie beschreiben möchten, in einer einheitlichen Weise. Falls Sie unsicher sind, ob etwas geläufig ist, schauen Sie sich ähnliche Programme an und betrachten Sie deren Ausgaben. Auch die Literatur und Hilfedateien sind oft eine gute Quelle für die genauen Fachbegriffe oder -ausdrücke, oder Fragen des Stils. Bleiben Sie auch in der Auswahl der Phrasen einheitlich. Beispielsweise haben die Fragen

text
Delete the file? (Datei löschen?)
Erase the file? (Datei beseitigen?)
Remove the file? (Datei entfernen?)
Wipe the file? (Datei säubern?)
Zap the file? (Datei vernichten?)

alle fast die selbe Bedeutung. Wenn man sie aber - ohne ersichtlichen Grund - wahlweise einsetzt, interpretiert manch ein Leser verrückte Dinge hinein. Besonders anfällig für diesen Fehler sind Übersetzer, weil sie oft den genauen Kontext einer bestimmten Nachricht nicht kennen (z.B. Informationen über den Ursprung der Nachricht). Sie könnten einfache Wortvariationen als Hinweis auf bedeutende Unterschiede interpretieren, und geraten in Versuchung, unübliche (schlechte) Übersetzungen zu wählen.

Besonders bei Fehlermeldungen an den Benutzer gilt: Beschreiben Sie das Problem selbst in passenden Worten. Das ist niemals der Zustand des Programms, der zur Fehlermeldung führte. Dieser ist nur für die Person nützlich, die den Fehler im Programm beseitigen soll, nicht für den Benutzer. Benutzer werden entweder einfach mit den Schultern zucken und den Fehler bestenfalls ignorieren. Oder aber sie wechseln im schlechtesten Fall zu einem anderen Programm, weil sie ohne eine genaue Problembeschreibung nicht das Problem lösen und mit ihrer Arbeit fortfahren können. All das nur, weil das Programm keine brauchbare Problembeschreibung lieferte.

Nehmen Sie (leicht) verständliche Beschreibungen. Versuchen Sie nicht, Ihre Kunden mit Fremdwörtern oder technischen Begriffen zu beeindrucken, nur um ihnen zu sagen, dass ihre Arbeit nicht gespeichert werden konnte.

Vermeiden Sie mehrfache Verneinungen innerhalb eines einzelnen Satzes. Diese sind fast immer schwerer zu lesen als ihre nicht-negierten Gegenstücke. Ein Beispiel wäre

text
Diese Komponente kann auf Non-TControls nicht abgelegt werden.

Hingegen ist die nicht-negierte Formulierung

text
Diese Komponente kann nur auf TControls abgelegt werden.

sicher leichter zu lesen und zu verstehen.

Technische Fragen

In diesem Abschnitt erhalten Sie einen kurzen Überblick über technische Fragen, eigentlich einen Überblick über die grundlegenden Möglichkeiten. Diese umfassen das Konstrukt 'resourcestring', GNU gettext() und die Funktion 'format()'.

Ressourcenstrings und GNU gettext

Free Pascal hat einige eingebaute Sprachkonstrukte für die Behandlung konstanter Zeichenketten. Es gibt einen Abschnitt einer Unit namens "resourcestring", die speziell für diesen Zweck eingeführt wurde. Siehe auch den entsprechenden Abschnitt des FPC-Handbuchs (prog.pdf, S. 89ff oder hier) für die Details.

GNU gettext ist ein spezieller Satz von Werkzeugen, um Übersetzungen für Ihre Programme zu liefern. Siehe ebenfalls im FPC-Handbuch (prog.pdf, S. 91ff oder hier).

Anmerkung: GNU gettext hat eine konzeptuelle Macke, die es nicht erlaubt, einen einzelnen Originalstring an mehrere übersetzte Strings zuzuweisen, also Achtung.

Ressourcenstrings in der IDE

Um die Erzeugung der .po-Dateien für ein Package zu aktivieren, beachten Sie folgende Schritte:

text
 * Erstellen Sie ein Unterverzeichnis namens 'languages' (oder 'locale', oder sonstwie).
 * Öffnen Sie das Package. Stellen Sie unter Einstellungen -> IDE Integration -> Verzeichnis der .po-Dateien das Verzeichnis languages ein.

Wenn Sie das nächste Mal das Package kompilieren, erzeugt die IDE die .po-Dateien. Anmerkung: Die .rst-Dateien müssen zu den Package-Units gehören. Andernfalls ignoriert die IDE die fremden .rst-Dateien.

Das funktioniert auch bei Projekten. Das Verzeichnis wird unter Projekt -> Projekteinstellungen -> IDE Integration -> Verzeichnis der .po-Dateien.

Ressourcenstrings in Ihrer Anwendung

Sie können die .po-Dateien bei der Initialisierung laden, um die Ressourcenstrings zu übersetzen. Fügen Sie dies Ihrer .lpr-Datei hinzu:

pascal
...
uses
  ...
  Translations, LazUTF8;

procedure TranslateLCL;
var
  PODirectory, Lang, FallbackLang: String;
begin
  PODirectory:='/path/to/lazarus/lcl/languages/';
  Lang:='';
  FallbackLang:='';
  LazGetLanguageIDs(Lang,FallbackLang); // in der Unit LazUTF8
  Translations.TranslateUnitResourceStrings('LCLStrConsts',
                      PODirectory+'lclstrconsts.%s.po',Lang,FallbackLang);
  // ... fügen Sie hier einen Aufruf von TranslateUnitResourceStrings für jede .po-Datei hinzu ...
end;

begin
  TranslateLCL;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Anmerkung für Mac OS X: Die IDs der unterstützten Sprachen sollten in der Eigenschaftenliste des Anwendungspakets zum Schlüssel CFBundleLocalizations hinzugefügt werden, für ein Beispiel siehe lazarus.app/Contents/Info.plist.

Die Funktion format()

Um in Übersetzungen nicht nur völlig statische Zeichenketten einzusetzen, können Sie auch die Methode format() aus der Unit 'sysutils' verwenden. Mit ihr können Sie Platzhalter innerhalb eines vorgegebenen Texts durch deren tatsächlichen Wert ersetzen, der als zweiter Parameter in einer Menge gegeben ist. Beispiel:

text
format('Morgen am %0:s wird es %1:s geben.', ['Sonntag', 'Sonnenschein']);

liefert

text
Morgen am Sonntag wird es Sonnenschein geben.

In diesem Fall steht %0:s als Platzhalter für das erste Argument (mit dem Index 0) aus der Wertemenge (Sonntag), und entsprechend %1:s für das zweite. Für eine exakte Definition der erlaubten Platzhalter und ihre Syntax siehe das FPC-Referenz-Handbuch.

Einige Richtlinien für den Gebrauch der Funktion format()

Anmerkung: Da format() bestimmte Steuerzeichen (z.B. wie C's "\n", "\t", u.s.w.) nicht versteht und GNU gettext aus bestimmten Gründen das gewählte Übersetzungssystem (und die darauf basierenden Werkzeuge nicht fähig sind, solche Steuerzeichen zu interpretieren), ist es erforderlich, die Zeilenvorschübe programmatisch einzufügen.In der aktuellen Version von Lazarus werden "\n" und "\t" in übersetzten Zeichenketten durch newline und tab ersetzt.

Konvertierung der Übersetzung in den richtigen Zeichensatz

Zum Beispiel: wandeln Sie eine Datei von ISO-8859-1 zu UTF-8 um:

text
 iconv --from-code=ISO-8859-1 --to-code=UTF-8 oldfile.po > newfile.po

Vergessen Sie nicht die Zeile

pascal
 "Content-Type: text/plain; charset=ISO-8859-1\n"

zu ändern in

pascal
 "Content-Type: text/plain; charset=UTF8\n"

Aufs Englische bezogen

Dieser Abschnitt enthält Anmerkungen, die besonders dann Berechtigung haben, wenn Sie Englisch als Ausgangssprache für Übersetzungen benutzen.

text
There was an error ! Please check file settings , compiler settings,... to fix this issue.

hat eine entsetzliche Interpunktion, sieht deshalb einfach schlecht aus und ist schwerer zu lesen als gewohnt. Bedenken Sie auch, dass übliche Algorithmen zum Zeilenumbruch die Zeilen an den Leerzeichen aufteilen, das würde in einem einzelnen Punkt am Zeilenanfang resultieren.

text
There was an error! Please check file settings, compiler settings, ... to fix this issue.

wäre wahrscheinlich in Ordnung aus der Sicht der Interpunktion.

Siehe Auch


From the Free Pascal wiki, page "Getting translation strings right/de", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Version 4, zuletzt geändert von WikiArchive .