mirror of
https://github.com/Donchitos/Claude-Code-Game-Studios.git
synced 2026-06-27 04:51:46 +00:00
New skill: /consistency-check — cross-GDD entity registry scanner New registries: design/registry/entities.yaml, docs/registry/architecture.yaml Skill fixes: no-arg guards, verdict keywords, AskUserQuestion gates on all team-* skills Agent fixes: genre-agnostic language in game-designer, systems-designer, economy-designer, live-ops-designer Docs: skill/template counts corrected, stale references cleaned up Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
108 lines
3.9 KiB
Markdown
108 lines
3.9 KiB
Markdown
---
|
|
name: localize
|
|
description: "Run the localization workflow: extract strings, validate localization readiness, check for hardcoded text, and generate translation-ready string tables."
|
|
argument-hint: "[scan|extract|validate|status]"
|
|
user-invocable: true
|
|
agent: localization-lead
|
|
allowed-tools: Read, Glob, Grep, Write, Bash
|
|
---
|
|
|
|
## Phase 1: Parse Subcommand
|
|
|
|
Determine the mode from the argument:
|
|
|
|
- `scan` — Scan for localization issues (hardcoded strings, missing keys)
|
|
- `extract` — Extract new strings and generate/update string tables
|
|
- `validate` — Validate existing translations for completeness and format
|
|
- `status` — Report overall localization status
|
|
|
|
If no subcommand is provided, output usage and stop. Verdict: **FAIL** — missing required subcommand.
|
|
|
|
---
|
|
|
|
## Phase 2A: Scan Mode
|
|
|
|
Search `src/` for hardcoded user-facing strings:
|
|
|
|
- String literals in UI code not wrapped in a localization function
|
|
- Concatenated strings that should be parameterized
|
|
- Strings with positional placeholders (`%s`, `%d`) instead of named ones (`{playerName}`)
|
|
|
|
Search for localization anti-patterns:
|
|
|
|
- Date/time formatting not using locale-aware functions
|
|
- Number formatting without locale awareness
|
|
- Text embedded in images or textures (flag asset files)
|
|
- Strings that assume left-to-right text direction
|
|
|
|
Report all findings with file paths and line numbers. This mode is read-only — no files are written.
|
|
|
|
---
|
|
|
|
## Phase 2B: Extract Mode
|
|
|
|
- Scan all source files for localized string references
|
|
- Compare against the existing string table (if any) in `assets/data/`
|
|
- Generate new entries for strings that don't have keys yet
|
|
- Suggest key names following the convention: `[category].[subcategory].[description]`
|
|
- Output a diff of new strings to add to the string table
|
|
|
|
Present the diff to the user. Ask: "May I write these new entries to `assets/data/strings/strings-[locale].json`?"
|
|
|
|
If yes, write only the diff (new entries), not a full replacement. Verdict: **COMPLETE** — strings extracted and written.
|
|
|
|
If no, stop here. Verdict: **BLOCKED** — user declined write.
|
|
|
|
---
|
|
|
|
## Phase 2C: Validate Mode
|
|
|
|
- Read all string table files in `assets/data/`
|
|
- Check each entry for:
|
|
- Missing translations (key exists but no translation for a locale)
|
|
- Placeholder mismatches (source has `{name}` but translation is missing it)
|
|
- String length violations (exceeds character limits for UI elements)
|
|
- Orphaned keys (translation exists but nothing references the key in code)
|
|
- Report validation results grouped by locale and severity. This mode is read-only — no files are written.
|
|
|
|
---
|
|
|
|
## Phase 2D: Status Mode
|
|
|
|
- Count total localizable strings
|
|
- Per locale: count translated, untranslated, and stale (source changed since translation)
|
|
- Generate a coverage matrix:
|
|
|
|
```markdown
|
|
## Localization Status
|
|
Generated: [Date]
|
|
|
|
| Locale | Total | Translated | Missing | Stale | Coverage |
|
|
|--------|-------|-----------|---------|-------|----------|
|
|
| en (source) | [N] | [N] | 0 | 0 | 100% |
|
|
| [locale] | [N] | [N] | [N] | [N] | [X]% |
|
|
|
|
### Issues
|
|
- [N] hardcoded strings found in source code
|
|
- [N] strings exceeding character limits
|
|
- [N] placeholder mismatches
|
|
- [N] orphaned keys (can be cleaned up)
|
|
```
|
|
|
|
This mode is read-only — no files are written.
|
|
|
|
---
|
|
|
|
## Phase 3: Next Steps
|
|
|
|
- If scan found hardcoded strings: run `/localize extract` to begin extracting them.
|
|
- If validate found missing translations: share the report with the translation team.
|
|
- If approaching launch: run `/asset-audit` to verify all localized assets are present.
|
|
|
|
### Rules
|
|
- English (en) is always the source locale
|
|
- Every string table entry must include a translator comment explaining context
|
|
- Never modify translation files directly — generate diffs for review
|
|
- Character limits must be defined per-UI-element and enforced automatically
|
|
- Right-to-left (RTL) language support should be considered from the start, not bolted on later
|