diff --git a/app/modules/core/routes/pages/admin.py b/app/modules/core/routes/pages/admin.py index c750fe81..dd8aff34 100644 --- a/app/modules/core/routes/pages/admin.py +++ b/app/modules/core/routes/pages/admin.py @@ -57,7 +57,10 @@ async def admin_login_page( if current_user: return RedirectResponse(url="/admin/dashboard", status_code=302) - return templates.TemplateResponse("tenancy/admin/login.html", {"request": request}) + return templates.TemplateResponse("tenancy/admin/login.html", { + "request": request, + "current_language": getattr(request.state, "language", "en"), + }) @router.get("/select-platform", response_class=HTMLResponse, include_in_schema=False) diff --git a/app/modules/core/routes/pages/merchant.py b/app/modules/core/routes/pages/merchant.py index 930f4b85..5059f752 100644 --- a/app/modules/core/routes/pages/merchant.py +++ b/app/modules/core/routes/pages/merchant.py @@ -67,7 +67,10 @@ async def merchant_login_page( if current_user: return RedirectResponse(url="/merchants/dashboard", status_code=302) - return templates.TemplateResponse("tenancy/merchant/login.html", {"request": request}) + return templates.TemplateResponse("tenancy/merchant/login.html", { + "request": request, + "current_language": getattr(request.state, "language", "fr"), + }) # ============================================================================ diff --git a/app/modules/core/static/merchant/js/init-alpine.js b/app/modules/core/static/merchant/js/init-alpine.js index aa7f4c8a..41a43537 100644 --- a/app/modules/core/static/merchant/js/init-alpine.js +++ b/app/modules/core/static/merchant/js/init-alpine.js @@ -201,3 +201,49 @@ function data() { } }; } + +/** + * Language Selector Component + * Alpine.js component for language switching in merchant portal + */ +function languageSelector(currentLang, enabledLanguages) { + return { + isLangOpen: false, + currentLang: currentLang || 'fr', + languages: enabledLanguages || ['en', 'fr', 'de', 'lb'], + languageNames: { + 'en': 'English', + 'fr': 'Français', + 'de': 'Deutsch', + 'lb': 'Lëtzebuergesch' + }, + languageFlags: { + 'en': 'gb', + 'fr': 'fr', + 'de': 'de', + 'lb': 'lu' + }, + async setLanguage(lang) { + if (lang === this.currentLang) { + this.isLangOpen = false; + return; + } + try { + const response = await fetch('/api/v1/platform/language/set', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ language: lang }) + }); + if (response.ok) { + this.currentLang = lang; + window.location.reload(); + } + } catch (error) { + console.error('Failed to set language:', error); + } + this.isLangOpen = false; + } + }; +} + +window.languageSelector = languageSelector; diff --git a/app/modules/tenancy/templates/tenancy/admin/login.html b/app/modules/tenancy/templates/tenancy/admin/login.html index 64ff69a6..317ea94e 100644 --- a/app/modules/tenancy/templates/tenancy/admin/login.html +++ b/app/modules/tenancy/templates/tenancy/admin/login.html @@ -1,6 +1,6 @@ {# app/templates/admin/login.html #} - +
@@ -9,6 +9,12 @@ + + @@ -97,6 +103,23 @@ ← Back to Platform + + +