Free

Дати Claude перекласти одну статтю на 19 мов

Одна стаття 19 мов: структура файлів, prompt перекладу, 5 реальних пасток, як POST за раз.


Офіційна документація Anthropic і OpenAI лише англійською. Це величезна прогалина у глобальній екосистемі контенту для AI-розробників. how2claude закриває цю прогалину — кожна стаття виходить одразу 19 мовами: zh / en / zh-TW / ja / ko / es / pt-BR / id / vi / tr / ar / fr / de / it / ru / uk / pl / he / th.

Наймати людей нереально (20 перекладів на статтю, кожен — кілька тисяч доларів). Віддати Claude — гранична вартість падає майже до нуля, але кинути через паркан «перекладай на японську» і отримуєш текст із явним присмаком машинного перекладу, де голос автора випарувався. Далі — повний потік, як робити це правильно: структура файлів, як писати перекладацький prompt, де Claude гарантовано спотикається, як відправити 19 мов плюс твіти по мовах на API одним POST.


Головне рішення: переклад vs. локалізація

Дві дуже різні речі.

Переклад переносить сенс з мови A на мову B — те, що робить Google Translate. Читається «правильно», але «пласко».

Локалізація зберігає регістр, ритм і технічний рівень автора, переписуючи «голосом тех-блогу» цільової мови. Результат читається так, ніби написано носієм.

Переклад для Claude — робота на 5 хвилин; локалізація вимагає, щоб у prompt було прописано:

  • Хто цільовий читач (розробники, технічні команди)
  • Еталонний регістр («звучить як такий-то блог»)
  • Терміни, які мають лишитися мовою-джерелом (імена API, назви фреймворків, команди, URL)
  • Де дозволено перекомпоновувати (розбивати довгі фрази, міняти метафори на ті, що впізнає носій)

Команда /write-article у how2claude несе стильову вимогу на кожну мову:

Файл мови Стильова вимога
ja.md Тон тех-блогу, природна японська
ko.md Тон тех-блогу, природна корейська
zh-TW.md Тайванське слововжиток, традиційні ієрогліфи
ar.md Сучасна стандартна арабська (письмова)
id.md Стандартна індонезійська

Виглядає як один зайвий рядок. Але для Claude це визначальне — без нього за замовчуванням виходить «підручниковий переклад».

Структура файлів: 19 мов живуть в одній теці

Одна тека на чернетку, 20 файлів:

docs/drafts/let-claude-translate-articles/
├── meta.json        # title + summary для всіх 19 мов
├── zh.md            # китайська (джерело, пишеться першою)
├── en.md            # англійська (перша хвиля перекладів)
├── zh-TW.md
├── ja.md
├── ko.md
├── ...(ще 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",
    "uk": "Дати Claude перекласти одну статтю на 19 мов",
    "...": "..."
  },
  "summary": {
    "uk": "Одна стаття 19 мов: структура файлів, prompt перекладу, 5 реальних пасток, як POST за раз.",
    "...": "..."
  }
}

Перший рядок кожного файлу .md# заголовок, решта — тіло. Title береться не з першого рядка md, а з meta.json — так у кожної мови заголовок — це окремо відточена коротка фраза, а не перша фраза статті, яка при перекладі могла розтягнутися.

Потік: написати zh, далі роздати на 18 мов

Два неправильні потоки:

Неправильно: ланцюжок перекладів. zh → en → ja → ko → ...
Проблема: ja спирається на en, ko на ja — кожен стрибок втрачає крихту сенсу. До моменту th (тайська) — інформація через чотири руки.

Правильно: променевий переклад. Закрити zh → згенерувати en / ja / ko / ar / id / ... безпосередньо з джерела.
Кожна мова виходить прямо з оригіналу, без пересадок.

Структура prompt (упакована в /write-article):

Це стаття тех-блогу про X, джерело — китайська:
[повний zh.md]

Переклади на такі мови з вимогами по мові:
- ja.md: тон тех-блогу, природна японська
- ko.md: тон тех-блогу, природна корейська
- ar.md: сучасна стандартна арабська (письмова)
...

Правила:
1. Зберігай прямий, професійний, злегка самоіронічний регістр автора
2. Не перекладай блоки коду, команди, імена API, URL
3. Заголовки, підзаголовки, хід абзаців можна перекомпоновувати
4. Окремий title по мові — короткий, з гачком, не дослівний переклад вихідного заголовка

Перекладати 18 мов паралельно, одна сесія Claude — все. Один важливий момент: робити в одній сесії / на одній версії моделі — голос дрейфує між сесіями й поколіннями моделі.

5 місць, де реально ламається

1. Ліміти символів у твітів залежать від мови

X рахує CJK-символи (китайська/японська/корейська) суворіше. Я попросив Claude генерувати твіти з такими обмеженнями:

  • Китайські твіти ≤ 140 символів
  • Інші мови ≤ 280 символів

