Ansel verwendet Gettext , um alle Teile des Projekts zu übersetzen:

  • Die Softwareanwendung (in C geschrieben),
  • Die Website (Hugo-Vorlagen und Markdown-Inhalt),
  • Die Dokumentation/Benutzerhandbuch, das als Modul in die Website eingefügt wird (ebenfalls Hugo-Vorlagen und Markdown-Inhalt).

Dies stellt sicher, dass derselbe Workflow verwendet werden kann, um alle Dateien zu übersetzen, aber auch, dass einige übersetzte Strings geteilt werden können (zum Beispiel können die übersetzten GUI-Steuerungen der Anwendung direkt in die Dokumentation eingefügt werden).

Organisation der Übersetzungsdateien

Der Quellcode der Website, der Dokumentation und der Software enthalten alle einen unmittelbaren po/ Unterordner, der Folgendes enthält:

  • Eine .pot-Datei, die alle verfügbaren, übersetzbaren Strings in ihrer Originalsprache (auf Englisch) enthält,
  • Viele .po-Dateien, die übersetzbare Strings in ihrer Originalsprache mit ihrer Übersetzung (je eine Sprache pro Datei) abgleichen.

Übersetzungsdateien sind alle nach dem Konventionsmuster language-code.po benannt. Zum Beispiel:

  • Für Deutsch,
    • ist die Softwareübersetzung de.po,
    • ist die Website-Übersetzung content.de.po,
    • ist die Dokumentationsübersetzung content.de.po,
  • Für Brasilianisches Portugiesisch,
    • ist die Softwareübersetzung pt_BR.po,
    • ist die Website-Übersetzung content.pt_br.po,
    • ist die Dokumentationsübersetzung content.pt_br.po.

Übersetzung, wenn Sie CLI/Git nicht verwenden können

Sie müssen die relevante .po-Datei für Ihre Sprache für den Teil des Projekts finden, den Sie übersetzen möchten:

  1. Laden Sie diese Datei herunter und öffnen Sie sie mit Poedit ,
  2. Nehmen Sie die erforderlichen Korrekturen und Änderungen vor,
  3. Fügen Sie Ihren Namen in einem Kommentar für die Strings hinzu, die Sie übersetzen möchten, wenn Sie auf der Seite genannt werden möchten:
    • Automatisch übersetzte Strings werden TRANSLATOR ChatGPT dort haben, wenn Sie diese Strings überprüfen, entfernen Sie bitte diese Zeile,
    • Fügen Sie dann einen Kommentar ein, der TRANSLATOR Ihr Name auf einer neuen Zeile enthält. Halten Sie andere (nicht ChatGPT) Mitwirkende dort, falls vorhanden.
  4. Speichern und:
    • Alternative 1 (einfacher für den Beitragenden, mehr Schritte für den Betreuer): Drop it auf meine private Cloud ,
    • Alternative 2 (mehr Schritte für den Beitragenden, einfacher für den Betreuer): Commit it mit Git und öffnen Sie eine Pull-Anfrage gegen das entsprechende Github-Repository.

Translating for power users

Dies wird die .pot Datei mit dem Quellcode des Projekts aktualisieren. Sie müssen Git installiert haben und Hugo 0.146  auf Ihrem Computer installieren.

  1. Clone Sie den Quellcode des entsprechenden Projekts:
    • Die Software:
      1$ git clone --depth 1 \
      2  https://github.com/aurelienpierreeng/ansel.git
      3$ cd ansel
    • Die Website:
      1$ git clone --depth 1 \
      2  https://github.com/aurelienpierreeng/ansel-website.git
      3$ cd ansel-website
    • Die Dokumentation:
      1$ git clone --depth 1 \
      2  https://github.com/aurelienpierreeng/ansel-doc.git
      3$ cd ansel-doc
    Später werden Sie das Repository mit folgender Zeile aktualisieren:
    1$ git pull
  2. Aktualisieren Sie .pot und alle .po Dateien vom Quellcode (diese Anweisung funktioniert für alle 3 Projekte gleich):
    1$ sh tools/update-translations.sh
  3. Übersetzen Sie die relevante .po Datei mit Poedit oder direkt in einem Texteditor (siehe Übersetzung, wenn Sie CLI/Git nicht verwenden können),
  4. Testen und überprüfen Sie Ihre Übersetzung:
    • Für die Software müssen Sie Ansel auf Ihrem OS aufbauen. Bitte sehen Sie sich die Dokumentation an.
    • Für die Website und die Dokumentation können Sie ausführen:
      1sh build-modules.sh
      2hugo
    Achten Sie auf kritische Fehler von po4a, besonders auf unpassende \n Zeichen und Fehler von Hugo, besonders im Bezug auf Shortcodes-Syntax.
  5. Für die Website und Dokumentation, bereinigen Sie die übersetzten Markdown-Dateien (die automatisch von po4a unter Verwendung der .po Datei generiert wurden), bevor Sie den Commit ausführen, mit:
    1sh tools/build-translations.sh --remove
  6. Committieren Sie alle .pot und .po Dateien und öffnen Sie eine Pull-Anfrage gegen das relevante Github-Repository. Übersetzte .md (Markdown) Dateien niemals committieren.

