Багатомовні треди — не задача перекладу: кажіть «write», а не «translate», і фільтруйте чернетки локальним .length-скриптом.
Сьогодні опублікував 5 статей. До кожної — тред твітів на 6 мовах (en / zh / ja / ko / ar / id), по 4 твіти на мову — разом 120 твітів.
У 4 з 5 довелося різати китайський тред. Сирі числа (скрипт виводить у форматі 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
Завжди той самий шаблон: спершу пишу чотири англійські твіти (по 230–260 символів, впритул до 280), потім прошу Claude «згенерувати китайську версію з цих чотирьох». Китайська версія майже завжди виходить за 140.
Це не баг, це не те слово. У мить, коли ви кажете «translate», Claude переходить у режим «рядок за рядком» — але багатомовний тред не є задачею перекладу. Кожну мову треба писати з нуля під її власний бюджет символів. Цей пост — про те, як отримати перший чорновик Claude одразу близько до ліміту, без 3–5 раундів обрізання.
Ліміт довжини в X — не «кількість символів», а weighted characters:
- Латиниця, цифри, пунктуація: 1 weight на символ
- CJK-символи (китайська/японська/корейська), деякі емодзі: 2 weight на символ
- Загальна стеля на твіт: 280 weight
На практиці:
- Англійський твіт: стеля 280 символів
- Чисто китайський твіт: стеля 140 символів (140 × 2 = 280)
- Змішаний: посимвольно 1 або 2
Отже «перекласти англійський твіт на 260 символів у китайську» не дає китайської версії на 260 символів — у китайській версії реально близько 130 символів простору. Уся пунктуація, лапки і бектики з англійського оригіналу й далі займають місце, а кожен китайський символ рахується вдвічі. Дослівний переклад майже гарантує виліт.
Побачивши «translate these 4 EN tweets to ZH», Claude першим ділом зберігає структуру англійського речення і змінює лише слова на китайські:
Сенс правильний, але:
- Збережено «并不相同» (на символ довше за «不同»)
- Збережено «已经点击了» («刚点完» коротше)
- Збережено «并看着一个空白屏幕» («看着空白屏» коротше)
Кожна збережена надлишковість з'їдає символи. Накопичені по 4 твітах 20–40 зайвих символів — легко, і ліміт уже порушено.
Порівняйте два формулювання:
Що не працює:
«Translate these 4 English tweets to Chinese, Japanese, Korean, Arabic, Indonesian.»
Що працює:
«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»
Відмінності:
.lengthНе рахуйте на око. Невеликий скрипт, що запускається на кожному чорновику:
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
String#length у Ruby повертає Unicode-кодпойнти — кожен CJK-символ рахується як 1. X важить CJK із 2, але ліміт китайського твіта — 140 кодпойнтів (бо 140 × 2 = 280 weighted), тому .length напряму збігається зі стелею X. Крайні випадки:
Для переважної більшості CJK-твітів .length Ruby відрізняється від лічби X на ±1. Використовувати як локальний шлюз краще за тестовий постинг у 100 разів.
Коли китайський твіт треба різати, першими летять ці дві категорії:
Цитування коду на кшталт `kamal exec` у китайському контексті з'їдає 1 символ на кожен бектик — 2 символи на цитату, нуль семантики. Рішення:
`kamal exec`»🧵 — лише в першому твіті. Інші емодзі в китайських твітах — подумайте двічі. Кожен емодзі фактично коштує 2 символи (1 кодпойнт + інколи ZWJ-модифікатори).
'X') — економія 2 символи на пару порівняно з fullwidth (「X」)При генерації багатомовних тредів блокуйте ці чотири:
Симптом: китайські фрази на кшталт «并不相同», «已经点击了», «一个空白屏幕» — явні кальки з англійської.
Блок: пишіть у промпті «don't preserve EN sentence structure» / «use natural ZH phrasing».
Симптом: Claude закінчує і каже «done», на виході — перевищення, і він цього не помічає.
Блок: попросіть Claude самостійно рахувати довжину кожного твіта («count each tweet's char length and flag any over the limit»), або поставте локальний скрипт як шлюз. Я обираю скрипт — Ruby точніше.
Симптом: коли Claude рахує, він забуває про додатковий weight емодзі та fullwidth-лапок.
Блок: не питайте Claude «ліміт перевищено?» — запустіть .length локально і за числами попросіть скоротити.
Симптом: іноді 🧵 на кожному твіті, іноді лише на першому, іноді опиняється на 4/4.
Блок: зафіксуйте в промпті — «🧵 only on tweet 1». Claude за замовчуванням не знає візуальних конвенцій тредів.
Шість правил, щоб перший чорновик багатомовного треда був впритул до ліміту:
"cut detail if needed" каже Claude, що факти можна втрачати заради довжини..length як шлюз. Точніше за власну лічбу Claude, швидше за тестову публікацію.Справжній інсайт: Claude уміє писати багатомовні треди правильно — але його дефолтна реакція «перекласти». Ваше завдання — через промпт перемкнути його в режим «незалежної композиції за мовами». Зі шлюзом .length китайський тред останньої сьогоднішньої статті в першому чорновику вийшов рівно 140/140 — без різання.