feat(i18n): add multilingual platform descriptions and HostWizard demo data
Some checks failed
CI / ruff (push) Successful in 11s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has been cancelled

- Add description_translations JSON column to Platform model + migration
- Add language tabs to platform admin edit form for multilingual descriptions
- Update API schemas to include description_translations in request/response
- Translate pricing section UI labels via _t() macro (monthly/annual/CTA/etc.)
- Add Luxembourgish (lb) support to all platforms (OMS, Main, Loyalty, Hosting)
- Seed description_translations, contact emails, and social links for all platforms
- Add LuxWeb Agency demo merchant with hosting stores, team, and content pages
- Fix language code typo: lu → lb in platform-edit.js availableLanguages
- Fix store content pages to use correct primary platform instead of hardcoded OMS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-04 23:38:52 +01:00
parent 2268f32f51
commit 820ab1aaa4
8 changed files with 327 additions and 32 deletions

View File

@@ -214,45 +214,103 @@ def create_default_platforms(db: Session) -> list[Platform]:
"code": "oms",
"name": "OMS",
"description": "Order Management System for multi-store e-commerce",
"description_translations": {
"fr": "Système de gestion des commandes pour le commerce multi-boutiques",
"de": "Bestellverwaltungssystem für Multi-Store-E-Commerce",
"en": "Order Management System for multi-store e-commerce",
"lb": "Bestellverwaltungssystem fir Multi-Store-E-Commerce",
},
"domain": "omsflow.lu",
"path_prefix": "oms",
"default_language": "fr",
"supported_languages": ["fr", "de", "en"],
"settings": {},
"supported_languages": ["fr", "de", "en", "lb"],
"settings": {
"contact_email": "info@omsflow.lu",
"support_email": "support@omsflow.lu",
},
"theme_config": {},
},
{
"code": "main",
"name": "Wizard",
"description": "Main marketing site showcasing all Orion platforms",
"description_translations": {
"fr": "Site marketing principal présentant toutes les plateformes Orion",
"de": "Zentrale Marketingseite für alle Orion-Plattformen",
"en": "Main marketing site showcasing all Orion platforms",
"lb": "Haaptmarketingsäit fir all Orion-Plattformen",
},
"domain": "wizard.lu",
"path_prefix": None,
"default_language": "fr",
"supported_languages": ["fr", "de", "en"],
"settings": {"is_marketing_site": True},
"theme_config": {"primary_color": "#2563EB", "secondary_color": "#3B82F6"},
"supported_languages": ["fr", "de", "en", "lb"],
"settings": {
"is_marketing_site": True,
"contact_email": "info@wizard.lu",
"support_email": "support@wizard.lu",
},
"theme_config": {
"primary_color": "#2563EB",
"secondary_color": "#3B82F6",
"social": {
"facebook": "https://facebook.com/wizard.lu",
"linkedin": "https://linkedin.com/company/wizard-lu",
},
},
},
{
"code": "loyalty",
"name": "Loyalty",
"description": "Customer loyalty program platform for Luxembourg businesses",
"description_translations": {
"fr": "Plateforme de programme de fidélité pour les entreprises luxembourgeoises",
"de": "Kundenbindungsprogramm-Plattform für luxemburgische Unternehmen",
"en": "Customer loyalty program platform for Luxembourg businesses",
"lb": "Clientsfidélitéitsprogramm-Plattform fir lëtzebuerger Betriber",
},
"domain": "rewardflow.lu",
"path_prefix": "loyalty",
"default_language": "fr",
"supported_languages": ["fr", "de", "en"],
"settings": {"features": ["points", "rewards", "tiers", "analytics"]},
"theme_config": {"primary_color": "#8B5CF6", "secondary_color": "#A78BFA"},
"supported_languages": ["fr", "de", "en", "lb"],
"settings": {
"features": ["points", "rewards", "tiers", "analytics"],
"contact_email": "info@rewardflow.lu",
"support_email": "support@rewardflow.lu",
},
"theme_config": {
"primary_color": "#8B5CF6",
"secondary_color": "#A78BFA",
},
},
{
"code": "hosting",
"name": "HostWizard",
"description": "Web hosting, domains, email, and website building for Luxembourg businesses",
"description_translations": {
"fr": "Hébergement web, domaines, e-mail et création de sites pour les entreprises luxembourgeoises",
"de": "Webhosting, Domains, E-Mail und Website-Erstellung für luxemburgische Unternehmen",
"en": "Web hosting, domains, email, and website building for Luxembourg businesses",
"lb": "Webhosting, Domainer, E-Mail a Websäit-Erstellung fir lëtzebuerger Betriber",
},
"domain": "hostwizard.lu",
"path_prefix": "hosting",
"default_language": "fr",
"supported_languages": ["fr", "de", "en", "lb"],
"settings": {"features": ["hosting", "domains", "email", "ssl", "poc_sites"]},
"theme_config": {"primary_color": "#0D9488", "secondary_color": "#14B8A6"},
"settings": {
"features": ["hosting", "domains", "email", "ssl", "poc_sites"],
"contact_email": "info@hostwizard.lu",
"support_email": "support@hostwizard.lu",
"sales_email": "sales@hostwizard.lu",
},
"theme_config": {
"primary_color": "#0D9488",
"secondary_color": "#14B8A6",
"social": {
"facebook": "https://facebook.com/hostwizard.lu",
"linkedin": "https://linkedin.com/company/hostwizard",
"instagram": "https://instagram.com/hostwizard.lu",
},
},
},
]
@@ -271,6 +329,7 @@ def create_default_platforms(db: Session) -> list[Platform]:
code=pdef["code"],
name=pdef["name"],
description=pdef["description"],
description_translations=pdef.get("description_translations"),
domain=pdef["domain"],
path_prefix=pdef["path_prefix"],
default_language=pdef["default_language"],