# Monetarie Platform — Deep i18n Audit Report

**Date:** 2026-02-13
**Audited by:** Automated deep scan (Claude Opus 4.6)
**Scope:** All 8 Monetarie frontends — every `.vue`, `.ts`, `.js` file

---

## Executive Summary

The Monetarie platform has **significant i18n gaps** across all frontends. While i18n infrastructure (vue-i18n) is installed in every frontend, actual usage varies dramatically — from near-zero adoption (NPC at 9%) to high adoption (PIX Admin at 88%). No frontend achieves full i18n compliance.

**Critical findings:**
- **5,413+ hardcoded user-facing strings** across all 8 frontends
- **7 of 8 frontends** are missing ES-ES and FR locale files entirely (14 missing files)
- Only **PIX Admin** has all 5 target locales
- SPB has **2,115 hardcoded strings** — the worst offender by volume
- Core Merchant has i18n inline in a single file with only 3 locales

---

## Summary Table

| Frontend | Vue Files | t() Calls | i18n Adoption | Text in Tags | Attributes | Script | **Total Hardcoded** | PT-BR | EN-US | ZH-CN | ES-ES | FR |
|----------|-----------|-----------|--------------|-----------|------------|--------|----------------|-------|-------|-------|-------|-----|
| Core Admin | 54 | 290 | 33% | 193 | 264 | 127 | **584** | ~210 keys | ~210 keys | ~210 keys | MISSING | MISSING |
| Core Banking | 56 | 236 | 41% | 282 | 251 | 125 | **658** | ~230 keys | ~230 keys | ~230 keys | MISSING | MISSING |
| Core Merchant | 57 | 332 | 77% | 211 | 210 | 51 | **472** | ~245 keys* | ~245 keys* | ~245 keys* | MISSING | MISSING |
| NPC | 22 | 24 | 9% | 56 | 7 | 0 | **63** | ~280 keys | ~280 keys | ~280 keys | MISSING | MISSING |
| STA | 41 | 271 | 56% | 59 | 27 | 0 | **86** | ~300 keys | ~300 keys | ~300 keys | MISSING | MISSING |
| PIX Admin | 99 | 890 | 88% | 1,172 | 150 | 0 | **1,322** | ~568 keys | ~568 keys | ~568 keys | ~568 keys | ~568 keys |
| SPB | 131 | 482 | 78% | 1,195 | 912 | 8 | **2,115** | ~420 keys | ~420 keys | ~420 keys | MISSING | MISSING |
| Backoffice | 24 | 188 | 58% | 66 | 47 | 0 | **113** | ~150 keys | ~150 keys | ~150 keys | MISSING | MISSING |
| **TOTAL** | **484** | **2,713** | | **3,234** | **1,868** | **311** | **5,413** | | | | | |

(*Core Merchant: all 3 locales inline in a single `/monetarie/core/apps/merchant/src/plugins/i18n.ts` file, 935 lines)

---

## Per-Frontend Detail

### 1. Core Admin — `/monetarie/core/apps/admin/`

**Locale files:** `/monetarie/core/apps/admin/src/i18n/locales/{pt-BR,en,zh-CN}.ts` (~292 lines each). **ES-ES: MISSING. FR: MISSING.**

**i18n adoption:** Only 18 of 54 .vue files (33%) use `t()` calls. The remaining 36 files have 100% hardcoded strings.

**584 hardcoded strings** found across 42+ files. Top offenders:
- `views/infractions/InfractionDefenseDetailView.vue` — ~32 hardcoded strings (Portuguese labels, table headers, status text)
- `views/kyc/AdminKycDetailView.vue` — ~28 (form labels: "Nome", "Documento", "Tipo", "Status", "Data de Envio")
- `views/transactions/TransactionDetailView.vue` — ~25 (field labels: "ID da Transacao", "Valor Bruto", "Taxa", "Pagador", "Recebedor"; buttons: label="Estornar", label="Reprocessar")
- `views/ccs/CcsOperationsView.vue` — ~22 (filter labels, table headers)
- `views/providers/PixProviderView.vue` — ~17 ("Status do Provedor", "Saude", "Transacoes Hoje", "Taxa de Sucesso")
- `views/DashboardView.vue` — ~11, `views/LoginView.vue` — ~17

