Skip to content

Commit b46a11c

Browse files
committed
CLAUDE.md -> extend definition
1 parent be005bf commit b46a11c

1 file changed

Lines changed: 136 additions & 20 deletions

File tree

‎CLAUDE.md‎

Lines changed: 136 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)