Summary
Add i18n (ES/EN) to the dapp with next-intl — eliminate mixed Spanish/English copy across auth and dashboard.
Background
Current UX mixes languages (e.g. Spanish errors in wallet-network.ts, English page titles). Landing is EN-first; LatAm users need consistent ES.
Implementation
Library: next-intl (App Router)
Front/messages/en.json
Front/messages/es.json
Front/i18n/request.ts
Front/middleware.ts # locale prefix or cookie
Scope (v1 pages):
/, /login, /register
/dashboard/*
wallet-auth-card.tsx, api-errors.ts user-facing strings
Locale switcher: footer toggle in DappShell
Default: en; persist choice in cookie
Acceptance criteria
Out of scope
- Server-side i18n
- RTL languages
Summary
Add i18n (ES/EN) to the dapp with
next-intl— eliminate mixed Spanish/English copy across auth and dashboard.Background
Current UX mixes languages (e.g. Spanish errors in
wallet-network.ts, English page titles). Landing is EN-first; LatAm users need consistent ES.Implementation
Library:
next-intl(App Router)Scope (v1 pages):
/,/login,/register/dashboard/*wallet-auth-card.tsx,api-errors.tsuser-facing stringsLocale switcher: footer toggle in
DappShellDefault:
en; persist choice in cookieAcceptance criteria
npm run buildpasses with both localesCONTRIBUTING.mdsection: how to add translation keysapi-errors.tsOut of scope