Script section: 127 toast/confirm messages like `summary: 'Sucesso'`, `message: 'Bloqueio criado'`, `header: 'Confirmar Exclusao'`.

---

### 2. Core Banking (IB) — `/monetarie/core/apps/banking/`

**Locale files:** `/monetarie/core/apps/banking/src/i18n/{pt-BR,en,zh-CN}.ts` (~316 lines each). **ES-ES: MISSING. FR: MISSING.**

**i18n adoption:** 23 of 56 .vue files (41%) use `t()` calls.

**658 hardcoded strings** across 42+ files. Top offenders:
- `views/api-keys/ApiKeysDetailView.vue` — ~55 (all detail labels hardcoded)
- `views/onboarding/ReviewView.vue` — ~35 ("Dados Pessoais", "Nome Completo", "CPF", "Data de Nascimento", "Genero", "Nacionalidade", "Nome da Mae", "Endereco", "CEP", "Rua", "Bairro")
- `views/onboarding/DocumentView.vue` — ~35 ("Envie seu Documento", "Tipo de Documento", "Foto da Frente", "Foto do Verso")
- `views/settings/TwoFactorAuthView.vue` — ~35
- `views/pix/PixRefundView.vue` — ~19 ("Devolucao PIX", "Dados da transacao", "Tipo de devolucao", "Devolucao total", "Devolucao parcial")

Script section: 125 hardcoded toast/confirm messages.

---

### 3. Core Merchant — `/monetarie/core/apps/merchant/`

**Locale files:** `/monetarie/core/apps/merchant/src/plugins/i18n.ts` (ALL 3 locales inline, 935 lines). **ES-ES: MISSING. FR: MISSING.**

**i18n adoption:** 44 of 57 .vue files (77%) — best in the Core trio.

**472 hardcoded strings** across 50 files. Notable issues:
- `views/onboarding/OnboardingView.vue` — ~25 hardcoded strings in ENGLISH ("Complete your merchant account setup", "Company Information", "Bank Account Details", "Document Upload")
- Language mixing: Many views have both Portuguese and English hardcoded text in the same file
- Even files that import `t()` have many hardcoded strings alongside the internationalized ones

Script section: 51 toast/confirm messages.

---

### 4. NPC Frontend — `/monetarie/npc/frontend/`

**Locale files:** `/monetarie/npc/frontend/src/i18n/locales/{pt-BR,en,zh-CN}.ts` (~378 lines each). **ES-ES: MISSING. FR: MISSING.**

**i18n adoption:** Only 2 of 22 .vue files (9%) — **effectively zero i18n usage**. The locale files exist with ~280 keys but are barely referenced.

**63 hardcoded strings** across 13 files:
- `views/BoletosView.vue` — "Boletos", table headers: "Valor", "Vencimento", "Pagador", "Status", "Nenhum boleto encontrado"
- `views/BoletoCreateView.vue` — "Novo Boleto", "Nosso Numero", "Vencimento", "Nome Pagador", "Cancelar"
- `views/BoletoDetailView.vue` — "Nosso Numero", "Valor", "Vencimento", "Pagador", "Codigo de Barras", "Linha Digitavel"
- `components/monitor/EventDetail.vue` — "Detalhes do Evento", "Tipo", "Direcao", "Status", "Duracao", "Origem", "Destino"
- `components/dashboard/StatsCards.vue` — "Emitidos", "Pagos", "Pendentes", "Volume Hoje"
- `components/common/UserMenu.vue` — "Sair"
- `components/HelloWorld.vue` — 2 boilerplate strings

---

### 5. STA Frontend — `/monetarie/sta/frontend/`

**Locale files:** `/monetarie/sta/frontend/src/i18n/locales/{pt-BR,en,zh-CN}.ts` (~407 lines each). **ES-ES: MISSING. FR: MISSING.**

**i18n adoption:** 23 of 41 .vue files (56%) — moderate.

**86 hardcoded strings** across 17 files:
- `components/metrics/SystemResourceChart.vue` — 14 hardcoded labels ("Total", "Processes", "ETS", "Binary", "Count", "Limit", "Usage", "Run Queue", "Schedulers Online")
- `components/metrics/ThroughputChart.vue` — 8 ("Throughput", "Total Processed", "Current Transfer Rate", "Success", "Successful", "Failed")
- `components/notifications/NotificationSettings.vue` — 8 ("Desktop Notifications", "Sound Settings", "Notification Types", "Critical", "Error", "Warning", "Info", "Email Notifications")
- `components/files/FileDetails.vue` — 6 ("Route ID", "Processed", "Duration", "JSON Data")
- Language mixing: Metric components use English while navigation uses Portuguese via i18n

