Agent skill

Translate

by forthecraft in forthecraft/drf-auth-kit

Run Django translation workflow - extract untranslated strings, translate them to 59 languages using parallel translator subagents, and apply back to PO files.

MITAuto-check: notesWriting & Content

Install Translate

skills CLI
$ npx skills add forthecraft/drf-auth-kit --skill translate -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install forthecraft/drf-auth-kit translate --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/forthecraft/drf-auth-kit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/translate .claude/skills/translate && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
translate
GitHub stars
121
Token cost
~2.4k tokens
SKILL.md length
516 words
Files
2
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Run Django translation workflow - extract untranslated strings, translate them to 59 languages using parallel translator subagents, and apply back to PO files.

  • Works in 5 steps: Clean Temp (Skip if --resume) → Extraction (Skip if --resume) → Identify Work → …
  • Adding new translatable strings
  • SKILL.md covers Arguments, Working Directory, Phase 0: Clean Temp (Skip if… and Phase 1: Extraction (Skip if…, plus 8 more sections
  • Calls python

What it does

Translate is an agent skill from forthecraft/drf-auth-kit. Run Django translation workflow - extract untranslated strings, translate them to 59 languages using parallel translator subagents, and apply back to PO files. Use when adding new translatable strings or when user asks to translate.

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `README.md`).

It sits in Writing & Content, covering Translation, Backend development and Subagents. It works with Django. The repository describes itself as: Modern Django REST Framework authentication toolkit with JWT cookies, social login, and 2FA support. The licence is MIT.

When your agent uses it

  • Adding new translatable strings
  • User asks to translate

Example prompts

  • “/translate”

Requirements

  • Python 3
  • Pre-approved tools (allowed-tools): Bash, Read, Write, Glob, Task

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Clean Temp (Skip if --resume)
  2. Extraction (Skip if --resume)
  3. Identify Work
  4. Parallel Translation with Translator Subagents
  5. Apply Translations

What it can do on your machine

Read from SKILL.md and the folder at commit 587986f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Write
    • Glob
    • Task

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Translate loads about 2.4k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 516 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~61
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Write, Glob, Task

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from forthecraft/drf-auth-kit at commit 587986f, republished under its MIT licence (© forthecraft). 516 words, ~2,414 tokens.

Download SKILL.mdSave it as .claude/skills/translate/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
translate
description
Run Django translation workflow - extract untranslated strings, translate them to 59 languages using parallel translator subagents, and apply back to PO files. Use when adding new translatable strings or when user asks to translate.
allowed-tools
Bash, Read, Write, Glob, Task
argument-hint
[--resume] [--parallel N]
disable-model-invocation
false
user-invocable
true

Django Translation Workflow

Automates Django translation with parallel translator subagents and resume capability.

Arguments

Parse $ARGUMENTS for:

  • --resume: Skip extraction, continue from existing temp/extracted/
  • --parallel N: Number of parallel translator subagents (default: 4, range: 1-10)

Example: $ARGUMENTS = "--resume --parallel 6" means resume mode with 6 parallel agents

Working Directory

Ensure we're in the drf-auth-kit directory:

bash
pwd

Phase 0: Clean Temp (Skip if --resume)

If --resume NOT in arguments:

  1. Remove existing temp folder to start fresh:
bash
rm -rf temp/

If --resume IS in arguments:

  • Skip cleanup
  • Report: "⏭️ Keeping existing temp/ (--resume mode)"

Phase 1: Extraction (Skip if --resume)

If --resume NOT in arguments:

  1. Run makemessages:
bash
python sandbox/manage.py makemessages --all
  1. Clean and extract:
bash
./scripts/py_clean_and_extract.py
  1. Report extraction results

If --resume IS in arguments:

  • Skip extraction
  • Report: "⏭️ Skipping extraction (--resume mode)"

Phase 2: Identify Work

  1. List all batch files in temp/extracted/ (use single bash command):
bash
ls temp/extracted/*.json | xargs -n 1 basename
  1. List already-translated files in temp/translated/ (use single bash command):
bash
ls temp/translated/*.json 2>/dev/null | xargs -n 1 basename || echo ""
  1. Determine pending files:

    • pending = extracted files NOT in translated/
    • If no pending files: "✅ All translations complete!"
    • Otherwise: Continue to Phase 3
  2. Report:

📊 Translation Status:
   - Total batch files: X
   - Already translated: Y
   - Pending translation: Z

Phase 3: Parallel Translation with Translator Subagents

Parse Arguments

Extract parallel count from $ARGUMENTS:

  • If --parallel N found: use N (clamp to 1-10)
  • If not found: use 4 (default)
Spawn Translator Subagents

For each pending batch file, spawn a translator subagent:

parallel_limit = parsed from arguments (default: 4)
pending_files = [list of pending batch files]
active_agents = []  # [(agent_id, filename), ...]
completed = []
failed = []

# Spawn all agents up to parallel limit
FOR each file in pending_files (up to parallel_limit):
    agent_id = Task(
        subagent_type: "translator",
        description: f"Translate {file}",
        run_in_background: true,
        prompt: f"""
Translate the Django message batch file: temp/extracted/{file}

Read the input file, translate ALL strings for ALL languages, and write to: temp/translated/{file}

Follow your translation guidelines for quality, placeholder preservation, and JSON formatting.
"""
    )

    active_agents.append((agent_id, file))
    Report: "⏳ Spawned translator for {file}"

# Report initial status
Report: "📊 Status: 0/{len(pending_files)} completed, {len(active_agents)} active, {len(pending_files) - len(active_agents)} pending"

# Monitor completion by checking temp/translated/
WHILE active_agents:
    Wait 10 seconds

    # Check which files now exist in temp/translated/
    completed_files_on_disk = list files in temp/translated/*.json (basenames only)

    # Find newly completed agents
    newly_completed = []
    FOR each (agent_id, file) in active_agents:
        IF file in completed_files_on_disk:
            completed.append(file)
            newly_completed.append(file)
            active_agents.remove((agent_id, file))

    # Report newly completed
    IF newly_completed:
        FOR each file in newly_completed:
            Report: "✅ Completed {file}"

    # Spawn next batch of agents if we have pending files
    files_to_spawn = pending_files[len(completed):]
    WHILE len(active_agents) < parallel_limit AND files_to_spawn:
        file = files_to_spawn.pop(0)

        agent_id = Task(
            subagent_type: "translator",
            description: f"Translate {file}",
            run_in_background: true,
            prompt: f"""
Translate the Django message batch file: temp/extracted/{file}

Read the input file, translate ALL strings for ALL languages, and write to: temp/translated/{file}

Follow your translation guidelines for quality, placeholder preservation, and JSON formatting.
"""
        )

        active_agents.append((agent_id, file))
        Report: "⏳ Spawned translator for {file}"

    # Progress report
    total = len(pending_files)
    Report: "📊 Progress: {len(completed)}/{total} completed, {len(active_agents)} active, {total - len(completed) - len(active_agents)} pending"
END WHILE

# Final verification
all_expected_files = pending_files
completed_files_on_disk = list files in temp/translated/*.json (basenames only)
failed = [file for file in all_expected_files if file not in completed_files_on_disk]

IF failed:
    Report: "❌ Failed to translate: {failed}"
    Report: "Run '/translate --resume' to retry failed files"
ELSE:
    Report: "✅ All {len(completed)} batch files translated successfully!"

Phase 4: Apply Translations

After all translations complete (no failed files):

  1. Apply translations to PO files:
bash
./scripts/py_apply_translations.py
  1. Report results from script output

  2. Final summary:

🎉 Translation Complete!
   ✅ Translated: X batch files
   ✅ Updated: Y languages
   ✅ Applied: Z strings
  1. END OF WORKFLOW - Stop here immediately. Do not wait for or respond to any subsequent "Agent completed" notifications. The translations are done and applied. Any background agents still finishing up are irrelevant since we've already verified all output files exist and applied them.

Error Handling

  • Extraction fails: Report error, suggest manual run
  • Translator subagent fails: File won't appear in temp/translated/, tracked as failed
  • Application fails: Report error, show script output
  • Rate limited / partial completion: User can run /translate --resume to continue
Show full SKILL.md (196 more words)Show less

Progress Reporting

Provide clear, emoji-rich progress updates throughout:

📦 Extraction Phase
⏳ Running makemessages...
✅ Extracted messages for 59 languages

⏳ Cleaning and extracting untranslated strings...
✅ Created 12 batch files in temp/extracted/
   - Total untranslated: 1,234 strings
   - Languages: 45

🌐 Translation Phase (parallel: 4)
📊 Status: 0/12 completed, 0 active, 12 pending

⏳ Spawned translator for af-ar-az-be.json
⏳ Spawned translator for bg-bs-ca-cs.json
⏳ Spawned translator for cy-da-de-el.json
⏳ Spawned translator for es-et-fa-fi.json
📊 Status: 0/12 completed, 4 active, 8 pending

[Wait 10 seconds...]

Checking temp/translated/ for completed files...
✅ Completed af-ar-az-be.json
✅ Completed bg-bs-ca-cs.json
📊 Status: 2/12 completed, 2 active, 8 pending

⏳ Spawned translator for fr-gl-he-hi.json
⏳ Spawned translator for hr-hu-hy-id.json
📊 Status: 2/12 completed, 4 active, 6 pending

[Wait 10 seconds...]

Checking temp/translated/ for completed files...
✅ Completed cy-da-de-el.json
✅ Completed es-et-fa-fi.json
✅ Completed fr-gl-he-hi.json
📊 Status: 5/12 completed, 3 active, 4 pending

... (continue until all done) ...

Final verification: checking temp/translated/...
✅ All 12 batch files translated successfully!

📥 Application Phase
⏳ Applying translations to PO files...
✅ Applied 1,234 translations to 45 languages
✅ Generated MO files

🎉 Translation Complete!
   ✅ Translated: 12 batch files
   ✅ Updated: 45 languages
   ✅ Applied: 1,234 strings

Implementation Tips

  1. Use translator subagent: Spawn with Task(subagent_type: "translator", ...)
  2. Background execution: Use run_in_background: true for parallel work
  3. Check files on disk: Completion is verified by checking temp/translated/, not task status
  4. Semaphore pattern: Maintain parallel_limit active agents, spawn next when one completes
  5. Resume capability: Compare temp/extracted/ vs temp/translated/ to find pending work
  6. Simple prompts to subagents: Just pass the filename, the subagent knows the workflow

Example Invocations

/translate
→ Full workflow, 4 parallel translator subagents

/translate --parallel 6
→ Full workflow, 6 parallel translator subagents

/translate --resume
→ Skip extraction, translate remaining files with 4 parallel translator subagents

/translate --resume --parallel 8
→ Skip extraction, translate remaining files with 8 parallel translator subagents

Critical: Handling Agent Completion Notifications

After the final summary is shown and the workflow completes, DO NOT RESPOND to any "Agent completed" notifications that arrive afterward. The work is verified complete by checking files on disk. Background subagents may report completion late, but:

  1. All files have been verified to exist in temp/translated/
  2. All translations have been applied via py_apply_translations.py
  3. The final summary has been shown
  4. The conversation is complete - do not add any further messages

Any agent completion notifications after this point are informational only and require no response or acknowledgment.


Note: This skill uses the translator subagent defined in .claude/agents/translator.md. The subagent handles all translation logic, quality standards, and file I/O.

© forthecraft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .claude/skills/translate of forthecraft/drf-auth-kit.

  • SKILL.md
  • README.md

Open the folder on GitHubat commit 587986f

Compare with similar skills

Translate next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Translate compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Translate this skillforthecraft/drf-auth-kit121—~2.4kAutomated safety check: NotesMIT
Benchmark Translateshapeshift/web206—~1.6kAutomated safety check: PassMIT
Docs Leadlablup/backend.ai-webui133—~2.9kAutomated safety check: PassLGPL-3.0
Po Translatenatsukium/dotfiles106—~1.4kAutomated safety check: PassCC0-1.0
Saleor Django Schema Migrationsaleor/saleor23k—~1kAutomated safety check: PassBSD-3-Clause
Translate Bookdeusyu/translate-book2.1k—~5.5kAutomated safety check: NotesMIT

Similar skills

  • Benchmark Translate

    shapeshift/web

    Run a quality benchmark of the /translate skill by selecting stratified test keys, capturing ground truth, translating, judging with sub-agents, and compiling a regression report.

    206 GitHub stars~1.6k tokensUpdated today
    Writing & ContentAuto-check passed
  • Docs Lead

    lablup/backend.ai-webui

    A skill your agent uses whenever the user mentions docs, the manual, documentation, terminology, translations, or screenshots — including indirect mentions like "이 PR 문서 영향 봐줘", "문서 점검", "용어 통일"…

    133 GitHub stars~2.9k tokensUpdated today
    Writing & ContentAuto-check passed
  • Po Translate

    natsukium/dotfiles

    Orchestrate English→Japanese translation of po/ja.po — classify, delegate translation/review to subagents, iterate until clean

    106 GitHub stars~1.4k tokensUpdated today
    Writing & ContentAuto-check passed
  • Generates and splits Django schema migrations for Saleor with manage.py makemigrations, enforcing one new model or one field change per migration file.

    23k GitHub stars~1k tokensUpdated today
    Backend & APIsAuto-check passed
  • Translate Book

    deusyu/translate-book

    Translate books (PDF/DOCX/EPUB) into any language using parallel sub-agents.

    2.1k GitHub stars~5.5k tokensUpdated 15 days ago
    Documents & OfficeAuto-check: notes
  • Video Translator

    shang-zhu/violin

    Dub a video into another language and generate subtitles using the default Together + Cartesia stack.

    1.1k GitHub stars~1k tokensUpdated 1 mo ago
    Media & CreativeAuto-check: notes

Works with

Questions about Translate

What does Translate do?

Run Django translation workflow - extract untranslated strings, translate them to 59 languages using parallel translator subagents, and apply back to PO files. Translate is an agent skill from forthecraft/drf-auth-kit. Run Django translation workflow - extract untranslated strings, translate them to 59 languages using parallel translator subagents, and apply back to PO files.

When should I use Translate?

Translate fits situations like: adding new translatable strings; user asks to translate.

How do I install Translate in Claude Code?

Run `npx skills add forthecraft/drf-auth-kit --skill translate -a claude-code`. Or copy the skill folder (.claude/skills/translate in forthecraft/drf-auth-kit) into .claude/skills/translate in your project. Claude Code loads it when a task matches its description.

How do I install Translate in Codex?

Run `npx skills add forthecraft/drf-auth-kit --skill translate -a codex`. Or copy the skill folder (.claude/skills/translate in forthecraft/drf-auth-kit) into .agents/skills/translate in your project. Codex loads it when a task matches its description.

Can I use Translate in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add forthecraft/drf-auth-kit --skill translate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/translate, .gemini/skills/translate, .github/skills/translate and .opencode/skills/translate in your project.

What does Translate need to run?

Going by SKILL.md and its folder, Translate needs the command-line tools its instructions call (python). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Bash, Read, Write, Glob, Task.

Does Translate access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Translate safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Translate use?

Translate is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Translate use?

About 2.4k tokens (SKILL.md is roughly 9.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Translate?

Skills that share tags, products or a category with Translate: Benchmark Translate (shapeshift/web, 206 stars), Docs Lead (lablup/backend.ai-webui, 133 stars), Po Translate (natsukium/dotfiles, 106 stars) and Saleor Django Schema Migration (saleor/saleor, 23k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Translate?

forthecraft (a GitHub organization) maintains it in forthecraft/drf-auth-kit, which has 121 GitHub stars. The repository was last updated on August 10, 2026.

Source: forthecraft/drf-auth-kit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.