| name | translate-i18n |
| description | Fill missing i18n translations in the viewer source JSON. Run this after adding or modifying English or Chinese UI strings in claude_tap/viewer_i18n.json — it auto-translates to ja, ko, fr, ar, de, ru via OpenRouter. |
| user_invocable | true |
Translate i18n
Automatically fill missing translations for the viewer's claude_tap/viewer_i18n.json source file. The script uses English and Chinese as source languages and translates to Japanese, Korean, French, Arabic, German, and Russian.
Prerequisites
OPENROUTER_API_KEY must be set in the environment (it is in the user's .zshrc)
- Default model:
google/gemini-2.5-flash
Workflow
1. Check what's missing (dry run)
Always preview first to confirm which keys need translation:
uv run python scripts/translate_i18n.py --dry-run
This parses claude_tap/viewer_i18n.json, finds keys present in both en and zh-CN but missing in other languages, and lists them without modifying the file.
2. Run the translation
uv run python scripts/translate_i18n.py
The script calls OpenRouter once per target language, then writes the translations back into viewer_i18n.json in-place.
3. Verify the result
After translation, run the formatter and tests to make sure nothing broke:
uv run python -m json.tool claude_tap/viewer_i18n.json >/dev/null
uv run pytest tests/test_translate_i18n.py -v
Options
| Flag | Purpose |
|---|
--dry-run | Show missing keys only, no file changes |
--model MODEL | Override the OpenRouter model (default: google/gemini-2.5-flash) |
--target {viewer,cli} | Translation target preset (default: viewer) |
--file PATH | Override target file path |
--object-name NAME | Override the legacy JS/Python i18n object name |
How it works
The script:
- Loads the viewer i18n JSON source file
- Validates that every language block is a string-to-string map
- Identifies keys present in
en + zh-CN but missing in target languages
- Sends a structured prompt to OpenRouter with existing translations for consistency
- Normalizes fullwidth punctuation for CJK languages (matching zh-CN style)
- Inserts new entries after the existing keys in each target language
Common scenarios
Added a new UI string: Add the key to both en and zh-CN blocks in claude_tap/viewer_i18n.json, then run this skill. The other 6 languages will be filled automatically.
Changed an existing string: The script only fills missing keys. To re-translate an existing key, first delete it from the target language blocks, then run the script.