Free

Claude'a bir makaleyi 19 dile çevirtmek

Tek makale 19 dil: dosya yapısı, çeviri prompt'u, 5 gerçek tuzak, tek POST nasıl atılır.


Anthropic ve OpenAI'ın resmi dokümantasyonu sadece İngilizce. Bu, küresel AI geliştirici içerik ekosisteminde devasa bir boşluk. how2claude tam bu boşluğu dolduruyor — her makale 19 dilde aynı anda yayına çıkıyor: zh / en / zh-TW / ja / ko / es / pt-BR / id / vi / tr / ar / fr / de / it / ru / uk / pl / he / th.

İnsan çevirmen tutmak gerçekçi değil (makale başına 20 çeviri, her biri birkaç bin dolar). Claude'a yaptırmak marjinal maliyeti neredeyse sıfıra indiriyor — ama "Japoncaya çevir" diye atıvermek, makine çevirisi kokan ve yazarın sesi silinmiş bir metin geri veriyor. Aşağıdaki, bu işi doğru yapmanın tam akışı: dosya yapısı, çeviri prompt'unun nasıl yazılacağı, Claude'un kesinlikle tökezleyeceği noktalar, 19 dilin ve her dile göre tweet'lerin tek POST çağrısıyla API'ye nasıl gönderileceği.


Temel karar: çeviri vs. yerelleştirme

Bu iki şey çok farklı.

Çeviri, anlamı A dilinden B diline taşır — Google Translate'in yaptığı şey. "Doğru" okunur ama "düz" kalır.

Yerelleştirme, yazarın tonunu, ritmini ve teknik düzeyini koruyup hedef dilin kendi "teknik blog sesiyle" yeniden yazar. Sonuç anadili tarafından yazılmış gibi okunur.

Claude için çeviri 5 dakikalık iş; yerelleştirme ise prompt'un şunları açıkça belirtmesini gerektirir:

  • Hedef okur kim (geliştiriciler, teknik ekipler)
  • Referans bir ton ("şu blog gibi ses verecek")
  • Kaynak dilde kalması gereken terimler (API adları, framework adları, komutlar, URL'ler)
  • Yeniden düzenlemeye izin verilen yerler (uzun cümleleri kırmak, metaforları yerel okurun tanıyacağı şeylerle değiştirmek)

how2claude'un /write-article komutu her dil için bir stil gereksinimi içerir:

Dil dosyası Stil gereksinimi
ja.md Teknik blog sesi, doğal Japonca
ko.md Teknik blog sesi, doğal Korece
zh-TW.md Tayvan kullanımı, geleneksel karakterler
ar.md Modern Standart Arapça (yazılı)
id.md Standart Endonezce

Tek satır farkı gibi görünür. Ama Claude için belirleyicidir — bu satır olmazsa varsayılan olarak "ders kitabı çevirisi" üretir.

Dosya yapısı: 19 dil tek klasörde

Her taslak için bir klasör, 20 dosya:

docs/drafts/let-claude-translate-articles/
├── meta.json        # 19 dilin title + summary'si
├── zh.md            # Çince (kaynak, ilk yazılan)
├── en.md            # İngilizce (ilk çeviri partisi)
├── zh-TW.md
├── ja.md
├── ko.md
├── ...(14 dil daha)
└── 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",
    "tr": "Claude'a bir makaleyi 19 dile çevirtmek",
    "...": "..."
  },
  "summary": {
    "tr": "Tek makale 19 dil: dosya yapısı, çeviri prompt'u, 5 gerçek tuzak, tek POST nasıl atılır.",
    "...": "..."
  }
}

Her .md dosyasının ilk satırı # başlık, gerisi gövde. Title md'nin ilk satırından değil, meta.json'dan alınır — böylece her dilin title'ı cilalanmış bir kısa ifadedir, makalenin başındaki çeviri sırasında uzamış olabilecek cümle değil.

