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
,
- ist die Softwareübersetzung
- 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
.
- ist die Softwareübersetzung
Ü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:
- Die Software: https://github.com/aurelienpierreeng/ansel/tree/master/po
- Die Website: https://github.com/aurelienpierreeng/ansel-website/tree/master/po
- Die Dokumentation: https://github.com/aurelienpierreeng/ansel-doc/tree/master/po
- Laden Sie diese Datei herunter und öffnen Sie sie mit Poedit ,
- Nehmen Sie die erforderlichen Korrekturen und Änderungen vor,
- 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.
- Automatisch übersetzte Strings werden
- 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.
- Clone Sie den Quellcode des entsprechenden Projekts:
- Die Software:
- Die Website:
- Die Dokumentation:
1$ git pull
- Die Software:
- Aktualisieren Sie
.pot
und alle.po
Dateien vom Quellcode (diese Anweisung funktioniert für alle 3 Projekte gleich):1$ sh tools/update-translations.sh
- Übersetzen Sie die relevante
.po
Datei mit Poedit oder direkt in einem Texteditor (siehe Übersetzung, wenn Sie CLI/Git nicht verwenden können), - 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:
\n
Zeichen und Fehler von Hugo, besonders im Bezug auf Shortcodes-Syntax. - 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
- 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.):
- Fügt eine neue
assets/screenshot.LANG.jpg
Bilddatei in die Dokumentations- oder Website-Git-Repository hinzu und committiert diese, - Im
content.LANG.po
, finden Sie den Eintrag, der den Markdown-Tag für das Originalbild enthält, was etwas wie
sein wird, - Übersetzen Sie den Markdown-Tag, indem Sie die URL des Bildes ändern, wie
. 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ärepo/content.LANG.txt
Datei exportieren, - Die
po/content.LANG.txt
Datei an ChatGPT senden und die Antwort inpo/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 denshortcode_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-Stringsmsgid
und deren Übersetzungmsgstr
in der.po
Datei sollten dieselbe Anzahl an\n
Zeichen an derselben Stelle haben, - Unsachgemäßes Escaping von Anführungszeichen: Der
msgid
undmsgstr
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:
- Aktualisieren Sie die
.pot
- und.po
-Dateien mit dem Quellcode:1$ sh tools/update-translations.sh
- Erstellen Sie die übersetzten
.md
-Dateien:1$ sh tools/build-translations.sh --add
- 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.