ワンクリックで
i18n-glossary-sync
// Maintain a canonical i18n glossary file — sync new terms across all language pairs, detect drift, flag missing translations, and enforce consistent terminology across the codebase.
// Maintain a canonical i18n glossary file — sync new terms across all language pairs, detect drift, flag missing translations, and enforce consistent terminology across the codebase.
Identify and formalize durable product and technical decisions from agent outputs into long-term memory. Activate after Discovery produces artefacts, Delivery resolves trade-offs, or product direction materially changes.
Compact verbose memory index / registry files to pointer-only form. Activate when an index file (index.md, index-decisions.md, or any sibling registry table) breaches the file-size budget OR shows substance-duplication drift. Distinct from memory-compact (which targets content categories) and memory-archive-superseded (which migrates superseded rows to archive).
Detect and heal index.md drift — finds memory files on disk not registered in index.md and registers them. Run when /gaai-status reports unregistered files, after batch memory operations, or as a post-delivery gate.
Takes surface scan results, optional LLM synthesis open-question entries, and optional tree-sitter AST signals to score project ambiguities (1-10). Outputs structured ambiguity_feed for smart-question-generator. Pure heuristic — no LLM calls. Designed for Stage 3.5 of the /gaai:bootstrap pipeline (between LLM synthesis and Q&A).
Construct the LLM synthesis prompt from project surface scan + optional tree-sitter context + optional Q&A answers. Call the LLM. Parse and validate the response into 6-8 structured memory entries with clarity tags and source traceability. Used as Stage 3 of the /gaai:bootstrap pipeline.
Write structured memory entries to the Cloud workspace via gaai_memory.store MCP tool with source='bootstrap'. Loops over entries from bootstrap-llm-synthesis, calls the tool per entry, collects success/fail counts. Used as Stage 5 of the /gaai:bootstrap pipeline (Cloud path only).
| type | skill |
| id | i18n-glossary-sync |
| name | i18n-glossary-sync |
| description | Maintain a canonical i18n glossary file — sync new terms across all language pairs, detect drift, flag missing translations, and enforce consistent terminology across the codebase. |
| layer | cross |
| category | analysis |
| created_at | "2026-03-02T00:00:00.000Z" |
| updated_at | "2026-03-02T00:00:00.000Z" |
Ensure all domain-specific terms used in i18n translations are documented in the glossary and applied consistently across all languages. Prevents terminology drift and simplifies future language additions.
Usage context: Post-extraction, post-translation, and ongoing (every release). Keeps glossary in sync with actual usage.
{
"locales_path": "locales/",
"glossary_path": "domains/i18n/glossary.md",
"languages": ["en", "fr", "de", "es"],
"domain_terms": [
"lead", "prospect", "expert", "milestone", "direct link",
"spending limit", "flag", "qualification rate", "trust score"
],
"analysis_mode": "comprehensive", // or "quick" (just check coverage)
"output_format": "json"
}
{
"glossary_summary": {
"status": "NEEDS_UPDATE", // UP_TO_DATE, NEEDS_UPDATE, CRITICAL_GAPS
"glossary_terms": 28,
"translations_found": 26,
"missing_translations": 2,
"inconsistent_usage": 5,
"new_terms_discovered": 3,
"deprecated_terms": 1,
"last_updated": "2026-03-01"
},
"term_analysis": [
{
"term": "lead",
"status": "INCONSISTENT",
"glossary": {
"en": "lead",
"fr": "prospect",
"de": "Lead",
"es": "prospecto"
},
"actual_usage": {
"en": {
"usage_count": 12,
"variants": ["lead", "leads"],
"consistent": true
},
"fr": {
"usage_count": 11,
"variants": ["prospect", "prospects", "Leads"], // ❌ "Leads" is variant
"consistent": false,
"inconsistent_instances": [
{
"key": "dashboard.leads.header",
"text": "Mes Leads",
"should_be": "Mes prospects",
"file": "locales/fr/dashboard.json",
"line": 15
}
]
},
"de": {
"usage_count": 8,
"variants": ["Lead", "Leads"],
"consistent": true
},
"es": {
"usage_count": 9,
"variants": ["prospecto", "prospectos"],
"consistent": true
}
},
"recommendations": [
"Fix FR usage: change 'Leads' to 'prospect' in dashboard.leads.header",
"Update glossary note: explain EN 'lead' vs FR 'prospect' distinction"
]
},
{
"term": "milestone",
"status": "COMPLETE",
"glossary": {
"en": "milestone",
"fr": "jalon",
"de": "Meilenstein",
"es": "hito"
},
"actual_usage": {
"en": { "usage_count": 24, "variants": ["milestone", "milestones"], "consistent": true },
"fr": { "usage_count": 24, "variants": ["jalon", "jalons"], "consistent": true },
"de": { "usage_count": 24, "variants": ["Meilenstein", "Meilensteine"], "consistent": true },
"es": { "usage_count": 24, "variants": ["hito", "hitos"], "consistent": true }
},
"recommendations": []
},
{
"term": "qualification_rate",
"status": "MISSING_TRANSLATION",
"glossary": {
"en": "qualification rate",
"fr": null, // ❌ missing
"de": null, // ❌ missing
"es": null // ❌ missing
},
"actual_usage": {
"en": { "usage_count": 5, "variants": ["qualification rate", "qualification_rate"], "consistent": true },
"fr": { "usage_count": 4, "variants": ["taux de qualification"], "consistent": true },
"de": { "usage_count": 4, "variants": ["Qualifizierungsquote"], "consistent": true },
"es": { "usage_count": 4, "variants": ["tasa de calificación"], "consistent": true }
},
"recommendations": [
"Add FR translation to glossary: 'taux de qualification'",
"Add DE translation to glossary: 'Qualifizierungsquote'",
"Add ES translation to glossary: 'tasa de calificación'"
]
}
],
"discovered_terms": [
{
"term": "free mode",
"languages": {
"en": "free mode",
"fr": "mode gratuit",
"de": "kostenloser Modus",
"es": "modo gratuito"
},
"usage_count": 3,
"recommendation": "Add to glossary (new term in E01S01 direct link pricing)"
},
{
"term": "spending limit",
"languages": {
"en": "spending limit",
"fr": "limite de dépenses",
"de": "Ausgabenlimit",
"es": "límite de gasto"
},
"usage_count": 8,
"recommendation": "Already in glossary, but verify ES variant ('límite de gasto' vs 'límite de gastos')"
}
],
"deprecated_terms": [
{
"term": "matchable",
"glossary_status": "active",
"usage_count": 0,
"recommendation": "Remove from glossary — replaced by 'profil visible' (E01S02 milestone rename)"
}
],
"pluralization_analysis": {
"status": "NEEDS_REVIEW",
"note": "Plural forms detected but not formally managed. Consider i18next-plural extension for full support.",
"examples": [
{
"term": "lead/leads",
"en_variants": ["lead", "leads"],
"fr_variants": ["prospect", "prospects"],
"current_handling": "Both forms in translation strings (manual)",
"recommended": "Use i18next pluralization plugin (lead_singular, lead_plural)"
}
]
},
"statistics": {
"glossary_coverage": "92.8%", // terms in glossary / discovered terms
"translation_coverage": {
"fr": "100%",
"de": "92.8%",
"es": "96.4%"
},
"consistency_score": {
"en": "100%",
"fr": "88%",
"de": "95%",
"es": "98%"
},
"missing_glossary_entries": 2,
"inconsistent_term_usage": 5,
"deprecated_terms": 1
},
"glossary_update_proposal": {
"add_terms": [
{
"term": "free mode",
"translations": {
"en": "free mode",
"fr": "mode gratuit",
"de": "kostenloser Modus",
"es": "modo gratuito"
},
"context": "Direct link feature (E01S01) — when spending limit exceeded",
"source": "auto-discovered from locales/*/dashboard.json"
}
],
"update_terms": [
{
"term": "qualification rate",
"action": "add missing translations",
"add": {
"fr": "taux de qualification",
"de": "Qualifizierungsquote",
"es": "tasa de calificación"
}
}
],
"remove_terms": [
{
"term": "matchable",
"reason": "Replaced by 'profil visible' (milestone rename E01S02)",
"deprecation_date": "2026-03-02"
}
]
},
"recommendations": [
"Update glossary with 'free mode' (new term from E01S01)",
"Fix FR inconsistency: change 'Mes Leads' → 'Mes prospects' in dashboard.leads.header",
"Complete glossary translations for 'qualification_rate' (FR, DE, ES already used, just not in glossary)",
"Consider using i18next pluralization plugin for robust lead/leads handling",
"Review ES variant: 'límite de gasto' vs 'límite de gastos' (use consistently)",
"Remove deprecated term 'matchable' from glossary (replaced by 'profil visible')"
]
}
Glossary is the canonical reference. All translations should match glossary definitions.
glossary.md:
"lead": { "en": "lead", "fr": "prospect", "de": "Lead" }
locales/fr/dashboard.json should use "prospect", not "Leads" or "client"
Different languages handle pluralization differently. Options:
Option A: Manual (current MVP approach)
{
"leads.singular": "1 lead",
"leads.plural": "{count} leads"
}
Option B: i18next-plural (recommended post-MVP)
{
"lead_one": "1 lead",
"lead_other": "{count} leads"
}
Glossary should document chosen approach.
Some terms have multiple forms (singular/plural, capitalized/lowercase). Glossary should document ALL accepted variants.
Term: "lead"
Variants:
- "lead" (singular)
- "leads" (plural)
- "Lead" (capitalized, rare)
Status: All variants acceptable if consistent per context
When renaming terms (e.g., milestone rename E01S02):
1. Add new term to glossary ("profil visible")
2. Mark old term as deprecated ("matchable")
3. Update all usage in translations (batch replace)
4. Keep deprecated entry for 1 release (document why)
5. Remove deprecated entry in next major version
Canonical format (Markdown with YAML table):
# {YourProject} i18n Glossary
## Domain Terms
| Term | EN | FR | DE | ES | Context | Notes | Variants |
|---|---|---|---|---|---|---|---|
| dashboard | dashboard | tableau de bord | Dashboard | panel | Navigation | Main overview screen | dashboard, dashboards |
| workspace | workspace | espace de travail | Arbeitsbereich | espacio de trabajo | Multi-tenant | Container for projects/users | workspace, workspaces |
| plan | plan | forfait | Tarif | plan | Billing | Subscription tier name | plan, plans |
## Deprecation Log
| Deprecated | Replaced By | Deprecation Date | Removal Date |
|---|---|---|---|
| matchable | profil visible | 2026-03-02 | 2026-06-02 |
i18n-extract skillidiomatic-translate skill (check glossary reference)i18n-validate skilli18n-glossary-sync skill (this one)This skill is audit + proposal only. Delivery Agent must:
domains/i18n/glossary.md (or use glossary editor UI post-MVP)Post-MVP: Consider UI editor for glossary management (no-code glossary updates).