Free

Lasciare che Claude traduca un articolo in 19 lingue

Un articolo in 19 lingue: struttura file, prompt di traduzione, 5 trappole reali, come fare POST in un colpo solo.


La documentazione ufficiale di Anthropic e OpenAI è solo in inglese. È un vuoto enorme nell'ecosistema globale di contenuti per sviluppatori AI. how2claude sta colmando quel vuoto — ogni articolo esce in 19 lingue contemporaneamente: zh / en / zh-TW / ja / ko / es / pt-BR / id / vi / tr / ar / fr / de / it / ru / uk / pl / he / th.

Assumere traduttori umani non regge (20 traduzioni per articolo, migliaia di dollari ciascuna). Lasciare che lo faccia Claude porta il costo marginale praticamente a zero — ma scaraventare un "traducilo in giapponese" oltre lo steccato ti restituisce un testo con un forte aroma da traduzione automatica e la voce dell'autore svaporata. Quello che segue è il flusso completo per farlo bene: struttura dei file, come scrivere il prompt di traduzione, dove Claude sbanda di sicuro, come fare POST di 19 lingue più i tweet per lingua all'API in una sola chiamata.


La decisione centrale: traduzione vs. localizzazione

Due cose molto diverse.

La traduzione sposta il significato dalla lingua A alla B — quello che fa Google Translate. Si legge "corretto" ma "piatto".

La localizzazione preserva il registro, il ritmo e il livello tecnico dell'autore, riscrivendo nella "voce da blog tecnico" propria della lingua di arrivo. Il risultato si legge come se fosse stato scritto da un madrelingua.

Tradurre per Claude è un lavoro da 5 minuti; localizzare richiede che il prompt specifichi:

  • Chi è il lettore target (sviluppatori, team tecnici)
  • Un registro di riferimento ("deve suonare come quel blog")
  • Termini che devono restare nella lingua sorgente (nomi di API, nomi di framework, comandi, URL)
  • Dove è permessa la ricomposizione (spezzare frasi lunghe, sostituire metafore con altre che i lettori madrelingua riconoscano)

Il comando /write-article di how2claude incorpora un requisito di stile per lingua:

File di lingua Requisito di stile
ja.md Voce da blog tecnico, giapponese naturale
ko.md Voce da blog tecnico, coreano naturale
zh-TW.md Uso taiwanese, caratteri tradizionali
ar.md Arabo standard moderno (scritto)
id.md Indonesiano standard

Sembra solo una riga in più. Ma per Claude è determinante — senza di essa, il default è "traduzione da manuale scolastico".

Struttura dei file: 19 lingue in una sola directory

Una directory per bozza, 20 file:

docs/drafts/let-claude-translate-articles/
├── meta.json        # title + summary per tutte e 19 le lingue
├── zh.md            # cinese (sorgente, scritto per primo)
├── en.md            # inglese (prima tornata di traduzioni)
├── zh-TW.md
├── ja.md
├── ko.md
├── ...(altre 14)
└── th.md

meta.json:

{
  "category_slug": "use-cases",
  "series_slug": "writing",
  "free": true,
  "title": {
    "zh": "让 Claude 把一篇文章翻译成 19 种语言",
    "en": "Letting Claude Translate One Article Into 19 Languages",
    "it": "Lasciare che Claude traduca un articolo in 19 lingue",
    "...": "..."
  },
  "summary": {
    "it": "Un articolo in 19 lingue: struttura file, prompt di traduzione, 5 trappole reali, come fare POST in un colpo solo.",
    "...": "..."
  }
}

La prima riga di ogni file .md è # titolo, il resto è il corpo. Il title non si prende dalla prima riga del md — si prende da meta.json, così ogni lingua ha un titolo levigato corto, non la frase di apertura dell'articolo che in traduzione potrebbe essersi dilatata.

Il flusso: scrivere zh, poi irradiare verso 18 lingue

