Threads multilíngues não são problema de tradução: diga 'write', não 'translate', e filtre os rascunhos com um script .length local.
Hoje publiquei 5 artigos. Cada um vem com thread de tweets em 6 idiomas (en / zh / ja / ko / ar / id), 4 tweets por idioma — 120 tweets no total.
4 dos 5 precisaram de corte no thread em chinês. Os números brutos (o script imprime no formato 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
Sempre o mesmo padrão: escrevo primeiro os 4 tweets em inglês (cada um com 230–260 caracteres, próximo do teto de 280) e peço ao Claude "gerar a versão em chinês a partir desses quatro". A versão em chinês passa dos 140 quase sempre.
Não é bug, é palavra errada. No momento em que você diz "translate", o Claude começa a ir linha a linha — mas thread multilíngue não é problema de tradução. Cada idioma precisa ser escrito do zero contra seu próprio orçamento de caracteres. Este post mostra como fazer o primeiro rascunho do Claude já sair perto do limite, sem gastar 3–5 rodadas cortando.
O limite do X não é "número de caracteres", é weighted characters:
- Letras latinas, dígitos, pontuação: 1 weight por caractere
- CJK (chinês/japonês/coreano), alguns emojis: 2 weight por caractere
- Teto total por tweet: 280 weight
Efeito prático:
- Tweet em inglês: 280 caracteres
- Tweet puro em chinês: 140 caracteres (140 × 2 = 280)
- Misto: cada caractere vale 1 ou 2
Então "traduzir um tweet inglês de 260 caracteres para o chinês" não te dá 260 caracteres em chinês — a versão em chinês tem só ~130 caracteres de espaço real. Toda a pontuação, aspas e backticks do original em inglês continuam ocupando espaço, e cada caractere chinês conta em dobro. Traduzir literal praticamente garante o estouro.
Quando o Claude vê "translate these 4 EN tweets to ZH", a primeira jogada dele é preservar a estrutura da frase em inglês e só trocar as palavras:
O significado está certo, mas:
- Preservou "并不相同" (um caractere a mais que "不同")
- Preservou "已经点击了" ("刚点完" é mais curto)
- Preservou "并看着一个空白屏幕" ("看着空白屏" é mais curto)
Cada redundância preservada come caracteres. Acumulado em 4 tweets, 20–40 caracteres a mais sai fácil, e já passou do limite.
Compare as duas formulações:
O que não funciona:
"Translate these 4 English tweets to Chinese, Japanese, Korean, Arabic, Indonesian."
O que funciona:
"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"
As diferenças:
.lengthNão conte no olho. Escreva um script que roda em todo rascunho:
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
O String#length do Ruby retorna codepoints Unicode — cada caractere CJK conta como 1. O X pesa CJK em 2, mas o limite de um tweet em chinês é 140 codepoints (porque 140 × 2 = 280 weighted), então .length se alinha diretamente com o teto do X. Os casos-limite:
Para a vasta maioria dos tweets CJK, o .length do Ruby fica dentro de ±1 da contagem do X. Usar isso como portão local vence publicar de teste no X por 100×.
Quando tweets em chinês precisam de corte, essas duas categorias caem primeiro:
Referências de código tipo `kamal exec` comem 1 caractere por backtick em tweet chinês — 2 caracteres por referência, zero valor semântico. Correções:
`kamal exec`"🧵 só no tweet 1. Outros emojis em tweets em chinês — pense duas vezes. Cada emoji custa basicamente 2 caracteres (1 codepoint + em alguns casos modificadores ZWJ).
'X') — economiza 2 caracteres por par em comparação com fullwidth (「X」)Ao gerar threads multilíngues, bloqueie estes quatro:
Sintoma: frases em chinês com expressões como "并不相同", "已经点击了", "一个空白屏幕" — calcos óbvios do inglês.
Bloqueio: escreva "don't preserve EN sentence structure" / "use natural ZH phrasing" direto no prompt.
Sintoma: Claude termina e fala "done", a saída passa do limite, e ele não nota.
Bloqueio: peça ao Claude para contar o tamanho de cada tweet ("count each tweet's char length and flag any over the limit"), ou coloque script local como portão. Eu prefiro o script — Ruby é mais preciso que Claude contando.
Sintoma: quando Claude conta, esquece o weight extra de emojis e aspas fullwidth.
Bloqueio: não pergunte "passou do limite?" — rode .length local e peça para cortar com base nos números.
Sintoma: às vezes todo tweet ganha 🧵, às vezes só o 1, às vezes pousa no 4/4.
Bloqueio: fixe no prompt — "🧵 only on tweet 1". Claude não conhece por padrão as convenções visuais de thread.
Seis regras para tirar um primeiro rascunho multilíngue colado no limite:
"cut detail if needed" avisa ao Claude que pode perder fatos para caber..length local como portão. Mais preciso que Claude contando, mais rápido que testar no X.O insight real: Claude consegue escrever threads multilíngues certinho — mas a reação padrão dele é "traduzir". Seu trabalho é girar para "compor independentemente por idioma" via prompt. Com o portão .length, o thread chinês do último artigo de hoje saiu 140/140 no primeiro rascunho. Sem corte.