---

### 6. PIX Admin — `/monetarie/pix/frontend/admin/`

**Locale files:** `/monetarie/pix/frontend/admin/src/locales/{pt-BR,en-US,zh-HK,es-ES,fr}.json` (648 lines each, ~568 keys). **ALL 5 LOCALES PRESENT** (only frontend with full coverage). Note: uses `zh-HK` instead of `zh-CN`.

**i18n adoption:** 87 of 99 .vue files (88%) — **best adoption rate**.

**1,322 hardcoded strings** across 82 files (highest absolute count due to large codebase). Top offenders:
- `views/accounting/FeeManagementView.vue` — ~39 (fee management labels, table headers, form fields)
- `views/alcada/AlcadaHistoryView.vue` — ~37 (authorization tier history)
- `views/accounting/AccountingDashboardView.vue` — ~29
- `views/participants/PixSaquePixTrocoView.vue` — ~28
- `views/med/InfractionDetailView.vue` — ~28
- `views/accounting/SettlementReportView.vue` — ~27
- `views/accounting/ReconciliationView.vue` — ~27
- `views/balance/BalanceHistoryView.vue` — ~22
- `views/system/SystemHealthView.vue` — ~23
- `views/sessions/SessionListView.vue` — ~21
- `views/messages/MessageCenterView.vue` — ~21

Pattern: All views added in Phases 5-13 (accounting, balance, participants, MED, simulator, alcada, reports) have extensive hardcoded strings despite the i18n infrastructure being available. Older views (Dashboard, Login, Keys, Transactions) are better internationalized.

---

### 7. SPB Frontend — `/monetarie/spb/frontend-vue/`

**Locale files:** `/monetarie/spb/frontend-vue/src/locales/{pt-BR,en-US,zh-CN}.json` (507 lines each, ~420 keys). **ES-ES: MISSING. FR: MISSING.**

**i18n adoption:** 102 of 131 .vue files (78%) import i18n, but most files use a mix of `t()` calls and hardcoded text.

**2,115 hardcoded strings** across 117 files — **highest total count**. Top offenders:
- `components/layout/Sidebar.vue` — **~123 hardcoded navigation labels** (this single file affects every page)
- `apps/admin/views/SettingsView.vue` — ~68 (settings form labels, section headers)
- `apps/admin/views/CertificateManagementView.vue` — ~51
- `views/OperationsMonitorView.vue` — ~44
- `apps/admin/views/CompanyView.vue` — ~39
- `apps/admin/views/PasswordPolicyView.vue` — ~26
- `apps/admin/views/SSOConfigView.vue` — ~35
- `apps/operator/views/config/CIPInstitutionsView.vue` — ~28
- `apps/admin/views/ComplianceExportsView.vue` — ~32
- `apps/admin/views/DashboardView.vue` — ~30

Attributes are the biggest category: 912 hardcoded `label=`, `placeholder=`, `title=`, `header=` attributes.

---

### 8. Backoffice — `/monetarie/backoffice/`

**Locale files:** `/monetarie/backoffice/src/i18n/locales/{pt-BR,en,zh-CN}.ts` (~215 lines each, ~150 keys). **ES-ES: MISSING. FR: MISSING.**

**i18n adoption:** 14 of 24 .vue files (58%).

**113 hardcoded strings** across 15 files:
- `features/cosif/views/CosifView.vue` — ~28 ("Contas", "Lancamentos", "Balanco", "Relatorios", "Conciliacao", "Total Ativo", "Total Passivo", "Total PL", "Balancete de Verificacao", "DRE", "Exportar ACCS")
- `features/command-center/views/CommandCenterView.vue` — ~19 ("Status dos Sistemas", "Alertas Ativos", "Metricas de Transacoes", "Total", "Volume", "Taxa de Sucesso", "PIX", "TED", "Boleto")
- `features/transactions/views/TransactionsView.vue` — ~18
- `features/webhooks/views/WebhooksView.vue` — ~11