На першому проході три китайські твіти вилізли за ліміт (160, 164, 152). Claude дослівно переклав англійські твіти — англійський твіт на 260 символів китайською виходить якраз на межу.

Правило: китайські твіти треба переписувати, а не перекладати. Вимоги: стеля 140 символів, обов'язковий гачок, невелика втрата деталей припустима.

2. zh-TW — це не конвертація ієрогліфів

zhzh-TW провокує лінь: прогнати через конвертер спрощеної в традиційну. Ієрогліфи збігаються, словник — ні:

zh zh-TW (неправ.) zh-TW (прав.)
文件 文件 檔案
信息 信息 資訊
软件 軟件 軟體
视频 視頻 影片

Коли просиш у Claude zh-TW, кажи обидві частини: «тайванське слововжиток, традиційні ієрогліфи». «Лише традиційні» дасть конвертацію ієрогліфів.

3. RTL-мови (ar, he) ламають верстку

Арабська й іврит читають справа наліво. На стороні Rails потрібен <html dir="rtl"> і варіанти rtl: у Tailwind. Але й у самому перекладі є пастки:

  • Блоки коду лишаються англійською, але коли арабський абзац обгортає блок коду, браузеру потрібен unicode-bidi: isolate, інакше код «засмокче» у RTL-потік
  • Змішана пунктуація: арабська використовує ، замість ,, ؟ замість ?. Claude за замовчуванням ставить англійські знаки; треба явно прописати
  • Напрямок цифр: у арабській цифри пишуться зліва направо (2026) всередині абзацу, що йде справа наліво. Браузери з цим справляються, але Claude у сирому тексті часто плутає

4. Claude за замовчуванням «вирівнює» голос автора

Розмовні звороти оригіналу («одним махом», «наступив на граблі», «улетів у молоко») Claude перекладає в японську/корейську за замовчуванням формальними письмовими формами (「一気に実装」「落とし穴」「失敗」) — сенс збігається, тон випаровується.

Лікування: прописати в prompt — «зберігай прямий, злегка самоіронічний, неформальний тон тех-блогу; не академізуй». Навіть так деякі мови (німецька, російська) сядуть трохи «формальніше» за джерело — самі мови мають bias до письмового регістру.

5. Плейсхолдери та змінні не перекладаються

Рядки в коді діляться на дві корзини — UI-текст (перекладаємо) і плейсхолдери/імена змінних (ні):

t("pricing.page_title")        # не перекладаємо (i18n key)
"user_id"                      # не перекладаємо (ім'я змінної)
"Monthly subscription"         # показується в тексті як приклад → не перекладаємо

Для всього, що сусідить з кодом, «не перекладаємо» — безпечніше дефолт-рішення. Те, що справді треба перекладати, — це файли i18n locale (config/locales/xx.yml), і це окреме завдання.

Публікація: один POST, 19 мов

/publish-article шле POST чернетки на 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": [...], ... }
}

Один запит ~300KB (19 мов × ~15KB). Сервер розкладає в таблиці БД:

  • таблиця articles, title / summary / content — jsonb за ключем locale
  • таблиця x_queue_tweets, за locale + акаунтом, відправляється в чергу розкладу

Твіти йдуть лише на locale з підключеним X-акаунтом (зараз en/zh/ja/ko/ar/id — 6). Мови без акаунта шлють []. Перевірка акаунтів:

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

Чек-лист

Дати Claude перекласти одну статтю на 19 мов — повний чек-лист:

  1. Спершу зафіксувати zh (або en), далі променевим способом роздати решту 18 перекладів з цього джерела. Жодних ланцюжків.
  2. Стильова вимога по мові — у prompt. «Природна японська» недостатньо — казати «тон тех-блогу, природна японська».
  3. Перекладати title і summary окремо, не тягти з першого абзацу тіла. Усі 19 title/summary централізовані в meta.json.
  4. Явно перерахувати, що не перекладається: блоки коду, команди, імена API, URL, i18n-ключі, імена змінних. Перекладається: пояснювальний текст, метафори, структура абзаців.
  5. Твіти треба переписувати, а не перекладати. 140 символів для китайської, 280 для решти. Дослівний переклад з англійської на китайську завжди виходить за ліміт.
  6. Для zh-TW казати «тайванське слововжиток + традиційні ієрогліфи»; інакше вийде лише конвертація ієрогліфів, а словник лишиться материковим.
  7. RTL-мови (ar, he) потребують dir="rtl" + варіанти rtl: Tailwind на стороні Rails. Змішана пунктуація й ізоляція блоків коду — окрема робота.
  8. Надсилати всі мови одним POST — 19 content + 19 title/summary + твіти для кожного підключеного акаунта, один запит у бекенд.

Справжнє вузьке горло — не якість перекладу — моделі класу Claude 4 перекладають японською/корейською/арабською/російською майже на рівні носія. Вузьке горло — чи готовий ти поставити одну статтю перед читачами 19 мовами одночасно. Технічно це 5 хвилин. З точки зору контенту — готовність обслужити у 200 разів більшу аудиторію за раз.