Due flussi da evitare:

Sbagliato: traduzione a catena. zh → en → ja → ko → ...
Problema: ja si basa su en, ko su ja — ogni salto perde un po' di significato. Arrivati a th (thailandese), è informazione di quarta mano.

Giusto: traduzione radiale. Finalizzare zh → generare en / ja / ko / ar / id / ... tutti direttamente dalla sorgente.
Ogni lingua esce direttamente dall'originale, senza tappe intermedie.

Struttura del prompt (impacchettata dentro /write-article):

Questo è un articolo di blog tecnico su X, sorgente cinese:
[zh.md intero]

Traduci nelle lingue seguenti, con i requisiti per lingua:
- ja.md: voce da blog tecnico, giapponese naturale
- ko.md: voce da blog tecnico, coreano naturale
- ar.md: arabo standard moderno (scritto)
...

Regole:
1. Preserva il registro diretto, professionale, leggermente autoironico dell'autore
2. Non tradurre blocchi di codice, comandi, nomi di API, URL
3. Titoli, sottotitoli, flusso dei paragrafi possono essere ricomposti
4. Produci un title separato per lingua — corto, con un gancio, non traduzione letterale del titolo originale

Tradurre 18 lingue in parallelo, una sessione Claude risolve tutto. Un dettaglio chiave: farlo nella stessa sessione / stessa versione di modello — la voce deriva tra sessioni e tra generazioni di modello.

5 punti in cui si rompe davvero

1. I limiti di caratteri dei tweet variano per lingua

X conta i caratteri CJK (cinese/giapponese/coreano) in modo più rigido. Ho fatto generare a Claude i tweet con questo vincolo:

  • Tweet in cinese ≤ 140 caratteri
  • Altre lingue ≤ 280 caratteri

Al primo giro, tre tweet cinesi sforavano (160, 164, 152). Claude aveva tradotto letteralmente i tweet inglesi — un tweet inglese da 260 caratteri tradotto in cinese finisce proprio al limite.

Regola: i tweet in cinese vanno riscritti, non tradotti. Requisiti: tetto 140 caratteri, gancio obbligatorio, perdita di dettaglio ammessa.

2. zh-TW non è conversione di caratteri

zhzh-TW invita alla pigrizia: passarlo per un convertitore semplificato-a-tradizionale. I caratteri tornano, il lessico no:

zh zh-TW (sbagliato) zh-TW (giusto)
文件 文件 檔案
信息 信息 資訊
软件 軟件 軟體
视频 視頻 影片

Quando chiedi zh-TW a Claude, dillo in due pezzi: "uso taiwanese, caratteri tradizionali". "Solo tradizionale" dà una conversione di caratteri.

3. Le lingue RTL (ar, he) spaccano il layout

Arabo ed ebraico si leggono da destra a sinistra. Lato Rails serve <html dir="rtl"> e le varianti rtl: di Tailwind. Ma la traduzione in sé ha trappole:

  • I blocchi di codice restano in inglese, ma quando un paragrafo in arabo circonda un blocco di codice, il browser ha bisogno di unicode-bidi: isolate, altrimenti il codice viene "risucchiato" nel flusso RTL
  • Punteggiatura mista: l'arabo usa ، al posto di ,, ؟ al posto di ?. Claude di default usa punteggiatura inglese; va esplicitato
  • Direzione dei numeri: in arabo le cifre si scrivono da sinistra a destra (2026) dentro un paragrafo che scorre da destra a sinistra. I browser gestiscono, ma Claude spesso fa confusione nel testo grezzo

4. Claude per default "appiattisce" la voce dell'autore

Le espressioni colloquiali dell'originale ("tutto d'un fiato", "ho messo il piede in fallo", "sono rimasto in mezzo alla strada") Claude le traduce in giapponese/coreano con forme scritte formali (「一気に実装」「落とし穴」「失敗」) — il senso corrisponde, il tono svanisce.

