feat(i18n): add JSON-based i18n middleware and /greet endpoint
What & Why
Implements minimal i18n/l10n for API responses so clients can request localized text.
- JSON translation catalogs (en, hi)
- Middleware detects language via ?lang=… or Accept-Language, with English fallback
- Demo endpoint: GET /greet
Changes
- app/i18n/init.py ← I18nMiddleware + JsonCatalogTranslator
- app/i18n/en.json ← "greet.hello": "Hello, {name}!"
- app/i18n/hi.json ← "greet.hello": "नमस्ते, {name}!"
- app/main.py ← registers middleware; adds /greet
How language is chosen (priority)
- Query param
?lang=xx -
Accept-Languageheader (first entry; falls back to base likehifromhi-IN) - Default
en
How to verify
# dev server
uv run --env-file .env.i18n uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# default/fallback
curl 'http://localhost:8000/greet?name=Swaroop'
# -> {"message":"Hello, Swaroop!","lang":"en"}
# Hindi via query
curl 'http://localhost:8000/greet?name=Swaroop&lang=hi'
# -> {"message":"नमस्ते, Swaroop!","lang":"hi"}
# Hindi via header
curl -H 'Accept-Language: hi' 'http://localhost:8000/greet?name=Swaroop'
# -> {"message":"नमस्ते, Swaroop!","lang":"hi"}
# Unsupported -> fallback to English
curl -H 'Accept-Language: fr' 'http://localhost:8000/greet?name=Swaroop'
# -> {"message":"Hello, Swaroop!","lang":"en"}
Deliverables mapping
Middleware for language detection ✅
Localized responses (example via /greet) ✅
Initial translations for 2 languages (en, hi) ✅
Fallback handling to English ✅
Example endpoint demonstrating localization (/greet) ✅
Edited by Swaroop C