Translating images

Das Folgende gilt nur für die Website und Dokumentation.

Bilder können auch übersetzt werden, zum Beispiel Anwendungsscreenshots. Bilder werden im assets/ Ordner gespeichert, wenn sie auf mehreren Seiten wiederverwendet werden (globale Assets), andernfalls werden sie im selben Ordner wie die Markdown-Datei, die sie verwendet, gespeichert (lokale Assets). Egal ob global oder lokal, der Übersetzungsprozess ist derselbe, nur der Basisordner ändert sich.

Wenn Sie zum Beispiel assets/screenshot.jpg für die Sprache LANG übersetzen möchten (das ist der ISO-Code der Sprache, wie de, nl, pt_br, zn_cn, usw.):

  1. Fügt eine neue assets/screenshot.LANG.jpg Bilddatei in die Dokumentations- oder Website-Git-Repository hinzu und committiert diese,
  2. Im content.LANG.po, finden Sie den Eintrag, der den Markdown-Tag für das Originalbild enthält, was etwas wie ![alt text](screenshot.jpg) sein wird,
  3. Übersetzen Sie den Markdown-Tag, indem Sie die URL des Bildes ändern, wie ![übersetzter alt text](screenshot.LANG.jpg},
  4. Speichern und committieren Sie die content.LANG.po Datei,
  5. Erstellen Sie eine Pull-Anfrage gegen das Ansel-Website oder Ansel-Dokumentationsrepository.

Auto-Tools und Hilfsskripts

Init Dokumentationsübersetzung mit Software

Da Dokumentation und Software dieselben Strings für die GUI-Steuerungen teilen, können Sie die Dokumentations-Strings faul von den Software-Strings initialisieren, wenn sie exakt übereinstimmen (einschließlich Groß- und Kleinschreibung). Dies benötigt einen Python-Interpreter und das regex Paket (mit pip install -U regex installieren). Aus dem Quellcode der Dokumentation können Sie folgendes ausführen:

1$ python tools/merge-translations.py path/to/software path/to/doc

Dokumentation und Website mit ChatGPT automatisch übersetzen

ChatGPT-4o leistet eine sehr faire Arbeit bei der Übersetzung von Markdown-formatiertem Text aus dem Englischen, allerdings nicht in jeder Sprache. Sie benötigen einen privaten API-Schlüssel, den Sie im Ordner der Dokumentation oder Website in einer .chatgpt.api_key Datei ablegen. Dann sind Anrufe bei der ChatGPT API nicht kostenlos, und die minimale Zahlung von 5 US$ wird Ihnen etwa die vollständige Übersetzung der Website in 4 Sprachen ermöglichen.

Das All-in-One-Skript kann mit folgendem Befehl ausgeführt werden:

1$ sh auto-translate.sh LANG

wobei LANG der Ziel-Sprachschlüssel ist (de, fr, pt_br, usw.). Dies wird die Übersetzung in Paketen von 90 bis 120 Strings verarbeiten, um die ChatGPT API-Beschränkungen und -Schwellenwerte zu entsprechen. Dies wird:

  • Die ursprüngliche po/content.LANG.po Datei analysieren und das Paket zum Übersetzen in eine temporäre po/content.LANG.txt Datei exportieren,
  • Die po/content.LANG.txt Datei an ChatGPT senden und die Antwort in po/content.LANG.generated.txt erhalten
  • Die meisten bekannten Formatierungsinkonsistenzen, die ChatGPT einführen kann, korrigieren und die Übersetzungen zurück in po/content.LANG.po einspeisen,
  • Übersetzte Markdown-Dateien erstellen (mit dem Namenskonvention page.LANG.md folgend),
  • Die Website mit Hugo bauen.