Rimedio: scriverlo nel prompt — "preserva la voce da blog tecnico diretta, leggermente autoironica, informale; niente accademismi". Anche così, alcune lingue (tedesco, russo) atterrano un pelo più "formali" della sorgente — le lingue stesse hanno un bias verso il registro scritto.

5. Placeholder e variabili non si traducono

Le stringhe nel codice stanno in due secchi — testo di UI (si traduce) e placeholder/nomi di variabile (no):

t("pricing.page_title")        # non tradurre (i18n key)
"user_id"                      # non tradurre (nome di variabile)
"Monthly subscription"         # mostrato come esempio nel testo → non tradurre

Per qualsiasi cosa adiacente al codice, "non tradurre" è il default più sicuro. Ciò che va davvero tradotto sono i file di locale i18n (config/locales/xx.yml), e quello è un altro lavoro.

Pubblicazione: un POST, 19 lingue

/publish-article fa POST della bozza su how2claude.com/api/articles:

{
  "category_slug": "use-cases",
  "series_slug": "writing",
  "free": true,
  "thread": true,
  "title":   { "zh": "...", "en": "...", "ja": "...", ... },
  "summary": { "zh": "...", "en": "...", ... },
  "content": { "zh": "<md>", "en": "<md>", ... },
  "tweets":  { "en": ["...", "..."], "zh": [...], ... }
}

Una richiesta pesa ~300KB (19 lingue × ~15KB). Il server smista su tabelle DB:

  • tabella articles, title / summary / content sono jsonb indicizzati per locale
  • tabella x_queue_tweets, per locale + account, spediti a una coda di scheduling

I tweet partono solo verso i locale con account X collegato (attualmente en/zh/ja/ko/ar/id — 6). Le lingue senza account mandano []. Interrogare gli account:

Account.all.each { |a| puts "#{a.locale}: #{a.name}" }
# en: @how2claude
# zh: @howtoclaude
# ja: @how2claude_ja
# ko: @how2claude_ko
# ar: @how2claude_ar
# id: @how2claude_id

Checklist

Lasciare che Claude traduca un articolo in 19 lingue — checklist completa:

  1. Finalizzare zh (o en) per primo, poi irradiare le altre 18 traduzioni da quella sorgente. Non concatenare.
  2. Requisito di stile per lingua dentro al prompt. "Giapponese naturale" non basta — dire "voce da blog tecnico, giapponese naturale".
  3. Tradurre title e summary separatamente, non pescarli dal primo paragrafo. Tutti i 19 title/summary centralizzati in meta.json.
  4. Elencare esplicitamente cosa non si traduce: blocchi di codice, comandi, nomi di API, URL, chiavi i18n, nomi di variabile. Ciò che si traduce: testo esplicativo, metafore, struttura dei paragrafi.
  5. I tweet vanno riscritti, non tradotti. 140 caratteri per il cinese, 280 per il resto. La traduzione letterale inglese-cinese sfora sempre.
  6. Per zh-TW dire "uso taiwanese + caratteri tradizionali"; altrimenti si ottiene solo conversione di caratteri e il lessico resta continentale.
  7. Le lingue RTL (ar, he) richiedono dir="rtl" + varianti rtl: di Tailwind lato Rails. Punteggiatura mista e isolamento dei blocchi di codice si gestiscono a parte.
  8. POST di tutte le lingue in un colpo — 19 content + 19 title/summary + tweet per ogni account collegato, una richiesta al backend.

Il vero collo di bottiglia non è la qualità della traduzione — i modelli classe Claude 4 traducono in giapponese/coreano/arabo/russo con qualità vicina al madrelingua. Il collo di bottiglia è se sei disposto a mettere un articolo davanti a lettori in 19 lingue contemporaneamente. Tecnicamente servono 5 minuti. Sul piano dei contenuti, serve la volontà di servire 200× l'audience in una volta sola.