@@ -5,39 +5,155 @@ als Gettext-Dateien (`.po`). Übersetzt wird ausschließlich der `msgstr`.
55
66## Sprache und Terminologie
77- Durchgehend „Du"-Form, niemals „Sie"
8- - „Built-in" → „integriert"
9- - „dictionary" → „Dictionary" (nicht „Wörterbuch")
10- - „string" → „Zeichenkette" (nicht „String" oder „Zeichenfolge")
11- - „iterable" → „iterierbares Objekt"
128- Funktionsbeschreibungen in der 3. Person: „Gibt … zurück"
13- - Deutsche Anführungszeichen „…“, nie um Rollen oder Code herum
9+ - Bei Fachbegriffen ist ` glossary.po ` maßgeblich. Im Zweifel dort
10+ nachschlagen, bevor ein Begriff neu übersetzt wird
11+ - „Built-in" → „integriert" (nicht „eingebaut")
12+ - „dictionary" → „Dictionary", „dictionary comprehension" →
13+ „Dictionary Comprehension", „dictionary view" → „Dictionary-View",
14+ „list comprehension" → „List Comprehension". So lauten die
15+ Glossar-Stichwörter, und das Glossar entscheidet
16+ - „string" → „Zeichenkette" (nicht „String" oder „Zeichenfolge")
17+ - „iterable" → „Iterable" (im Repo 66 zu 42 gegenüber „iterierbares Objekt")
18+ - „comprehension" → „Comprehension", nie „Kompression" oder „Abstraktion"
19+ - „display" (list/set/dict display) → „Display", nicht „Anzeige". Dafür
20+ gibt es kein Glossar-Stichwort; die Wortbildung lautet
21+ „Wörterbuch-Display" (13 Fundstellen gegen keine andere Variante)
22+ - „decorator" → „Decorator" (nicht „Dekorateur")
23+ - „font" → „Schriftart", nicht „Schrift"
24+ - „root window" → „Root-Fenster", „toplevel window" → „Toplevel-Fenster",
25+ „main window" → „Hauptfenster"
26+ - „event loop" → „Ereignisschleife"
27+ - „canvas" → „Zeichenfläche"
28+ - „namespace package" → „Namespace-Paket"
29+ - „thread state" → „Thread-Zustand", „attached" dazu → „angehängt"
30+ - „lazy import" → „verzögerter Import"
31+ - „subscription expression" → „Indexausdruck"
32+ - „universal newlines" → „universelle Zeilenumbrüche"
1433- „unraisable exception" → „nicht weiterleitbare Ausnahme
1534 (unraisable exception)" beim ersten Vorkommen, danach kurz
1635- „free-threaded build" → „Build mit freien Threads" (laut Glossar)
17- - Bei Fachbegriffen ist ` glossary.po ` maßgeblich. Im Zweifel dort
18- nachschlagen, bevor ein Begriff neu übersetzt wird.
36+ - „look and feel" → „Aussehen und Verhalten"
37+ - „themed widgets" → „Widgets mit Themes"
38+ - „wrapper" → „Hülle", „convenience function" → „Hilfsfunktion"
39+ - „factory function" → „Factory-Funktion", „factory" allein → „Factory".
40+ Nicht „Fabrikfunktion": zwar die Ableitung von „Fabrikmethode" aus der
41+ deutschen Muster-Literatur, klingt aber gestelzt und ist nicht
42+ nachschlagbar. Plural „Factorys" wie „Dictionarys" (Duden-Linie für
43+ englische Lehnwörter auf -y)
44+ - Englisch bleiben im tkinter-Bestand: Widget, Frame, Toplevel, Callback,
45+ Scrollbar, Tag, Mixin, Theme
46+
47+ Offen und größer als es aussieht: die Schreibweise der * qualifizierten*
48+ Comprehension-Formen. Im Repo stehen dafür 38 Fundstellen in 18
49+ verschiedenen Schreibweisen. Allein „list comprehension" kommt in sieben
50+ Varianten vor — „Listen-Comprehension", „Listen-Comprehensions",
51+ „List Comprehension", „List Comprehensions", „List-Comprehension",
52+ „List-Comprehensions" und „Listenkomprimierung". Das Glossar schreibt
53+ „List Comprehension", „Dictionary Comprehension" und „Set Comprehension",
54+ also englisch mit Leerzeichen; danach wäre das die Zielform. Vor dem
55+ Angleichen entscheiden, dann in einem Durchgang über alle neun betroffenen
56+ Dateien (builtins/stdtypes, glossary, howto/functional, reference/expressions,
57+ tutorial/classes, tutorial/datastructures, whatsnew/3.15 und zwei weitere).
58+ Das bloße Wort „Comprehension" ohne Qualifikation ist überall einheitlich
59+ und nicht betroffen.
60+
61+ ## Zeichensetzung
62+ - Deutsche Anführungszeichen „…", nie um Rollen oder Code herum
63+ - Kein Semikolon mit kleingeschriebener Fortsetzung. Stattdessen Komma,
64+ wenn der Satz es trägt, sonst Punkt und Großschreibung — auch dann,
65+ wenn das englische Original ein Semikolon setzt
66+ - Ein Leerzeichen nach dem Satzende, nicht zwei (das Original setzt oft zwei)
67+ - Kein verwaistes schließendes Anführungszeichen am Satzende
68+ - Tippfehler im englischen Original werden im ` msgstr ` korrigiert, nicht
69+ nachgebildet. Für Code-Literale gilt das Gegenteil: buchstabengetreu
1970
2071## reST- und PO-Syntax
21- - ` msgid ` NIEMALS ändern, auch nicht bei Tippfehlern im Original
72+ - ` msgid ` NIEMALS ändern, auch nicht bei Tippfehlern im Original. Eine
73+ unquotierte Zeile im ` msgid ` lässt ` msgmerge ` mit „missing 'msgstr'
74+ section" abbrechen und blockiert damit die ganze CI
2275- Rollen (` :func: ` , ` :class: ` , ` :ref: ` , ` :term: ` , ` :meth: ` , ` :exc: ` )
2376 exakt übernehmen; Anzahl und Reihenfolge müssen msgid und msgstr
2477 entsprechen
2578- Bei ` :term: ` und ` :ref: ` mit deutschem Anzeigetext immer das Ziel
26- angeben: ` :term: ` Sequenz <sequence >``
27- - Parameternamen zwischen Sternchen bleiben englisch: * maxsplit*
28- - Nach `` ` `` oder ` * ` nie direkt ein Buchstabe oder Bindestrich
29- (kein ` *m*s ` , kein ` :class: ` X` -Instanz ` )
79+ angeben: ` :term: ` Sequenz <sequence >``. Der Bezeichner in spitzen
80+ Klammern bleibt zwingend englisch
81+ - ` :dfn: ` ist kein Querverweis — der Text wird übersetzt, ein Ziel ist
82+ weder nötig noch erlaubt
83+ - Keine zusätzliche Backtick- oder Stern-Klammer um eine Rolle:
84+ `` ` :class:`tuple` ` `` ist falsch. Sphinx paart Backticks von links
85+ nach rechts, dadurch zerfallen alle folgenden Verweise im selben Absatz
86+ - Nach dem schließenden Backtick einer Rolle kein Leerzeichen vor einem
87+ angehängten Wort: `` :exc:`GeneratorExit`-Ausnahme `` , nicht
88+ `` :exc:`GeneratorExit` -Ausnahme `` . Ein Bindestrich direkt am
89+ schließenden Backtick ist erlaubt, ein Buchstabe nicht
3090- Vor einer Rolle immer ein Leerzeichen
31- - Code-Literale, Programmausgaben und ` :: ` am Zeilenende unverändert
91+ - Parameternamen zwischen Sternchen bleiben englisch: * maxsplit*
92+ - Code-Literale, Programmausgaben und ` :: ` am Zeilenende unverändert.
93+ `` Literale `` aus dem Original bleiben erhalten und werden nicht durch
94+ deutsche Anführungszeichen ersetzt
95+ - Codeblöcke bleiben buchstabengetreu; übersetzt werden höchstens die
96+ Kommentarzeilen. Nie übersetzt werden Schlüsselwörter,
97+ Interpreter-Ausgaben und String-Literale, auf die sich eine Ausgabe bezieht
98+ - Platzhalter wie ` %s ` , ` {0} ` oder ` <TRANSLATION_REPO_> ` bleiben unverändert
3299- ` #, fuzzy ` nach dem Übersetzen entfernen
33100
101+ ## Zwei Fallen, die den Build mit ` -W ` abbrechen
102+ - ** Seitentitel.** Die erste Überschrift eines LaTeX-Wurzeldokuments darf
103+ nicht mit Auszeichnung beginnen — nicht mit `` Literal `` , nicht mit einer
104+ Rolle, nicht mit * kursiv* . Falsch ist `` `` optparse``-Code nach
105+ `` argparse `` migrieren `` , richtig `` Migration von `` optparse `` -Code zu
106+ `` argparse `` ``. Betroffen sind alle ` howto/*.po ` außer ` index.po ` ,
107+ ` whatsnew/3.x.po ` und die Wurzeldokumente (about, bugs, contents,
108+ glossary, ` */index.po ` ). CPython baut aus jedem davon ein eigenes
109+ LaTeX-Dokument, dessen erste Überschrift zum ` \title{} ` wird; Sphinx
110+ verlangt dort einen reinen Textknoten und warnt sonst „document title is
111+ not a single Text node". Im Fließtext und in Zwischenüberschriften ist
112+ Auszeichnung am Anfang unbedenklich. ` check_markup.py ` prüft das als
113+ Fehlerart ` titel `
114+ - ** Benannte Verweise auf eigene Überschriften.** `` `Tab Options`_ ``
115+ zielt auf das implizite Ziel der Überschrift „Tab options", und Sphinx
116+ bildet dieses Ziel aus dem * übersetzten* Text. Überschrift und Verweis
117+ müssen deshalb gemeinsam und zeichengenau gleich übersetzt werden, sonst
118+ bricht der Build mit „Unknown target name" ab. In ` library/tkinter.ttk.po `
119+ betrifft das sechs Paare. Benannte Verweise mit eigener URL
120+ (`` `Titel <https://…>`_ `` ) sind davon nicht betroffen, ihr Anzeigetext
121+ ist frei übersetzbar. Benannte Verweise ohne URL und ohne eigene
122+ Überschrift im Dokument (`` `complex arrays`_ `` ) bleiben unübersetzt
123+
34124## Prüfungen nach jedem Abschnitt
35- powrap <datei>
36- msgfmt --check -o /dev/null <datei>
125+ Am einfachsten über das Skript, das genau diese Kette abbildet:
126+
127+ ./pre_push_check.sh
128+
129+ Stufe 1 sind fünf Schritte: ` powrap -m ` , ` msgfmt --check --check-format ` ,
130+ ` sphinx-lint ` , ` check_roles.py ` und ` tools/check_markup.py ` mit acht
131+ Fehlerarten (klammer, anzeige, verweis, code, literal, typo, bindestrich,
132+ titel). Einzeln für eine Datei:
133+
134+ msgfmt --check --check-format -o /dev/null <datei>
37135 sphinx-lint <datei>
38- python3 check_roles.py <datei>
136+ python3 tools/check_markup.py <datei>
137+
138+ ` powrap ` nur mit ` -m ` auf geänderte Dateien anwenden. Auf eine Datei, die
139+ vorher nicht powrap-sauber war, erzeugt es hunderte Zeilen Fremddiff. Die CI
140+ formatiert nach jedem Push ohnehin selbst nach.
141+
142+ Achtung, Stufe 1 deckt den LaTeX-Teil der CI nicht ab: ` pre_push_check.sh `
143+ baut nur ` html ` , der Workflow ` test-build.yml ` baut ` html ` ** und** ` latex ` ,
144+ beides mit ` -W ` . Die Titelregel oben ist genau die Fehlerklasse, die lokal
145+ grün ist und erst in der CI auffliegt.
146+
147+ Gemeldete Fehler beheben und die Prüfungen erneut ausführen – höchstens
148+ drei Versuche. Bleiben danach Fehler bestehen: nicht committen, sondern die
149+ betroffenen Einträge und die Fehlermeldungen auflisten und auf Rückmeldung
150+ warten.
39151
40- Gemeldete Fehler beheben und die Prüfungen erneut ausführen –
41- höchstens drei Versuche. Bleiben danach Fehler bestehen: nicht
42- committen, sondern die betroffenen Einträge und die Fehlermeldungen
43- auflisten und auf Rückmeldung warten.
152+ ## Arbeitsweise
153+ - Keine Git-Schreibbefehle in diesem Repository. Committen, Branch-Wechsel
154+ und Pushen macht Swen selbst über PyCharm
155+ - Keine neuen Skripte im Repository anlegen, ohne vorher zu fragen
156+ - Vor einer Korrektur erst zeigen, was geändert werden soll — mit Datei und
157+ Zeilennummer, nicht als Umschreibung
158+ - Dateien unter ` .github/workflows/ ` sind über die Gerätebrücke nicht
159+ schreibbar; solche Änderungen gehen als fertige Datei in den Chat
0 commit comments