Wenn all diese Schritte ohne Fehler abgeschlossen werden, dann können Sie das Skript erneut ausführen, um das nächste Paket bis zur Vollendung zu bearbeiten. Wenn Fehler angezeigt werden, müssen Sie diese beheben. Wir führen bei jedem Aufruf nur ein Paket aus, um dem Benutzer die Möglichkeit zu geben, Fehler zu finden, während nicht zu viele Änderungen zu überprüfen sind.

Häufige Fehler:

  • Nichts wird übersetzt: Überprüfen Sie die ChatGPT-Antwort in po/content.LANG.generated.txt, manchmal kann sie ihre Aufgabe nicht verstehen. Sie können es erneut versuchen, manchmal funktioniert es beim dritten Anruf. Aber oft gibt es nichts zu tun und einige Sprachen/Zeichenfolgen können überhaupt nicht übersetzt werden.
  • Beim Erstellen der Website mit Hugo kann keine Shortcode gefunden werden. Dies liegt daran, dass Shortcodes folgendermaßen deklariert werden: {{< shortcode_name >}}. Manchmal versucht ChatGPT den shortcode_name zu übersetzen und der Shortcode wird nicht mehr funktionieren. Die Lösung besteht darin, den englischen Namen für die Shortcodes und deren Attribute zurückzubringen,
  • Dasselbe gilt für Mermaid  Diagramme, ChatGPT kann versuchen, Befehle und Eigenschaften zu übersetzen, die nicht übersetzt werden sollten,
  • Original-Strings enden nicht mit dem Newline-Zeichen \n und die übersetzten Strings nicht (oder umgekehrt). Das Skript versucht, dies zu bereinigen, aber einige Randfälle werden nicht berücksichtigt. Original-Strings msgid und deren Übersetzung msgstr in der .po Datei sollten dieselbe Anzahl an \n Zeichen an derselben Stelle haben,
  • Unsachgemäßes Escaping von Anführungszeichen: Der msgid und msgstr Gettext-Strings sollten an jedem Ende des Strings durch nicht-escapierte Anführungszeichen " " begrenzt sein. Jedes andere Anführungszeichen innerhalb des Gettext-Strings sollte mit"` escaped werden.

Der beste Weg, um Fehler zu beheben, besteht darin, die relevante .po-Datei in einem Texteditor zu öffnen. Wenn Sie den Fehler nicht finden und lösen können, können Sie versuchen, die Datei in Poedit zu öffnen. Beim Speichern wird sie jedoch normalerweise die fehlerhaften Zeichenfolgen vollständig löschen, ohne sie zu beheben, sodass die Übersetzung erneut von Grund auf gestartet werden muss.

Übersetzte Markdown-Dateien erstellen

Für die Website und die Dokumentation übernimmt Hugo  die Übersetzungen einer beliebigen Seite new_page.md anhand der Namenskonvention new_page.LANG.md, wobei LANG der Sprachcode ist. Hugo unterstützt nativ das manuelle Schreiben dieser übersetzten Dateien im selben Ordner wie das Original, jedoch erstellen wir sie hier mit der .po-Übersetzungsdatei und dem Programm po4a. Die Skripte build-modules.sh und tools/auto-translate.sh erledigen dies intern, aber Sie möchten diese Dateien möglicherweise manuell erstellen:

  1. Aktualisieren Sie die .pot- und .po-Dateien mit dem Quellcode:
    1$ sh tools/update-translations.sh
  2. Erstellen Sie die übersetzten .md-Dateien:
    1$ sh tools/build-translations.sh --add
  3. Bereinigen Sie die übersetzten .md-Dateien:
    1$ sh tools/build-translations.sh --remove

Es ist wichtig, die übersetzten .md-Dateien niemals mit Git zu committen, da sie nur von diesem Skript beim Erstellen der Website neu generiert werden. Dies dient nur der Hygiene des Repositories, es gibt keinen technischen Nachteil. Das Bereinigen der übersetzten .md-Dateien vor dem Committen gewährleistet, dass keine Fehler auftreten.

Verloren in der Übersetzung?