Akış: zh yaz, sonra 18 dile yayınla

Kaçınılacak iki akış:

Yanlış: zincirleme çeviri. zh → en → ja → ko → ...
Sorun: ja, en'e dayanır; ko, ja'ya — her atlayışta biraz anlam sızar. th (Tayca) sırasında elinizde dördüncü elden bilgi kalır.

Doğru: radyal çeviri. zh'yi kesinleştir → en / ja / ko / ar / id / ... hepsini doğrudan kaynaktan üret.
Her dil orijinalden doğrudan çıkar, ara durak yok.

Prompt yapısı (/write-article içinde paketlenmiş):

Bu X hakkında bir teknik blog yazısı, Çince kaynak:
[zh.md tamamı]

Aşağıdaki dillere çevir, dile özel gereksinimler:
- ja.md: teknik blog sesi, doğal Japonca
- ko.md: teknik blog sesi, doğal Korece
- ar.md: Modern Standart Arapça (yazılı)
...

Kurallar:
1. Yazarın doğrudan, profesyonel, hafif özeleştirel tonunu koru
2. Kod blokları, komutlar, API adları, URL'leri çevirme
3. Başlıklar, alt başlıklar, paragraf akışı yeniden düzenlenebilir
4. Her dil için ayrı title üret — kısa, kanca taşıyan, orijinal başlığın bire bir çevirisi değil

18 dili paralel çevir, Claude tek oturumda bitirir. Önemli bir detay: aynı oturumda / aynı model sürümünde yap — oturumlar ve model nesilleri arasında ses kayar.

5 gerçek tökezleme noktası

1. Tweet karakter sınırları dile göre değişir

X, CJK (Çince/Japonca/Korece) karakterlerini daha katı sayar. Claude'dan bu kısıtlamayla tweet üretmesini istedim:

  • Çince tweet ≤ 140 karakter
  • Diğer diller ≤ 280 karakter

İlk geçişte üç Çince tweet taştı (160, 164, 152). Claude İngilizce tweet'leri harfiyen çevirmişti — 260 karakterlik İngilizce tweet Çinceye çevrildiğinde sınıra tam denk geliyor.

Kural: Çince tweet'ler yeniden yazılmalı, çevrilmemeli. Gereksinimler: 140 karakter sınırı, kanca zorunlu, bir miktar detay kaybı kabul.

2. zh-TW karakter dönüşümü değildir

zhzh-TW tembelliğe davet eder: basitleştirilmiş-geleneksel dönüştürücüsüne at. Karakterler eşleşir, kelime dağarcığı eşleşmez:

zh zh-TW (yanlış) zh-TW (doğru)
文件 文件 檔案
信息 信息 資訊
软件 軟件 軟體
视频 視頻 影片

Claude'dan zh-TW isterken ikisini de söyle: "Tayvan kullanımı, geleneksel karakterler". "Sadece geleneksel" karakter dönüşümü verir.

3. RTL diller (ar, he) düzeni kırar

Arapça ve İbranice sağdan sola yazılır. Rails tarafında <html dir="rtl"> ve Tailwind'in rtl: varyantları gerekir. Ama çevirinin kendisinde de tuzaklar var:

  • Kod blokları İngilizce kalır, ama Arapça paragraf bir kod bloğunu sardığında, tarayıcının unicode-bidi: isolate'a ihtiyacı var, yoksa kod RTL akışına "çekilir"
  • Karışık noktalama: Arapça , yerine ،, ? yerine ؟ kullanır. Claude varsayılanda İngilizce noktalama kullanır; açıkça belirtmek gerekir
  • Sayı yönü: Arapça rakamları soldan sağa yazar (2026) ama paragrafın genel akışı sağdan sola. Tarayıcılar halleder ama Claude ham metin yazarken sık sık karıştırır

4. Claude varsayılanda yazarın sesini "ağırlaştırır"

