Çok dilli thread'ler çeviri sorunu değil: 'translate' yerine 'write' de ve taslakları yerel bir .length scriptiyle süz.
Bugün 5 makale yayınladım. Her biri 6 dilde (en / zh / ja / ko / ar / id) tweet thread'iyle geliyor, dil başına 4 tweet — toplamda 120 tweet.
5'in 4'ünde Çince thread'de kırpma gerekti. Ham rakamlar (script'in yazdırdığı, 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
Her seferinde aynı desen: önce dört İngilizce tweet yazılır (her biri 230–260 karakter, 280 tavanına yakın), sonra Claude'a "bu dördünden Çince versiyonu üret" denir. Çince versiyon neredeyse her seferinde 140'ı aşar.
Bu bir bug değil, yanlış kelime. "Translate" dediğin anda Claude satır satır çevirmeye başlar — ama çok dilli thread bir çeviri problemi değil. Her dil kendi karakter bütçesine göre sıfırdan yazılmalı. Bu yazı, Claude'un ilk taslağını sınıra yakın almanın, 3–5 tur kırpmaktan kaçınmanın yolunu anlatıyor.
X'in uzunluk sınırı "karakter sayısı" değil, weighted characters üzerinden hesaplanır:
- Latin harfleri, rakamlar, noktalama: karakter başına 1 weight
- CJK karakterleri (Çince/Japonca/Korece), bazı emojiler: karakter başına 2 weight
- Tweet başına toplam tavan 280 weight
Pratikte:
- İngilizce tweet tavanı 280 karakter
- Saf Çince tweet tavanı 140 karakter (140 × 2 = 280)
- Karışık metin: karakter başına 1 veya 2
Dolayısıyla "260 karakterlik İngilizce tweet'i Çince'ye çevir" 260 karakterlik Çince vermez — Çince versiyonun gerçek alanı yaklaşık 130 karakter. İngilizce orijinaldeki bütün noktalama, tırnak ve backtick hâlâ yer kaplar, her Çince karakter iki kat sayılır. Birebir çeviri aşmayı neredeyse garantiler.
Claude "translate these 4 EN tweets to ZH" gördüğünde ilk hamlesi İngilizce cümle yapısını koruyup sadece kelimeleri Çince'ye çevirmek:
Anlam doğru, ama:
- "并不相同"ı koruyor ("不同"den bir karakter uzun)
- "已经点击了"yi koruyor ("刚点完" daha kısa)
- "并看着一个空白屏幕"ı koruyor ("看着空白屏" daha kısa)
Korunan her gereksizlik karakter yer. 4 tweet'te birikince 20–40 karakter fazladan kolay, ve sınırı geçiyorsun.
İki ifadeyi karşılaştır:
İşe yaramayan:
"Translate these 4 English tweets to Chinese, Japanese, Korean, Arabic, Indonesian."
İşe yarayan:
"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"
Farklar:
.lengthGözle sayma. Her taslakta çalışan küçük bir script yaz:
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
Ruby'nin String#length'i Unicode codepoint döndürür — her CJK karakter 1 olarak sayılır. X CJK'yı weight 2 sayar ama Çince tweet tavanı 140 codepoint (çünkü 140 × 2 = 280 weighted), yani .length doğrudan X'in tavanıyla örtüşür. Sapmalar şuradan gelir:
CJK tweet'lerinin büyük çoğunluğunda Ruby .length'i X'in sayımına ±1 uyar. Yerel kapı olarak kullanmak X'e test göndermekten 100× daha güvenilir.
Çince tweet kırpılacaksa önce bu iki kategori gider:
`kamal exec` gibi kod alıntıları Çince bağlamda backtick başına 1 karakter yer — alıntı başına 2 karakter, anlama sıfır katkı. Çözümler:
`kamal exec`"dan kısa🧵 sadece ilk tweet'te. Diğer emojiler Çince tweet'te — iki kez düşün. Her emoji aslında 2 karakter tutar (1 codepoint + bazen ZWJ modifierleri).
'X') kullan — fullwidth'e (「X」) göre çift başına 2 karakter kazandırırÇok dilli thread üretirken bu dördünü engelle:
Belirti: Çince cümlelerde "并不相同", "已经点击了", "一个空白屏幕" gibi İngilizce'den birebir kalıntılar.
Engelleme: prompt'a doğrudan "don't preserve EN sentence structure" / "use natural ZH phrasing" yaz.
Belirti: Claude "done" der, çıktı sınırı geçer, ama farkında değildir.
Engelleme: Claude'dan her tweet'in uzunluğunu saymasını iste ("count each tweet's char length and flag any over the limit") veya yerel bir script'i kapı olarak kullan. Ben script'i seçiyorum — Ruby daha doğru.
Belirti: Claude sayarken emoji ve fullwidth tırnakların ek weight'ini atlıyor.
Engelleme: Claude'a "sınırı aştı mı?" diye sorma — yerelde .length çalıştır, rakamlara göre Claude'a kısalttır.
Belirti: bazen her tweet'e 🧵, bazen sadece 1'e, bazen 4/4'te.
Engelleme: prompt'a sabitle — "🧵 only on tweet 1". Claude thread'in görsel kurallarını varsayılan olarak bilmez.
İlk taslak çok dilli thread'i sınıra yaslamak için altı kural:
"cut detail if needed" Claude'a uzunluğa uymak için olgu kaybedebileceğini söyler..length kapı olarak. Claude'un saymasından doğru, X test göndermekten hızlı.Gerçek içgörü: Claude çok dilli thread'leri doğru yazabiliyor — ama varsayılan tepkisi "çeviri". Senin işin onu prompt'la "her dil için bağımsız yeniden yaz" moduna çevirmek. .length kapısıyla birlikte, bugünkü son makalenin Çince thread'i ilk taslakta 140/140 tam tamına — kırpma yok.