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 יכשל בוודאות, איך לשלוח POST אחד עם 19 שפות ועם ציוצים לפי שפה ל-API.


ההחלטה המרכזית: תרגום לעומת לוקליזציה

שני דברים שונים מאוד.

תרגום מעביר משמעות משפה A לשפה B — מה שעושה Google Translate. קריא "נכון" אבל "שטוח".

לוקליזציה שומרת על הרגיסטר, הקצב והרמה המקצועית של הכותב, ומשכתבת ב"קול בלוג טכנולוגי" של שפת היעד. התוצאה קריאה כאילו נכתבה על ידי דובר ילידי.

תרגום עבור Claude הוא עבודת 5 דקות; לוקליזציה מחייבת את ה-prompt לפרט:

  • מיהו הקורא היעד (מפתחים, צוותים טכניים)
  • רגיסטר התייחסות ("נשמע כמו הבלוג פלוני")
  • מונחים שחייבים להישאר בשפת המקור (שמות API, שמות frameworks, פקודות, URLs)
  • היכן מותר לשחזר מבנה (לשבור משפטים ארוכים, להחליף מטאפורות באחרות שהקורא הילידי יזהה)

הפקודה /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",
    "he": "לתת ל-Claude לתרגם מאמר אחד ל-19 שפות",
    "...": "..."
  },
  "summary": {
    "he": "מאמר אחד 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, URLs
3. כותרות, תתי-כותרות, זרימת פסקאות מותר לשחזר
4. הפק title נפרד לכל שפה — קצר, עם קרס, לא תרגום מילולי של הכותרת המקורית

לתרגם 18 שפות במקביל, session אחד של Claude פותר הכול. פרט מפתח: לעשות את זה באותה session / באותה גרסת מודל — הקול נסחף בין sessions ובין דורות מודל.

5 מקומות שבאמת נשברים

1. מגבלות תווים לציוץ משתנות לפי שפה

X סופר תווי CJK (סינית/יפנית/קוריאנית) בחומרה רבה יותר. ביקשתי מ-Claude לייצר ציוצים עם האילוץ הזה:

  • ציוצים בסינית ≤ 140 תווים
  • שפות אחרות ≤ 280 תווים

במעבר הראשון שלושה ציוצים בסינית חרגו (160, 164, 152). Claude תרגם את הציוצים האנגליים מילולית — ציוץ אנגלי של 260 תווים הופך לסינית בדיוק בגבול.

חוק: ציוצים בסינית חייבים להיכתב מחדש, לא להיתרגם. דרישות: תקרה של 140 תווים, קרס חובה, אובדן פרטים מותר.

2. zh-TW אינו המרת תווים

zhzh-TW מזמין עצלנות: להעביר דרך ממיר מפושט-למסורתי. התווים תואמים, אוצר המילים לא:

zh zh-TW (שגוי) zh-TW (נכון)
文件 文件 檔案
信息 信息 資訊
软件 軟件 軟體
视频 視頻 影片

כאשר מבקשים zh-TW מ-Claude, לומר את שני החלקים: "שימוש טייוואני, אותיות מסורתיות". "מסורתיות בלבד" ייתן המרת תווים.

3. שפות RTL (ar, he) שוברות את הפריסה

ערבית ועברית נקראות מימין לשמאל. בצד Rails נדרש <html dir="rtl"> וגרסאות rtl: של Tailwind. אבל גם בתרגום עצמו יש מלכודות:

  • בלוקי קוד נשארים באנגלית, אבל כשפסקה ערבית עוטפת בלוק קוד, הדפדפן זקוק ל-unicode-bidi: isolate אחרת הקוד "נשאב" לתוך זרימת ה-RTL
  • סימני פיסוק מעורבים: ערבית משתמשת ב-، במקום ,, וב-؟ במקום ?. Claude בברירת מחדל משתמש בסימני פיסוק אנגליים; צריך לציין במפורש
  • כיוון ספרות: בערבית ספרות נכתבות משמאל לימין (2026) בתוך פסקה שזורמת מימין לשמאל. דפדפנים מטפלים בזה, אבל Claude לעיתים קרובות מבלבל בטקסט גולמי

4. Claude כברירת מחדל "מרגיע" את קולו של הכותב

ביטויים מדוברים מהמקור ("מכה אחת", "דרכתי בבור", "פספסתי") Claude מתרגם ליפנית/קוריאנית בברירת מחדל לצורות כתובות פורמליות (「一気に実装」「落とし穴」「失敗」) — המשמעות תואמת, הטון מתנדף.

פתרון: לנסח במפורש ב-prompt — "שמור על הקול הישיר, עם הומור עצמי, הלא-פורמלי של בלוג טכנולוגי; בלי אקדמיזציה". גם אז, שפות מסוימות (גרמנית, רוסית) ינחתו טיפה יותר "פורמליות" מהמקור — השפות עצמן נוטות לרגיסטר הכתוב.

5. Placeholders ומשתנים לא מתרגמים

מחרוזות בקוד נחלקות לשני דליים — טקסט UI (מתרגמים) ו-placeholders/שמות משתנים (לא):

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). השרת מפרק לטבלאות DB:

  • טבלת articles, title / summary / content הם jsonb לפי locale
  • טבלת x_queue_tweets, לפי locale + חשבון, נשלחת לתור תזמון

ציוצים יוצאים רק ל-locales עם חשבון 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, URLs, מפתחות i18n, שמות משתנים. מה שמתרגם: טקסט מסביר, מטאפורות, מבנה פסקאות.
  5. ציוצים חייבים להיכתב מחדש, לא להיתרגם. 140 תווים לסינית, 280 ליתר. תרגום מילולי אנגלית-לסינית תמיד חורג מהגבול.
  6. עבור zh-TW לומר "שימוש טייוואני + אותיות מסורתיות"; אחרת תקבל רק המרת תווים ואוצר המילים יישאר יבשתי.
  7. שפות RTL (ar, he) דורשות dir="rtl" + גרסאות rtl: של Tailwind בצד Rails. סימני פיסוק מעורבים ובידוד בלוקי קוד — טיפול נפרד.
  8. שלח את כל השפות ב-POST אחד — 19 content + 19 title/summary + ציוצים לכל חשבון מחובר, בקשה אחת ל-backend.

צוואר הבקבוק האמיתי אינו איכות התרגום — מודלים מסוג Claude 4 מתרגמים ליפנית/קוריאנית/ערבית/רוסית ברמה קרובה לזו של דובר ילידי. צוואר הבקבוק הוא האם אתה מוכן להציב מאמר אחד לפני קוראים ב-19 שפות בבת אחת. טכנית זה 5 דקות. מבחינת תוכן — מוכנות לשרת פי 200 מהקהל בבת אחת.