Orijinaldeki gündelik ifadeler ("tek seferde bastım", "tuzağa bastım", "yedim") Claude tarafından Japonca/Koreceye varsayılan olarak resmi yazılı biçimlerle (「一気に実装」「落とし穴」「失敗」) çevrilir — anlam uyar, ton buharlaşır.

Düzeltme: prompt'ta açıkça söyle — "yazarın doğrudan, hafif özeleştirel, resmi olmayan teknik blog sesini koru; akademikleştirme". Buna rağmen bazı diller (Almanca, Rusça) kaynaktan bir tık daha "resmi" iner — dillerin kendisi yazılı kayıt yanlısıdır.

5. Yer tutucular ve değişkenler çevrilmez

Koddaki dizeler iki kovaya ayrılır — UI metni (çevrilir) ve yer tutucular/değişken adları (çevrilmez):

t("pricing.page_title")        # çevirme (i18n key)
"user_id"                      # çevirme (değişken adı)
"Monthly subscription"         # metinde örnek olarak gösteriliyorsa → çevirme

Koda bitişik her şey için "çevirme" daha güvenli varsayılandır. Asıl çevrilmesi gereken i18n locale dosyalarıdır (config/locales/xx.yml), o ayrı iştir.

Yayımlama: tek POST, 19 dil

/publish-article taslağı how2claude.com/api/articles adresine POST eder:

{
  "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": [...], ... }
}

Tek istek yaklaşık 300KB (19 dil × ~15KB). Sunucu veritabanı tablolarına ayırır:

  • articles tablosu, title / summary / content locale'e göre anahtarlanan jsonb
  • x_queue_tweets tablosu, locale + hesap başına, zamanlama kuyruğuna gönderilir

Tweet'ler yalnızca X hesabı bağlı locale'lere gider (şu an en/zh/ja/ko/ar/id — 6 tane). Hesabı olmayan diller [] gönderir. Hesapları sorgulama:

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

Kontrol listesi

Claude'a bir makaleyi 19 dile çevirtmenin tam kontrol listesi:

  1. Önce zh'yi (ya da en'i) kesinleştir, sonra diğer 18 çeviriyi o kaynaktan ışınla. Zincirleme yapma.
  2. Dile özel stil gereksinimini prompt'a koy. "Doğal Japonca" yetmez — "teknik blog sesi, doğal Japonca" de.
  3. Title ve summary'yi ayrı çevir, gövdenin ilk paragrafından çekme. 19 title/summary'yi meta.json'da merkezileştir.
  4. Çevrilmeyecekleri açıkça listele: kod blokları, komutlar, API adları, URL'ler, i18n anahtarları, değişken adları. Çevrilen şeyler: açıklayıcı metin, metaforlar, paragraf yapısı.
  5. Tweet'ler yeniden yazılmalı, çevrilmemeli. Çince için 140 karakter, diğerleri için 280. İngilizce-Çince harfi harfine çeviri hep sınırı aşar.
  6. zh-TW için "Tayvan kullanımı + geleneksel karakterler" de; yoksa sadece karakter dönüşümü alır ve kelime dağarcığı anakara kalır.
  7. RTL dillerde (ar, he) Rails tarafında dir="rtl" + Tailwind rtl: varyantları gerekir. Karışık noktalama ve kod bloğu izolasyonu ayrı ele alınır.
  8. Tüm dilleri tek seferde POST et — 19 içerik + 19 title/summary + bağlı her hesabın tweet'leri, tek istekte backend'e.

Asıl darboğaz çeviri kalitesi değil — Claude 4 sınıfı modeller Japoncaya/Koreceye/Arapçaya/Rusçaya anadile yakın kalitede çevirir. Darboğaz şudur: bir makaleyi 19 dilin okuru önüne koymaya istekli misin. Teknik olarak 5 dakika sürer. İçerik açısından, 200 kat izleyiciye aynı anda hizmet etmeye istekli olmayı gerektirir.