feat: add language switching to admin and merchant frontends
Some checks failed
Some checks failed
- Add cookie to ADMIN resolution chain (cookie → user_pref → "en") - Add explicit MERCHANT resolution (cookie → user_pref → "fr") - Add language selector dropdown to admin and merchant headers - Add languageSelector() function to merchant init-alpine.js - Add flag-icons CSS and i18n.js setup to merchant base template - Add compact flag-based language selector to both login pages - Make lang attribute dynamic on all base and login templates - Pass current_language to login route template context - Update architecture doc with ADMIN/MERCHANT resolution priorities Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -38,10 +38,11 @@ class LanguageMiddleware(BaseHTTPMiddleware):
|
||||
Middleware to detect and set the request language.
|
||||
|
||||
Sets request.state.language based on context:
|
||||
- Admin: Always English (for now)
|
||||
- Store dashboard: User preference → Store dashboard_language → default
|
||||
- Admin: Cookie → User preference → English
|
||||
- Merchant: Cookie → User preference → Platform default
|
||||
- Store dashboard: Cookie → User preference → Store dashboard_language → default
|
||||
- Storefront: Customer preference → Cookie → Store storefront_language → browser → default
|
||||
- API: Accept-Language header → default
|
||||
- Platform: Cookie → Browser → Platform default
|
||||
"""
|
||||
|
||||
async def dispatch(self, request: Request, call_next) -> Response:
|
||||
@@ -61,9 +62,9 @@ class LanguageMiddleware(BaseHTTPMiddleware):
|
||||
|
||||
# Resolve language based on frontend type
|
||||
if frontend_type == FrontendType.ADMIN:
|
||||
# Admin dashboard: respect user's preferred language
|
||||
# Admin dashboard: cookie → user preference → English default
|
||||
user_preferred = self._get_user_language_from_token(request)
|
||||
language = user_preferred or "en"
|
||||
language = cookie_language or user_preferred or "en"
|
||||
|
||||
elif frontend_type == FrontendType.STORE:
|
||||
# Store dashboard
|
||||
@@ -90,6 +91,11 @@ class LanguageMiddleware(BaseHTTPMiddleware):
|
||||
enabled_languages=enabled_languages,
|
||||
)
|
||||
|
||||
elif frontend_type == FrontendType.MERCHANT:
|
||||
# Merchant portal: cookie → user preference → platform default
|
||||
user_preferred = self._get_user_language_from_token(request)
|
||||
language = cookie_language or user_preferred or DEFAULT_LANGUAGE
|
||||
|
||||
elif frontend_type == FrontendType.PLATFORM:
|
||||
# Platform marketing pages: Use cookie, browser, or default
|
||||
language = cookie_language or browser_language or DEFAULT_LANGUAGE
|
||||
|
||||
Reference in New Issue
Block a user