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:
@@ -50,7 +50,8 @@ Language resolution varies by frontend type. Each chain is evaluated top-to-bott
|
||||
|
||||
| Frontend | Priority (highest → lowest) |
|
||||
|----------|----------------------------|
|
||||
| **ADMIN** | User `preferred_language` → `"en"` |
|
||||
| **ADMIN** | Cookie (`lang`) → User `preferred_language` → `"en"` |
|
||||
| **MERCHANT** | Cookie (`lang`) → User `preferred_language` → `"fr"` |
|
||||
| **STORE** | Cookie (`lang`) → User `preferred_language` → Store `dashboard_language` → `"fr"` |
|
||||
| **STOREFRONT** | Customer `preferred_language` → Cookie (`lang`) → Store `storefront_language` → Browser `Accept-Language` → `"fr"` |
|
||||
| **PLATFORM** | Cookie (`lang`) → Browser `Accept-Language` → `"fr"` |
|
||||
@@ -61,9 +62,10 @@ The **cookie** (`lang`) is set by the language switcher UI via `POST /api/v1/pla
|
||||
|
||||
| Context | Language Source | Database Field |
|
||||
|---------|-----------------|----------------|
|
||||
| Admin Panel | User's `preferred_language` | `users.preferred_language` |
|
||||
| Merchant Portal | User's `preferred_language` | `users.preferred_language` |
|
||||
| Store Dashboard | Store's `dashboard_language` | `stores.dashboard_language` |
|
||||
| Customer Storefront | Store's `storefront_language` | `stores.storefront_language` |
|
||||
| Admin Panel | User's `preferred_language` | `users.preferred_language` |
|
||||
|
||||
---
|
||||
|
||||
@@ -490,12 +492,16 @@ static/locales/
|
||||
|
||||
| File | Type | Notes |
|
||||
|------|------|-------|
|
||||
| `static/shop/js/shop-layout.js` | JS | `languageSelector()` function |
|
||||
| `static/store/js/init-alpine.js` | JS | `languageSelector()` function |
|
||||
| `static/shop/js/shop-layout.js` | JS | `languageSelector()` for storefront |
|
||||
| `app/modules/core/static/store/js/init-alpine.js` | JS | `languageSelector()` for store dashboard |
|
||||
| `app/modules/core/static/admin/js/init-alpine.js` | JS | `languageSelector()` for admin |
|
||||
| `app/modules/core/static/merchant/js/init-alpine.js` | JS | `languageSelector()` for merchant |
|
||||
| `app/templates/store/partials/header.html` | Template | Store dashboard language selector |
|
||||
| `app/templates/admin/partials/header.html` | Template | Admin language selector |
|
||||
| `app/templates/merchant/partials/header.html` | Template | Merchant language selector |
|
||||
| `app/templates/shop/base.html` | Template | Storefront language selector |
|
||||
| `app/templates/store/partials/header.html` | Template | Dashboard language selector |
|
||||
| `app/modules/core/routes/api/platform.py` | API | Language endpoints (`/api/v1/platform/language/*`) |
|
||||
| `middleware/language.py` | Middleware | Language detection |
|
||||
| `middleware/language.py` | Middleware | Language detection per frontend type |
|
||||
| `static/locales/*.json` | JSON | Translation files |
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user