02 — User Personas (i18n Module)
- 1. Ravi — Student (consumes translated UI)
- 2. Meera — School Admin (consumes + indirectly authors)
- 3. Aarav — Platform Admin / Translation Manager (planned)
- 4. Dev / Content Ops — key hygiene
- 5. What personas do NOT do
Who touches translation infrastructure. Components per 00-shared/03; global IA per 00-shared/05.
1. Ravi — Student (consumes translated UI)
- Age 17, Grade 12, prefers Hindi on his phone (
Accept-Language: hi-IN). - Never touches translation tooling; only consumes the catalog the app
downloads via
GET /api/v1/i18n/messages. - Failure mode: a missing
histring silently falls back to English (i18n.service.ts:40) — fine for Ravi, invisible to him. - Needs: complete catalogs in his locale, correct pluralization
(
leave.requestedwith{days}).
2. Meera — School Admin (consumes + indirectly authors)
- Uses the web admin console; toggles her account locale.
- Triggers translated system notifications (e.g. announcement published)
which currently hardcode English in
notifications.handler.ts:16-31(planned fix: key-based titles**)**. - Needs: system messages in her locale, not English-only.
3. Aarav — Platform Admin / Translation Manager (planned)
- New persona for the (planned) admin translation console.
- Reviews missing keys per locale, edits translations, watches drift.
- Needs: per-locale editor, missing-key view, placeholder validation, sync status (which locale is behind).
- Today he would edit
en.json/hi.jsonby hand and deploy — no UI.
4. Dev / Content Ops — key hygiene
- Adds new product strings; keeps keys in dotted namespaces
(
errors.*,leave.*,announcement.*). - Needs: CI drift check (planned) per
IMPLEMENTATION_PLAN.md:845("CI check for missing translations") and Crowdin extraction.
5. What personas do NOT do
- No tenant admin edits translations at runtime (per-tenant catalogs are a non-goal — 01_Product_Overview.md §6).
- No student/staff chooses a locale in-app yet; locale comes only from the
Accept-Languageheader via middleware (i18n.middleware.ts:13-18). In-app locale switching is (forward-looking).