Free

Menyuruh Claude Menulis Thread Tweet Multibahasa Tanpa Melewati Batas

Thread multibahasa bukan soal terjemahan: katakan 'write', bukan 'translate', dan saring draft dengan skrip .length lokal.


Hari ini saya publikasikan 5 artikel. Tiap artikel punya thread tweet dalam 6 bahasa (en / zh / ja / ko / ar / id), 4 tweet per bahasa — total 120 tweet.

4 dari 5 butuh dipangkas di thread Tionghoa. Angka mentahnya (dicetak oleh skrip, 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

Pola yang sama tiap kali: empat tweet Inggris ditulis duluan (masing-masing 230–260 karakter, mepet plafon 280), lalu saya minta Claude "buat versi Tionghoa dari keempatnya". Versi Tionghoa hampir selalu lewat 140.

Ini bukan bug, ini salah kata. Begitu Anda bilang "translate", Claude mulai jalan baris demi baris — padahal thread multibahasa bukan soal terjemahan. Tiap bahasa harus ditulis ulang dari nol menghadap anggaran karakternya sendiri. Tulisan ini soal cara membuat draf pertama Claude sudah mendekati batas, tanpa 3–5 putaran pemangkasan.


Akar masalah: X membobot CJK dua kali lipat × Claude default ke terjemahan harfiah

Aturan hitung karakter X

Batas panjang X bukan "jumlah karakter", tapi weighted characters:
- Huruf Latin, angka, tanda baca: 1 weight per karakter
- CJK (Tionghoa/Jepang/Korea), beberapa emoji: 2 weight per karakter
- Plafon total per tweet: 280 weight

Efek nyata:
- Tweet Inggris: plafon 280 karakter
- Tweet murni Tionghoa: plafon 140 karakter (140 × 2 = 280)
- Campuran: tiap karakter dihitung 1 atau 2

Jadi "terjemah tweet Inggris 260 karakter ke Tionghoa" bukan berarti versi Tionghoa 260 karakter — versi Tionghoa hanya punya ~130 karakter ruang nyata. Semua tanda baca, kutip, backtick dari asli Inggris masih makan tempat, dan tiap karakter Tionghoa dobel. Terjemah harfiah hampir pasti melewati batas.

Kata "translate" memicu mode harfiah Claude

Saat Claude melihat "translate these 4 EN tweets to ZH", langkah pertamanya adalah mempertahankan struktur kalimat Inggris dan hanya mengganti kata ke Tionghoa:

  • EN: "Production 400/500 isn't like local. User's already staring at a blank screen after hitting Pay."
  • ZH harfiah Claude: "生产环境的 400/500 和本地并不相同。用户已经点击了『付款』并看着一个空白屏幕。" (40 karakter Tionghoa)

Maknanya benar, tapi:
- Mempertahankan "并不相同" (satu karakter lebih panjang dari "不同")
- Mempertahankan "已经点击了" ("刚点完" lebih pendek)
- Mempertahankan "并看着一个空白屏幕" ("看着空白屏" lebih pendek)

Tiap redundansi yang dipertahankan makan karakter. Ditumpuk di 4 tweet, 20–40 karakter lebih gampang, dan lewat batas.

Prompt yang berhasil: "tulis ulang", bukan "terjemah"

Bandingkan dua frasa:

Yang tidak berhasil:

"Translate these 4 English tweets to Chinese, Japanese, Korean, Arabic, Indonesian."

Yang berhasil:

"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"

Bedanya:

  1. "write" ganti "translate" — memicu mode komposisi Claude, bukan mode terjemahan.
  2. "fresh pass" / "same argument" — memberi izin Claude mengatur ulang kalimat.
  3. "don't preserve EN sentence structure" — memblok perilaku default di depan.
  4. "cut detail if needed" — memberi izin membuang konten demi panjang (tanpa ini Claude pertahankan semua fakta dan lewat).
  5. Anggaran eksplisit per bahasa — "≤ 140 chars" 100× lebih efektif daripada "short".

Sanity check lokal: Ruby + .length

Jangan hitung manual. Tulis skrip kecil yang jalan tiap draf:

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 mengembalikan codepoint Unicode — tiap karakter CJK dihitung 1. X membobot CJK 2, tapi batas tweet Tionghoa 140 codepoint (karena 140 × 2 = 280 weighted), jadi .length langsung sejalan dengan plafon X. Kasus batasnya:

  • Jumlah codepoint emoji (🧵 = 1 codepoint, tapi ada emoji yang sekuensi beberapa codepoint)
  • Karakter lebar nol (ZWJ dll.)

Untuk mayoritas tweet CJK, .length Ruby berjarak ±1 dari hitungan X. Memakainya sebagai gerbang lokal 100× lebih andal daripada tes posting ke X.

Jebakan emoji dan backtick

Saat tweet Tionghoa harus dipangkas, dua kategori ini yang pertama dipotong:

Backtick

Referensi kode seperti `kamal exec` makan 1 karakter per backtick di konteks Tionghoa — 2 karakter per referensi, nilai semantik nol. Solusi:

  • Pakai titik dua: "命令 kamal exec" lebih pendek dari "`kamal exec`"
  • Kalau harus pertahankan backtick, hanya pada identifier kunci, bukan baris shell utuh

Emoji

🧵 hanya di tweet 1. Emoji lain di tweet Tionghoa — pikir dua kali. Tiap emoji pada dasarnya makan 2 karakter (1 codepoint + kadang modifier ZWJ).

Tanda baca fullwidth vs halfwidth

  • Tanda baca CJK (「」、,。——): 2 weight per karakter
  • Tanda baca ASCII ("",-): 1 weight per karakter
  • Saat tweet Tionghoa mencampur kutip: pakai kutip halfwidth ('X') — hemat 2 karakter per pasang dibanding fullwidth (「X」)

Empat arah default Claude yang perlu dicegat

Saat membuat thread multibahasa, blok keempat ini:

1. Terjemahan harfiah mempertahankan struktur EN

Gejala: kalimat Tionghoa dengan ungkapan seperti "并不相同", "已经点击了", "一个空白屏幕" yang jelas jiplakan bahasa Inggris.

Blok: tulis "don't preserve EN sentence structure" / "use natural ZH phrasing" langsung di prompt.

2. Tidak proaktif cek panjang

Gejala: Claude selesai bilang "done", output lewat batas, dan Claude tidak sadar.

Blok: minta Claude hitung panjang tiap tweet ("count each tweet's char length and flag any over the limit"), atau pakai skrip lokal sebagai gerbang. Saya pilih skrip — Ruby lebih akurat.

3. Mengabaikan weight kutip dan emoji

Gejala: saat Claude menghitung, dia lupa weight tambahan emoji dan kutip fullwidth.

Blok: jangan tanya "lewat batas?" — jalankan .length lokal dan minta Claude memangkas berdasar angka.

4. Posisi 🧵 tidak konsisten

Gejala: kadang semua tweet dapat 🧵, kadang hanya tweet 1, kadang mendarat di 4/4.

Blok: patok di prompt — "🧵 only on tweet 1". Claude secara default tidak tahu konvensi visual thread.

Checklist

Enam aturan untuk mendapatkan draf pertama thread multibahasa mepet batas:

  1. Bilang "write", bukan "translate". Translate memicu harfiah = struktur EN bertahan = lewat batas.
  2. Anggaran eksplisit per bahasa. "≤ 140 chars" 100× lebih efektif dari "short".
  3. Izin memotong konten. "cut detail if needed" memberitahu Claude boleh kehilangan fakta demi panjang.
  4. Ruby .length lokal sebagai gerbang. Lebih akurat dari hitungan Claude, lebih cepat dari uji posting X.
  5. Di Tionghoa, potong backtick dan emoji dulu. Tiap backtick 1 karakter, tiap emoji 2 karakter.
  6. Patok posisi 🧵 di prompt. Claude default tidak tahu konvensi thread.

Insight sesungguhnya: Claude bisa menulis thread multibahasa dengan benar — tapi reaksi default-nya adalah "terjemah". Tugas Anda adalah memutarnya ke "komposisi mandiri per bahasa" lewat prompt. Dengan gerbang .length, thread Tionghoa di artikel terakhir hari ini draf pertama sudah 140/140 persis. Tanpa pemangkasan.