Multilinguale Threads sind kein Übersetzungsproblem: Sag „write", nicht „translate", und filtere Entwürfe mit einem lokalen .length-Skript.
Heute 5 Artikel veröffentlicht. Jeder mit Tweet-Thread in 6 Sprachen (en / zh / ja / ko / ar / id), 4 Tweets pro Sprache — insgesamt 120 Tweets.
Bei 4 von 5 musste der chinesische Thread gekürzt werden. Die Rohzahlen (vom Script ausgegeben, Format chars/limit):
zh[1]=160/140 OVER
zh[2]=164/140 OVER
zh[3]=152/140 OVER
...
id[3]=286/280 OVER
zh[2]=163/140 OVER
zh[3]=148/140 OVER
zh[2]=152/140 OVER
Jedes Mal dasselbe Muster: zuerst die vier englischen Tweets (je 230–260 Zeichen, dicht am 280er-Limit), dann Claude bitten, „aus diesen vier die chinesische Version zu erzeugen". Die chinesische Version landet fast immer über 140.
Kein Bug, sondern das falsche Wort. Sobald du „translate" sagst, fängt Claude an, Satz für Satz zu übersetzen — aber ein multilingualer Thread ist kein Übersetzungsproblem. Jede Sprache muss gegen ihr eigenes Zeichenbudget von Grund auf neu geschrieben werden. Dieser Beitrag zeigt, wie man Claudes ersten Entwurf direkt nah ans Limit bekommt, statt 3–5 Runden zu kürzen.
X zählt nicht „Zeichenzahl", sondern weighted characters:
- Lateinische Buchstaben, Ziffern, Satzzeichen: 1 weight pro Zeichen
- CJK-Zeichen (Chinesisch/Japanisch/Koreanisch), manche Emojis: 2 weight pro Zeichen
- Obergrenze pro Tweet: 280 weight
In der Praxis:
- Englischer Tweet: 280 Zeichen
- Reiner chinesischer Tweet: 140 Zeichen (140 × 2 = 280)
- Mischmasch: pro Zeichen 1 oder 2
„260 Zeichen Englisch auf Chinesisch übersetzen" ergibt also keine chinesische Fassung mit 260 Zeichen — die chinesische Fassung hat real etwa 130 Zeichen Platz. Die im englischen Original enthaltene Zeichensetzung, Anführungszeichen und Backticks belegen weiterhin Platz, und jedes chinesische Zeichen zählt doppelt. Wörtliches Übersetzen überschreitet das Limit fast garantiert.
Sieht Claude „translate these 4 EN tweets to ZH", ist sein erster Reflex, die englische Satzstruktur beizubehalten und nur die Wörter ins Chinesische auszutauschen:
Die Bedeutung stimmt, aber:
- „并不相同" bleibt (ein Zeichen länger als „不同")
- „已经点击了" bleibt („刚点完" ist kürzer)
- „并看着一个空白屏幕" bleibt („看着空白屏" ist kürzer)
Jede beibehaltene Redundanz frisst Zeichen. Über 4 Tweets summieren sich 20–40 überschüssige Zeichen problemlos, und das Limit ist gerissen.
Vergleiche die zwei Formulierungen:
Was nicht funktioniert:
„Translate these 4 English tweets to Chinese, Japanese, Korean, Arabic, Indonesian."
Was funktioniert:
„For each of these 4 points, write a thread in ZH / JA / KO / AR / ID. Each language gets a fresh pass — same argument, adjusted for that language's tweet budget.
- ZH: ≤ 140 chars per tweet, hook-first, cut detail if needed
- other languages: ≤ 280 chars
- use each language's natural phrasing, don't preserve EN sentence structure
- each tweet must be self-contained but add 🧵 only on tweet 1"
Die Unterschiede:
.lengthNicht per Augenmaß zählen. Ein kleines Script für jeden Entwurf:
tweets.each do |loc, list|
list.each_with_index do |t, i|
len = t.length
limit = loc == "zh" ? 140 : 280
status = len > limit ? "OVER" : "ok"
puts "#{loc}[#{i}]=#{len}/#{limit} #{status}"
end
end
Rubys String#length liefert Unicode-Codepoints — jedes CJK-Zeichen zählt als 1. X wichtet CJK mit 2, aber das Limit eines chinesischen Tweets sind 140 Codepoints (weil 140 × 2 = 280 weighted), deshalb deckt sich .length direkt mit Xs Obergrenze. Die Randfälle:
Bei der großen Mehrheit der CJK-Tweets liegt Rubys .length im Bereich von ±1 zu Xs Zählung. Als lokales Gate schlägt das einen Testpost auf X 100×.
Wenn chinesische Tweets gekürzt werden müssen, fallen diese zwei Kategorien zuerst:
Code-Zitate wie `kamal exec` fressen im chinesischen Kontext 1 Zeichen pro Backtick — 2 Zeichen pro Zitat, null semantischer Mehrwert. Lösungen:
`kamal exec`"🧵 nur im ersten Tweet. Andere Emojis im chinesischen Tweet — zweimal überlegen. Jedes Emoji kostet faktisch 2 Zeichen (1 Codepoint + manchmal ZWJ-Modifier).
'X') — spart 2 Zeichen pro Paar gegenüber full-width (「X」)Beim Generieren multilingualer Threads diese vier blockieren:
Symptom: chinesische Sätze mit Formulierungen wie „并不相同", „已经点击了", „一个空白屏幕" — klare Calques aus dem Englischen.
Blockade: „don't preserve EN sentence structure" / „use natural ZH phrasing" direkt in den Prompt.
Symptom: Claude sagt „done", die Ausgabe überschreitet das Limit, er merkt es nicht.
Blockade: Claude soll die Länge jedes Tweets selbst zählen („count each tweet's char length and flag any over the limit") oder ein lokales Script als Gate. Ich wähle das Script — Ruby ist genauer als Claude.
Symptom: beim Zählen vergisst Claude das Extra-Weight von Emojis und full-width-Anführungszeichen.
Blockade: Claude nicht fragen „ist es drüber?" — lokal .length laufen lassen und ihn anhand der Zahlen kürzen lassen.
Symptom: mal bekommt jeder Tweet ein 🧵, mal nur Tweet 1, mal landet es bei 4/4.
Blockade: im Prompt festschreiben — „🧵 only on tweet 1". Claude kennt die visuelle Thread-Konvention nicht von sich aus.
Sechs Regeln für einen ersten multilingualen Thread-Entwurf am Limit:
"cut detail if needed" sagt Claude, dass er Fakten für Länge opfern darf..length als Gate. Genauer als Claudes Zählung, schneller als ein Testpost.Die eigentliche Einsicht: Claude kann multilinguale Threads korrekt schreiben — aber seine Default-Reaktion ist „übersetzen". Dein Job ist, ihn per Prompt in den Modus „unabhängig pro Sprache neu komponieren" zu drehen. Mit dem .length-Gate kam der chinesische Thread des heutigen letzten Artikels im ersten Entwurf punktgenau bei 140/140 raus — keine Kürzung.