The plumbing already half-exists — translation files, a locale field on every user, a language-aware speech stack. What's missing is the wiring. With AI tooling doing the mechanical work (string extraction, draft translation, keyword sets, test sweeps) and humans doing the judgement work (native review, cultural fit), the classical 12–17 week estimate compresses to an aggressive ~6 week programme — Korean included, since it rides the same CJK workstream as Japanese and already has self-hosted voice support.
Languages don't queue behind each other — once the foundation lands in week 2, translation, review, and language-specific engineering run in parallel lanes.
gantt
title AI-Accelerated Multilingual Rollout
dateFormat YYYY-MM-DD
axisFormat W%W
section Foundation
ngx-translate wiring + language picker :crit, f1, 2026-06-15, 4d
AI string extraction (~250 strings) :crit, f2, 2026-06-15, 5d
Backend message catalogs (notif + email) :crit, f3, 2026-06-18, 6d
signalReason -> key+params migration :crit, f4, 2026-06-18, 4d
Locale plumbing (Whisper / Claude / TTS) :f5, 2026-06-22, 4d
section Spanish
LLM draft + native review (es) :active, s1, 2026-06-19, 6d
QA sweep + launch ES :milestone, s2, 2026-06-26, 0d
section French + Tagalog
LLM drafts + native review (fr, fil) :ft1, 2026-06-25, 6d
Taglish keyword sets :ft2, 2026-06-29, 3d
Launch FR + FIL (text-first fil) :milestone, ft3, 2026-07-03, 0d
section Japanese + Korean
Name-order audit + CJK fonts + kinsoku :j1, 2026-06-29, 5d
kuromoji (ja) + nori (ko) search analyzers :j2, 2026-07-02, 3d
LLM draft + native review (ja, ko) :j3, 2026-07-02, 6d
Launch JA + KO :milestone, j4, 2026-07-10, 0d
section Thai
Segmentation + fonts + thai analyzer :t1, 2026-07-06, 5d
LLM draft + native review (th) :t2, 2026-07-08, 5d
Launch TH (text-first) :milestone, t3, 2026-07-17, 0d
section Always-on
Legal translations (privacy / ToS) :l1, 2026-06-19, 18d
Pseudo-locale + AI screenshot QA :l2, 2026-06-22, 19d
Manual string extraction, agency translation rounds, sequential language launches.
AI does the mechanical 80%; native reviewers approve rather than produce. Languages overlap.
Each accelerator replaces a traditionally slow, human-serial task. Humans stay in the loop exactly where judgement matters: native review and cultural fit.
Claude Code sweeps all ~75 pages and 31 components, extracting hardcoded strings into structured en.json keys and rewriting templates to the translate pipe — mechanically consistent, reviewed per PR.
LLM translates the full catalog (app strings, notifications, emails) with brand-glossary constraints. Native speakers review and correct — approving is 5–10x faster than translating.
Interest-signal keywords, ad category labels, and exclusion dictionaries generated per language (including Taglish blends), validated against native review.
Headless renders of every screen per locale; an AI pass flags truncation, overflow, untranslated strings, and font fallbacks before human QA ever looks.
flowchart LR
A["Hardcoded English
~250 strings, 150+ notifications,
10+ emails"] --> B["AI extraction
keys + params into en.json
+ backend catalogs"]
B --> C["LLM draft
per language, brand
glossary enforced"]
C --> D{"Native review
approve / correct"}
D -->|approved| E["Merge locale files
es · fr · fil · ja · ko · th"]
D -->|corrections| C
E --> F["AI screenshot QA
overflow · truncation ·
untranslated keys"]
F --> G(["Ship behind
language picker"])
style A fill:#14262a,stroke:#8aa6a0,color:#e8f4f0
style B fill:#14262a,stroke:#34d399,color:#e8f4f0
style C fill:#14262a,stroke:#34d399,color:#e8f4f0
style D fill:#0e3b2e,stroke:#4ade80,stroke-width:2px,color:#e8f4f0
style E fill:#14262a,stroke:#34d399,color:#e8f4f0
style F fill:#14262a,stroke:#34d399,color:#e8f4f0
style G fill:#0e3b2e,stroke:#4ade80,stroke-width:2px,color:#e8f4f0
One blocking data fix rides in the foundation: InterestPrompt.signalReason is stored in DynamoDB as an English string — it becomes a key + params so prompts render in the viewer's language.
The locale field already exists on every user — today nothing reads it. After the foundation phase, one setting drives every surface.
flowchart TD
U["🌐 Language picker
Settings → user.locale
(synced to backend)"]
U --> APP["App strings
ngx-translate
locale JSON files"]
U --> FMT["Dates · numbers · plurals
Angular locale data
es / fr / fil / ja / ko / th"]
U --> N["Notifications + emails
recipient-locale catalogs
(Grandma gets Tagalog even
when the actor is English)"]
U --> AI["AI stack"]
AI --> W["Whisper STT
language param wired
(all 6 supported)"]
AI --> C["Sage chat (Claude)
'respond in {language}'
in system prompt"]
AI --> T{"Voice synthesis"}
T -->|es · fr · ja · ko| T1["MeloTTS + OpenVoice
voice chat day one"]
T -->|fil · th| T2["Text-first launch
voice deferred / fallback"]
U --> S["Search
kuromoji (ja) · nori (ko) · thai
for transcripts + content"]
style U fill:#0e3b2e,stroke:#4ade80,stroke-width:2px,color:#e8f4f0
style APP fill:#14262a,stroke:#34d399,color:#e8f4f0
style FMT fill:#14262a,stroke:#34d399,color:#e8f4f0
style N fill:#14262a,stroke:#34d399,color:#e8f4f0
style AI fill:#14262a,stroke:#34d399,color:#e8f4f0
style W fill:#14262a,stroke:#34d399,color:#e8f4f0
style C fill:#14262a,stroke:#34d399,color:#e8f4f0
style T fill:#14262a,stroke:#34d399,color:#e8f4f0
style T1 fill:#0e3b2e,stroke:#34d399,color:#e8f4f0
style T2 fill:#14262a,stroke:#fbbf24,color:#fde68a
style S fill:#14262a,stroke:#34d399,color:#e8f4f0
flowchart LR
G1["✅ 100% catalog
native-reviewed"] --> G2["✅ Screens pass
AI + human QA"]
G2 --> G3["✅ Notifications + emails
in recipient locale"]
G3 --> G4["✅ Privacy + ToS
translated"]
G4 --> G5(["🚀 Language visible
in picker"])
style G1 fill:#14262a,stroke:#34d399,color:#e8f4f0
style G2 fill:#14262a,stroke:#34d399,color:#e8f4f0
style G3 fill:#14262a,stroke:#34d399,color:#e8f4f0
style G4 fill:#14262a,stroke:#34d399,color:#e8f4f0
style G5 fill:#0e3b2e,stroke:#4ade80,stroke-width:2px,color:#e8f4f0
Voice/video Sage chat is an explicit non-gate for Tagalog and Thai — text chat works in all six languages on day one; voice follows when the self-hosted TTS gains those languages.