31 lines
1.1 KiB
Markdown
31 lines
1.1 KiB
Markdown
# ISSUE-226 — Shared key-map + locale-kontrakt (backend/frontend)
|
|
|
|
## Source of truth
|
|
- Single shared artifact: `shared/i18n/lobby.json`
|
|
- Ownership is documented under `contract.ownership` in the same artifact.
|
|
|
|
## Locale contract
|
|
Defined under `contract.locale`:
|
|
- default locale: `en`
|
|
- supported locales: `en`, `da`
|
|
- fallback rule: use default locale when requested locale is unsupported or a key translation is missing.
|
|
|
|
## Shared backend→frontend key-map
|
|
Defined under `contract.backend_to_frontend_error_keys`.
|
|
|
|
Examples:
|
|
- `session_not_found -> session_not_found`
|
|
- `session_not_joinable -> join_failed`
|
|
- `round_start_invalid_phase -> start_round_failed`
|
|
|
|
This allows backend error codes to remain stable while frontend copy keys stay UX-oriented.
|
|
|
|
## da/en example values
|
|
From `shared/i18n/lobby.json`:
|
|
- `frontend.errors.session_code_required.en = "Session code is required."`
|
|
- `frontend.errors.session_code_required.da = "Sessionskoden er påkrævet."`
|
|
|
|
## Verification
|
|
- Backend: `python manage.py test lobby.tests.I18nResolverTests`
|
|
- Frontend: `npm test -- --run tests/lobby-i18n.contract.test.ts`
|