Wenn Sie Probleme oder Fragen haben, zögern Sie nicht, im dedizierten Matrix-Translation-Kanal  nachzufragen.

Hinweise für Übersetzer

Richtlinien zu Großbuchstaben

Das darktable-Projekt hat es zur Priorität gemacht, alles in Kleinbuchstaben zu schreiben, was die GUI schwer lesbar macht, insbesondere für Tooltips, die mehrere Sätze enthalten. Großbuchstaben verankern visuell den Anfang von Sätzen und anderen wichtigen Texten, wie Schaltflächen, Steuerelementen usw. Es ist kein Zufall, dass alle Sprachen darauf gekommen sind, sie zu verwenden (obwohl Deutsch seine besondere Art hat, sie überall hinzusetzen), sie helfen der Lesbarkeit, unabhängig davon, ob Ihnen ihre Ästhetik gefällt oder nicht.

Ansel-Quellcode wiederverwendet die meisten von Darktable’s Labels und fügt an den meisten Stellen, an denen sie benötigt werden, eine initiale Großschreibung hinzu (Modulüberschriften, Schaltflächen). Dies wird durch etwas Code unter Verwendung der C-Funktion g_unichar_toupper() aus Gtk Glib erledigt, so dass der ursprüngliche englische Text klein geschrieben bleibt, um Kompatibilität mit Übersetzungen zu gewährleisten.

Dieser programmatische Fix funktioniert für nicht-akzentuierte Zeichen, unabhängig von der verwendeten Sprache (Standardzeichen in Englisch oder Übersetzungen). Er funktioniert jedoch nicht für initiale akzentuierte Zeichen, die nicht großgeschrieben werden. In diesem Fall werden die Übersetzer gebeten, ihre Übersetzung zu erzwingen, initiale großgeschriebene akzentuierte Zeichen zu verwenden, wann immer sie grammatisch in ihrer Sprache korrekt sind.

Neue Labels oder kürzlich geänderte alte Labels (was Übersetzungen sowieso brechen würde) erhalten von jetzt an initiale Großbuchstaben im Quellcode (englische Version), also sollte dies schrittweise behoben werden.

Technische Begriffe übersetzen

Technische Begriffe, die sich auf Farbtheorie und Farbmetrik beziehen, müssen genau aus dem Englischen übersetzt werden, mit besonderer Vorsicht, da diese Begriffe auch in der gemeinen Sprache (also nicht technisch) existieren können, aber mit anderen Bedeutungen. Die Internationale Elektrotechnische Kommission  bietet eine Suchmaschine, in der Sie die englischen technischen Begriffe suchen und die genauen Übersetzungen in verschiedenen Sprachen erhalten können, einschließlich der wichtigsten europäischen sowie arabischen und chinesischen Sprachräume.

Hinweise für französischsprachige Übersetzer

Die Übersetzung von darktable enthält einige Merkwürdigkeiten, die für jeden, der seit mehr als 10 Jahren einen Desktop-Computer benutzt, unverständlich sind. Hier ist eine schnelle Liste der Fehler, die zu korrigieren sind:

  • “set” wird mit “positionné” übersetzt, die korrekte Übersetzung ist jedoch “réglé”. Das ist unlogisch, da “settings” korrekt mit “réglages” übersetzt wird. In Ansel positionieren wir nur Masken (oder ihre Steuerelementknoten) im 2D-Raum. Der Rest sind Einstellungen.
  • “reset” wird mit “repositionné” übersetzt, aber die korrekte Übersetzung ist “réinitialiser”.
  • Im Englischen haben viele Verben dieselbe Schreibweise für ihren Infinitiv und ihr Partizip Perfekt, manchmal sogar als Substantiv (“set”, im obigen Beispiel, kann als “réglé” oder “régler” umbangepasst werden oder als “ense投 futένz” xing"lin"). Wenn eine Handlung (noch nicht durchgeführt) erforderlich ist, muss der Infinitiv im Französischen verwendet werden. Wenn eine Handlung bereits durchgeführt wurde, muss das Partizip Perfekt verwendet werden. Die Dinge werden komplizierter bei Substantiven, da das Englische nicht immer einen Determinanten davor erfordert, daher muss es aus dem Kontext abgeleitet werden. Zu beachten: “click” (klicken oder Klick), “type” (eingeben oder eintippen), etc.

Translated from English by : ChatGPT. In case of conflict, inconsistency or error, the English version shall prevail.