# 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.