Skip to content

feat(i18n): add JSON-based i18n middleware and /greet endpoint

Swaroop C requested to merge issue/52-i18n-l10n into develop

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)

  1. Query param ?lang=xx
  2. Accept-Language header (first entry; falls back to base like hi from hi-IN)
  3. 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

Merge request reports

Loading