Translate Blog Post (JA → EN)
Translate Japanese Markdown blog posts into natural, engaging English. The output is a new -en suffixed file that the blog system automatically serves to English-locale users.
How It Works
This project (nikechan-blog) filters blog posts by slug suffix:
content/posts/foo.md → Japanese (shown when locale is ja)
content/posts/foo-en.md → English (shown when locale is en)
No frontmatter locale field is needed — the -en suffix in the filename is the only signal.
Workflow
Identify target posts. If the user specifies a file, use that. Otherwise, list content/posts/*.md excluding any that already end in -en.md, and ask which to translate. If no untranslated posts remain, tell the user.
Read the source post in full.
Translate following the rules below.
Write the translated file as content/posts/<slug>-en.md.
Remind the user to verify at /dev_blog?lang=en (with the dev server running).
If multiple posts need translating, use parallel subagents — one per post — to translate them concurrently.
Translation Rules
Preserve Exactly (Do NOT Translate)
- All image paths (
/static/images/...)
- All URLs and links (both href and display text when it's a URL)
- @mentions (
@ai_nikechan, @cumulo_autumn, etc.)
- Proper nouns: character names, tool/product names, tech terms
- "AIニケちゃん" → "AI Nike-chan", "ニケ" → "Nike" (the author)
- OpenClaw, AITuberKit, llama.cpp, Codex, etc.
- Code blocks and inline code
- Markdown formatting (headings, bold, lists, image alt text structure)
- The
date field in frontmatter
- The
thumbnail path (shared with the Japanese version)
Translate
- Frontmatter:
title, tags, description — into natural English
- Body text: all prose, headings, image alt text descriptions
- Tone: match the original — if it's casual and humorous, keep it casual and humorous in English. If persuasive and encouraging, maintain that energy.
Cultural Adaptation
Japanese internet culture and slang often has no direct English equivalent. Adapt these so English readers understand the humor without losing the spirit:
| Japanese |
English Approach |
| RTA (リアルタイムアタック) |
"speedrun" |
| NTR (寝取られ) |
Explain the concept directly (e.g., "being cuckolded by my own AI") |
| ザル / ザルシステム |
"sieve" / "full of holes" |
| ガバガバ |
"incredibly permissive" / "wide open" |
| 〜先生 (honorific) |
Keep as "-sensei" when the community would recognize it (e.g., VTuber/anime space) |
| 草 / w |
Convey humor through English phrasing rather than translating the laugh marker |
General principles:
- If a joke relies on Japanese wordplay that can't transfer, replace it with an English joke that lands the same emotional beat.
- When both yen and dollar amounts are present, keep only the dollar amount for English readers (e.g., drop "約120億円" when "$75 million" is already there).
- Don't over-explain cultural references — a light touch is better. If one parenthetical is enough, use that.
Quality Checklist
Before saving the file, verify:
1---2name: translate-post3description: Translate Japanese blog posts (content/posts/*.md) into natural English, creating -en suffixed files. Use this skill whenever the user asks to translate articles, says "記事を翻訳して", "英語にして", "translate article", "translate to English", "翻訳して", "英訳して", "English version作って", or mentions wanting English versions of blog posts. Also trigger when the user discusses i18n/localization of blog content or asks about making posts available in English.4---56# Translate Blog Post (JA → EN)78Translate Japanese Markdown blog posts into natural, engaging English. The output is a new `-en` suffixed file that the blog system automatically serves to English-locale users.910## How It Works1112This project (nikechan-blog) filters blog posts by slug suffix:13- `content/posts/foo.md` → Japanese (shown when locale is `ja`)14- `content/posts/foo-en.md` → English (shown when locale is `en`)1516No frontmatter `locale` field is needed — the `-en` suffix in the filename is the only signal.1718## Workflow19201. **Identify target posts.** If the user specifies a file, use that. Otherwise, list `content/posts/*.md` excluding any that already end in `-en.md`, and ask which to translate. If no untranslated posts remain, tell the user.21222. **Read the source post** in full.23243. **Translate** following the rules below.25264. **Write the translated file** as `content/posts/<slug>-en.md`.27285. **Remind the user** to verify at `/dev_blog?lang=en` (with the dev server running).2930If multiple posts need translating, use parallel subagents — one per post — to translate them concurrently.3132## Translation Rules3334### Preserve Exactly (Do NOT Translate)35- All image paths (`/static/images/...`)36- All URLs and links (both href and display text when it's a URL)37- @mentions (`@ai_nikechan`, `@cumulo_autumn`, etc.)38- Proper nouns: character names, tool/product names, tech terms39 - "AIニケちゃん" → "AI Nike-chan", "ニケ" → "Nike" (the author)40 - OpenClaw, AITuberKit, llama.cpp, Codex, etc.41- Code blocks and inline code42- Markdown formatting (headings, bold, lists, image alt text structure)43- The `date` field in frontmatter44- The `thumbnail` path (shared with the Japanese version)4546### Translate47- **Frontmatter**: `title`, `tags`, `description` — into natural English48- **Body text**: all prose, headings, image alt text descriptions49- **Tone**: match the original — if it's casual and humorous, keep it casual and humorous in English. If persuasive and encouraging, maintain that energy.5051### Cultural Adaptation52Japanese internet culture and slang often has no direct English equivalent. Adapt these so English readers understand the humor without losing the spirit:5354| Japanese | English Approach |55|----------|-----------------|56| RTA (リアルタイムアタック) | "speedrun" |57| NTR (寝取られ) | Explain the concept directly (e.g., "being cuckolded by my own AI") |58| ザル / ザルシステム | "sieve" / "full of holes" |59| ガバガバ | "incredibly permissive" / "wide open" |60| 〜先生 (honorific) | Keep as "-sensei" when the community would recognize it (e.g., VTuber/anime space) |61| 草 / w | Convey humor through English phrasing rather than translating the laugh marker |6263General principles:64- If a joke relies on Japanese wordplay that can't transfer, replace it with an English joke that lands the same emotional beat.65- When both yen and dollar amounts are present, keep only the dollar amount for English readers (e.g., drop "約120億円" when "$75 million" is already there).66- Don't over-explain cultural references — a light touch is better. If one parenthetical is enough, use that.6768### Quality Checklist69Before saving the file, verify:70- [ ] Frontmatter is valid YAML with translated title/tags/description71- [ ] All image paths and URLs are unchanged from the source72- [ ] No Japanese text remains (except in proper nouns or intentional romanization)73- [ ] The file line count is roughly similar to the original (translation shouldn't drastically expand or shrink the content)74- [ ] The slug ends with `-en` (e.g., `my-post-en.md`)