---

## Missing Locale Files (14 total)

| Frontend | ES-ES | FR | Action Required |
|----------|-------|-----|----------------|
| Core Admin | MISSING | MISSING | Create `es-ES.ts` and `fr.ts` in `src/i18n/locales/` |
| Core Banking | MISSING | MISSING | Create `es-ES.ts` and `fr.ts` in `src/i18n/` |
| Core Merchant | MISSING | MISSING | Add `'es-ES'` and `fr` sections to `src/plugins/i18n.ts` (or refactor to separate files) |
| NPC | MISSING | MISSING | Create `es-ES.ts` and `fr.ts` in `src/i18n/locales/` |
| STA | MISSING | MISSING | Create `es-ES.ts` and `fr.ts` in `src/i18n/locales/` |
| PIX Admin | Present | Present | No action |
| SPB | MISSING | MISSING | Create `es-ES.json` and `fr.json` in `src/locales/` |
| Backoffice | MISSING | MISSING | Create `es-ES.ts` and `fr.ts` in `src/i18n/locales/` |

---

## Key Observations

### Locale Code Inconsistency
- English: `en` (Core, NPC, STA, Backoffice) vs `en-US` (PIX, SPB)
- Chinese: `zh-CN` (Core, NPC, STA, SPB, Backoffice) vs `zh-HK` (PIX Admin)
- Should standardize to: `pt-BR`, `en-US`, `zh-CN`, `es-ES`, `fr`

### Locale File Format Inconsistency
- TypeScript exports: Core Admin, Core Banking, NPC, STA, Backoffice
- JSON files: PIX Admin, SPB
- Inline single file: Core Merchant

### Pattern: Newer Views Skip i18n
Views added in later development phases have 100% hardcoded strings. The i18n keys that exist cover early/core functionality but not the expanding feature set.

### Hardcoded String Categories
| Category | Estimated Count | Priority |
|----------|----------------|----------|
| Table column headers (`<th>`) | ~800 | HIGH |
| Form labels (`<label>`, `label=`) | ~700 | HIGH |
| Page titles (`<h1>`, `<h2>`) | ~400 | HIGH |
| Placeholders | ~350 | MEDIUM |
| Button labels | ~300 | HIGH |
| Status labels | ~250 | HIGH |
| Toast/notification messages | ~300 | MEDIUM |
| Navigation items | ~200 | HIGH |
| Empty state messages | ~150 | LOW |

---

## Remediation Priorities

### P0 — Critical (blocks multi-language deployment)
1. **Create 14 missing locale files** (ES-ES + FR for 7 frontends)
2. **Standardize locale codes** across all frontends
3. **Fix PIX Admin zh-HK → zh-CN** if targeting mainland Chinese users

### P1 — High (most visible to users)
4. **SPB Sidebar:** 123 hardcoded navigation labels — affects every page
5. **Table headers:** ~800 hardcoded `<th>` elements across all frontends
6. **Button labels:** ~300 hardcoded `label="..."` attributes
7. **Page titles:** ~400 hardcoded `<h1>`/`<h2>` elements

### P2 — Medium
8. Form labels and placeholders: ~1,050 combined
9. Toast/notification messages: ~300 in script sections
10. Status labels: ~250 repeated strings (centralize)

### P3 — Low
11. Empty state messages: ~150
12. Core Merchant inline i18n refactor to separate files
13. NPC full i18n wiring (currently 9% adoption)

---

## Estimated Effort

| Frontend | New Keys Needed | Effort (days) |
|----------|----------------|---------------|
| Core Admin | ~584 | 3-4 |
| Core Banking | ~658 | 4-5 |
| Core Merchant | ~472 + refactor | 3-4 |
| NPC | ~63 + rewire | 1-2 |
| STA | ~86 | 1 |
| PIX Admin | ~1,322 | 5-7 |
| SPB | ~2,115 | 8-10 |
| Backoffice | ~113 | 1-2 |
| **TOTAL** | **~5,413** | **26-35 days** |

Each key requires: (1) add to PT-BR locale, (2) translate to EN-US, (3) translate to ZH-CN, (4) translate to ES-ES, (5) translate to FR, (6) replace hardcoded string with `t('key')` or `:attr="t('key')"`.
