37 lines
1.2 KiB
Markdown
37 lines
1.2 KiB
Markdown
# Issue #205 — Django i18n foundation (da/en)
|
|
|
|
## Implemented acceptance checks
|
|
|
|
- **Django i18n setup for `en` + `da` with `en` fallback**
|
|
- `LANGUAGE_CODE` set to `en`.
|
|
- `LANGUAGES = [('en', 'English'), ('da', 'Danish')]`.
|
|
- `LocaleMiddleware` enabled in middleware chain.
|
|
- **Shared-key resolver/adapter (no ad hoc backend mapping)**
|
|
- Backend error responses now resolve from shared catalog keys in `shared/i18n/lobby.json`.
|
|
- `lobby.i18n.api_error()` accepts a shared key and resolves locale-specific text.
|
|
- **Representative API flow documented with key/locale behavior**
|
|
- `POST /lobby/join` with empty code returns:
|
|
- `error_code: "session_code_required"`
|
|
- localized `error`
|
|
- resolved `locale`
|
|
- **Missing key handling deterministic and loggable**
|
|
- `resolve_error_message()` returns key string when key/translation is missing.
|
|
- Warning is logged (`lobby.i18n` logger) for missing key/translation.
|
|
|
|
## Example response behavior
|
|
|
|
### Request
|
|
`POST /lobby/join` with empty code and header `Accept-Language: da`
|
|
|
|
### Response (400)
|
|
|
|
```json
|
|
{
|
|
"error": "Sessionskode er påkrævet",
|
|
"error_code": "session_code_required",
|
|
"locale": "da"
|
|
}
|
|
```
|
|
|
|
If locale is unsupported (e.g. `fr`), response uses `locale: "en"` and English message.
|