From dad02695f697263bc005796f580d16de101dee3e Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Sat, 7 Feb 2026 23:37:13 +0100 Subject: [PATCH] fix(i18n): add missing menu translations and fix admin language resolution MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two issues caused the admin sidebar to show a mix of French and English: 1. Only 3 of 14 modules had "menu" translations in their locale files. When a key was missing, _translate_label() fell back to English Title Case from the key name — mixing with French from modules that had translations. Added menu sections to all 4 languages (en, fr, de, lb) across 13 modules. 2. The language middleware hardcoded admin to "en" ignoring user preference, while the menu API fell back to DEFAULT_LANGUAGE ("fr") when preferred_language was NULL. Fixed middleware to respect user's preferred_language and menu API to use middleware-resolved language as fallback. Co-Authored-By: Claude Opus 4.6 --- app/modules/analytics/locales/de.json | 33 +- app/modules/analytics/locales/en.json | 33 +- app/modules/analytics/locales/fr.json | 33 +- app/modules/analytics/locales/lb.json | 33 +- app/modules/billing/locales/de.json | 256 +++++----- app/modules/billing/locales/en.json | 256 +++++----- app/modules/billing/locales/fr.json | 256 +++++----- app/modules/billing/locales/lb.json | 256 +++++----- app/modules/catalog/locales/de.json | 146 +++--- app/modules/catalog/locales/en.json | 182 +++---- app/modules/catalog/locales/fr.json | 146 +++--- app/modules/catalog/locales/lb.json | 146 +++--- app/modules/cms/locales/de.json | 457 ++++++++--------- app/modules/cms/locales/en.json | 473 +++++++++--------- app/modules/cms/locales/fr.json | 457 ++++++++--------- app/modules/cms/locales/lb.json | 457 ++++++++--------- app/modules/core/locales/de.json | 147 +++--- app/modules/core/locales/en.json | 163 +++--- app/modules/core/locales/fr.json | 147 +++--- app/modules/core/locales/lb.json | 147 +++--- .../core/routes/api/admin_menu_config.py | 17 +- app/modules/customers/locales/de.json | 66 +-- app/modules/customers/locales/en.json | 76 +-- app/modules/customers/locales/fr.json | 66 +-- app/modules/customers/locales/lb.json | 66 +-- app/modules/dev_tools/locales/de.json | 25 +- app/modules/dev_tools/locales/en.json | 25 +- app/modules/dev_tools/locales/fr.json | 25 +- app/modules/dev_tools/locales/lb.json | 25 +- app/modules/inventory/locales/de.json | 74 +-- app/modules/inventory/locales/en.json | 92 ++-- app/modules/inventory/locales/fr.json | 74 +-- app/modules/inventory/locales/lb.json | 74 +-- app/modules/loyalty/locales/de.json | 145 +++--- app/modules/loyalty/locales/en.json | 145 +++--- app/modules/loyalty/locales/fr.json | 145 +++--- app/modules/loyalty/locales/lb.json | 145 +++--- app/modules/messaging/locales/de.json | 108 ++-- app/modules/messaging/locales/en.json | 126 ++--- app/modules/messaging/locales/fr.json | 108 ++-- app/modules/messaging/locales/lb.json | 108 ++-- app/modules/monitoring/locales/de.json | 13 +- app/modules/monitoring/locales/en.json | 13 +- app/modules/monitoring/locales/fr.json | 13 +- app/modules/monitoring/locales/lb.json | 13 +- app/modules/orders/locales/de.json | 149 +++--- app/modules/orders/locales/en.json | 149 +++--- app/modules/orders/locales/fr.json | 149 +++--- app/modules/orders/locales/lb.json | 149 +++--- app/modules/tenancy/locales/de.json | 212 ++++---- app/modules/tenancy/locales/en.json | 224 +++++---- app/modules/tenancy/locales/fr.json | 212 ++++---- app/modules/tenancy/locales/lb.json | 212 ++++---- middleware/language.py | 6 +- 54 files changed, 3924 insertions(+), 3549 deletions(-) diff --git a/app/modules/analytics/locales/de.json b/app/modules/analytics/locales/de.json index 2f38b9ec..05f13301 100644 --- a/app/modules/analytics/locales/de.json +++ b/app/modules/analytics/locales/de.json @@ -1,17 +1,20 @@ { - "analytics": { - "page_title": "Analysen", - "dashboard_title": "Analyse-Dashboard", - "dashboard_subtitle": "Sehen Sie Ihre Shop-Leistungskennzahlen und Einblicke", - "period_7d": "Letzte 7 Tage", - "period_30d": "Letzte 30 Tage", - "period_90d": "Letzte 90 Tage", - "period_1y": "Letztes Jahr", - "imports_count": "Importe", - "products_added": "Hinzugefügte Produkte", - "inventory_locations": "Lagerstandorte", - "data_since": "Daten seit", - "loading": "Analysen werden geladen...", - "error_loading": "Analysedaten konnten nicht geladen werden" - } + "analytics": { + "page_title": "Analysen", + "dashboard_title": "Analyse-Dashboard", + "dashboard_subtitle": "Sehen Sie Ihre Shop-Leistungskennzahlen und Einblicke", + "period_7d": "Letzte 7 Tage", + "period_30d": "Letzte 30 Tage", + "period_90d": "Letzte 90 Tage", + "period_1y": "Letztes Jahr", + "imports_count": "Importe", + "products_added": "Hinzugefügte Produkte", + "inventory_locations": "Lagerstandorte", + "data_since": "Daten seit", + "loading": "Analysen werden geladen...", + "error_loading": "Analysedaten konnten nicht geladen werden" + }, + "menu": { + "analytics": "Analytik" + } } diff --git a/app/modules/analytics/locales/en.json b/app/modules/analytics/locales/en.json index 5f5667c5..8dd4a61f 100644 --- a/app/modules/analytics/locales/en.json +++ b/app/modules/analytics/locales/en.json @@ -1,17 +1,20 @@ { - "analytics": { - "page_title": "Analytics", - "dashboard_title": "Analytics Dashboard", - "dashboard_subtitle": "View your store performance metrics and insights", - "period_7d": "Last 7 days", - "period_30d": "Last 30 days", - "period_90d": "Last 90 days", - "period_1y": "Last year", - "imports_count": "Imports", - "products_added": "Products Added", - "inventory_locations": "Inventory Locations", - "data_since": "Data since", - "loading": "Loading analytics...", - "error_loading": "Failed to load analytics data" - } + "analytics": { + "page_title": "Analytics", + "dashboard_title": "Analytics Dashboard", + "dashboard_subtitle": "View your store performance metrics and insights", + "period_7d": "Last 7 days", + "period_30d": "Last 30 days", + "period_90d": "Last 90 days", + "period_1y": "Last year", + "imports_count": "Imports", + "products_added": "Products Added", + "inventory_locations": "Inventory Locations", + "data_since": "Data since", + "loading": "Loading analytics...", + "error_loading": "Failed to load analytics data" + }, + "menu": { + "analytics": "Analytics" + } } diff --git a/app/modules/analytics/locales/fr.json b/app/modules/analytics/locales/fr.json index 4530d8a9..f494786e 100644 --- a/app/modules/analytics/locales/fr.json +++ b/app/modules/analytics/locales/fr.json @@ -1,17 +1,20 @@ { - "analytics": { - "page_title": "Analytique", - "dashboard_title": "Tableau de bord analytique", - "dashboard_subtitle": "Consultez les indicateurs de performance de votre boutique", - "period_7d": "7 derniers jours", - "period_30d": "30 derniers jours", - "period_90d": "90 derniers jours", - "period_1y": "Dernière année", - "imports_count": "Importations", - "products_added": "Produits ajoutés", - "inventory_locations": "Emplacements d'inventaire", - "data_since": "Données depuis", - "loading": "Chargement des analyses...", - "error_loading": "Impossible de charger les données analytiques" - } + "analytics": { + "page_title": "Analytique", + "dashboard_title": "Tableau de bord analytique", + "dashboard_subtitle": "Consultez les indicateurs de performance de votre boutique", + "period_7d": "7 derniers jours", + "period_30d": "30 derniers jours", + "period_90d": "90 derniers jours", + "period_1y": "Dernière année", + "imports_count": "Importations", + "products_added": "Produits ajoutés", + "inventory_locations": "Emplacements d'inventaire", + "data_since": "Données depuis", + "loading": "Chargement des analyses...", + "error_loading": "Impossible de charger les données analytiques" + }, + "menu": { + "analytics": "Analytique" + } } diff --git a/app/modules/analytics/locales/lb.json b/app/modules/analytics/locales/lb.json index a664b9a6..4518081a 100644 --- a/app/modules/analytics/locales/lb.json +++ b/app/modules/analytics/locales/lb.json @@ -1,17 +1,20 @@ { - "analytics": { - "page_title": "Analysen", - "dashboard_title": "Analysen Dashboard", - "dashboard_subtitle": "Kuckt Är Geschäftsleeschtungsmetriken an Abléck", - "period_7d": "Lescht 7 Deeg", - "period_30d": "Lescht 30 Deeg", - "period_90d": "Lescht 90 Deeg", - "period_1y": "Lescht Joer", - "imports_count": "Importer", - "products_added": "Produkter derbäigesat", - "inventory_locations": "Inventar-Standuierter", - "data_since": "Daten zënter", - "loading": "Analysen lueden...", - "error_loading": "Feeler beim Lueden vun den Analysedaten" - } + "analytics": { + "page_title": "Analysen", + "dashboard_title": "Analysen Dashboard", + "dashboard_subtitle": "Kuckt Är Geschäftsleeschtungsmetriken an Abléck", + "period_7d": "Lescht 7 Deeg", + "period_30d": "Lescht 30 Deeg", + "period_90d": "Lescht 90 Deeg", + "period_1y": "Lescht Joer", + "imports_count": "Importer", + "products_added": "Produkter derbäigesat", + "inventory_locations": "Inventar-Standuierter", + "data_since": "Daten zënter", + "loading": "Analysen lueden...", + "error_loading": "Feeler beim Lueden vun den Analysedaten" + }, + "menu": { + "analytics": "Analytik" + } } diff --git a/app/modules/billing/locales/de.json b/app/modules/billing/locales/de.json index 03056ad0..8ff05f4a 100644 --- a/app/modules/billing/locales/de.json +++ b/app/modules/billing/locales/de.json @@ -1,127 +1,137 @@ { - "title": "Abrechnung & Abonnements", - "description": "Abonnementstufen, Rechnungshistorie und Zahlungen verwalten", - "subscription": { - "title": "Abonnement", - "current_tier": "Aktuelle Stufe", - "status": "Status", - "statuses": { - "trial": "Testphase", - "active": "Aktiv", - "past_due": "Überfällig", - "cancelled": "Gekündigt", - "expired": "Abgelaufen" + "title": "Abrechnung & Abonnements", + "description": "Abonnementstufen, Rechnungshistorie und Zahlungen verwalten", + "subscription": { + "title": "Abonnement", + "current_tier": "Aktuelle Stufe", + "status": "Status", + "statuses": { + "trial": "Testphase", + "active": "Aktiv", + "past_due": "Überfällig", + "cancelled": "Gekündigt", + "expired": "Abgelaufen" + }, + "trial_ends": "Testphase endet", + "period_ends": "Periode endet", + "cancelled_at": "Gekündigt am", + "cancellation_reason": "Kündigungsgrund" }, - "trial_ends": "Testphase endet", - "period_ends": "Periode endet", - "cancelled_at": "Gekündigt am", - "cancellation_reason": "Kündigungsgrund" - }, - "tiers": { - "title": "Abonnementstufen", - "subtitle": "Preisstufen und Funktionen verwalten", - "essential": "Essential", - "professional": "Professional", - "business": "Business", - "enterprise": "Enterprise", - "create": "Stufe erstellen", - "edit": "Stufe bearbeiten", - "features": "Funktionen", - "limits": "Limits", - "pricing": "Preisgestaltung", - "monthly": "Monatlich", - "annual": "Jährlich", - "per_month": "/Monat", - "per_year": "/Jahr", - "unlimited": "Unbegrenzt", - "orders_per_month": "Bestellungen/Monat", - "products_limit": "Produkte", - "team_members": "Teammitglieder" - }, - "usage": { - "title": "Nutzung", - "orders": "Bestellungen", - "products": "Produkte", - "team": "Teammitglieder", - "used": "verwendet", - "remaining": "verbleibend", - "of": "von" - }, - "invoices": { - "title": "Rechnungen", - "subtitle": "Rechnungshistorie und Rechnungen", - "invoice_number": "Rechnung Nr.", - "date": "Datum", - "due_date": "Fälligkeitsdatum", - "amount": "Betrag", - "status": "Status", - "download": "PDF herunterladen", - "view_online": "Online ansehen", - "statuses": { - "paid": "Bezahlt", - "open": "Offen", - "void": "Storniert", - "uncollectible": "Uneinbringlich", - "draft": "Entwurf" + "tiers": { + "title": "Abonnementstufen", + "subtitle": "Preisstufen und Funktionen verwalten", + "essential": "Essential", + "professional": "Professional", + "business": "Business", + "enterprise": "Enterprise", + "create": "Stufe erstellen", + "edit": "Stufe bearbeiten", + "features": "Funktionen", + "limits": "Limits", + "pricing": "Preisgestaltung", + "monthly": "Monatlich", + "annual": "Jährlich", + "per_month": "/Monat", + "per_year": "/Jahr", + "unlimited": "Unbegrenzt", + "orders_per_month": "Bestellungen/Monat", + "products_limit": "Produkte", + "team_members": "Teammitglieder" + }, + "usage": { + "title": "Nutzung", + "orders": "Bestellungen", + "products": "Produkte", + "team": "Teammitglieder", + "used": "verwendet", + "remaining": "verbleibend", + "of": "von" + }, + "invoices": { + "title": "Rechnungen", + "subtitle": "Rechnungshistorie und Rechnungen", + "invoice_number": "Rechnung Nr.", + "date": "Datum", + "due_date": "Fälligkeitsdatum", + "amount": "Betrag", + "status": "Status", + "download": "PDF herunterladen", + "view_online": "Online ansehen", + "statuses": { + "paid": "Bezahlt", + "open": "Offen", + "void": "Storniert", + "uncollectible": "Uneinbringlich", + "draft": "Entwurf" + } + }, + "payment": { + "title": "Zahlung", + "method": "Zahlungsmethode", + "add_card": "Karte hinzufügen", + "update_card": "Karte aktualisieren", + "no_method": "Keine Zahlungsmethode hinterlegt", + "card_ending": "Karte endet auf", + "expires": "Gültig bis" + }, + "upgrade": { + "title": "Upgrade", + "compare": "Pläne vergleichen", + "select": "Plan auswählen", + "current": "Aktueller Plan", + "recommended": "Empfohlen" + }, + "messages": { + "subscription_updated": "Abonnement erfolgreich aktualisiert", + "tier_created": "Stufe erfolgreich erstellt", + "tier_updated": "Stufe erfolgreich aktualisiert", + "tier_deactivated": "Stufe deaktiviert", + "payment_method_updated": "Zahlungsmethode aktualisiert", + "subscription_cancelled": "Abonnement gekündigt", + "error_loading": "Fehler beim Laden der Abrechnungsinformationen", + "error_updating": "Fehler beim Aktualisieren des Abonnements", + "failed_to_load_billing_data": "Failed to load billing data", + "failed_to_create_checkout_session": "Failed to create checkout session", + "failed_to_open_payment_portal": "Failed to open payment portal", + "subscription_cancelled_you_have_access_u": "Subscription cancelled. You have access until the end of your billing period.", + "failed_to_cancel_subscription": "Failed to cancel subscription", + "subscription_reactivated": "Subscription reactivated!", + "failed_to_reactivate_subscription": "Failed to reactivate subscription", + "failed_to_purchase_addon": "Failed to purchase add-on", + "addon_cancelled_successfully": "Add-on cancelled successfully", + "failed_to_cancel_addon": "Failed to cancel add-on" + }, + "limits": { + "orders_exceeded": "Monatliches Bestelllimit erreicht. Upgrade für mehr.", + "products_exceeded": "Produktlimit erreicht. Upgrade für mehr.", + "team_exceeded": "Teammitgliederlimit erreicht. Upgrade für mehr." + }, + "features": { + "subscription_management": { + "name": "Abonnementverwaltung", + "description": "Abonnementstufen und Abrechnung verwalten" + }, + "payment_processing": { + "name": "Zahlungsabwicklung", + "description": "Zahlungen über Stripe abwickeln" + }, + "invoicing": { + "name": "Rechnungsstellung", + "description": "Rechnungen erstellen und verwalten" + }, + "usage_tracking": { + "name": "Nutzungsverfolgung", + "description": "Funktionsnutzung gegen Stufenlimits verfolgen" + } + }, + "menu": { + "billing_subscriptions": "Abrechnung & Abonnements", + "subscription_tiers": "Abo-Stufen", + "store_subscriptions": "Shop-Abonnements", + "billing_history": "Abrechnungsverlauf", + "sales_orders": "Verkäufe & Bestellungen", + "invoices": "Rechnungen", + "account_settings": "Kontoeinstellungen", + "billing": "Abrechnung" } - }, - "payment": { - "title": "Zahlung", - "method": "Zahlungsmethode", - "add_card": "Karte hinzufügen", - "update_card": "Karte aktualisieren", - "no_method": "Keine Zahlungsmethode hinterlegt", - "card_ending": "Karte endet auf", - "expires": "Gültig bis" - }, - "upgrade": { - "title": "Upgrade", - "compare": "Pläne vergleichen", - "select": "Plan auswählen", - "current": "Aktueller Plan", - "recommended": "Empfohlen" - }, - "messages": { - "subscription_updated": "Abonnement erfolgreich aktualisiert", - "tier_created": "Stufe erfolgreich erstellt", - "tier_updated": "Stufe erfolgreich aktualisiert", - "tier_deactivated": "Stufe deaktiviert", - "payment_method_updated": "Zahlungsmethode aktualisiert", - "subscription_cancelled": "Abonnement gekündigt", - "error_loading": "Fehler beim Laden der Abrechnungsinformationen", - "error_updating": "Fehler beim Aktualisieren des Abonnements", - "failed_to_load_billing_data": "Failed to load billing data", - "failed_to_create_checkout_session": "Failed to create checkout session", - "failed_to_open_payment_portal": "Failed to open payment portal", - "subscription_cancelled_you_have_access_u": "Subscription cancelled. You have access until the end of your billing period.", - "failed_to_cancel_subscription": "Failed to cancel subscription", - "subscription_reactivated": "Subscription reactivated!", - "failed_to_reactivate_subscription": "Failed to reactivate subscription", - "failed_to_purchase_addon": "Failed to purchase add-on", - "addon_cancelled_successfully": "Add-on cancelled successfully", - "failed_to_cancel_addon": "Failed to cancel add-on" - }, - "limits": { - "orders_exceeded": "Monatliches Bestelllimit erreicht. Upgrade für mehr.", - "products_exceeded": "Produktlimit erreicht. Upgrade für mehr.", - "team_exceeded": "Teammitgliederlimit erreicht. Upgrade für mehr." - }, - "features": { - "subscription_management": { - "name": "Abonnementverwaltung", - "description": "Abonnementstufen und Abrechnung verwalten" - }, - "payment_processing": { - "name": "Zahlungsabwicklung", - "description": "Zahlungen über Stripe abwickeln" - }, - "invoicing": { - "name": "Rechnungsstellung", - "description": "Rechnungen erstellen und verwalten" - }, - "usage_tracking": { - "name": "Nutzungsverfolgung", - "description": "Funktionsnutzung gegen Stufenlimits verfolgen" - } - } } diff --git a/app/modules/billing/locales/en.json b/app/modules/billing/locales/en.json index ece47f56..215ebbdd 100644 --- a/app/modules/billing/locales/en.json +++ b/app/modules/billing/locales/en.json @@ -1,127 +1,137 @@ { - "title": "Billing & Subscriptions", - "description": "Manage subscription tiers, billing history, and payments", - "subscription": { - "title": "Subscription", - "current_tier": "Current Tier", - "status": "Status", - "statuses": { - "trial": "Trial", - "active": "Active", - "past_due": "Past Due", - "cancelled": "Cancelled", - "expired": "Expired" + "title": "Billing & Subscriptions", + "description": "Manage subscription tiers, billing history, and payments", + "subscription": { + "title": "Subscription", + "current_tier": "Current Tier", + "status": "Status", + "statuses": { + "trial": "Trial", + "active": "Active", + "past_due": "Past Due", + "cancelled": "Cancelled", + "expired": "Expired" + }, + "trial_ends": "Trial ends", + "period_ends": "Period ends", + "cancelled_at": "Cancelled on", + "cancellation_reason": "Cancellation reason" }, - "trial_ends": "Trial ends", - "period_ends": "Period ends", - "cancelled_at": "Cancelled on", - "cancellation_reason": "Cancellation reason" - }, - "tiers": { - "title": "Subscription Tiers", - "subtitle": "Manage pricing tiers and features", - "essential": "Essential", - "professional": "Professional", - "business": "Business", - "enterprise": "Enterprise", - "create": "Create Tier", - "edit": "Edit Tier", - "features": "Features", - "limits": "Limits", - "pricing": "Pricing", - "monthly": "Monthly", - "annual": "Annual", - "per_month": "/month", - "per_year": "/year", - "unlimited": "Unlimited", - "orders_per_month": "Orders/month", - "products_limit": "Products", - "team_members": "Team members" - }, - "usage": { - "title": "Usage", - "orders": "Orders", - "products": "Products", - "team": "Team Members", - "used": "used", - "remaining": "remaining", - "of": "of" - }, - "invoices": { - "title": "Invoices", - "subtitle": "Billing history and invoices", - "invoice_number": "Invoice #", - "date": "Date", - "due_date": "Due Date", - "amount": "Amount", - "status": "Status", - "download": "Download PDF", - "view_online": "View Online", - "statuses": { - "paid": "Paid", - "open": "Open", - "void": "Void", - "uncollectible": "Uncollectible", - "draft": "Draft" + "tiers": { + "title": "Subscription Tiers", + "subtitle": "Manage pricing tiers and features", + "essential": "Essential", + "professional": "Professional", + "business": "Business", + "enterprise": "Enterprise", + "create": "Create Tier", + "edit": "Edit Tier", + "features": "Features", + "limits": "Limits", + "pricing": "Pricing", + "monthly": "Monthly", + "annual": "Annual", + "per_month": "/month", + "per_year": "/year", + "unlimited": "Unlimited", + "orders_per_month": "Orders/month", + "products_limit": "Products", + "team_members": "Team members" + }, + "usage": { + "title": "Usage", + "orders": "Orders", + "products": "Products", + "team": "Team Members", + "used": "used", + "remaining": "remaining", + "of": "of" + }, + "invoices": { + "title": "Invoices", + "subtitle": "Billing history and invoices", + "invoice_number": "Invoice #", + "date": "Date", + "due_date": "Due Date", + "amount": "Amount", + "status": "Status", + "download": "Download PDF", + "view_online": "View Online", + "statuses": { + "paid": "Paid", + "open": "Open", + "void": "Void", + "uncollectible": "Uncollectible", + "draft": "Draft" + } + }, + "payment": { + "title": "Payment", + "method": "Payment Method", + "add_card": "Add Card", + "update_card": "Update Card", + "no_method": "No payment method on file", + "card_ending": "Card ending in", + "expires": "Expires" + }, + "upgrade": { + "title": "Upgrade Plan", + "compare": "Compare Plans", + "select": "Select Plan", + "current": "Current Plan", + "recommended": "Recommended" + }, + "messages": { + "subscription_updated": "Subscription updated successfully", + "tier_created": "Tier created successfully", + "tier_updated": "Tier updated successfully", + "tier_deactivated": "Tier deactivated", + "payment_method_updated": "Payment method updated", + "subscription_cancelled": "Subscription cancelled", + "error_loading": "Error loading billing information", + "error_updating": "Error updating subscription", + "failed_to_load_billing_data": "Failed to load billing data", + "failed_to_create_checkout_session": "Failed to create checkout session", + "failed_to_open_payment_portal": "Failed to open payment portal", + "subscription_cancelled_you_have_access_u": "Subscription cancelled. You have access until the end of your billing period.", + "failed_to_cancel_subscription": "Failed to cancel subscription", + "subscription_reactivated": "Subscription reactivated!", + "failed_to_reactivate_subscription": "Failed to reactivate subscription", + "failed_to_purchase_addon": "Failed to purchase add-on", + "addon_cancelled_successfully": "Add-on cancelled successfully", + "failed_to_cancel_addon": "Failed to cancel add-on" + }, + "limits": { + "orders_exceeded": "Monthly order limit reached. Upgrade to continue.", + "products_exceeded": "Product limit reached. Upgrade to add more.", + "team_exceeded": "Team member limit reached. Upgrade to add more." + }, + "features": { + "subscription_management": { + "name": "Subscription Management", + "description": "Manage subscription tiers and billing" + }, + "payment_processing": { + "name": "Payment Processing", + "description": "Process payments via Stripe" + }, + "invoicing": { + "name": "Invoicing", + "description": "Generate and manage invoices" + }, + "usage_tracking": { + "name": "Usage Tracking", + "description": "Track feature usage against tier limits" + } + }, + "menu": { + "billing_subscriptions": "Billing & Subscriptions", + "subscription_tiers": "Subscription Tiers", + "store_subscriptions": "Store Subscriptions", + "billing_history": "Billing History", + "sales_orders": "Sales & Orders", + "invoices": "Invoices", + "account_settings": "Account Settings", + "billing": "Billing" } - }, - "payment": { - "title": "Payment", - "method": "Payment Method", - "add_card": "Add Card", - "update_card": "Update Card", - "no_method": "No payment method on file", - "card_ending": "Card ending in", - "expires": "Expires" - }, - "upgrade": { - "title": "Upgrade Plan", - "compare": "Compare Plans", - "select": "Select Plan", - "current": "Current Plan", - "recommended": "Recommended" - }, - "messages": { - "subscription_updated": "Subscription updated successfully", - "tier_created": "Tier created successfully", - "tier_updated": "Tier updated successfully", - "tier_deactivated": "Tier deactivated", - "payment_method_updated": "Payment method updated", - "subscription_cancelled": "Subscription cancelled", - "error_loading": "Error loading billing information", - "error_updating": "Error updating subscription", - "failed_to_load_billing_data": "Failed to load billing data", - "failed_to_create_checkout_session": "Failed to create checkout session", - "failed_to_open_payment_portal": "Failed to open payment portal", - "subscription_cancelled_you_have_access_u": "Subscription cancelled. You have access until the end of your billing period.", - "failed_to_cancel_subscription": "Failed to cancel subscription", - "subscription_reactivated": "Subscription reactivated!", - "failed_to_reactivate_subscription": "Failed to reactivate subscription", - "failed_to_purchase_addon": "Failed to purchase add-on", - "addon_cancelled_successfully": "Add-on cancelled successfully", - "failed_to_cancel_addon": "Failed to cancel add-on" - }, - "limits": { - "orders_exceeded": "Monthly order limit reached. Upgrade to continue.", - "products_exceeded": "Product limit reached. Upgrade to add more.", - "team_exceeded": "Team member limit reached. Upgrade to add more." - }, - "features": { - "subscription_management": { - "name": "Subscription Management", - "description": "Manage subscription tiers and billing" - }, - "payment_processing": { - "name": "Payment Processing", - "description": "Process payments via Stripe" - }, - "invoicing": { - "name": "Invoicing", - "description": "Generate and manage invoices" - }, - "usage_tracking": { - "name": "Usage Tracking", - "description": "Track feature usage against tier limits" - } - } } diff --git a/app/modules/billing/locales/fr.json b/app/modules/billing/locales/fr.json index f9d4fd47..d2afd269 100644 --- a/app/modules/billing/locales/fr.json +++ b/app/modules/billing/locales/fr.json @@ -1,127 +1,137 @@ { - "title": "Facturation & Abonnements", - "description": "Gérer les niveaux d'abonnement, l'historique de facturation et les paiements", - "subscription": { - "title": "Abonnement", - "current_tier": "Niveau actuel", - "status": "Statut", - "statuses": { - "trial": "Essai", - "active": "Actif", - "past_due": "En retard", - "cancelled": "Annulé", - "expired": "Expiré" + "title": "Facturation & Abonnements", + "description": "Gérer les niveaux d'abonnement, l'historique de facturation et les paiements", + "subscription": { + "title": "Abonnement", + "current_tier": "Niveau actuel", + "status": "Statut", + "statuses": { + "trial": "Essai", + "active": "Actif", + "past_due": "En retard", + "cancelled": "Annulé", + "expired": "Expiré" + }, + "trial_ends": "Fin de l'essai", + "period_ends": "Fin de période", + "cancelled_at": "Annulé le", + "cancellation_reason": "Raison de l'annulation" }, - "trial_ends": "Fin de l'essai", - "period_ends": "Fin de période", - "cancelled_at": "Annulé le", - "cancellation_reason": "Raison de l'annulation" - }, - "tiers": { - "title": "Niveaux d'abonnement", - "subtitle": "Gérer les tarifs et fonctionnalités", - "essential": "Essentiel", - "professional": "Professionnel", - "business": "Business", - "enterprise": "Enterprise", - "create": "Créer un niveau", - "edit": "Modifier le niveau", - "features": "Fonctionnalités", - "limits": "Limites", - "pricing": "Tarification", - "monthly": "Mensuel", - "annual": "Annuel", - "per_month": "/mois", - "per_year": "/an", - "unlimited": "Illimité", - "orders_per_month": "Commandes/mois", - "products_limit": "Produits", - "team_members": "Membres d'équipe" - }, - "usage": { - "title": "Utilisation", - "orders": "Commandes", - "products": "Produits", - "team": "Membres d'équipe", - "used": "utilisé", - "remaining": "restant", - "of": "sur" - }, - "invoices": { - "title": "Factures", - "subtitle": "Historique de facturation et factures", - "invoice_number": "Facture N°", - "date": "Date", - "due_date": "Date d'échéance", - "amount": "Montant", - "status": "Statut", - "download": "Télécharger PDF", - "view_online": "Voir en ligne", - "statuses": { - "paid": "Payée", - "open": "Ouverte", - "void": "Annulée", - "uncollectible": "Irrécouvrable", - "draft": "Brouillon" + "tiers": { + "title": "Niveaux d'abonnement", + "subtitle": "Gérer les tarifs et fonctionnalités", + "essential": "Essentiel", + "professional": "Professionnel", + "business": "Business", + "enterprise": "Enterprise", + "create": "Créer un niveau", + "edit": "Modifier le niveau", + "features": "Fonctionnalités", + "limits": "Limites", + "pricing": "Tarification", + "monthly": "Mensuel", + "annual": "Annuel", + "per_month": "/mois", + "per_year": "/an", + "unlimited": "Illimité", + "orders_per_month": "Commandes/mois", + "products_limit": "Produits", + "team_members": "Membres d'équipe" + }, + "usage": { + "title": "Utilisation", + "orders": "Commandes", + "products": "Produits", + "team": "Membres d'équipe", + "used": "utilisé", + "remaining": "restant", + "of": "sur" + }, + "invoices": { + "title": "Factures", + "subtitle": "Historique de facturation et factures", + "invoice_number": "Facture N°", + "date": "Date", + "due_date": "Date d'échéance", + "amount": "Montant", + "status": "Statut", + "download": "Télécharger PDF", + "view_online": "Voir en ligne", + "statuses": { + "paid": "Payée", + "open": "Ouverte", + "void": "Annulée", + "uncollectible": "Irrécouvrable", + "draft": "Brouillon" + } + }, + "payment": { + "title": "Paiement", + "method": "Moyen de paiement", + "add_card": "Ajouter une carte", + "update_card": "Modifier la carte", + "no_method": "Aucun moyen de paiement enregistré", + "card_ending": "Carte se terminant par", + "expires": "Expire" + }, + "upgrade": { + "title": "Mettre à niveau", + "compare": "Comparer les plans", + "select": "Sélectionner le plan", + "current": "Plan actuel", + "recommended": "Recommandé" + }, + "messages": { + "subscription_updated": "Abonnement mis à jour avec succès", + "tier_created": "Niveau créé avec succès", + "tier_updated": "Niveau mis à jour avec succès", + "tier_deactivated": "Niveau désactivé", + "payment_method_updated": "Moyen de paiement mis à jour", + "subscription_cancelled": "Abonnement annulé", + "error_loading": "Erreur lors du chargement des informations de facturation", + "error_updating": "Erreur lors de la mise à jour de l'abonnement", + "failed_to_load_billing_data": "Failed to load billing data", + "failed_to_create_checkout_session": "Failed to create checkout session", + "failed_to_open_payment_portal": "Failed to open payment portal", + "subscription_cancelled_you_have_access_u": "Subscription cancelled. You have access until the end of your billing period.", + "failed_to_cancel_subscription": "Failed to cancel subscription", + "subscription_reactivated": "Subscription reactivated!", + "failed_to_reactivate_subscription": "Failed to reactivate subscription", + "failed_to_purchase_addon": "Failed to purchase add-on", + "addon_cancelled_successfully": "Add-on cancelled successfully", + "failed_to_cancel_addon": "Failed to cancel add-on" + }, + "limits": { + "orders_exceeded": "Limite mensuelle de commandes atteinte. Passez à un niveau supérieur.", + "products_exceeded": "Limite de produits atteinte. Passez à un niveau supérieur.", + "team_exceeded": "Limite de membres d'équipe atteinte. Passez à un niveau supérieur." + }, + "features": { + "subscription_management": { + "name": "Gestion des abonnements", + "description": "Gérer les niveaux d'abonnement et la facturation" + }, + "payment_processing": { + "name": "Traitement des paiements", + "description": "Traiter les paiements via Stripe" + }, + "invoicing": { + "name": "Facturation", + "description": "Générer et gérer les factures" + }, + "usage_tracking": { + "name": "Suivi d'utilisation", + "description": "Suivre l'utilisation des fonctionnalités par rapport aux limites du niveau" + } + }, + "menu": { + "billing_subscriptions": "Facturation et Abonnements", + "subscription_tiers": "Niveaux d'abonnement", + "store_subscriptions": "Abonnements des magasins", + "billing_history": "Historique de facturation", + "sales_orders": "Ventes et Commandes", + "invoices": "Factures", + "account_settings": "Paramètres du compte", + "billing": "Facturation" } - }, - "payment": { - "title": "Paiement", - "method": "Moyen de paiement", - "add_card": "Ajouter une carte", - "update_card": "Modifier la carte", - "no_method": "Aucun moyen de paiement enregistré", - "card_ending": "Carte se terminant par", - "expires": "Expire" - }, - "upgrade": { - "title": "Mettre à niveau", - "compare": "Comparer les plans", - "select": "Sélectionner le plan", - "current": "Plan actuel", - "recommended": "Recommandé" - }, - "messages": { - "subscription_updated": "Abonnement mis à jour avec succès", - "tier_created": "Niveau créé avec succès", - "tier_updated": "Niveau mis à jour avec succès", - "tier_deactivated": "Niveau désactivé", - "payment_method_updated": "Moyen de paiement mis à jour", - "subscription_cancelled": "Abonnement annulé", - "error_loading": "Erreur lors du chargement des informations de facturation", - "error_updating": "Erreur lors de la mise à jour de l'abonnement", - "failed_to_load_billing_data": "Failed to load billing data", - "failed_to_create_checkout_session": "Failed to create checkout session", - "failed_to_open_payment_portal": "Failed to open payment portal", - "subscription_cancelled_you_have_access_u": "Subscription cancelled. You have access until the end of your billing period.", - "failed_to_cancel_subscription": "Failed to cancel subscription", - "subscription_reactivated": "Subscription reactivated!", - "failed_to_reactivate_subscription": "Failed to reactivate subscription", - "failed_to_purchase_addon": "Failed to purchase add-on", - "addon_cancelled_successfully": "Add-on cancelled successfully", - "failed_to_cancel_addon": "Failed to cancel add-on" - }, - "limits": { - "orders_exceeded": "Limite mensuelle de commandes atteinte. Passez à un niveau supérieur.", - "products_exceeded": "Limite de produits atteinte. Passez à un niveau supérieur.", - "team_exceeded": "Limite de membres d'équipe atteinte. Passez à un niveau supérieur." - }, - "features": { - "subscription_management": { - "name": "Gestion des abonnements", - "description": "Gérer les niveaux d'abonnement et la facturation" - }, - "payment_processing": { - "name": "Traitement des paiements", - "description": "Traiter les paiements via Stripe" - }, - "invoicing": { - "name": "Facturation", - "description": "Générer et gérer les factures" - }, - "usage_tracking": { - "name": "Suivi d'utilisation", - "description": "Suivre l'utilisation des fonctionnalités par rapport aux limites du niveau" - } - } } diff --git a/app/modules/billing/locales/lb.json b/app/modules/billing/locales/lb.json index 44a75534..a8e86afe 100644 --- a/app/modules/billing/locales/lb.json +++ b/app/modules/billing/locales/lb.json @@ -1,127 +1,137 @@ { - "title": "Rechnung & Abonnementer", - "description": "Abonnementstufe, Rechnungshistorik an Zuelungen verwalten", - "subscription": { - "title": "Abonnement", - "current_tier": "Aktuell Stuf", - "status": "Status", - "statuses": { - "trial": "Testphas", - "active": "Aktiv", - "past_due": "Iwwerfälleg", - "cancelled": "Gekënnegt", - "expired": "Ofgelaf" + "title": "Rechnung & Abonnementer", + "description": "Abonnementstufe, Rechnungshistorik an Zuelungen verwalten", + "subscription": { + "title": "Abonnement", + "current_tier": "Aktuell Stuf", + "status": "Status", + "statuses": { + "trial": "Testphas", + "active": "Aktiv", + "past_due": "Iwwerfälleg", + "cancelled": "Gekënnegt", + "expired": "Ofgelaf" + }, + "trial_ends": "Testphas endet", + "period_ends": "Period endet", + "cancelled_at": "Gekënnegt den", + "cancellation_reason": "Kënnegungsgrond" }, - "trial_ends": "Testphas endet", - "period_ends": "Period endet", - "cancelled_at": "Gekënnegt den", - "cancellation_reason": "Kënnegungsgrond" - }, - "tiers": { - "title": "Abonnementstufen", - "subtitle": "Präisstufen a Funktiounen verwalten", - "essential": "Essential", - "professional": "Professional", - "business": "Business", - "enterprise": "Enterprise", - "create": "Stuf erstellen", - "edit": "Stuf beaarbechten", - "features": "Funktiounen", - "limits": "Limiten", - "pricing": "Präisgestaltung", - "monthly": "Monatlech", - "annual": "Jäerlech", - "per_month": "/Mount", - "per_year": "/Joer", - "unlimited": "Onbegrenzt", - "orders_per_month": "Bestellungen/Mount", - "products_limit": "Produkter", - "team_members": "Teammemberen" - }, - "usage": { - "title": "Notzung", - "orders": "Bestellungen", - "products": "Produkter", - "team": "Teammemberen", - "used": "benotzt", - "remaining": "iwwreg", - "of": "vun" - }, - "invoices": { - "title": "Rechnungen", - "subtitle": "Rechnungshistorik a Rechnungen", - "invoice_number": "Rechnung Nr.", - "date": "Datum", - "due_date": "Fällegkeetsdatum", - "amount": "Betrag", - "status": "Status", - "download": "PDF eroflueden", - "view_online": "Online kucken", - "statuses": { - "paid": "Bezuelt", - "open": "Oppen", - "void": "Stornéiert", - "uncollectible": "Onabtreidbar", - "draft": "Entworf" + "tiers": { + "title": "Abonnementstufen", + "subtitle": "Präisstufen a Funktiounen verwalten", + "essential": "Essential", + "professional": "Professional", + "business": "Business", + "enterprise": "Enterprise", + "create": "Stuf erstellen", + "edit": "Stuf beaarbechten", + "features": "Funktiounen", + "limits": "Limiten", + "pricing": "Präisgestaltung", + "monthly": "Monatlech", + "annual": "Jäerlech", + "per_month": "/Mount", + "per_year": "/Joer", + "unlimited": "Onbegrenzt", + "orders_per_month": "Bestellungen/Mount", + "products_limit": "Produkter", + "team_members": "Teammemberen" + }, + "usage": { + "title": "Notzung", + "orders": "Bestellungen", + "products": "Produkter", + "team": "Teammemberen", + "used": "benotzt", + "remaining": "iwwreg", + "of": "vun" + }, + "invoices": { + "title": "Rechnungen", + "subtitle": "Rechnungshistorik a Rechnungen", + "invoice_number": "Rechnung Nr.", + "date": "Datum", + "due_date": "Fällegkeetsdatum", + "amount": "Betrag", + "status": "Status", + "download": "PDF eroflueden", + "view_online": "Online kucken", + "statuses": { + "paid": "Bezuelt", + "open": "Oppen", + "void": "Stornéiert", + "uncollectible": "Onabtreidbar", + "draft": "Entworf" + } + }, + "payment": { + "title": "Zuelung", + "method": "Zuelungsmethod", + "add_card": "Kaart dobäisetzen", + "update_card": "Kaart aktualiséieren", + "no_method": "Keng Zuelungsmethod hannerlued", + "card_ending": "Kaart endet op", + "expires": "Gëlteg bis" + }, + "upgrade": { + "title": "Upgrade", + "compare": "Pläng vergläichen", + "select": "Plang auswielen", + "current": "Aktuellen Plang", + "recommended": "Recommandéiert" + }, + "messages": { + "subscription_updated": "Abonnement erfollegräich aktualiséiert", + "tier_created": "Stuf erfollegräich erstallt", + "tier_updated": "Stuf erfollegräich aktualiséiert", + "tier_deactivated": "Stuf deaktivéiert", + "payment_method_updated": "Zuelungsmethod aktualiséiert", + "subscription_cancelled": "Abonnement gekënnegt", + "error_loading": "Feeler beim Lueden vun de Rechnungsinformatiounen", + "error_updating": "Feeler beim Aktualiséieren vum Abonnement", + "failed_to_load_billing_data": "Failed to load billing data", + "failed_to_create_checkout_session": "Failed to create checkout session", + "failed_to_open_payment_portal": "Failed to open payment portal", + "subscription_cancelled_you_have_access_u": "Subscription cancelled. You have access until the end of your billing period.", + "failed_to_cancel_subscription": "Failed to cancel subscription", + "subscription_reactivated": "Subscription reactivated!", + "failed_to_reactivate_subscription": "Failed to reactivate subscription", + "failed_to_purchase_addon": "Failed to purchase add-on", + "addon_cancelled_successfully": "Add-on cancelled successfully", + "failed_to_cancel_addon": "Failed to cancel add-on" + }, + "limits": { + "orders_exceeded": "Monatlech Bestellungslimit erreecht. Upgrade fir méi.", + "products_exceeded": "Produktlimit erreecht. Upgrade fir méi.", + "team_exceeded": "Teammemberlimit erreecht. Upgrade fir méi." + }, + "features": { + "subscription_management": { + "name": "Abonnementverwaltung", + "description": "Abonnementstufen an Ofrechnung verwalten" + }, + "payment_processing": { + "name": "Zuelungsofwécklung", + "description": "Zuelungen iwwer Stripe ofwéckelen" + }, + "invoicing": { + "name": "Rechnungsstellung", + "description": "Rechnungen erstellen an verwalten" + }, + "usage_tracking": { + "name": "Notzungsverfolgung", + "description": "Funktiounsnotzung géint Stuflimiten verfolgen" + } + }, + "menu": { + "billing_subscriptions": "Ofrechnung & Abonnementer", + "subscription_tiers": "Abo-Stufen", + "store_subscriptions": "Buttek-Abonnementer", + "billing_history": "Ofrechnungsverlaf", + "sales_orders": "Verkaf & Bestellungen", + "invoices": "Rechnungen", + "account_settings": "Kont-Astellungen", + "billing": "Ofrechnung" } - }, - "payment": { - "title": "Zuelung", - "method": "Zuelungsmethod", - "add_card": "Kaart dobäisetzen", - "update_card": "Kaart aktualiséieren", - "no_method": "Keng Zuelungsmethod hannerlued", - "card_ending": "Kaart endet op", - "expires": "Gëlteg bis" - }, - "upgrade": { - "title": "Upgrade", - "compare": "Pläng vergläichen", - "select": "Plang auswielen", - "current": "Aktuellen Plang", - "recommended": "Recommandéiert" - }, - "messages": { - "subscription_updated": "Abonnement erfollegräich aktualiséiert", - "tier_created": "Stuf erfollegräich erstallt", - "tier_updated": "Stuf erfollegräich aktualiséiert", - "tier_deactivated": "Stuf deaktivéiert", - "payment_method_updated": "Zuelungsmethod aktualiséiert", - "subscription_cancelled": "Abonnement gekënnegt", - "error_loading": "Feeler beim Lueden vun de Rechnungsinformatiounen", - "error_updating": "Feeler beim Aktualiséieren vum Abonnement", - "failed_to_load_billing_data": "Failed to load billing data", - "failed_to_create_checkout_session": "Failed to create checkout session", - "failed_to_open_payment_portal": "Failed to open payment portal", - "subscription_cancelled_you_have_access_u": "Subscription cancelled. You have access until the end of your billing period.", - "failed_to_cancel_subscription": "Failed to cancel subscription", - "subscription_reactivated": "Subscription reactivated!", - "failed_to_reactivate_subscription": "Failed to reactivate subscription", - "failed_to_purchase_addon": "Failed to purchase add-on", - "addon_cancelled_successfully": "Add-on cancelled successfully", - "failed_to_cancel_addon": "Failed to cancel add-on" - }, - "limits": { - "orders_exceeded": "Monatlech Bestellungslimit erreecht. Upgrade fir méi.", - "products_exceeded": "Produktlimit erreecht. Upgrade fir méi.", - "team_exceeded": "Teammemberlimit erreecht. Upgrade fir méi." - }, - "features": { - "subscription_management": { - "name": "Abonnementverwaltung", - "description": "Abonnementstufen an Ofrechnung verwalten" - }, - "payment_processing": { - "name": "Zuelungsofwécklung", - "description": "Zuelungen iwwer Stripe ofwéckelen" - }, - "invoicing": { - "name": "Rechnungsstellung", - "description": "Rechnungen erstellen an verwalten" - }, - "usage_tracking": { - "name": "Notzungsverfolgung", - "description": "Funktiounsnotzung géint Stuflimiten verfolgen" - } - } } diff --git a/app/modules/catalog/locales/de.json b/app/modules/catalog/locales/de.json index 0f14d025..9089d8ea 100644 --- a/app/modules/catalog/locales/de.json +++ b/app/modules/catalog/locales/de.json @@ -1,75 +1,79 @@ { - "products": { - "title": "Produkte", - "product": "Produkt", - "add_product": "Produkt hinzufügen", - "edit_product": "Produkt bearbeiten", - "delete_product": "Produkt löschen", - "product_name": "Produktname", - "product_code": "Produktcode", - "sku": "SKU", - "price": "Preis", - "sale_price": "Verkaufspreis", - "cost": "Kosten", - "stock": "Lagerbestand", - "in_stock": "Auf Lager", - "out_of_stock": "Nicht auf Lager", - "low_stock": "Geringer Bestand", - "availability": "Verfügbarkeit", - "available": "Verfügbar", - "unavailable": "Nicht verfügbar", - "brand": "Marke", - "category": "Kategorie", - "categories": "Kategorien", - "image": "Bild", - "images": "Bilder", - "main_image": "Hauptbild", - "gallery": "Galerie", - "weight": "Gewicht", - "dimensions": "Abmessungen", - "color": "Farbe", - "size": "Größe", - "material": "Material", - "condition": "Zustand", - "new": "Neu", - "used": "Gebraucht", - "refurbished": "Generalüberholt", - "no_products": "Keine Produkte gefunden", - "search_products": "Produkte suchen...", - "filter_by_category": "Nach Kategorie filtern", - "filter_by_status": "Nach Status filtern", - "sort_by": "Sortieren nach", - "sort_newest": "Neueste", - "sort_oldest": "Älteste", - "sort_price_low": "Preis: Niedrig bis Hoch", - "sort_price_high": "Preis: Hoch bis Niedrig", - "sort_name_az": "Name: A-Z", - "sort_name_za": "Name: Z-A" - }, - "messages": { - "product_deleted_successfully": "Product deleted successfully", - "please_fill_in_all_required_fields": "Please fill in all required fields", - "product_updated_successfully": "Product updated successfully", - "failed_to_load_media_library": "Failed to load media library", - "no_store_associated_with_this_product": "No store associated with this product", - "please_select_an_image_file": "Please select an image file", - "image_must_be_less_than_10mb": "Image must be less than 10MB", - "image_uploaded_successfully": "Image uploaded successfully", - "product_removed_from_store_catalog": "Product removed from store catalog.", - "please_select_a_store": "Please select a store", - "please_enter_a_product_title_english": "Please enter a product title (English)", - "product_created_successfully": "Product created successfully", - "please_select_a_store_first": "Please select a store first" - }, - "features": { - "products_limit": { - "name": "Produkte", - "description": "Maximale Anzahl an Produkten im Katalog", - "unit": "Produkte" + "products": { + "title": "Produkte", + "product": "Produkt", + "add_product": "Produkt hinzufügen", + "edit_product": "Produkt bearbeiten", + "delete_product": "Produkt löschen", + "product_name": "Produktname", + "product_code": "Produktcode", + "sku": "SKU", + "price": "Preis", + "sale_price": "Verkaufspreis", + "cost": "Kosten", + "stock": "Lagerbestand", + "in_stock": "Auf Lager", + "out_of_stock": "Nicht auf Lager", + "low_stock": "Geringer Bestand", + "availability": "Verfügbarkeit", + "available": "Verfügbar", + "unavailable": "Nicht verfügbar", + "brand": "Marke", + "category": "Kategorie", + "categories": "Kategorien", + "image": "Bild", + "images": "Bilder", + "main_image": "Hauptbild", + "gallery": "Galerie", + "weight": "Gewicht", + "dimensions": "Abmessungen", + "color": "Farbe", + "size": "Größe", + "material": "Material", + "condition": "Zustand", + "new": "Neu", + "used": "Gebraucht", + "refurbished": "Generalüberholt", + "no_products": "Keine Produkte gefunden", + "search_products": "Produkte suchen...", + "filter_by_category": "Nach Kategorie filtern", + "filter_by_status": "Nach Status filtern", + "sort_by": "Sortieren nach", + "sort_newest": "Neueste", + "sort_oldest": "Älteste", + "sort_price_low": "Preis: Niedrig bis Hoch", + "sort_price_high": "Preis: Hoch bis Niedrig", + "sort_name_az": "Name: A-Z", + "sort_name_za": "Name: Z-A" }, - "product_import_export": { - "name": "Import/Export", - "description": "Massenimport und -export von Produkten" + "messages": { + "product_deleted_successfully": "Product deleted successfully", + "please_fill_in_all_required_fields": "Please fill in all required fields", + "product_updated_successfully": "Product updated successfully", + "failed_to_load_media_library": "Failed to load media library", + "no_store_associated_with_this_product": "No store associated with this product", + "please_select_an_image_file": "Please select an image file", + "image_must_be_less_than_10mb": "Image must be less than 10MB", + "image_uploaded_successfully": "Image uploaded successfully", + "product_removed_from_store_catalog": "Product removed from store catalog.", + "please_select_a_store": "Please select a store", + "please_enter_a_product_title_english": "Please enter a product title (English)", + "product_created_successfully": "Product created successfully", + "please_select_a_store_first": "Please select a store first" + }, + "features": { + "products_limit": { + "name": "Produkte", + "description": "Maximale Anzahl an Produkten im Katalog", + "unit": "Produkte" + }, + "product_import_export": { + "name": "Import/Export", + "description": "Massenimport und -export von Produkten" + } + }, + "menu": { + "products_inventory": "Produkte & Inventar", + "all_products": "Alle Produkte" } - } } diff --git a/app/modules/catalog/locales/en.json b/app/modules/catalog/locales/en.json index 92e1c043..14e55524 100644 --- a/app/modules/catalog/locales/en.json +++ b/app/modules/catalog/locales/en.json @@ -1,93 +1,97 @@ { - "products": { - "title": "Products", - "product": "Product", - "add_product": "Add Product", - "edit_product": "Edit Product", - "delete_product": "Delete Product", - "product_name": "Product Name", - "product_code": "Product Code", - "sku": "SKU", - "price": "Price", - "sale_price": "Sale Price", - "cost": "Cost", - "stock": "Stock", - "in_stock": "In Stock", - "out_of_stock": "Out of Stock", - "low_stock": "Low Stock", - "availability": "Availability", - "available": "Available", - "unavailable": "Unavailable", - "brand": "Brand", - "category": "Category", - "categories": "Categories", - "image": "Image", - "images": "Images", - "main_image": "Main Image", - "gallery": "Gallery", - "weight": "Weight", - "dimensions": "Dimensions", - "color": "Color", - "size": "Size", - "material": "Material", - "condition": "Condition", - "new": "New", - "used": "Used", - "refurbished": "Refurbished", - "no_products": "No products found", - "search_products": "Search products...", - "filter_by_category": "Filter by category", - "filter_by_status": "Filter by status", - "sort_by": "Sort by", - "sort_newest": "Newest", - "sort_oldest": "Oldest", - "sort_price_low": "Price: Low to High", - "sort_price_high": "Price: High to Low", - "sort_name_az": "Name: A-Z", - "sort_name_za": "Name: Z-A" - }, - "messages": { - "product_deleted_successfully": "Product deleted successfully", - "product_created_successfully": "Product created successfully", - "product_updated_successfully": "Product updated successfully", - "product_activated": "Product activated", - "product_deactivated": "Product deactivated", - "product_marked_as_featured": "Product marked as featured", - "product_unmarked_as_featured": "Product unmarked as featured", - "products_activated": "{count} product(s) activated", - "products_deactivated": "{count} product(s) deactivated", - "products_marked_as_featured": "{count} product(s) marked as featured", - "products_unmarked_as_featured": "{count} product(s) unmarked as featured", - "products_deleted": "{count} product(s) deleted", - "failed_to_save_product": "Failed to save product", - "failed_to_create_product": "Failed to create product", - "failed_to_update_product": "Failed to update product", - "failed_to_delete_product": "Failed to delete product", - "failed_to_load_products": "Failed to load products", - "failed_to_activate_products": "Failed to activate products", - "failed_to_deactivate_products": "Failed to deactivate products", - "failed_to_upload_image": "Failed to upload image", - "product_removed_from_store_catalog": "Product removed from store catalog.", - "please_fill_in_all_required_fields": "Please fill in all required fields", - "failed_to_load_media_library": "Failed to load media library", - "no_store_associated_with_this_product": "No store associated with this product", - "please_select_an_image_file": "Please select an image file", - "image_must_be_less_than_10mb": "Image must be less than 10MB", - "image_uploaded_successfully": "Image uploaded successfully", - "please_select_a_store": "Please select a store", - "please_enter_a_product_title_english": "Please enter a product title (English)", - "please_select_a_store_first": "Please select a store first", - "title_and_price_required": "Title and price are required" - }, - "features": { - "products_limit": { - "name": "Products", - "description": "Maximum number of products in catalog", - "unit": "products" + "products": { + "title": "Products", + "product": "Product", + "add_product": "Add Product", + "edit_product": "Edit Product", + "delete_product": "Delete Product", + "product_name": "Product Name", + "product_code": "Product Code", + "sku": "SKU", + "price": "Price", + "sale_price": "Sale Price", + "cost": "Cost", + "stock": "Stock", + "in_stock": "In Stock", + "out_of_stock": "Out of Stock", + "low_stock": "Low Stock", + "availability": "Availability", + "available": "Available", + "unavailable": "Unavailable", + "brand": "Brand", + "category": "Category", + "categories": "Categories", + "image": "Image", + "images": "Images", + "main_image": "Main Image", + "gallery": "Gallery", + "weight": "Weight", + "dimensions": "Dimensions", + "color": "Color", + "size": "Size", + "material": "Material", + "condition": "Condition", + "new": "New", + "used": "Used", + "refurbished": "Refurbished", + "no_products": "No products found", + "search_products": "Search products...", + "filter_by_category": "Filter by category", + "filter_by_status": "Filter by status", + "sort_by": "Sort by", + "sort_newest": "Newest", + "sort_oldest": "Oldest", + "sort_price_low": "Price: Low to High", + "sort_price_high": "Price: High to Low", + "sort_name_az": "Name: A-Z", + "sort_name_za": "Name: Z-A" }, - "product_import_export": { - "name": "Import/Export", - "description": "Bulk product import and export functionality" + "messages": { + "product_deleted_successfully": "Product deleted successfully", + "product_created_successfully": "Product created successfully", + "product_updated_successfully": "Product updated successfully", + "product_activated": "Product activated", + "product_deactivated": "Product deactivated", + "product_marked_as_featured": "Product marked as featured", + "product_unmarked_as_featured": "Product unmarked as featured", + "products_activated": "{count} product(s) activated", + "products_deactivated": "{count} product(s) deactivated", + "products_marked_as_featured": "{count} product(s) marked as featured", + "products_unmarked_as_featured": "{count} product(s) unmarked as featured", + "products_deleted": "{count} product(s) deleted", + "failed_to_save_product": "Failed to save product", + "failed_to_create_product": "Failed to create product", + "failed_to_update_product": "Failed to update product", + "failed_to_delete_product": "Failed to delete product", + "failed_to_load_products": "Failed to load products", + "failed_to_activate_products": "Failed to activate products", + "failed_to_deactivate_products": "Failed to deactivate products", + "failed_to_upload_image": "Failed to upload image", + "product_removed_from_store_catalog": "Product removed from store catalog.", + "please_fill_in_all_required_fields": "Please fill in all required fields", + "failed_to_load_media_library": "Failed to load media library", + "no_store_associated_with_this_product": "No store associated with this product", + "please_select_an_image_file": "Please select an image file", + "image_must_be_less_than_10mb": "Image must be less than 10MB", + "image_uploaded_successfully": "Image uploaded successfully", + "please_select_a_store": "Please select a store", + "please_enter_a_product_title_english": "Please enter a product title (English)", + "please_select_a_store_first": "Please select a store first", + "title_and_price_required": "Title and price are required" + }, + "features": { + "products_limit": { + "name": "Products", + "description": "Maximum number of products in catalog", + "unit": "products" + }, + "product_import_export": { + "name": "Import/Export", + "description": "Bulk product import and export functionality" + } + }, + "menu": { + "products_inventory": "Products & Inventory", + "all_products": "All Products" } - } } diff --git a/app/modules/catalog/locales/fr.json b/app/modules/catalog/locales/fr.json index e3746b72..6913a0ee 100644 --- a/app/modules/catalog/locales/fr.json +++ b/app/modules/catalog/locales/fr.json @@ -1,75 +1,79 @@ { - "products": { - "title": "Produits", - "product": "Produit", - "add_product": "Ajouter un produit", - "edit_product": "Modifier le produit", - "delete_product": "Supprimer le produit", - "product_name": "Nom du produit", - "product_code": "Code produit", - "sku": "SKU", - "price": "Prix", - "sale_price": "Prix de vente", - "cost": "Coût", - "stock": "Stock", - "in_stock": "En stock", - "out_of_stock": "Rupture de stock", - "low_stock": "Stock faible", - "availability": "Disponibilité", - "available": "Disponible", - "unavailable": "Indisponible", - "brand": "Marque", - "category": "Catégorie", - "categories": "Catégories", - "image": "Image", - "images": "Images", - "main_image": "Image principale", - "gallery": "Galerie", - "weight": "Poids", - "dimensions": "Dimensions", - "color": "Couleur", - "size": "Taille", - "material": "Matériau", - "condition": "État", - "new": "Neuf", - "used": "Occasion", - "refurbished": "Reconditionné", - "no_products": "Aucun produit trouvé", - "search_products": "Rechercher des produits...", - "filter_by_category": "Filtrer par catégorie", - "filter_by_status": "Filtrer par statut", - "sort_by": "Trier par", - "sort_newest": "Plus récent", - "sort_oldest": "Plus ancien", - "sort_price_low": "Prix : croissant", - "sort_price_high": "Prix : décroissant", - "sort_name_az": "Nom : A-Z", - "sort_name_za": "Nom : Z-A" - }, - "messages": { - "product_deleted_successfully": "Product deleted successfully", - "please_fill_in_all_required_fields": "Please fill in all required fields", - "product_updated_successfully": "Product updated successfully", - "failed_to_load_media_library": "Failed to load media library", - "no_store_associated_with_this_product": "No store associated with this product", - "please_select_an_image_file": "Please select an image file", - "image_must_be_less_than_10mb": "Image must be less than 10MB", - "image_uploaded_successfully": "Image uploaded successfully", - "product_removed_from_store_catalog": "Product removed from store catalog.", - "please_select_a_store": "Please select a store", - "please_enter_a_product_title_english": "Please enter a product title (English)", - "product_created_successfully": "Product created successfully", - "please_select_a_store_first": "Please select a store first" - }, - "features": { - "products_limit": { - "name": "Produits", - "description": "Nombre maximum de produits dans le catalogue", - "unit": "produits" + "products": { + "title": "Produits", + "product": "Produit", + "add_product": "Ajouter un produit", + "edit_product": "Modifier le produit", + "delete_product": "Supprimer le produit", + "product_name": "Nom du produit", + "product_code": "Code produit", + "sku": "SKU", + "price": "Prix", + "sale_price": "Prix de vente", + "cost": "Coût", + "stock": "Stock", + "in_stock": "En stock", + "out_of_stock": "Rupture de stock", + "low_stock": "Stock faible", + "availability": "Disponibilité", + "available": "Disponible", + "unavailable": "Indisponible", + "brand": "Marque", + "category": "Catégorie", + "categories": "Catégories", + "image": "Image", + "images": "Images", + "main_image": "Image principale", + "gallery": "Galerie", + "weight": "Poids", + "dimensions": "Dimensions", + "color": "Couleur", + "size": "Taille", + "material": "Matériau", + "condition": "État", + "new": "Neuf", + "used": "Occasion", + "refurbished": "Reconditionné", + "no_products": "Aucun produit trouvé", + "search_products": "Rechercher des produits...", + "filter_by_category": "Filtrer par catégorie", + "filter_by_status": "Filtrer par statut", + "sort_by": "Trier par", + "sort_newest": "Plus récent", + "sort_oldest": "Plus ancien", + "sort_price_low": "Prix : croissant", + "sort_price_high": "Prix : décroissant", + "sort_name_az": "Nom : A-Z", + "sort_name_za": "Nom : Z-A" }, - "product_import_export": { - "name": "Import/Export", - "description": "Import et export en masse de produits" + "messages": { + "product_deleted_successfully": "Product deleted successfully", + "please_fill_in_all_required_fields": "Please fill in all required fields", + "product_updated_successfully": "Product updated successfully", + "failed_to_load_media_library": "Failed to load media library", + "no_store_associated_with_this_product": "No store associated with this product", + "please_select_an_image_file": "Please select an image file", + "image_must_be_less_than_10mb": "Image must be less than 10MB", + "image_uploaded_successfully": "Image uploaded successfully", + "product_removed_from_store_catalog": "Product removed from store catalog.", + "please_select_a_store": "Please select a store", + "please_enter_a_product_title_english": "Please enter a product title (English)", + "product_created_successfully": "Product created successfully", + "please_select_a_store_first": "Please select a store first" + }, + "features": { + "products_limit": { + "name": "Produits", + "description": "Nombre maximum de produits dans le catalogue", + "unit": "produits" + }, + "product_import_export": { + "name": "Import/Export", + "description": "Import et export en masse de produits" + } + }, + "menu": { + "products_inventory": "Produits et Inventaire", + "all_products": "Tous les produits" } - } } diff --git a/app/modules/catalog/locales/lb.json b/app/modules/catalog/locales/lb.json index 58e9dd23..5587543c 100644 --- a/app/modules/catalog/locales/lb.json +++ b/app/modules/catalog/locales/lb.json @@ -1,75 +1,79 @@ { - "products": { - "title": "Produkter", - "product": "Produkt", - "add_product": "Produkt derbäisetzen", - "edit_product": "Produkt änneren", - "delete_product": "Produkt läschen", - "product_name": "Produktnumm", - "product_code": "Produktcode", - "sku": "SKU", - "price": "Präis", - "sale_price": "Verkafspräis", - "cost": "Käschten", - "stock": "Lager", - "in_stock": "Op Lager", - "out_of_stock": "Net op Lager", - "low_stock": "Niddregen Stock", - "availability": "Disponibilitéit", - "available": "Disponibel", - "unavailable": "Net disponibel", - "brand": "Mark", - "category": "Kategorie", - "categories": "Kategorien", - "image": "Bild", - "images": "Biller", - "main_image": "Haaptbild", - "gallery": "Galerie", - "weight": "Gewiicht", - "dimensions": "Dimensiounen", - "color": "Faarf", - "size": "Gréisst", - "material": "Material", - "condition": "Zoustand", - "new": "Nei", - "used": "Gebraucht", - "refurbished": "Iwwerholl", - "no_products": "Keng Produkter fonnt", - "search_products": "Produkter sichen...", - "filter_by_category": "No Kategorie filteren", - "filter_by_status": "No Status filteren", - "sort_by": "Sortéieren no", - "sort_newest": "Neisten", - "sort_oldest": "Eelsten", - "sort_price_low": "Präis: Niddreg op Héich", - "sort_price_high": "Präis: Héich op Niddreg", - "sort_name_az": "Numm: A-Z", - "sort_name_za": "Numm: Z-A" - }, - "messages": { - "product_deleted_successfully": "Product deleted successfully", - "please_fill_in_all_required_fields": "Please fill in all required fields", - "product_updated_successfully": "Product updated successfully", - "failed_to_load_media_library": "Failed to load media library", - "no_store_associated_with_this_product": "No store associated with this product", - "please_select_an_image_file": "Please select an image file", - "image_must_be_less_than_10mb": "Image must be less than 10MB", - "image_uploaded_successfully": "Image uploaded successfully", - "product_removed_from_store_catalog": "Product removed from store catalog.", - "please_select_a_store": "Please select a store", - "please_enter_a_product_title_english": "Please enter a product title (English)", - "product_created_successfully": "Product created successfully", - "please_select_a_store_first": "Please select a store first" - }, - "features": { - "products_limit": { - "name": "Produkter", - "description": "Maximal Unzuel vu Produkter am Katalog", - "unit": "Produkter" + "products": { + "title": "Produkter", + "product": "Produkt", + "add_product": "Produkt derbäisetzen", + "edit_product": "Produkt änneren", + "delete_product": "Produkt läschen", + "product_name": "Produktnumm", + "product_code": "Produktcode", + "sku": "SKU", + "price": "Präis", + "sale_price": "Verkafspräis", + "cost": "Käschten", + "stock": "Lager", + "in_stock": "Op Lager", + "out_of_stock": "Net op Lager", + "low_stock": "Niddregen Stock", + "availability": "Disponibilitéit", + "available": "Disponibel", + "unavailable": "Net disponibel", + "brand": "Mark", + "category": "Kategorie", + "categories": "Kategorien", + "image": "Bild", + "images": "Biller", + "main_image": "Haaptbild", + "gallery": "Galerie", + "weight": "Gewiicht", + "dimensions": "Dimensiounen", + "color": "Faarf", + "size": "Gréisst", + "material": "Material", + "condition": "Zoustand", + "new": "Nei", + "used": "Gebraucht", + "refurbished": "Iwwerholl", + "no_products": "Keng Produkter fonnt", + "search_products": "Produkter sichen...", + "filter_by_category": "No Kategorie filteren", + "filter_by_status": "No Status filteren", + "sort_by": "Sortéieren no", + "sort_newest": "Neisten", + "sort_oldest": "Eelsten", + "sort_price_low": "Präis: Niddreg op Héich", + "sort_price_high": "Präis: Héich op Niddreg", + "sort_name_az": "Numm: A-Z", + "sort_name_za": "Numm: Z-A" }, - "product_import_export": { - "name": "Import/Export", - "description": "Mass-Import an -Export vu Produkter" + "messages": { + "product_deleted_successfully": "Product deleted successfully", + "please_fill_in_all_required_fields": "Please fill in all required fields", + "product_updated_successfully": "Product updated successfully", + "failed_to_load_media_library": "Failed to load media library", + "no_store_associated_with_this_product": "No store associated with this product", + "please_select_an_image_file": "Please select an image file", + "image_must_be_less_than_10mb": "Image must be less than 10MB", + "image_uploaded_successfully": "Image uploaded successfully", + "product_removed_from_store_catalog": "Product removed from store catalog.", + "please_select_a_store": "Please select a store", + "please_enter_a_product_title_english": "Please enter a product title (English)", + "product_created_successfully": "Product created successfully", + "please_select_a_store_first": "Please select a store first" + }, + "features": { + "products_limit": { + "name": "Produkter", + "description": "Maximal Unzuel vu Produkter am Katalog", + "unit": "Produkter" + }, + "product_import_export": { + "name": "Import/Export", + "description": "Mass-Import an -Export vu Produkter" + } + }, + "menu": { + "products_inventory": "Produkter & Inventar", + "all_products": "All Produkter" } - } } diff --git a/app/modules/cms/locales/de.json b/app/modules/cms/locales/de.json index b987d4d6..b57a5f27 100644 --- a/app/modules/cms/locales/de.json +++ b/app/modules/cms/locales/de.json @@ -1,231 +1,238 @@ { - "platform": { - "nav": { - "pricing": "Preise", - "find_shop": "Finden Sie Ihren Shop", - "start_trial": "Kostenlos testen", - "admin_login": "Admin-Login", - "store_login": "Händler-Login", - "toggle_menu": "Menü umschalten", - "toggle_dark_mode": "Dunkelmodus umschalten" - }, - "hero": { - "badge": "{trial_days}-Tage kostenlose Testversion - Keine Kreditkarte erforderlich", - "title": "Leichtes OMS für Letzshop-Verkäufer", - "subtitle": "Bestellverwaltung, Lager und Rechnungsstellung für den luxemburgischen E-Commerce. Schluss mit Tabellenkalkulationen. Führen Sie Ihr Geschäft.", - "cta_trial": "Kostenlos testen", - "cta_find_shop": "Finden Sie Ihren Letzshop" - }, - "pricing": { - "title": "Einfache, transparente Preise", - "subtitle": "Wählen Sie den Plan, der zu Ihrem Unternehmen passt. Alle Pläne beinhalten eine {trial_days}-tägige kostenlose Testversion.", - "monthly": "Monatlich", - "annual": "Jährlich", - "save_months": "Sparen Sie 2 Monate!", - "most_popular": "AM BELIEBTESTEN", - "recommended": "EMPFOHLEN", - "contact_sales": "Kontaktieren Sie uns", - "start_trial": "Kostenlos testen", - "per_month": "/Monat", - "per_year": "/Jahr", - "custom": "Individuell", - "orders_per_month": "{count} Bestellungen/Monat", - "unlimited_orders": "Unbegrenzte Bestellungen", - "products_limit": "{count} Produkte", - "unlimited_products": "Unbegrenzte Produkte", - "team_members": "{count} Teammitglieder", - "unlimited_team": "Unbegrenztes Team", - "letzshop_sync": "Letzshop-Synchronisierung", - "eu_vat_invoicing": "EU-MwSt-Rechnungen", - "analytics_dashboard": "Analyse-Dashboard", - "api_access": "API-Zugang", - "multi_channel": "Multi-Channel-Integration", - "products": "Produkte", - "team_member": "Teammitglied", - "unlimited": "Unbegrenzt", - "order_history": "Monate Bestellhistorie", - "trial_note": "Alle Pläne beinhalten eine {trial_days}-tägige kostenlose Testversion. Keine Kreditkarte erforderlich.", - "back_home": "Zurück zur Startseite" + "platform": { + "nav": { + "pricing": "Preise", + "find_shop": "Finden Sie Ihren Shop", + "start_trial": "Kostenlos testen", + "admin_login": "Admin-Login", + "store_login": "Händler-Login", + "toggle_menu": "Menü umschalten", + "toggle_dark_mode": "Dunkelmodus umschalten" + }, + "hero": { + "badge": "{trial_days}-Tage kostenlose Testversion - Keine Kreditkarte erforderlich", + "title": "Leichtes OMS für Letzshop-Verkäufer", + "subtitle": "Bestellverwaltung, Lager und Rechnungsstellung für den luxemburgischen E-Commerce. Schluss mit Tabellenkalkulationen. Führen Sie Ihr Geschäft.", + "cta_trial": "Kostenlos testen", + "cta_find_shop": "Finden Sie Ihren Letzshop" + }, + "pricing": { + "title": "Einfache, transparente Preise", + "subtitle": "Wählen Sie den Plan, der zu Ihrem Unternehmen passt. Alle Pläne beinhalten eine {trial_days}-tägige kostenlose Testversion.", + "monthly": "Monatlich", + "annual": "Jährlich", + "save_months": "Sparen Sie 2 Monate!", + "most_popular": "AM BELIEBTESTEN", + "recommended": "EMPFOHLEN", + "contact_sales": "Kontaktieren Sie uns", + "start_trial": "Kostenlos testen", + "per_month": "/Monat", + "per_year": "/Jahr", + "custom": "Individuell", + "orders_per_month": "{count} Bestellungen/Monat", + "unlimited_orders": "Unbegrenzte Bestellungen", + "products_limit": "{count} Produkte", + "unlimited_products": "Unbegrenzte Produkte", + "team_members": "{count} Teammitglieder", + "unlimited_team": "Unbegrenztes Team", + "letzshop_sync": "Letzshop-Synchronisierung", + "eu_vat_invoicing": "EU-MwSt-Rechnungen", + "analytics_dashboard": "Analyse-Dashboard", + "api_access": "API-Zugang", + "multi_channel": "Multi-Channel-Integration", + "products": "Produkte", + "team_member": "Teammitglied", + "unlimited": "Unbegrenzt", + "order_history": "Monate Bestellhistorie", + "trial_note": "Alle Pläne beinhalten eine {trial_days}-tägige kostenlose Testversion. Keine Kreditkarte erforderlich.", + "back_home": "Zurück zur Startseite" + }, + "features": { + "letzshop_sync": "Letzshop-Synchronisierung", + "inventory_basic": "Grundlegende Lagerverwaltung", + "inventory_locations": "Lagerstandorte", + "inventory_purchase_orders": "Bestellungen", + "invoice_lu": "Luxemburg-MwSt-Rechnungen", + "invoice_eu_vat": "EU-MwSt-Rechnungen", + "invoice_bulk": "Massenrechnungen", + "customer_view": "Kundenliste", + "customer_export": "Kundenexport", + "analytics_dashboard": "Analyse-Dashboard", + "accounting_export": "Buchhaltungsexport", + "api_access": "API-Zugang", + "automation_rules": "Automatisierungsregeln", + "team_roles": "Teamrollen und Berechtigungen", + "white_label": "White-Label-Option", + "multi_store": "Multi-Händler-Unterstützung", + "custom_integrations": "Individuelle Integrationen", + "sla_guarantee": "SLA-Garantie", + "dedicated_support": "Dedizierter Kundenbetreuer" + }, + "addons": { + "title": "Erweitern Sie Ihre Plattform", + "subtitle": "Fügen Sie Ihre Marke, professionelle E-Mail und erweiterte Sicherheit hinzu.", + "per_year": "/Jahr", + "per_month": "/Monat", + "custom_domain": "Eigene Domain", + "custom_domain_desc": "Nutzen Sie Ihre eigene Domain (meinedomain.com)", + "premium_ssl": "Premium SSL", + "premium_ssl_desc": "EV-Zertifikat für Vertrauenssiegel", + "email_package": "E-Mail-Paket", + "email_package_desc": "Professionelle E-Mail-Adressen" + }, + "find_shop": { + "title": "Finden Sie Ihren Letzshop", + "subtitle": "Verkaufen Sie bereits auf Letzshop? Geben Sie Ihre Shop-URL ein, um zu beginnen.", + "placeholder": "Geben Sie Ihre Letzshop-URL ein (z.B. letzshop.lu/vendors/mein-shop)", + "button": "Meinen Shop finden", + "claim_shop": "Diesen Shop beanspruchen", + "already_claimed": "Bereits beansprucht", + "no_account": "Sie haben kein Letzshop-Konto?", + "signup_letzshop": "Registrieren Sie sich zuerst bei Letzshop", + "then_connect": ", dann kommen Sie zurück, um Ihren Shop zu verbinden.", + "search_placeholder": "Letzshop-URL oder Shopname eingeben...", + "search_button": "Suchen", + "examples": "Beispiele:", + "claim_button": "Diesen Shop beanspruchen und kostenlos testen", + "not_found": "Wir konnten keinen Letzshop mit dieser URL finden. Bitte überprüfen Sie und versuchen Sie es erneut.", + "or_signup": "Oder registrieren Sie sich ohne Letzshop-Verbindung", + "need_help": "Brauchen Sie Hilfe?", + "no_account_yet": "Sie haben noch kein Letzshop-Konto? Kein Problem!", + "create_letzshop": "Letzshop-Konto erstellen", + "signup_without": "Ohne Letzshop registrieren", + "looking_up": "Suche Ihren Shop...", + "found": "Gefunden:", + "claimed_badge": "Bereits beansprucht" + }, + "signup": { + "step_plan": "Plan wählen", + "step_shop": "Shop beanspruchen", + "step_account": "Konto", + "step_payment": "Zahlung", + "choose_plan": "Wählen Sie Ihren Plan", + "save_percent": "Sparen Sie {percent}%", + "trial_info": "Wir erfassen Ihre Zahlungsdaten, aber Sie werden erst nach Ende der Testphase belastet.", + "connect_shop": "Verbinden Sie Ihren Letzshop", + "connect_optional": "Optional: Verknüpfen Sie Ihr Letzshop-Konto, um Bestellungen automatisch zu synchronisieren.", + "connect_continue": "Verbinden und fortfahren", + "skip_step": "Diesen Schritt überspringen", + "create_account": "Erstellen Sie Ihr Konto", + "first_name": "Vorname", + "last_name": "Nachname", + "merchant_name": "Firmenname", + "email": "E-Mail", + "password": "Passwort", + "password_hint": "Mindestens 8 Zeichen", + "continue": "Weiter", + "continue_payment": "Weiter zur Zahlung", + "back": "Zurück", + "add_payment": "Zahlungsmethode hinzufügen", + "no_charge_note": "Sie werden erst nach Ablauf Ihrer {trial_days}-tägigen Testphase belastet.", + "processing": "Verarbeitung...", + "start_trial": "Kostenlose Testversion starten", + "creating_account": "Erstelle Ihr Konto..." + }, + "success": { + "title": "Willkommen bei Wizamart!", + "subtitle": "Ihr Konto wurde erstellt und Ihre {trial_days}-tägige kostenlose Testphase hat begonnen.", + "what_next": "Was kommt als Nächstes?", + "step_connect": "Letzshop verbinden:", + "step_connect_desc": "Fügen Sie Ihren API-Schlüssel hinzu, um Bestellungen automatisch zu synchronisieren.", + "step_invoicing": "Rechnungsstellung einrichten:", + "step_invoicing_desc": "Konfigurieren Sie Ihre Rechnungseinstellungen für die luxemburgische Compliance.", + "step_products": "Produkte importieren:", + "step_products_desc": "Synchronisieren Sie Ihren Produktkatalog von Letzshop.", + "go_to_dashboard": "Zum Dashboard", + "login_dashboard": "Zum Dashboard anmelden", + "need_help": "Brauchen Sie Hilfe beim Einstieg?", + "contact_support": "Kontaktieren Sie unser Support-Team" + }, + "cta": { + "title": "Bereit, Ihre Bestellungen zu optimieren?", + "subtitle": "Schließen Sie sich Letzshop-Händlern an, die Wizamart für ihre Bestellverwaltung vertrauen. Starten Sie heute Ihre {trial_days}-tägige kostenlose Testversion.", + "button": "Kostenlos testen" + }, + "footer": { + "tagline": "Leichtes OMS für Letzshop-Verkäufer. Verwalten Sie Bestellungen, Lager und Rechnungen.", + "quick_links": "Schnelllinks", + "platform": "Plattform", + "contact": "Kontakt", + "copyright": "© {year} Wizamart. Entwickelt für den luxemburgischen E-Commerce.", + "privacy": "Datenschutzerklärung", + "terms": "Nutzungsbedingungen", + "about": "Über uns", + "faq": "FAQ", + "contact_us": "Kontaktieren Sie uns" + }, + "modern": { + "badge_integration": "Offizielle Integration", + "badge_connect": "In 2 Minuten verbinden", + "hero_title_1": "Für den luxemburgischen E-Commerce entwickelt", + "hero_title_2": "Das Back-Office, das Letzshop Ihnen nicht gibt", + "hero_subtitle": "Synchronisieren Sie Bestellungen, verwalten Sie Lager, erstellen Sie Rechnungen mit korrekter MwSt und besitzen Sie Ihre Kundendaten. Alles an einem Ort.", + "cta_trial": "{trial_days}-Tage kostenlos testen", + "cta_how": "Sehen Sie, wie es funktioniert", + "hero_note": "Keine Kreditkarte erforderlich. Einrichtung in 5 Minuten. Jederzeit kündbar.", + "pain_title": "Kommt Ihnen das bekannt vor?", + "pain_subtitle": "Das sind die täglichen Frustrationen von Letzshop-Verkäufern", + "pain_manual": "Manuelle Bestelleingabe", + "pain_manual_desc": "Bestellungen von Letzshop in Tabellenkalkulationen kopieren. Jeden. Einzelnen. Tag.", + "pain_inventory": "Lagerchaos", + "pain_inventory_desc": "Der Bestand in Letzshop stimmt nicht mit der Realität überein. Überverkäufe passieren.", + "pain_vat": "Falsche MwSt-Rechnungen", + "pain_vat_desc": "EU-Kunden brauchen die korrekte MwSt. Ihr Buchhalter beschwert sich.", + "pain_customers": "Verlorene Kunden", + "pain_customers_desc": "Letzshop besitzt Ihre Kundendaten. Sie können nicht retargeten oder Loyalität aufbauen.", + "how_title": "So funktioniert es", + "how_subtitle": "Vom Chaos zur Kontrolle in 4 Schritten", + "how_step1": "Letzshop verbinden", + "how_step1_desc": "Geben Sie Ihre Letzshop-API-Zugangsdaten ein. In 2 Minuten erledigt, keine technischen Kenntnisse erforderlich.", + "how_step2": "Bestellungen kommen rein", + "how_step2_desc": "Bestellungen werden automatisch synchronisiert. Bestätigen und Tracking direkt von Wizamart hinzufügen.", + "how_step3": "Rechnungen erstellen", + "how_step3_desc": "Ein Klick, um konforme PDF-Rechnungen mit korrekter MwSt für jedes EU-Land zu erstellen.", + "how_step4": "Ihr Geschäft ausbauen", + "how_step4_desc": "Exportieren Sie Kunden für Marketing. Verfolgen Sie Lagerbestände. Konzentrieren Sie sich auf den Verkauf, nicht auf Tabellenkalkulationen.", + "features_title": "Alles, was ein Letzshop-Verkäufer braucht", + "features_subtitle": "Die operativen Tools, die Letzshop nicht bietet", + "cta_final_title": "Bereit, die Kontrolle über Ihr Letzshop-Geschäft zu übernehmen?", + "cta_final_subtitle": "Schließen Sie sich luxemburgischen Händlern an, die aufgehört haben, gegen Tabellenkalkulationen zu kämpfen, und begonnen haben, ihr Geschäft auszubauen.", + "cta_final_note": "Keine Kreditkarte erforderlich. Einrichtung in 5 Minuten. Volle Professional-Funktionen während der Testphase." + } }, "features": { - "letzshop_sync": "Letzshop-Synchronisierung", - "inventory_basic": "Grundlegende Lagerverwaltung", - "inventory_locations": "Lagerstandorte", - "inventory_purchase_orders": "Bestellungen", - "invoice_lu": "Luxemburg-MwSt-Rechnungen", - "invoice_eu_vat": "EU-MwSt-Rechnungen", - "invoice_bulk": "Massenrechnungen", - "customer_view": "Kundenliste", - "customer_export": "Kundenexport", - "analytics_dashboard": "Analyse-Dashboard", - "accounting_export": "Buchhaltungsexport", - "api_access": "API-Zugang", - "automation_rules": "Automatisierungsregeln", - "team_roles": "Teamrollen und Berechtigungen", - "white_label": "White-Label-Option", - "multi_store": "Multi-Händler-Unterstützung", - "custom_integrations": "Individuelle Integrationen", - "sla_guarantee": "SLA-Garantie", - "dedicated_support": "Dedizierter Kundenbetreuer" + "cms_pages_limit": { + "name": "CMS-Seiten", + "description": "Maximale Anzahl an Inhaltsseiten", + "unit": "Seiten" + }, + "cms_custom_pages_limit": { + "name": "Eigene Seiten", + "description": "Maximale Anzahl an individuell gestalteten Seiten", + "unit": "Seiten" + }, + "cms_basic": { + "name": "Basis-CMS", + "description": "Grundlegende Inhaltsverwaltungsfunktionen" + }, + "cms_seo": { + "name": "SEO-Tools", + "description": "Suchmaschinenoptimierungstools" + }, + "cms_scheduling": { + "name": "Inhaltsplanung", + "description": "Inhalte für zukünftige Veröffentlichung planen" + }, + "cms_templates": { + "name": "Seitenvorlagen", + "description": "Zugang zu Premium-Seitenvorlagen" + } }, - "addons": { - "title": "Erweitern Sie Ihre Plattform", - "subtitle": "Fügen Sie Ihre Marke, professionelle E-Mail und erweiterte Sicherheit hinzu.", - "per_year": "/Jahr", - "per_month": "/Monat", - "custom_domain": "Eigene Domain", - "custom_domain_desc": "Nutzen Sie Ihre eigene Domain (meinedomain.com)", - "premium_ssl": "Premium SSL", - "premium_ssl_desc": "EV-Zertifikat für Vertrauenssiegel", - "email_package": "E-Mail-Paket", - "email_package_desc": "Professionelle E-Mail-Adressen" - }, - "find_shop": { - "title": "Finden Sie Ihren Letzshop", - "subtitle": "Verkaufen Sie bereits auf Letzshop? Geben Sie Ihre Shop-URL ein, um zu beginnen.", - "placeholder": "Geben Sie Ihre Letzshop-URL ein (z.B. letzshop.lu/vendors/mein-shop)", - "button": "Meinen Shop finden", - "claim_shop": "Diesen Shop beanspruchen", - "already_claimed": "Bereits beansprucht", - "no_account": "Sie haben kein Letzshop-Konto?", - "signup_letzshop": "Registrieren Sie sich zuerst bei Letzshop", - "then_connect": ", dann kommen Sie zurück, um Ihren Shop zu verbinden.", - "search_placeholder": "Letzshop-URL oder Shopname eingeben...", - "search_button": "Suchen", - "examples": "Beispiele:", - "claim_button": "Diesen Shop beanspruchen und kostenlos testen", - "not_found": "Wir konnten keinen Letzshop mit dieser URL finden. Bitte überprüfen Sie und versuchen Sie es erneut.", - "or_signup": "Oder registrieren Sie sich ohne Letzshop-Verbindung", - "need_help": "Brauchen Sie Hilfe?", - "no_account_yet": "Sie haben noch kein Letzshop-Konto? Kein Problem!", - "create_letzshop": "Letzshop-Konto erstellen", - "signup_without": "Ohne Letzshop registrieren", - "looking_up": "Suche Ihren Shop...", - "found": "Gefunden:", - "claimed_badge": "Bereits beansprucht" - }, - "signup": { - "step_plan": "Plan wählen", - "step_shop": "Shop beanspruchen", - "step_account": "Konto", - "step_payment": "Zahlung", - "choose_plan": "Wählen Sie Ihren Plan", - "save_percent": "Sparen Sie {percent}%", - "trial_info": "Wir erfassen Ihre Zahlungsdaten, aber Sie werden erst nach Ende der Testphase belastet.", - "connect_shop": "Verbinden Sie Ihren Letzshop", - "connect_optional": "Optional: Verknüpfen Sie Ihr Letzshop-Konto, um Bestellungen automatisch zu synchronisieren.", - "connect_continue": "Verbinden und fortfahren", - "skip_step": "Diesen Schritt überspringen", - "create_account": "Erstellen Sie Ihr Konto", - "first_name": "Vorname", - "last_name": "Nachname", - "merchant_name": "Firmenname", - "email": "E-Mail", - "password": "Passwort", - "password_hint": "Mindestens 8 Zeichen", - "continue": "Weiter", - "continue_payment": "Weiter zur Zahlung", - "back": "Zurück", - "add_payment": "Zahlungsmethode hinzufügen", - "no_charge_note": "Sie werden erst nach Ablauf Ihrer {trial_days}-tägigen Testphase belastet.", - "processing": "Verarbeitung...", - "start_trial": "Kostenlose Testversion starten", - "creating_account": "Erstelle Ihr Konto..." - }, - "success": { - "title": "Willkommen bei Wizamart!", - "subtitle": "Ihr Konto wurde erstellt und Ihre {trial_days}-tägige kostenlose Testphase hat begonnen.", - "what_next": "Was kommt als Nächstes?", - "step_connect": "Letzshop verbinden:", - "step_connect_desc": "Fügen Sie Ihren API-Schlüssel hinzu, um Bestellungen automatisch zu synchronisieren.", - "step_invoicing": "Rechnungsstellung einrichten:", - "step_invoicing_desc": "Konfigurieren Sie Ihre Rechnungseinstellungen für die luxemburgische Compliance.", - "step_products": "Produkte importieren:", - "step_products_desc": "Synchronisieren Sie Ihren Produktkatalog von Letzshop.", - "go_to_dashboard": "Zum Dashboard", - "login_dashboard": "Zum Dashboard anmelden", - "need_help": "Brauchen Sie Hilfe beim Einstieg?", - "contact_support": "Kontaktieren Sie unser Support-Team" - }, - "cta": { - "title": "Bereit, Ihre Bestellungen zu optimieren?", - "subtitle": "Schließen Sie sich Letzshop-Händlern an, die Wizamart für ihre Bestellverwaltung vertrauen. Starten Sie heute Ihre {trial_days}-tägige kostenlose Testversion.", - "button": "Kostenlos testen" - }, - "footer": { - "tagline": "Leichtes OMS für Letzshop-Verkäufer. Verwalten Sie Bestellungen, Lager und Rechnungen.", - "quick_links": "Schnelllinks", - "platform": "Plattform", - "contact": "Kontakt", - "copyright": "© {year} Wizamart. Entwickelt für den luxemburgischen E-Commerce.", - "privacy": "Datenschutzerklärung", - "terms": "Nutzungsbedingungen", - "about": "Über uns", - "faq": "FAQ", - "contact_us": "Kontaktieren Sie uns" - }, - "modern": { - "badge_integration": "Offizielle Integration", - "badge_connect": "In 2 Minuten verbinden", - "hero_title_1": "Für den luxemburgischen E-Commerce entwickelt", - "hero_title_2": "Das Back-Office, das Letzshop Ihnen nicht gibt", - "hero_subtitle": "Synchronisieren Sie Bestellungen, verwalten Sie Lager, erstellen Sie Rechnungen mit korrekter MwSt und besitzen Sie Ihre Kundendaten. Alles an einem Ort.", - "cta_trial": "{trial_days}-Tage kostenlos testen", - "cta_how": "Sehen Sie, wie es funktioniert", - "hero_note": "Keine Kreditkarte erforderlich. Einrichtung in 5 Minuten. Jederzeit kündbar.", - "pain_title": "Kommt Ihnen das bekannt vor?", - "pain_subtitle": "Das sind die täglichen Frustrationen von Letzshop-Verkäufern", - "pain_manual": "Manuelle Bestelleingabe", - "pain_manual_desc": "Bestellungen von Letzshop in Tabellenkalkulationen kopieren. Jeden. Einzelnen. Tag.", - "pain_inventory": "Lagerchaos", - "pain_inventory_desc": "Der Bestand in Letzshop stimmt nicht mit der Realität überein. Überverkäufe passieren.", - "pain_vat": "Falsche MwSt-Rechnungen", - "pain_vat_desc": "EU-Kunden brauchen die korrekte MwSt. Ihr Buchhalter beschwert sich.", - "pain_customers": "Verlorene Kunden", - "pain_customers_desc": "Letzshop besitzt Ihre Kundendaten. Sie können nicht retargeten oder Loyalität aufbauen.", - "how_title": "So funktioniert es", - "how_subtitle": "Vom Chaos zur Kontrolle in 4 Schritten", - "how_step1": "Letzshop verbinden", - "how_step1_desc": "Geben Sie Ihre Letzshop-API-Zugangsdaten ein. In 2 Minuten erledigt, keine technischen Kenntnisse erforderlich.", - "how_step2": "Bestellungen kommen rein", - "how_step2_desc": "Bestellungen werden automatisch synchronisiert. Bestätigen und Tracking direkt von Wizamart hinzufügen.", - "how_step3": "Rechnungen erstellen", - "how_step3_desc": "Ein Klick, um konforme PDF-Rechnungen mit korrekter MwSt für jedes EU-Land zu erstellen.", - "how_step4": "Ihr Geschäft ausbauen", - "how_step4_desc": "Exportieren Sie Kunden für Marketing. Verfolgen Sie Lagerbestände. Konzentrieren Sie sich auf den Verkauf, nicht auf Tabellenkalkulationen.", - "features_title": "Alles, was ein Letzshop-Verkäufer braucht", - "features_subtitle": "Die operativen Tools, die Letzshop nicht bietet", - "cta_final_title": "Bereit, die Kontrolle über Ihr Letzshop-Geschäft zu übernehmen?", - "cta_final_subtitle": "Schließen Sie sich luxemburgischen Händlern an, die aufgehört haben, gegen Tabellenkalkulationen zu kämpfen, und begonnen haben, ihr Geschäft auszubauen.", - "cta_final_note": "Keine Kreditkarte erforderlich. Einrichtung in 5 Minuten. Volle Professional-Funktionen während der Testphase." + "menu": { + "content_management": "Inhaltsverwaltung", + "shop_content": "Shop-Inhalte", + "content_pages": "Inhaltsseiten", + "store_themes": "Shop-Themes", + "media_library": "Mediathek" } - }, - "features": { - "cms_pages_limit": { - "name": "CMS-Seiten", - "description": "Maximale Anzahl an Inhaltsseiten", - "unit": "Seiten" - }, - "cms_custom_pages_limit": { - "name": "Eigene Seiten", - "description": "Maximale Anzahl an individuell gestalteten Seiten", - "unit": "Seiten" - }, - "cms_basic": { - "name": "Basis-CMS", - "description": "Grundlegende Inhaltsverwaltungsfunktionen" - }, - "cms_seo": { - "name": "SEO-Tools", - "description": "Suchmaschinenoptimierungstools" - }, - "cms_scheduling": { - "name": "Inhaltsplanung", - "description": "Inhalte für zukünftige Veröffentlichung planen" - }, - "cms_templates": { - "name": "Seitenvorlagen", - "description": "Zugang zu Premium-Seitenvorlagen" - } - } } diff --git a/app/modules/cms/locales/en.json b/app/modules/cms/locales/en.json index 2f75289f..1f80fb41 100644 --- a/app/modules/cms/locales/en.json +++ b/app/modules/cms/locales/en.json @@ -1,241 +1,248 @@ { - "platform": { - "nav": { - "pricing": "Pricing", - "find_shop": "Find Your Shop", - "start_trial": "Start Free Trial", - "admin_login": "Admin Login", - "store_login": "Store Login", - "toggle_menu": "Toggle menu", - "toggle_dark_mode": "Toggle dark mode" + "platform": { + "nav": { + "pricing": "Pricing", + "find_shop": "Find Your Shop", + "start_trial": "Start Free Trial", + "admin_login": "Admin Login", + "store_login": "Store Login", + "toggle_menu": "Toggle menu", + "toggle_dark_mode": "Toggle dark mode" + }, + "hero": { + "badge": "{trial_days}-Day Free Trial - No Credit Card Required to Start", + "title": "Lightweight OMS for Letzshop Sellers", + "subtitle": "Order management, inventory, and invoicing built for Luxembourg e-commerce. Stop juggling spreadsheets. Start running your business.", + "cta_trial": "Start Free Trial", + "cta_find_shop": "Find Your Letzshop Shop" + }, + "pricing": { + "title": "Simple, Transparent Pricing", + "subtitle": "Choose the plan that fits your business. All plans include a {trial_days}-day free trial.", + "monthly": "Monthly", + "annual": "Annual", + "save_months": "Save 2 months!", + "most_popular": "MOST POPULAR", + "recommended": "RECOMMENDED", + "contact_sales": "Contact Sales", + "start_trial": "Start Free Trial", + "per_month": "/month", + "per_year": "/year", + "custom": "Custom", + "orders_per_month": "{count} orders/month", + "unlimited_orders": "Unlimited orders", + "products_limit": "{count} products", + "unlimited_products": "Unlimited products", + "team_members": "{count} team members", + "unlimited_team": "Unlimited team", + "letzshop_sync": "Letzshop order sync", + "eu_vat_invoicing": "EU VAT invoicing", + "analytics_dashboard": "Analytics dashboard", + "api_access": "API access", + "multi_channel": "Multi-channel integration", + "products": "products", + "team_member": "team member", + "unlimited": "Unlimited", + "order_history": "months order history", + "trial_note": "All plans include a {trial_days}-day free trial. No credit card required.", + "back_home": "Back to Home" + }, + "features": { + "letzshop_sync": "Letzshop order sync", + "inventory_basic": "Basic inventory management", + "inventory_locations": "Warehouse locations", + "inventory_purchase_orders": "Purchase orders", + "invoice_lu": "Luxembourg VAT invoicing", + "invoice_eu_vat": "EU VAT invoicing", + "invoice_bulk": "Bulk invoicing", + "customer_view": "Customer list", + "customer_export": "Customer export", + "analytics_dashboard": "Analytics dashboard", + "accounting_export": "Accounting export", + "api_access": "API access", + "automation_rules": "Automation rules", + "team_roles": "Team roles & permissions", + "white_label": "White-label option", + "multi_store": "Multi-store support", + "custom_integrations": "Custom integrations", + "sla_guarantee": "SLA guarantee", + "dedicated_support": "Dedicated account manager" + }, + "addons": { + "title": "Enhance Your Platform", + "subtitle": "Add custom branding, professional email, and enhanced security.", + "per_year": "/year", + "per_month": "/month", + "custom_domain": "Custom Domain", + "custom_domain_desc": "Use your own domain (mydomain.com)", + "premium_ssl": "Premium SSL", + "premium_ssl_desc": "EV certificate for trust badges", + "email_package": "Email Package", + "email_package_desc": "Professional email addresses" + }, + "find_shop": { + "title": "Find Your Letzshop Shop", + "subtitle": "Already selling on Letzshop? Enter your shop URL to get started.", + "placeholder": "Enter your Letzshop URL (e.g., letzshop.lu/vendors/my-shop)", + "button": "Find My Shop", + "claim_shop": "Claim This Shop", + "already_claimed": "Already Claimed", + "no_account": "Don't have a Letzshop account?", + "signup_letzshop": "Sign up with Letzshop first", + "then_connect": ", then come back to connect your shop.", + "search_placeholder": "Enter Letzshop URL or shop name...", + "search_button": "Search", + "examples": "Examples:", + "claim_button": "Claim This Shop & Start Free Trial", + "not_found": "We could not find a Letzshop shop with that URL. Please check and try again.", + "or_signup": "Or sign up without a Letzshop connection", + "need_help": "Need Help?", + "no_account_yet": "Don't have a Letzshop account yet? No problem!", + "create_letzshop": "Create a Letzshop Account", + "signup_without": "Sign Up Without Letzshop", + "looking_up": "Looking up your shop...", + "found": "Found:", + "claimed_badge": "Already Claimed" + }, + "signup": { + "step_plan": "Select Plan", + "step_shop": "Claim Shop", + "step_account": "Account", + "step_payment": "Payment", + "choose_plan": "Choose Your Plan", + "save_percent": "Save {percent}%", + "trial_info": "We'll collect your payment info, but you won't be charged until the trial ends.", + "connect_shop": "Connect Your Letzshop Shop", + "connect_optional": "Optional: Link your Letzshop account to sync orders automatically.", + "connect_continue": "Connect & Continue", + "skip_step": "Skip This Step", + "create_account": "Create Your Account", + "first_name": "First Name", + "last_name": "Last Name", + "merchant_name": "Merchant Name", + "email": "Email", + "password": "Password", + "password_hint": "Minimum 8 characters", + "continue": "Continue", + "continue_payment": "Continue to Payment", + "back": "Back", + "add_payment": "Add Payment Method", + "no_charge_note": "You won't be charged until your {trial_days}-day trial ends.", + "processing": "Processing...", + "start_trial": "Start Free Trial", + "creating_account": "Creating your account..." + }, + "success": { + "title": "Welcome to Wizamart!", + "subtitle": "Your account has been created and your {trial_days}-day free trial has started.", + "what_next": "What's Next?", + "step_connect": "Connect Letzshop:", + "step_connect_desc": "Add your API key to start syncing orders automatically.", + "step_invoicing": "Set Up Invoicing:", + "step_invoicing_desc": "Configure your invoice settings for Luxembourg compliance.", + "step_products": "Import Products:", + "step_products_desc": "Sync your product catalog from Letzshop.", + "go_to_dashboard": "Go to Dashboard", + "login_dashboard": "Login to Dashboard", + "need_help": "Need help getting started?", + "contact_support": "Contact our support team" + }, + "cta": { + "title": "Ready to Streamline Your Orders?", + "subtitle": "Join Letzshop stores who trust Wizamart for their order management. Start your {trial_days}-day free trial today.", + "button": "Start Free Trial" + }, + "footer": { + "tagline": "Lightweight OMS for Letzshop sellers. Manage orders, inventory, and invoicing.", + "quick_links": "Quick Links", + "platform": "Platform", + "contact": "Contact", + "copyright": "© {year} Wizamart. Built for Luxembourg e-commerce.", + "privacy": "Privacy Policy", + "terms": "Terms of Service", + "about": "About Us", + "faq": "FAQ", + "contact_us": "Contact Us" + }, + "modern": { + "badge_integration": "Official Integration", + "badge_connect": "Connect in 2 minutes", + "hero_title_1": "Built for Luxembourg E-Commerce", + "hero_title_2": "The Back-Office Letzshop Doesn't Give You", + "hero_subtitle": "Sync orders, manage inventory, generate invoices with correct VAT, and own your customer data. All in one place.", + "cta_trial": "Start {trial_days}-Day Free Trial", + "cta_how": "See How It Works", + "hero_note": "No credit card required. Setup in 5 minutes. Cancel anytime.", + "pain_title": "Sound Familiar?", + "pain_subtitle": "These are the daily frustrations of Letzshop sellers", + "pain_manual": "Manual Order Entry", + "pain_manual_desc": "Copy-pasting orders from Letzshop to spreadsheets. Every. Single. Day.", + "pain_inventory": "Inventory Chaos", + "pain_inventory_desc": "Stock in Letzshop doesn't match reality. Overselling happens.", + "pain_vat": "Wrong VAT Invoices", + "pain_vat_desc": "EU customers need correct VAT. Your accountant keeps complaining.", + "pain_customers": "Lost Customers", + "pain_customers_desc": "Letzshop owns your customer data. You can't retarget or build loyalty.", + "how_title": "How It Works", + "how_subtitle": "From Chaos to Control in 4 Steps", + "how_step1": "Connect Letzshop", + "how_step1_desc": "Enter your Letzshop API credentials. Done in 2 minutes, no technical skills needed.", + "how_step2": "Orders Flow In", + "how_step2_desc": "Orders sync automatically. Confirm and add tracking directly from Wizamart.", + "how_step3": "Generate Invoices", + "how_step3_desc": "One click to create compliant PDF invoices with correct VAT for any EU country.", + "how_step4": "Grow Your Business", + "how_step4_desc": "Export customers for marketing. Track inventory. Focus on selling, not spreadsheets.", + "features_title": "Everything a Letzshop Seller Needs", + "features_subtitle": "The operational tools Letzshop doesn't provide", + "cta_final_title": "Ready to Take Control of Your Letzshop Business?", + "cta_final_subtitle": "Join Luxembourg stores who've stopped fighting spreadsheets and started growing their business.", + "cta_final_note": "No credit card required. Setup in 5 minutes. Full Professional features during trial." + } }, - "hero": { - "badge": "{trial_days}-Day Free Trial - No Credit Card Required to Start", - "title": "Lightweight OMS for Letzshop Sellers", - "subtitle": "Order management, inventory, and invoicing built for Luxembourg e-commerce. Stop juggling spreadsheets. Start running your business.", - "cta_trial": "Start Free Trial", - "cta_find_shop": "Find Your Letzshop Shop" + "messages": { + "failed_to_delete_page": "Failed to delete page: {error}", + "media_updated_successfully": "Media updated successfully", + "media_deleted_successfully": "Media deleted successfully", + "url_copied_to_clipboard": "URL copied to clipboard", + "failed_to_copy_url": "Failed to copy URL" }, - "pricing": { - "title": "Simple, Transparent Pricing", - "subtitle": "Choose the plan that fits your business. All plans include a {trial_days}-day free trial.", - "monthly": "Monthly", - "annual": "Annual", - "save_months": "Save 2 months!", - "most_popular": "MOST POPULAR", - "recommended": "RECOMMENDED", - "contact_sales": "Contact Sales", - "start_trial": "Start Free Trial", - "per_month": "/month", - "per_year": "/year", - "custom": "Custom", - "orders_per_month": "{count} orders/month", - "unlimited_orders": "Unlimited orders", - "products_limit": "{count} products", - "unlimited_products": "Unlimited products", - "team_members": "{count} team members", - "unlimited_team": "Unlimited team", - "letzshop_sync": "Letzshop order sync", - "eu_vat_invoicing": "EU VAT invoicing", - "analytics_dashboard": "Analytics dashboard", - "api_access": "API access", - "multi_channel": "Multi-channel integration", - "products": "products", - "team_member": "team member", - "unlimited": "Unlimited", - "order_history": "months order history", - "trial_note": "All plans include a {trial_days}-day free trial. No credit card required.", - "back_home": "Back to Home" + "confirmations": { + "delete_file": "Are you sure you want to delete this file? This cannot be undone." }, "features": { - "letzshop_sync": "Letzshop order sync", - "inventory_basic": "Basic inventory management", - "inventory_locations": "Warehouse locations", - "inventory_purchase_orders": "Purchase orders", - "invoice_lu": "Luxembourg VAT invoicing", - "invoice_eu_vat": "EU VAT invoicing", - "invoice_bulk": "Bulk invoicing", - "customer_view": "Customer list", - "customer_export": "Customer export", - "analytics_dashboard": "Analytics dashboard", - "accounting_export": "Accounting export", - "api_access": "API access", - "automation_rules": "Automation rules", - "team_roles": "Team roles & permissions", - "white_label": "White-label option", - "multi_store": "Multi-store support", - "custom_integrations": "Custom integrations", - "sla_guarantee": "SLA guarantee", - "dedicated_support": "Dedicated account manager" + "cms_pages_limit": { + "name": "CMS Pages", + "description": "Maximum number of content pages", + "unit": "pages" + }, + "cms_custom_pages_limit": { + "name": "Custom Pages", + "description": "Maximum number of custom-designed pages", + "unit": "pages" + }, + "cms_basic": { + "name": "Basic CMS", + "description": "Basic content management features" + }, + "cms_seo": { + "name": "SEO Tools", + "description": "Search engine optimization tools" + }, + "cms_scheduling": { + "name": "Content Scheduling", + "description": "Schedule content for future publication" + }, + "cms_templates": { + "name": "Page Templates", + "description": "Access to premium page templates" + } }, - "addons": { - "title": "Enhance Your Platform", - "subtitle": "Add custom branding, professional email, and enhanced security.", - "per_year": "/year", - "per_month": "/month", - "custom_domain": "Custom Domain", - "custom_domain_desc": "Use your own domain (mydomain.com)", - "premium_ssl": "Premium SSL", - "premium_ssl_desc": "EV certificate for trust badges", - "email_package": "Email Package", - "email_package_desc": "Professional email addresses" - }, - "find_shop": { - "title": "Find Your Letzshop Shop", - "subtitle": "Already selling on Letzshop? Enter your shop URL to get started.", - "placeholder": "Enter your Letzshop URL (e.g., letzshop.lu/vendors/my-shop)", - "button": "Find My Shop", - "claim_shop": "Claim This Shop", - "already_claimed": "Already Claimed", - "no_account": "Don't have a Letzshop account?", - "signup_letzshop": "Sign up with Letzshop first", - "then_connect": ", then come back to connect your shop.", - "search_placeholder": "Enter Letzshop URL or shop name...", - "search_button": "Search", - "examples": "Examples:", - "claim_button": "Claim This Shop & Start Free Trial", - "not_found": "We could not find a Letzshop shop with that URL. Please check and try again.", - "or_signup": "Or sign up without a Letzshop connection", - "need_help": "Need Help?", - "no_account_yet": "Don't have a Letzshop account yet? No problem!", - "create_letzshop": "Create a Letzshop Account", - "signup_without": "Sign Up Without Letzshop", - "looking_up": "Looking up your shop...", - "found": "Found:", - "claimed_badge": "Already Claimed" - }, - "signup": { - "step_plan": "Select Plan", - "step_shop": "Claim Shop", - "step_account": "Account", - "step_payment": "Payment", - "choose_plan": "Choose Your Plan", - "save_percent": "Save {percent}%", - "trial_info": "We'll collect your payment info, but you won't be charged until the trial ends.", - "connect_shop": "Connect Your Letzshop Shop", - "connect_optional": "Optional: Link your Letzshop account to sync orders automatically.", - "connect_continue": "Connect & Continue", - "skip_step": "Skip This Step", - "create_account": "Create Your Account", - "first_name": "First Name", - "last_name": "Last Name", - "merchant_name": "Merchant Name", - "email": "Email", - "password": "Password", - "password_hint": "Minimum 8 characters", - "continue": "Continue", - "continue_payment": "Continue to Payment", - "back": "Back", - "add_payment": "Add Payment Method", - "no_charge_note": "You won't be charged until your {trial_days}-day trial ends.", - "processing": "Processing...", - "start_trial": "Start Free Trial", - "creating_account": "Creating your account..." - }, - "success": { - "title": "Welcome to Wizamart!", - "subtitle": "Your account has been created and your {trial_days}-day free trial has started.", - "what_next": "What's Next?", - "step_connect": "Connect Letzshop:", - "step_connect_desc": "Add your API key to start syncing orders automatically.", - "step_invoicing": "Set Up Invoicing:", - "step_invoicing_desc": "Configure your invoice settings for Luxembourg compliance.", - "step_products": "Import Products:", - "step_products_desc": "Sync your product catalog from Letzshop.", - "go_to_dashboard": "Go to Dashboard", - "login_dashboard": "Login to Dashboard", - "need_help": "Need help getting started?", - "contact_support": "Contact our support team" - }, - "cta": { - "title": "Ready to Streamline Your Orders?", - "subtitle": "Join Letzshop stores who trust Wizamart for their order management. Start your {trial_days}-day free trial today.", - "button": "Start Free Trial" - }, - "footer": { - "tagline": "Lightweight OMS for Letzshop sellers. Manage orders, inventory, and invoicing.", - "quick_links": "Quick Links", - "platform": "Platform", - "contact": "Contact", - "copyright": "© {year} Wizamart. Built for Luxembourg e-commerce.", - "privacy": "Privacy Policy", - "terms": "Terms of Service", - "about": "About Us", - "faq": "FAQ", - "contact_us": "Contact Us" - }, - "modern": { - "badge_integration": "Official Integration", - "badge_connect": "Connect in 2 minutes", - "hero_title_1": "Built for Luxembourg E-Commerce", - "hero_title_2": "The Back-Office Letzshop Doesn't Give You", - "hero_subtitle": "Sync orders, manage inventory, generate invoices with correct VAT, and own your customer data. All in one place.", - "cta_trial": "Start {trial_days}-Day Free Trial", - "cta_how": "See How It Works", - "hero_note": "No credit card required. Setup in 5 minutes. Cancel anytime.", - "pain_title": "Sound Familiar?", - "pain_subtitle": "These are the daily frustrations of Letzshop sellers", - "pain_manual": "Manual Order Entry", - "pain_manual_desc": "Copy-pasting orders from Letzshop to spreadsheets. Every. Single. Day.", - "pain_inventory": "Inventory Chaos", - "pain_inventory_desc": "Stock in Letzshop doesn't match reality. Overselling happens.", - "pain_vat": "Wrong VAT Invoices", - "pain_vat_desc": "EU customers need correct VAT. Your accountant keeps complaining.", - "pain_customers": "Lost Customers", - "pain_customers_desc": "Letzshop owns your customer data. You can't retarget or build loyalty.", - "how_title": "How It Works", - "how_subtitle": "From Chaos to Control in 4 Steps", - "how_step1": "Connect Letzshop", - "how_step1_desc": "Enter your Letzshop API credentials. Done in 2 minutes, no technical skills needed.", - "how_step2": "Orders Flow In", - "how_step2_desc": "Orders sync automatically. Confirm and add tracking directly from Wizamart.", - "how_step3": "Generate Invoices", - "how_step3_desc": "One click to create compliant PDF invoices with correct VAT for any EU country.", - "how_step4": "Grow Your Business", - "how_step4_desc": "Export customers for marketing. Track inventory. Focus on selling, not spreadsheets.", - "features_title": "Everything a Letzshop Seller Needs", - "features_subtitle": "The operational tools Letzshop doesn't provide", - "cta_final_title": "Ready to Take Control of Your Letzshop Business?", - "cta_final_subtitle": "Join Luxembourg stores who've stopped fighting spreadsheets and started growing their business.", - "cta_final_note": "No credit card required. Setup in 5 minutes. Full Professional features during trial." + "menu": { + "content_management": "Content Management", + "shop_content": "Shop Content", + "content_pages": "Content Pages", + "store_themes": "Store Themes", + "media_library": "Media Library" } - }, - "messages": { - "failed_to_delete_page": "Failed to delete page: {error}", - "media_updated_successfully": "Media updated successfully", - "media_deleted_successfully": "Media deleted successfully", - "url_copied_to_clipboard": "URL copied to clipboard", - "failed_to_copy_url": "Failed to copy URL" - }, - "confirmations": { - "delete_file": "Are you sure you want to delete this file? This cannot be undone." - }, - "features": { - "cms_pages_limit": { - "name": "CMS Pages", - "description": "Maximum number of content pages", - "unit": "pages" - }, - "cms_custom_pages_limit": { - "name": "Custom Pages", - "description": "Maximum number of custom-designed pages", - "unit": "pages" - }, - "cms_basic": { - "name": "Basic CMS", - "description": "Basic content management features" - }, - "cms_seo": { - "name": "SEO Tools", - "description": "Search engine optimization tools" - }, - "cms_scheduling": { - "name": "Content Scheduling", - "description": "Schedule content for future publication" - }, - "cms_templates": { - "name": "Page Templates", - "description": "Access to premium page templates" - } - } } diff --git a/app/modules/cms/locales/fr.json b/app/modules/cms/locales/fr.json index 4ac57288..3b90a369 100644 --- a/app/modules/cms/locales/fr.json +++ b/app/modules/cms/locales/fr.json @@ -1,231 +1,238 @@ { - "platform": { - "nav": { - "pricing": "Tarifs", - "find_shop": "Trouvez votre boutique", - "start_trial": "Essai gratuit", - "admin_login": "Connexion Admin", - "store_login": "Connexion Vendeur", - "toggle_menu": "Basculer le menu", - "toggle_dark_mode": "Basculer le mode sombre" - }, - "hero": { - "badge": "Essai gratuit de {trial_days} jours - Aucune carte de crédit requise", - "title": "OMS léger pour les vendeurs Letzshop", - "subtitle": "Gestion des commandes, stocks et facturation conçue pour le e-commerce luxembourgeois. Arrêtez de jongler avec les tableurs. Gérez votre entreprise.", - "cta_trial": "Essai gratuit", - "cta_find_shop": "Trouvez votre boutique Letzshop" - }, - "pricing": { - "title": "Tarification simple et transparente", - "subtitle": "Choisissez le plan adapté à votre entreprise. Tous les plans incluent un essai gratuit de {trial_days} jours.", - "monthly": "Mensuel", - "annual": "Annuel", - "save_months": "Économisez 2 mois !", - "most_popular": "LE PLUS POPULAIRE", - "recommended": "RECOMMANDÉ", - "contact_sales": "Contactez-nous", - "start_trial": "Essai gratuit", - "per_month": "/mois", - "per_year": "/an", - "custom": "Sur mesure", - "orders_per_month": "{count} commandes/mois", - "unlimited_orders": "Commandes illimitées", - "products_limit": "{count} produits", - "unlimited_products": "Produits illimités", - "team_members": "{count} membres d'équipe", - "unlimited_team": "Équipe illimitée", - "letzshop_sync": "Synchronisation Letzshop", - "eu_vat_invoicing": "Facturation TVA UE", - "analytics_dashboard": "Tableau de bord analytique", - "api_access": "Accès API", - "multi_channel": "Intégration multi-canal", - "products": "produits", - "team_member": "membre d'équipe", - "unlimited": "Illimité", - "order_history": "mois d'historique", - "trial_note": "Tous les plans incluent un essai gratuit de {trial_days} jours. Aucune carte de crédit requise.", - "back_home": "Retour à l'accueil" + "platform": { + "nav": { + "pricing": "Tarifs", + "find_shop": "Trouvez votre boutique", + "start_trial": "Essai gratuit", + "admin_login": "Connexion Admin", + "store_login": "Connexion Vendeur", + "toggle_menu": "Basculer le menu", + "toggle_dark_mode": "Basculer le mode sombre" + }, + "hero": { + "badge": "Essai gratuit de {trial_days} jours - Aucune carte de crédit requise", + "title": "OMS léger pour les vendeurs Letzshop", + "subtitle": "Gestion des commandes, stocks et facturation conçue pour le e-commerce luxembourgeois. Arrêtez de jongler avec les tableurs. Gérez votre entreprise.", + "cta_trial": "Essai gratuit", + "cta_find_shop": "Trouvez votre boutique Letzshop" + }, + "pricing": { + "title": "Tarification simple et transparente", + "subtitle": "Choisissez le plan adapté à votre entreprise. Tous les plans incluent un essai gratuit de {trial_days} jours.", + "monthly": "Mensuel", + "annual": "Annuel", + "save_months": "Économisez 2 mois !", + "most_popular": "LE PLUS POPULAIRE", + "recommended": "RECOMMANDÉ", + "contact_sales": "Contactez-nous", + "start_trial": "Essai gratuit", + "per_month": "/mois", + "per_year": "/an", + "custom": "Sur mesure", + "orders_per_month": "{count} commandes/mois", + "unlimited_orders": "Commandes illimitées", + "products_limit": "{count} produits", + "unlimited_products": "Produits illimités", + "team_members": "{count} membres d'équipe", + "unlimited_team": "Équipe illimitée", + "letzshop_sync": "Synchronisation Letzshop", + "eu_vat_invoicing": "Facturation TVA UE", + "analytics_dashboard": "Tableau de bord analytique", + "api_access": "Accès API", + "multi_channel": "Intégration multi-canal", + "products": "produits", + "team_member": "membre d'équipe", + "unlimited": "Illimité", + "order_history": "mois d'historique", + "trial_note": "Tous les plans incluent un essai gratuit de {trial_days} jours. Aucune carte de crédit requise.", + "back_home": "Retour à l'accueil" + }, + "features": { + "letzshop_sync": "Synchronisation Letzshop", + "inventory_basic": "Gestion de stock de base", + "inventory_locations": "Emplacements d'entrepôt", + "inventory_purchase_orders": "Bons de commande", + "invoice_lu": "Facturation TVA Luxembourg", + "invoice_eu_vat": "Facturation TVA UE", + "invoice_bulk": "Facturation en masse", + "customer_view": "Liste des clients", + "customer_export": "Export clients", + "analytics_dashboard": "Tableau de bord analytique", + "accounting_export": "Export comptable", + "api_access": "Accès API", + "automation_rules": "Règles d'automatisation", + "team_roles": "Rôles et permissions", + "white_label": "Option marque blanche", + "multi_store": "Support multi-vendeurs", + "custom_integrations": "Intégrations personnalisées", + "sla_guarantee": "Garantie SLA", + "dedicated_support": "Gestionnaire de compte dédié" + }, + "addons": { + "title": "Améliorez votre plateforme", + "subtitle": "Ajoutez votre marque, e-mail professionnel et sécurité renforcée.", + "per_year": "/an", + "per_month": "/mois", + "custom_domain": "Domaine personnalisé", + "custom_domain_desc": "Utilisez votre propre domaine (mondomaine.com)", + "premium_ssl": "SSL Premium", + "premium_ssl_desc": "Certificat EV pour les badges de confiance", + "email_package": "Pack Email", + "email_package_desc": "Adresses e-mail professionnelles" + }, + "find_shop": { + "title": "Trouvez votre boutique Letzshop", + "subtitle": "Vous vendez déjà sur Letzshop ? Entrez l'URL de votre boutique pour commencer.", + "placeholder": "Entrez votre URL Letzshop (ex: letzshop.lu/vendors/ma-boutique)", + "button": "Trouver ma boutique", + "claim_shop": "Réclamer cette boutique", + "already_claimed": "Déjà réclamée", + "no_account": "Vous n'avez pas de compte Letzshop ?", + "signup_letzshop": "Inscrivez-vous d'abord sur Letzshop", + "then_connect": ", puis revenez connecter votre boutique.", + "search_placeholder": "Entrez l'URL Letzshop ou le nom de la boutique...", + "search_button": "Rechercher", + "examples": "Exemples :", + "claim_button": "Réclamez cette boutique et démarrez l'essai gratuit", + "not_found": "Nous n'avons pas trouvé de boutique Letzshop avec cette URL. Vérifiez et réessayez.", + "or_signup": "Ou inscrivez-vous sans connexion Letzshop", + "need_help": "Besoin d'aide ?", + "no_account_yet": "Vous n'avez pas encore de compte Letzshop ? Pas de problème !", + "create_letzshop": "Créer un compte Letzshop", + "signup_without": "S'inscrire sans Letzshop", + "looking_up": "Recherche de votre boutique...", + "found": "Trouvé :", + "claimed_badge": "Déjà réclamée" + }, + "signup": { + "step_plan": "Choisir le plan", + "step_shop": "Réclamer la boutique", + "step_account": "Compte", + "step_payment": "Paiement", + "choose_plan": "Choisissez votre plan", + "save_percent": "Économisez {percent}%", + "trial_info": "Nous collecterons vos informations de paiement, mais vous ne serez pas débité avant la fin de l'essai.", + "connect_shop": "Connectez votre boutique Letzshop", + "connect_optional": "Optionnel : Liez votre compte Letzshop pour synchroniser automatiquement les commandes.", + "connect_continue": "Connecter et continuer", + "skip_step": "Passer cette étape", + "create_account": "Créez votre compte", + "first_name": "Prénom", + "last_name": "Nom", + "merchant_name": "Nom de l'entreprise", + "email": "E-mail", + "password": "Mot de passe", + "password_hint": "Minimum 8 caractères", + "continue": "Continuer", + "continue_payment": "Continuer vers le paiement", + "back": "Retour", + "add_payment": "Ajouter un moyen de paiement", + "no_charge_note": "Vous ne serez pas débité avant la fin de votre essai de {trial_days} jours.", + "processing": "Traitement en cours...", + "start_trial": "Démarrer l'essai gratuit", + "creating_account": "Création de votre compte..." + }, + "success": { + "title": "Bienvenue sur Wizamart !", + "subtitle": "Votre compte a été créé et votre essai gratuit de {trial_days} jours a commencé.", + "what_next": "Et maintenant ?", + "step_connect": "Connecter Letzshop :", + "step_connect_desc": "Ajoutez votre clé API pour commencer à synchroniser automatiquement les commandes.", + "step_invoicing": "Configurer la facturation :", + "step_invoicing_desc": "Configurez vos paramètres de facturation pour la conformité luxembourgeoise.", + "step_products": "Importer les produits :", + "step_products_desc": "Synchronisez votre catalogue de produits depuis Letzshop.", + "go_to_dashboard": "Aller au tableau de bord", + "login_dashboard": "Connexion au tableau de bord", + "need_help": "Besoin d'aide pour démarrer ?", + "contact_support": "Contactez notre équipe support" + }, + "cta": { + "title": "Prêt à optimiser vos commandes ?", + "subtitle": "Rejoignez les vendeurs Letzshop qui font confiance à Wizamart pour leur gestion de commandes. Commencez votre essai gratuit de {trial_days} jours aujourd'hui.", + "button": "Essai gratuit" + }, + "footer": { + "tagline": "OMS léger pour les vendeurs Letzshop. Gérez commandes, stocks et facturation.", + "quick_links": "Liens rapides", + "platform": "Plateforme", + "contact": "Contact", + "copyright": "© {year} Wizamart. Conçu pour le e-commerce luxembourgeois.", + "privacy": "Politique de confidentialité", + "terms": "Conditions d'utilisation", + "about": "À propos", + "faq": "FAQ", + "contact_us": "Nous contacter" + }, + "modern": { + "badge_integration": "Intégration officielle", + "badge_connect": "Connexion en 2 minutes", + "hero_title_1": "Conçu pour le e-commerce luxembourgeois", + "hero_title_2": "Le back-office que Letzshop ne vous donne pas", + "hero_subtitle": "Synchronisez les commandes, gérez les stocks, générez des factures avec la TVA correcte et possédez vos données clients. Tout en un seul endroit.", + "cta_trial": "Essai gratuit de {trial_days} jours", + "cta_how": "Voir comment ça marche", + "hero_note": "Aucune carte de crédit requise. Configuration en 5 minutes. Annulez à tout moment.", + "pain_title": "Ça vous dit quelque chose ?", + "pain_subtitle": "Ce sont les frustrations quotidiennes des vendeurs Letzshop", + "pain_manual": "Saisie manuelle des commandes", + "pain_manual_desc": "Copier-coller les commandes de Letzshop vers des tableurs. Chaque. Jour.", + "pain_inventory": "Chaos des stocks", + "pain_inventory_desc": "Le stock dans Letzshop ne correspond pas à la réalité. Les surventes arrivent.", + "pain_vat": "Mauvaises factures TVA", + "pain_vat_desc": "Les clients UE ont besoin de la TVA correcte. Votre comptable se plaint.", + "pain_customers": "Clients perdus", + "pain_customers_desc": "Letzshop possède vos données clients. Vous ne pouvez pas les recibler ou fidéliser.", + "how_title": "Comment ça marche", + "how_subtitle": "Du chaos au contrôle en 4 étapes", + "how_step1": "Connecter Letzshop", + "how_step1_desc": "Entrez vos identifiants API Letzshop. Fait en 2 minutes, aucune compétence technique requise.", + "how_step2": "Les commandes arrivent", + "how_step2_desc": "Les commandes se synchronisent automatiquement. Confirmez et ajoutez le suivi directement depuis Wizamart.", + "how_step3": "Générer des factures", + "how_step3_desc": "Un clic pour créer des factures PDF conformes avec la TVA correcte pour tout pays UE.", + "how_step4": "Développez votre entreprise", + "how_step4_desc": "Exportez les clients pour le marketing. Suivez les stocks. Concentrez-vous sur la vente, pas les tableurs.", + "features_title": "Tout ce dont un vendeur Letzshop a besoin", + "features_subtitle": "Les outils opérationnels que Letzshop ne fournit pas", + "cta_final_title": "Prêt à prendre le contrôle de votre entreprise Letzshop ?", + "cta_final_subtitle": "Rejoignez les vendeurs luxembourgeois qui ont arrêté de lutter contre les tableurs et ont commencé à développer leur entreprise.", + "cta_final_note": "Aucune carte de crédit requise. Configuration en 5 minutes. Toutes les fonctionnalités Pro pendant l'essai." + } }, "features": { - "letzshop_sync": "Synchronisation Letzshop", - "inventory_basic": "Gestion de stock de base", - "inventory_locations": "Emplacements d'entrepôt", - "inventory_purchase_orders": "Bons de commande", - "invoice_lu": "Facturation TVA Luxembourg", - "invoice_eu_vat": "Facturation TVA UE", - "invoice_bulk": "Facturation en masse", - "customer_view": "Liste des clients", - "customer_export": "Export clients", - "analytics_dashboard": "Tableau de bord analytique", - "accounting_export": "Export comptable", - "api_access": "Accès API", - "automation_rules": "Règles d'automatisation", - "team_roles": "Rôles et permissions", - "white_label": "Option marque blanche", - "multi_store": "Support multi-vendeurs", - "custom_integrations": "Intégrations personnalisées", - "sla_guarantee": "Garantie SLA", - "dedicated_support": "Gestionnaire de compte dédié" + "cms_pages_limit": { + "name": "Pages CMS", + "description": "Nombre maximum de pages de contenu", + "unit": "pages" + }, + "cms_custom_pages_limit": { + "name": "Pages personnalisées", + "description": "Nombre maximum de pages personnalisées", + "unit": "pages" + }, + "cms_basic": { + "name": "CMS de base", + "description": "Fonctionnalités de gestion de contenu de base" + }, + "cms_seo": { + "name": "Outils SEO", + "description": "Outils d'optimisation pour les moteurs de recherche" + }, + "cms_scheduling": { + "name": "Planification de contenu", + "description": "Planifier du contenu pour publication future" + }, + "cms_templates": { + "name": "Modèles de pages", + "description": "Accès aux modèles de pages premium" + } }, - "addons": { - "title": "Améliorez votre plateforme", - "subtitle": "Ajoutez votre marque, e-mail professionnel et sécurité renforcée.", - "per_year": "/an", - "per_month": "/mois", - "custom_domain": "Domaine personnalisé", - "custom_domain_desc": "Utilisez votre propre domaine (mondomaine.com)", - "premium_ssl": "SSL Premium", - "premium_ssl_desc": "Certificat EV pour les badges de confiance", - "email_package": "Pack Email", - "email_package_desc": "Adresses e-mail professionnelles" - }, - "find_shop": { - "title": "Trouvez votre boutique Letzshop", - "subtitle": "Vous vendez déjà sur Letzshop ? Entrez l'URL de votre boutique pour commencer.", - "placeholder": "Entrez votre URL Letzshop (ex: letzshop.lu/vendors/ma-boutique)", - "button": "Trouver ma boutique", - "claim_shop": "Réclamer cette boutique", - "already_claimed": "Déjà réclamée", - "no_account": "Vous n'avez pas de compte Letzshop ?", - "signup_letzshop": "Inscrivez-vous d'abord sur Letzshop", - "then_connect": ", puis revenez connecter votre boutique.", - "search_placeholder": "Entrez l'URL Letzshop ou le nom de la boutique...", - "search_button": "Rechercher", - "examples": "Exemples :", - "claim_button": "Réclamez cette boutique et démarrez l'essai gratuit", - "not_found": "Nous n'avons pas trouvé de boutique Letzshop avec cette URL. Vérifiez et réessayez.", - "or_signup": "Ou inscrivez-vous sans connexion Letzshop", - "need_help": "Besoin d'aide ?", - "no_account_yet": "Vous n'avez pas encore de compte Letzshop ? Pas de problème !", - "create_letzshop": "Créer un compte Letzshop", - "signup_without": "S'inscrire sans Letzshop", - "looking_up": "Recherche de votre boutique...", - "found": "Trouvé :", - "claimed_badge": "Déjà réclamée" - }, - "signup": { - "step_plan": "Choisir le plan", - "step_shop": "Réclamer la boutique", - "step_account": "Compte", - "step_payment": "Paiement", - "choose_plan": "Choisissez votre plan", - "save_percent": "Économisez {percent}%", - "trial_info": "Nous collecterons vos informations de paiement, mais vous ne serez pas débité avant la fin de l'essai.", - "connect_shop": "Connectez votre boutique Letzshop", - "connect_optional": "Optionnel : Liez votre compte Letzshop pour synchroniser automatiquement les commandes.", - "connect_continue": "Connecter et continuer", - "skip_step": "Passer cette étape", - "create_account": "Créez votre compte", - "first_name": "Prénom", - "last_name": "Nom", - "merchant_name": "Nom de l'entreprise", - "email": "E-mail", - "password": "Mot de passe", - "password_hint": "Minimum 8 caractères", - "continue": "Continuer", - "continue_payment": "Continuer vers le paiement", - "back": "Retour", - "add_payment": "Ajouter un moyen de paiement", - "no_charge_note": "Vous ne serez pas débité avant la fin de votre essai de {trial_days} jours.", - "processing": "Traitement en cours...", - "start_trial": "Démarrer l'essai gratuit", - "creating_account": "Création de votre compte..." - }, - "success": { - "title": "Bienvenue sur Wizamart !", - "subtitle": "Votre compte a été créé et votre essai gratuit de {trial_days} jours a commencé.", - "what_next": "Et maintenant ?", - "step_connect": "Connecter Letzshop :", - "step_connect_desc": "Ajoutez votre clé API pour commencer à synchroniser automatiquement les commandes.", - "step_invoicing": "Configurer la facturation :", - "step_invoicing_desc": "Configurez vos paramètres de facturation pour la conformité luxembourgeoise.", - "step_products": "Importer les produits :", - "step_products_desc": "Synchronisez votre catalogue de produits depuis Letzshop.", - "go_to_dashboard": "Aller au tableau de bord", - "login_dashboard": "Connexion au tableau de bord", - "need_help": "Besoin d'aide pour démarrer ?", - "contact_support": "Contactez notre équipe support" - }, - "cta": { - "title": "Prêt à optimiser vos commandes ?", - "subtitle": "Rejoignez les vendeurs Letzshop qui font confiance à Wizamart pour leur gestion de commandes. Commencez votre essai gratuit de {trial_days} jours aujourd'hui.", - "button": "Essai gratuit" - }, - "footer": { - "tagline": "OMS léger pour les vendeurs Letzshop. Gérez commandes, stocks et facturation.", - "quick_links": "Liens rapides", - "platform": "Plateforme", - "contact": "Contact", - "copyright": "© {year} Wizamart. Conçu pour le e-commerce luxembourgeois.", - "privacy": "Politique de confidentialité", - "terms": "Conditions d'utilisation", - "about": "À propos", - "faq": "FAQ", - "contact_us": "Nous contacter" - }, - "modern": { - "badge_integration": "Intégration officielle", - "badge_connect": "Connexion en 2 minutes", - "hero_title_1": "Conçu pour le e-commerce luxembourgeois", - "hero_title_2": "Le back-office que Letzshop ne vous donne pas", - "hero_subtitle": "Synchronisez les commandes, gérez les stocks, générez des factures avec la TVA correcte et possédez vos données clients. Tout en un seul endroit.", - "cta_trial": "Essai gratuit de {trial_days} jours", - "cta_how": "Voir comment ça marche", - "hero_note": "Aucune carte de crédit requise. Configuration en 5 minutes. Annulez à tout moment.", - "pain_title": "Ça vous dit quelque chose ?", - "pain_subtitle": "Ce sont les frustrations quotidiennes des vendeurs Letzshop", - "pain_manual": "Saisie manuelle des commandes", - "pain_manual_desc": "Copier-coller les commandes de Letzshop vers des tableurs. Chaque. Jour.", - "pain_inventory": "Chaos des stocks", - "pain_inventory_desc": "Le stock dans Letzshop ne correspond pas à la réalité. Les surventes arrivent.", - "pain_vat": "Mauvaises factures TVA", - "pain_vat_desc": "Les clients UE ont besoin de la TVA correcte. Votre comptable se plaint.", - "pain_customers": "Clients perdus", - "pain_customers_desc": "Letzshop possède vos données clients. Vous ne pouvez pas les recibler ou fidéliser.", - "how_title": "Comment ça marche", - "how_subtitle": "Du chaos au contrôle en 4 étapes", - "how_step1": "Connecter Letzshop", - "how_step1_desc": "Entrez vos identifiants API Letzshop. Fait en 2 minutes, aucune compétence technique requise.", - "how_step2": "Les commandes arrivent", - "how_step2_desc": "Les commandes se synchronisent automatiquement. Confirmez et ajoutez le suivi directement depuis Wizamart.", - "how_step3": "Générer des factures", - "how_step3_desc": "Un clic pour créer des factures PDF conformes avec la TVA correcte pour tout pays UE.", - "how_step4": "Développez votre entreprise", - "how_step4_desc": "Exportez les clients pour le marketing. Suivez les stocks. Concentrez-vous sur la vente, pas les tableurs.", - "features_title": "Tout ce dont un vendeur Letzshop a besoin", - "features_subtitle": "Les outils opérationnels que Letzshop ne fournit pas", - "cta_final_title": "Prêt à prendre le contrôle de votre entreprise Letzshop ?", - "cta_final_subtitle": "Rejoignez les vendeurs luxembourgeois qui ont arrêté de lutter contre les tableurs et ont commencé à développer leur entreprise.", - "cta_final_note": "Aucune carte de crédit requise. Configuration en 5 minutes. Toutes les fonctionnalités Pro pendant l'essai." + "menu": { + "content_management": "Gestion du contenu", + "shop_content": "Contenu du magasin", + "content_pages": "Pages de contenu", + "store_themes": "Thèmes du magasin", + "media_library": "Médiathèque" } - }, - "features": { - "cms_pages_limit": { - "name": "Pages CMS", - "description": "Nombre maximum de pages de contenu", - "unit": "pages" - }, - "cms_custom_pages_limit": { - "name": "Pages personnalisées", - "description": "Nombre maximum de pages personnalisées", - "unit": "pages" - }, - "cms_basic": { - "name": "CMS de base", - "description": "Fonctionnalités de gestion de contenu de base" - }, - "cms_seo": { - "name": "Outils SEO", - "description": "Outils d'optimisation pour les moteurs de recherche" - }, - "cms_scheduling": { - "name": "Planification de contenu", - "description": "Planifier du contenu pour publication future" - }, - "cms_templates": { - "name": "Modèles de pages", - "description": "Accès aux modèles de pages premium" - } - } } diff --git a/app/modules/cms/locales/lb.json b/app/modules/cms/locales/lb.json index 4b869548..c8dc2c06 100644 --- a/app/modules/cms/locales/lb.json +++ b/app/modules/cms/locales/lb.json @@ -1,231 +1,238 @@ { - "platform": { - "nav": { - "pricing": "Präisser", - "find_shop": "Fannt Äre Buttek", - "start_trial": "Gratis Testen", - "admin_login": "Admin Login", - "store_login": "Händler Login", - "toggle_menu": "Menü wiesselen", - "toggle_dark_mode": "Däischter Modus wiesselen" - }, - "hero": { - "badge": "{trial_days}-Deeg gratis Testversioun - Keng Kreditkaart néideg", - "title": "Liichtt OMS fir Letzshop Verkeefer", - "subtitle": "Bestellungsverwaltung, Lager an Rechnungsstellung fir de lëtzebuergeschen E-Commerce. Schluss mat Tabellen. Féiert Äert Geschäft.", - "cta_trial": "Gratis Testen", - "cta_find_shop": "Fannt Äre Letzshop Buttek" - }, - "pricing": { - "title": "Einfach, transparent Präisser", - "subtitle": "Wielt de Plang deen zu Ärer Firma passt. All Pläng enthalen eng {trial_days}-Deeg gratis Testversioun.", - "monthly": "Monatslech", - "annual": "Jäerlech", - "save_months": "Spuert 2 Méint!", - "most_popular": "AM BELÉIFSTEN", - "recommended": "EMPFOHLEN", - "contact_sales": "Kontaktéiert eis", - "start_trial": "Gratis Testen", - "per_month": "/Mount", - "per_year": "/Joer", - "custom": "Personnaliséiert", - "orders_per_month": "{count} Bestellungen/Mount", - "unlimited_orders": "Onbegrenzt Bestellungen", - "products_limit": "{count} Produkter", - "unlimited_products": "Onbegrenzt Produkter", - "team_members": "{count} Teammemberen", - "unlimited_team": "Onbegrenzt Team", - "letzshop_sync": "Letzshop Synchronisatioun", - "eu_vat_invoicing": "EU TVA Rechnungen", - "analytics_dashboard": "Analyse Dashboard", - "api_access": "API Zougang", - "multi_channel": "Multi-Channel Integratioun", - "products": "Produkter", - "team_member": "Teammember", - "unlimited": "Onbegrenzt", - "order_history": "Méint Bestellungshistorique", - "trial_note": "All Pläng enthalen eng {trial_days}-Deeg gratis Testversioun. Keng Kreditkaart néideg.", - "back_home": "Zréck op d'Haaptsäit" + "platform": { + "nav": { + "pricing": "Präisser", + "find_shop": "Fannt Äre Buttek", + "start_trial": "Gratis Testen", + "admin_login": "Admin Login", + "store_login": "Händler Login", + "toggle_menu": "Menü wiesselen", + "toggle_dark_mode": "Däischter Modus wiesselen" + }, + "hero": { + "badge": "{trial_days}-Deeg gratis Testversioun - Keng Kreditkaart néideg", + "title": "Liichtt OMS fir Letzshop Verkeefer", + "subtitle": "Bestellungsverwaltung, Lager an Rechnungsstellung fir de lëtzebuergeschen E-Commerce. Schluss mat Tabellen. Féiert Äert Geschäft.", + "cta_trial": "Gratis Testen", + "cta_find_shop": "Fannt Äre Letzshop Buttek" + }, + "pricing": { + "title": "Einfach, transparent Präisser", + "subtitle": "Wielt de Plang deen zu Ärer Firma passt. All Pläng enthalen eng {trial_days}-Deeg gratis Testversioun.", + "monthly": "Monatslech", + "annual": "Jäerlech", + "save_months": "Spuert 2 Méint!", + "most_popular": "AM BELÉIFSTEN", + "recommended": "EMPFOHLEN", + "contact_sales": "Kontaktéiert eis", + "start_trial": "Gratis Testen", + "per_month": "/Mount", + "per_year": "/Joer", + "custom": "Personnaliséiert", + "orders_per_month": "{count} Bestellungen/Mount", + "unlimited_orders": "Onbegrenzt Bestellungen", + "products_limit": "{count} Produkter", + "unlimited_products": "Onbegrenzt Produkter", + "team_members": "{count} Teammemberen", + "unlimited_team": "Onbegrenzt Team", + "letzshop_sync": "Letzshop Synchronisatioun", + "eu_vat_invoicing": "EU TVA Rechnungen", + "analytics_dashboard": "Analyse Dashboard", + "api_access": "API Zougang", + "multi_channel": "Multi-Channel Integratioun", + "products": "Produkter", + "team_member": "Teammember", + "unlimited": "Onbegrenzt", + "order_history": "Méint Bestellungshistorique", + "trial_note": "All Pläng enthalen eng {trial_days}-Deeg gratis Testversioun. Keng Kreditkaart néideg.", + "back_home": "Zréck op d'Haaptsäit" + }, + "features": { + "letzshop_sync": "Letzshop Synchronisatioun", + "inventory_basic": "Basis Lagerverwaltung", + "inventory_locations": "Lagerstanduerten", + "inventory_purchase_orders": "Bestellungen", + "invoice_lu": "Lëtzebuerg TVA Rechnungen", + "invoice_eu_vat": "EU TVA Rechnungen", + "invoice_bulk": "Massrechnungen", + "customer_view": "Clientelëscht", + "customer_export": "Client Export", + "analytics_dashboard": "Analyse Dashboard", + "accounting_export": "Comptabilitéits Export", + "api_access": "API Zougang", + "automation_rules": "Automatiséierungsreegelen", + "team_roles": "Team Rollen an Autorisatiounen", + "white_label": "White-Label Optioun", + "multi_store": "Multi-Händler Ënnerstëtzung", + "custom_integrations": "Personnaliséiert Integratiounen", + "sla_guarantee": "SLA Garantie", + "dedicated_support": "Dedizéierte Kontobetreier" + }, + "addons": { + "title": "Erweidert Är Plattform", + "subtitle": "Füügt Är Mark, professionell Email a verbessert Sécherheet derbäi.", + "per_year": "/Joer", + "per_month": "/Mount", + "custom_domain": "Eegen Domain", + "custom_domain_desc": "Benotzt Är eegen Domain (mengdomain.lu)", + "premium_ssl": "Premium SSL", + "premium_ssl_desc": "EV Zertifikat fir Vertrauensbadgen", + "email_package": "Email Package", + "email_package_desc": "Professionell Email Adressen" + }, + "find_shop": { + "title": "Fannt Äre Letzshop Buttek", + "subtitle": "Verkaaft Dir schonn op Letzshop? Gitt Är Buttek URL an fir unzefänken.", + "placeholder": "Gitt Är Letzshop URL an (z.B. letzshop.lu/vendors/mäi-buttek)", + "button": "Mäi Buttek fannen", + "claim_shop": "Dëse Buttek reklaméieren", + "already_claimed": "Scho reklaméiert", + "no_account": "Kee Letzshop Kont?", + "signup_letzshop": "Registréiert Iech éischt bei Letzshop", + "then_connect": ", dann kommt zréck fir Äre Buttek ze verbannen.", + "search_placeholder": "Letzshop URL oder Butteknumm aginn...", + "search_button": "Sichen", + "examples": "Beispiller:", + "claim_button": "Dëse Buttek reklaméieren a gratis testen", + "not_found": "Mir konnten keen Letzshop Buttek mat dëser URL fannen. Iwwerpréift w.e.g. a probéiert nach eng Kéier.", + "or_signup": "Oder registréiert Iech ouni Letzshop Verbindung", + "need_help": "Braucht Dir Hëllef?", + "no_account_yet": "Dir hutt nach keen Letzshop Kont? Keen Problem!", + "create_letzshop": "Letzshop Kont erstellen", + "signup_without": "Ouni Letzshop registréieren", + "looking_up": "Sich Äre Buttek...", + "found": "Fonnt:", + "claimed_badge": "Scho reklaméiert" + }, + "signup": { + "step_plan": "Plang wielen", + "step_shop": "Buttek reklaméieren", + "step_account": "Kont", + "step_payment": "Bezuelung", + "choose_plan": "Wielt Äre Plang", + "save_percent": "Spuert {percent}%", + "trial_info": "Mir sammelen Är Bezuelungsinformatiounen, awer Dir gitt eréischt nom Enn vun der Testperiod belaaschtt.", + "connect_shop": "Verbannt Äre Letzshop Buttek", + "connect_optional": "Optional: Verlinkt Äre Letzshop Kont fir Bestellungen automatesch ze synchroniséieren.", + "connect_continue": "Verbannen a weider", + "skip_step": "Dëse Schrëtt iwwersprangen", + "create_account": "Erstellt Äre Kont", + "first_name": "Virnumm", + "last_name": "Numm", + "merchant_name": "Firmennumm", + "email": "Email", + "password": "Passwuert", + "password_hint": "Mindestens 8 Zeechen", + "continue": "Weider", + "continue_payment": "Weider zur Bezuelung", + "back": "Zréck", + "add_payment": "Bezuelungsmethod derbäisetzen", + "no_charge_note": "Dir gitt eréischt nom Enn vun Ärer {trial_days}-Deeg Testperiod belaaschtt.", + "processing": "Veraarbechtung...", + "start_trial": "Gratis Testversioun starten", + "creating_account": "Erstellt Äre Kont..." + }, + "success": { + "title": "Wëllkomm bei Wizamart!", + "subtitle": "Äre Kont gouf erstallt an Är {trial_days}-Deeg gratis Testversioun huet ugefaang.", + "what_next": "Wat kënnt duerno?", + "step_connect": "Letzshop verbannen:", + "step_connect_desc": "Füügt Äre API Schlëssel derbäi fir Bestellungen automatesch ze synchroniséieren.", + "step_invoicing": "Rechnungsstellung astellen:", + "step_invoicing_desc": "Konfiguréiert Är Rechnungsastellungen fir Lëtzebuerger Konformitéit.", + "step_products": "Produkter importéieren:", + "step_products_desc": "Synchroniséiert Äre Produktkatalog vu Letzshop.", + "go_to_dashboard": "Zum Dashboard", + "login_dashboard": "Am Dashboard umellen", + "need_help": "Braucht Dir Hëllef beim Ufänken?", + "contact_support": "Kontaktéiert eist Support Team" + }, + "cta": { + "title": "Prett fir Är Bestellungen ze optiméieren?", + "subtitle": "Schléisst Iech Letzshop Händler un déi Wizamart fir hir Bestellungsverwaltung vertrauen. Fänkt haut Är {trial_days}-Deeg gratis Testversioun un.", + "button": "Gratis Testen" + }, + "footer": { + "tagline": "Liichtt OMS fir Letzshop Verkeefer. Verwaltt Bestellungen, Lager an Rechnungen.", + "quick_links": "Séier Linken", + "platform": "Plattform", + "contact": "Kontakt", + "copyright": "© {year} Wizamart. Gemaach fir de lëtzebuergeschen E-Commerce.", + "privacy": "Dateschutzrichtlinn", + "terms": "Notzungsbedéngungen", + "about": "Iwwer eis", + "faq": "FAQ", + "contact_us": "Kontaktéiert eis" + }, + "modern": { + "badge_integration": "Offiziell Integratioun", + "badge_connect": "An 2 Minutten verbannen", + "hero_title_1": "Gemaach fir de lëtzebuergeschen E-Commerce", + "hero_title_2": "De Back-Office dee Letzshop Iech net gëtt", + "hero_subtitle": "Synchroniséiert Bestellungen, verwaltt Lager, erstellt Rechnunge mat der korrekter TVA a besëtzt Är Clientsdaten. Alles un engem Plaz.", + "cta_trial": "{trial_days}-Deeg gratis testen", + "cta_how": "Kuckt wéi et funktionéiert", + "hero_note": "Keng Kreditkaart néideg. Setup an 5 Minutten. Ëmmer kënnegen.", + "pain_title": "Kënnt Iech dat bekannt vir?", + "pain_subtitle": "Dat sinn d'deeglech Frustratioune vu Letzshop Verkeefer", + "pain_manual": "Manuell Bestellungsagab", + "pain_manual_desc": "Bestellunge vu Letzshop an Tabelle kopéieren. All. Eenzelen. Dag.", + "pain_inventory": "Lager Chaos", + "pain_inventory_desc": "De Stock an Letzshop stëmmt net mat der Realitéit iwwereneen. Iwwerverkeef passéieren.", + "pain_vat": "Falsch TVA Rechnungen", + "pain_vat_desc": "EU Cliente brauchen déi korrekt TVA. Äre Comptabel beschwéiert sech.", + "pain_customers": "Verluer Clienten", + "pain_customers_desc": "Letzshop besëtzt Är Clientsdaten. Dir kënnt se net retargeten oder Loyalitéit opbauen.", + "how_title": "Wéi et funktionéiert", + "how_subtitle": "Vum Chaos zur Kontroll an 4 Schrëtt", + "how_step1": "Letzshop verbannen", + "how_step1_desc": "Gitt Är Letzshop API Zougangsdaten an. An 2 Minutte fäerdeg, keng technesch Kenntnisser néideg.", + "how_step2": "Bestellunge kommen eran", + "how_step2_desc": "Bestellunge ginn automatesch synchroniséiert. Confirméiert an Tracking direkt vu Wizamart derbäisetzen.", + "how_step3": "Rechnunge generéieren", + "how_step3_desc": "Ee Klick fir konform PDF Rechnunge mat korrekter TVA fir all EU Land ze erstellen.", + "how_step4": "Äert Geschäft ausbauen", + "how_step4_desc": "Exportéiert Clientë fir Marketing. Verfolgt Lagerstänn. Konzentréiert Iech op de Verkaf, net op Tabellen.", + "features_title": "Alles wat e Letzshop Verkeefer brauch", + "features_subtitle": "D'operativ Tools déi Letzshop net bitt", + "cta_final_title": "Prett fir d'Kontroll iwwer Äert Letzshop Geschäft ze iwwerhuelen?", + "cta_final_subtitle": "Schléisst Iech lëtzebuerger Händler un déi opgehalen hunn géint Tabellen ze kämpfen an ugefaang hunn hiert Geschäft auszbauen.", + "cta_final_note": "Keng Kreditkaart néideg. Setup an 5 Minutten. Voll Professional Fonctiounen während der Testperiod." + } }, "features": { - "letzshop_sync": "Letzshop Synchronisatioun", - "inventory_basic": "Basis Lagerverwaltung", - "inventory_locations": "Lagerstanduerten", - "inventory_purchase_orders": "Bestellungen", - "invoice_lu": "Lëtzebuerg TVA Rechnungen", - "invoice_eu_vat": "EU TVA Rechnungen", - "invoice_bulk": "Massrechnungen", - "customer_view": "Clientelëscht", - "customer_export": "Client Export", - "analytics_dashboard": "Analyse Dashboard", - "accounting_export": "Comptabilitéits Export", - "api_access": "API Zougang", - "automation_rules": "Automatiséierungsreegelen", - "team_roles": "Team Rollen an Autorisatiounen", - "white_label": "White-Label Optioun", - "multi_store": "Multi-Händler Ënnerstëtzung", - "custom_integrations": "Personnaliséiert Integratiounen", - "sla_guarantee": "SLA Garantie", - "dedicated_support": "Dedizéierte Kontobetreier" + "cms_pages_limit": { + "name": "CMS-Säiten", + "description": "Maximal Unzuel vun Inhaltssäiten", + "unit": "Säiten" + }, + "cms_custom_pages_limit": { + "name": "Eegen Säiten", + "description": "Maximal Unzuel vun individuell gestaltete Säiten", + "unit": "Säiten" + }, + "cms_basic": { + "name": "Basis-CMS", + "description": "Grond-Inhaltsverwalungsfunktiounen" + }, + "cms_seo": { + "name": "SEO-Tools", + "description": "Sichmaschinnenoptiméierungstools" + }, + "cms_scheduling": { + "name": "Inhaltsplanung", + "description": "Inhalter fir zukünfteg Verëffentlechung plangen" + }, + "cms_templates": { + "name": "Säitevirlagen", + "description": "Zougang zu Premium-Säitevirlagen" + } }, - "addons": { - "title": "Erweidert Är Plattform", - "subtitle": "Füügt Är Mark, professionell Email a verbessert Sécherheet derbäi.", - "per_year": "/Joer", - "per_month": "/Mount", - "custom_domain": "Eegen Domain", - "custom_domain_desc": "Benotzt Är eegen Domain (mengdomain.lu)", - "premium_ssl": "Premium SSL", - "premium_ssl_desc": "EV Zertifikat fir Vertrauensbadgen", - "email_package": "Email Package", - "email_package_desc": "Professionell Email Adressen" - }, - "find_shop": { - "title": "Fannt Äre Letzshop Buttek", - "subtitle": "Verkaaft Dir schonn op Letzshop? Gitt Är Buttek URL an fir unzefänken.", - "placeholder": "Gitt Är Letzshop URL an (z.B. letzshop.lu/vendors/mäi-buttek)", - "button": "Mäi Buttek fannen", - "claim_shop": "Dëse Buttek reklaméieren", - "already_claimed": "Scho reklaméiert", - "no_account": "Kee Letzshop Kont?", - "signup_letzshop": "Registréiert Iech éischt bei Letzshop", - "then_connect": ", dann kommt zréck fir Äre Buttek ze verbannen.", - "search_placeholder": "Letzshop URL oder Butteknumm aginn...", - "search_button": "Sichen", - "examples": "Beispiller:", - "claim_button": "Dëse Buttek reklaméieren a gratis testen", - "not_found": "Mir konnten keen Letzshop Buttek mat dëser URL fannen. Iwwerpréift w.e.g. a probéiert nach eng Kéier.", - "or_signup": "Oder registréiert Iech ouni Letzshop Verbindung", - "need_help": "Braucht Dir Hëllef?", - "no_account_yet": "Dir hutt nach keen Letzshop Kont? Keen Problem!", - "create_letzshop": "Letzshop Kont erstellen", - "signup_without": "Ouni Letzshop registréieren", - "looking_up": "Sich Äre Buttek...", - "found": "Fonnt:", - "claimed_badge": "Scho reklaméiert" - }, - "signup": { - "step_plan": "Plang wielen", - "step_shop": "Buttek reklaméieren", - "step_account": "Kont", - "step_payment": "Bezuelung", - "choose_plan": "Wielt Äre Plang", - "save_percent": "Spuert {percent}%", - "trial_info": "Mir sammelen Är Bezuelungsinformatiounen, awer Dir gitt eréischt nom Enn vun der Testperiod belaaschtt.", - "connect_shop": "Verbannt Äre Letzshop Buttek", - "connect_optional": "Optional: Verlinkt Äre Letzshop Kont fir Bestellungen automatesch ze synchroniséieren.", - "connect_continue": "Verbannen a weider", - "skip_step": "Dëse Schrëtt iwwersprangen", - "create_account": "Erstellt Äre Kont", - "first_name": "Virnumm", - "last_name": "Numm", - "merchant_name": "Firmennumm", - "email": "Email", - "password": "Passwuert", - "password_hint": "Mindestens 8 Zeechen", - "continue": "Weider", - "continue_payment": "Weider zur Bezuelung", - "back": "Zréck", - "add_payment": "Bezuelungsmethod derbäisetzen", - "no_charge_note": "Dir gitt eréischt nom Enn vun Ärer {trial_days}-Deeg Testperiod belaaschtt.", - "processing": "Veraarbechtung...", - "start_trial": "Gratis Testversioun starten", - "creating_account": "Erstellt Äre Kont..." - }, - "success": { - "title": "Wëllkomm bei Wizamart!", - "subtitle": "Äre Kont gouf erstallt an Är {trial_days}-Deeg gratis Testversioun huet ugefaang.", - "what_next": "Wat kënnt duerno?", - "step_connect": "Letzshop verbannen:", - "step_connect_desc": "Füügt Äre API Schlëssel derbäi fir Bestellungen automatesch ze synchroniséieren.", - "step_invoicing": "Rechnungsstellung astellen:", - "step_invoicing_desc": "Konfiguréiert Är Rechnungsastellungen fir Lëtzebuerger Konformitéit.", - "step_products": "Produkter importéieren:", - "step_products_desc": "Synchroniséiert Äre Produktkatalog vu Letzshop.", - "go_to_dashboard": "Zum Dashboard", - "login_dashboard": "Am Dashboard umellen", - "need_help": "Braucht Dir Hëllef beim Ufänken?", - "contact_support": "Kontaktéiert eist Support Team" - }, - "cta": { - "title": "Prett fir Är Bestellungen ze optiméieren?", - "subtitle": "Schléisst Iech Letzshop Händler un déi Wizamart fir hir Bestellungsverwaltung vertrauen. Fänkt haut Är {trial_days}-Deeg gratis Testversioun un.", - "button": "Gratis Testen" - }, - "footer": { - "tagline": "Liichtt OMS fir Letzshop Verkeefer. Verwaltt Bestellungen, Lager an Rechnungen.", - "quick_links": "Séier Linken", - "platform": "Plattform", - "contact": "Kontakt", - "copyright": "© {year} Wizamart. Gemaach fir de lëtzebuergeschen E-Commerce.", - "privacy": "Dateschutzrichtlinn", - "terms": "Notzungsbedéngungen", - "about": "Iwwer eis", - "faq": "FAQ", - "contact_us": "Kontaktéiert eis" - }, - "modern": { - "badge_integration": "Offiziell Integratioun", - "badge_connect": "An 2 Minutten verbannen", - "hero_title_1": "Gemaach fir de lëtzebuergeschen E-Commerce", - "hero_title_2": "De Back-Office dee Letzshop Iech net gëtt", - "hero_subtitle": "Synchroniséiert Bestellungen, verwaltt Lager, erstellt Rechnunge mat der korrekter TVA a besëtzt Är Clientsdaten. Alles un engem Plaz.", - "cta_trial": "{trial_days}-Deeg gratis testen", - "cta_how": "Kuckt wéi et funktionéiert", - "hero_note": "Keng Kreditkaart néideg. Setup an 5 Minutten. Ëmmer kënnegen.", - "pain_title": "Kënnt Iech dat bekannt vir?", - "pain_subtitle": "Dat sinn d'deeglech Frustratioune vu Letzshop Verkeefer", - "pain_manual": "Manuell Bestellungsagab", - "pain_manual_desc": "Bestellunge vu Letzshop an Tabelle kopéieren. All. Eenzelen. Dag.", - "pain_inventory": "Lager Chaos", - "pain_inventory_desc": "De Stock an Letzshop stëmmt net mat der Realitéit iwwereneen. Iwwerverkeef passéieren.", - "pain_vat": "Falsch TVA Rechnungen", - "pain_vat_desc": "EU Cliente brauchen déi korrekt TVA. Äre Comptabel beschwéiert sech.", - "pain_customers": "Verluer Clienten", - "pain_customers_desc": "Letzshop besëtzt Är Clientsdaten. Dir kënnt se net retargeten oder Loyalitéit opbauen.", - "how_title": "Wéi et funktionéiert", - "how_subtitle": "Vum Chaos zur Kontroll an 4 Schrëtt", - "how_step1": "Letzshop verbannen", - "how_step1_desc": "Gitt Är Letzshop API Zougangsdaten an. An 2 Minutte fäerdeg, keng technesch Kenntnisser néideg.", - "how_step2": "Bestellunge kommen eran", - "how_step2_desc": "Bestellunge ginn automatesch synchroniséiert. Confirméiert an Tracking direkt vu Wizamart derbäisetzen.", - "how_step3": "Rechnunge generéieren", - "how_step3_desc": "Ee Klick fir konform PDF Rechnunge mat korrekter TVA fir all EU Land ze erstellen.", - "how_step4": "Äert Geschäft ausbauen", - "how_step4_desc": "Exportéiert Clientë fir Marketing. Verfolgt Lagerstänn. Konzentréiert Iech op de Verkaf, net op Tabellen.", - "features_title": "Alles wat e Letzshop Verkeefer brauch", - "features_subtitle": "D'operativ Tools déi Letzshop net bitt", - "cta_final_title": "Prett fir d'Kontroll iwwer Äert Letzshop Geschäft ze iwwerhuelen?", - "cta_final_subtitle": "Schléisst Iech lëtzebuerger Händler un déi opgehalen hunn géint Tabellen ze kämpfen an ugefaang hunn hiert Geschäft auszbauen.", - "cta_final_note": "Keng Kreditkaart néideg. Setup an 5 Minutten. Voll Professional Fonctiounen während der Testperiod." + "menu": { + "content_management": "Inhaltsverwaltung", + "shop_content": "Buttek-Inhalter", + "content_pages": "Inhaltsäiten", + "store_themes": "Buttek-Themen", + "media_library": "Mediathéik" } - }, - "features": { - "cms_pages_limit": { - "name": "CMS-Säiten", - "description": "Maximal Unzuel vun Inhaltssäiten", - "unit": "Säiten" - }, - "cms_custom_pages_limit": { - "name": "Eegen Säiten", - "description": "Maximal Unzuel vun individuell gestaltete Säiten", - "unit": "Säiten" - }, - "cms_basic": { - "name": "Basis-CMS", - "description": "Grond-Inhaltsverwalungsfunktiounen" - }, - "cms_seo": { - "name": "SEO-Tools", - "description": "Sichmaschinnenoptiméierungstools" - }, - "cms_scheduling": { - "name": "Inhaltsplanung", - "description": "Inhalter fir zukünfteg Verëffentlechung plangen" - }, - "cms_templates": { - "name": "Säitevirlagen", - "description": "Zougang zu Premium-Säitevirlagen" - } - } } diff --git a/app/modules/core/locales/de.json b/app/modules/core/locales/de.json index eeb12ee0..048886c2 100644 --- a/app/modules/core/locales/de.json +++ b/app/modules/core/locales/de.json @@ -1,71 +1,80 @@ { - "dashboard": { - "title": "Dashboard", - "welcome": "Willkommen zurück", - "overview": "Übersicht", - "quick_stats": "Schnellstatistiken", - "recent_activity": "Letzte Aktivitäten", - "total_products": "Produkte gesamt", - "total_orders": "Bestellungen gesamt", - "total_customers": "Kunden gesamt", - "total_revenue": "Gesamtumsatz", - "active_products": "Aktive Produkte", - "pending_orders": "Ausstehende Bestellungen", - "new_customers": "Neue Kunden", - "today": "Heute", - "this_week": "Diese Woche", - "this_month": "Dieser Monat", - "this_year": "Dieses Jahr", - "error_loading": "Fehler beim Laden des Dashboards", - "no_data": "Keine Daten verfügbar" - }, - "settings": { - "title": "Einstellungen", - "general": "Allgemein", - "store": "Shop", - "store_name": "Shop-Name", - "store_description": "Shop-Beschreibung", - "contact_email": "Kontakt-E-Mail", - "contact_phone": "Kontakttelefon", - "business_address": "Geschäftsadresse", - "tax_number": "Steuernummer", - "currency": "Währung", - "timezone": "Zeitzone", - "language": "Sprache", - "language_settings": "Spracheinstellungen", - "default_language": "Standardsprache", - "dashboard_language": "Dashboard-Sprache", - "storefront_language": "Shop-Sprache", - "enabled_languages": "Aktivierte Sprachen", - "notifications": "Benachrichtigungen", - "email_notifications": "E-Mail-Benachrichtigungen", - "integrations": "Integrationen", - "api_keys": "API-Schlüssel", - "webhooks": "Webhooks", - "save_settings": "Einstellungen speichern", - "settings_saved": "Einstellungen erfolgreich gespeichert" - }, - "profile": { - "title": "Profil", - "my_profile": "Mein Profil", - "edit_profile": "Profil bearbeiten", - "personal_info": "Persönliche Informationen", - "first_name": "Vorname", - "last_name": "Nachname", - "email": "E-Mail", - "phone": "Telefon", - "avatar": "Profilbild", - "change_avatar": "Profilbild ändern", - "security": "Sicherheit", - "two_factor": "Zwei-Faktor-Authentifizierung", - "sessions": "Aktive Sitzungen", - "preferences": "Präferenzen", - "language_preference": "Sprachpräferenz", - "save_profile": "Profil speichern", - "profile_updated": "Profil erfolgreich aktualisiert" - }, - "messages": { - "failed_to_load_dashboard_data": "Failed to load dashboard data", - "dashboard_refreshed": "Dashboard refreshed" - } + "dashboard": { + "title": "Dashboard", + "welcome": "Willkommen zurück", + "overview": "Übersicht", + "quick_stats": "Schnellstatistiken", + "recent_activity": "Letzte Aktivitäten", + "total_products": "Produkte gesamt", + "total_orders": "Bestellungen gesamt", + "total_customers": "Kunden gesamt", + "total_revenue": "Gesamtumsatz", + "active_products": "Aktive Produkte", + "pending_orders": "Ausstehende Bestellungen", + "new_customers": "Neue Kunden", + "today": "Heute", + "this_week": "Diese Woche", + "this_month": "Dieser Monat", + "this_year": "Dieses Jahr", + "error_loading": "Fehler beim Laden des Dashboards", + "no_data": "Keine Daten verfügbar" + }, + "settings": { + "title": "Einstellungen", + "general": "Allgemein", + "store": "Shop", + "store_name": "Shop-Name", + "store_description": "Shop-Beschreibung", + "contact_email": "Kontakt-E-Mail", + "contact_phone": "Kontakttelefon", + "business_address": "Geschäftsadresse", + "tax_number": "Steuernummer", + "currency": "Währung", + "timezone": "Zeitzone", + "language": "Sprache", + "language_settings": "Spracheinstellungen", + "default_language": "Standardsprache", + "dashboard_language": "Dashboard-Sprache", + "storefront_language": "Shop-Sprache", + "enabled_languages": "Aktivierte Sprachen", + "notifications": "Benachrichtigungen", + "email_notifications": "E-Mail-Benachrichtigungen", + "integrations": "Integrationen", + "api_keys": "API-Schlüssel", + "webhooks": "Webhooks", + "save_settings": "Einstellungen speichern", + "settings_saved": "Einstellungen erfolgreich gespeichert" + }, + "profile": { + "title": "Profil", + "my_profile": "Mein Profil", + "edit_profile": "Profil bearbeiten", + "personal_info": "Persönliche Informationen", + "first_name": "Vorname", + "last_name": "Nachname", + "email": "E-Mail", + "phone": "Telefon", + "avatar": "Profilbild", + "change_avatar": "Profilbild ändern", + "security": "Sicherheit", + "two_factor": "Zwei-Faktor-Authentifizierung", + "sessions": "Aktive Sitzungen", + "preferences": "Präferenzen", + "language_preference": "Sprachpräferenz", + "save_profile": "Profil speichern", + "profile_updated": "Profil erfolgreich aktualisiert" + }, + "messages": { + "failed_to_load_dashboard_data": "Failed to load dashboard data", + "dashboard_refreshed": "Dashboard refreshed" + }, + "menu": { + "dashboard": "Dashboard", + "platform_settings": "Plattform-Einstellungen", + "general": "Allgemein", + "my_menu": "Mein Menü", + "account_settings": "Kontoeinstellungen", + "profile": "Profil", + "settings": "Einstellungen" + } } diff --git a/app/modules/core/locales/en.json b/app/modules/core/locales/en.json index 3b07122b..53b993e7 100644 --- a/app/modules/core/locales/en.json +++ b/app/modules/core/locales/en.json @@ -1,79 +1,88 @@ { - "dashboard": { - "title": "Dashboard", - "welcome": "Welcome back", - "overview": "Overview", - "quick_stats": "Quick Stats", - "recent_activity": "Recent Activity", - "total_products": "Total Products", - "total_orders": "Total Orders", - "total_customers": "Total Customers", - "total_revenue": "Total Revenue", - "active_products": "Active Products", - "pending_orders": "Pending Orders", - "new_customers": "New Customers", - "today": "Today", - "this_week": "This Week", - "this_month": "This Month", - "this_year": "This Year", - "error_loading": "Error loading dashboard", - "no_data": "No data available" - }, - "settings": { - "title": "Settings", - "general": "General", - "store": "Store", - "store_name": "Store Name", - "store_description": "Store Description", - "contact_email": "Contact Email", - "contact_phone": "Contact Phone", - "business_address": "Business Address", - "tax_number": "Tax Number", - "currency": "Currency", - "timezone": "Timezone", - "language": "Language", - "language_settings": "Language Settings", - "default_language": "Default Language", - "dashboard_language": "Dashboard Language", - "storefront_language": "Storefront Language", - "enabled_languages": "Enabled Languages", - "notifications": "Notifications", - "email_notifications": "Email Notifications", - "integrations": "Integrations", - "api_keys": "API Keys", - "webhooks": "Webhooks", - "save_settings": "Save Settings", - "settings_saved": "Settings saved successfully" - }, - "profile": { - "title": "Profile", - "my_profile": "My Profile", - "edit_profile": "Edit Profile", - "personal_info": "Personal Information", - "first_name": "First Name", - "last_name": "Last Name", - "email": "Email", - "phone": "Phone", - "avatar": "Avatar", - "change_avatar": "Change Avatar", - "security": "Security", - "two_factor": "Two-Factor Authentication", - "sessions": "Active Sessions", - "preferences": "Preferences", - "language_preference": "Language Preference", - "save_profile": "Save Profile", - "profile_updated": "Profile updated successfully" - }, - "messages": { - "failed_to_load_dashboard_data": "Failed to load dashboard data", - "dashboard_refreshed": "Dashboard refreshed", - "item_removed_from_cart": "Item removed from cart", - "cart_cleared": "Cart cleared" - }, - "confirmations": { - "show_all_menu_items": "This will show all menu items. Continue?", - "hide_all_menu_items": "This will hide all menu items (except mandatory ones). You can then enable the ones you want. Continue?", - "reset_email_settings": "This will reset all email settings to use .env defaults. Continue?", - "cleanup_logs": "This will delete all logs older than {days} days. Continue?" - } + "dashboard": { + "title": "Dashboard", + "welcome": "Welcome back", + "overview": "Overview", + "quick_stats": "Quick Stats", + "recent_activity": "Recent Activity", + "total_products": "Total Products", + "total_orders": "Total Orders", + "total_customers": "Total Customers", + "total_revenue": "Total Revenue", + "active_products": "Active Products", + "pending_orders": "Pending Orders", + "new_customers": "New Customers", + "today": "Today", + "this_week": "This Week", + "this_month": "This Month", + "this_year": "This Year", + "error_loading": "Error loading dashboard", + "no_data": "No data available" + }, + "settings": { + "title": "Settings", + "general": "General", + "store": "Store", + "store_name": "Store Name", + "store_description": "Store Description", + "contact_email": "Contact Email", + "contact_phone": "Contact Phone", + "business_address": "Business Address", + "tax_number": "Tax Number", + "currency": "Currency", + "timezone": "Timezone", + "language": "Language", + "language_settings": "Language Settings", + "default_language": "Default Language", + "dashboard_language": "Dashboard Language", + "storefront_language": "Storefront Language", + "enabled_languages": "Enabled Languages", + "notifications": "Notifications", + "email_notifications": "Email Notifications", + "integrations": "Integrations", + "api_keys": "API Keys", + "webhooks": "Webhooks", + "save_settings": "Save Settings", + "settings_saved": "Settings saved successfully" + }, + "profile": { + "title": "Profile", + "my_profile": "My Profile", + "edit_profile": "Edit Profile", + "personal_info": "Personal Information", + "first_name": "First Name", + "last_name": "Last Name", + "email": "Email", + "phone": "Phone", + "avatar": "Avatar", + "change_avatar": "Change Avatar", + "security": "Security", + "two_factor": "Two-Factor Authentication", + "sessions": "Active Sessions", + "preferences": "Preferences", + "language_preference": "Language Preference", + "save_profile": "Save Profile", + "profile_updated": "Profile updated successfully" + }, + "messages": { + "failed_to_load_dashboard_data": "Failed to load dashboard data", + "dashboard_refreshed": "Dashboard refreshed", + "item_removed_from_cart": "Item removed from cart", + "cart_cleared": "Cart cleared" + }, + "confirmations": { + "show_all_menu_items": "This will show all menu items. Continue?", + "hide_all_menu_items": "This will hide all menu items (except mandatory ones). You can then enable the ones you want. Continue?", + "reset_email_settings": "This will reset all email settings to use .env defaults. Continue?", + "cleanup_logs": "This will delete all logs older than {days} days. Continue?" + }, + "menu": { + "dashboard": "Dashboard", + "platform_settings": "Platform Settings", + "general": "General", + "my_menu": "My Menu", + "account_settings": "Account Settings", + "profile": "Profile", + "settings": "Settings" + } } diff --git a/app/modules/core/locales/fr.json b/app/modules/core/locales/fr.json index 3301d5ad..cafa6e65 100644 --- a/app/modules/core/locales/fr.json +++ b/app/modules/core/locales/fr.json @@ -1,71 +1,80 @@ { - "dashboard": { - "title": "Tableau de bord", - "welcome": "Bienvenue", - "overview": "Vue d'ensemble", - "quick_stats": "Statistiques rapides", - "recent_activity": "Activité récente", - "total_products": "Total des produits", - "total_orders": "Total des commandes", - "total_customers": "Total des clients", - "total_revenue": "Chiffre d'affaires total", - "active_products": "Produits actifs", - "pending_orders": "Commandes en attente", - "new_customers": "Nouveaux clients", - "today": "Aujourd'hui", - "this_week": "Cette semaine", - "this_month": "Ce mois", - "this_year": "Cette année", - "error_loading": "Erreur lors du chargement du tableau de bord", - "no_data": "Aucune donnée disponible" - }, - "settings": { - "title": "Paramètres", - "general": "Général", - "store": "Boutique", - "store_name": "Nom de la boutique", - "store_description": "Description de la boutique", - "contact_email": "E-mail de contact", - "contact_phone": "Téléphone de contact", - "business_address": "Adresse professionnelle", - "tax_number": "Numéro de TVA", - "currency": "Devise", - "timezone": "Fuseau horaire", - "language": "Langue", - "language_settings": "Paramètres de langue", - "default_language": "Langue par défaut", - "dashboard_language": "Langue du tableau de bord", - "storefront_language": "Langue de la boutique", - "enabled_languages": "Langues activées", - "notifications": "Notifications", - "email_notifications": "Notifications par e-mail", - "integrations": "Intégrations", - "api_keys": "Clés API", - "webhooks": "Webhooks", - "save_settings": "Enregistrer les paramètres", - "settings_saved": "Paramètres enregistrés avec succès" - }, - "profile": { - "title": "Profil", - "my_profile": "Mon profil", - "edit_profile": "Modifier le profil", - "personal_info": "Informations personnelles", - "first_name": "Prénom", - "last_name": "Nom", - "email": "E-mail", - "phone": "Téléphone", - "avatar": "Avatar", - "change_avatar": "Changer l'avatar", - "security": "Sécurité", - "two_factor": "Authentification à deux facteurs", - "sessions": "Sessions actives", - "preferences": "Préférences", - "language_preference": "Préférence de langue", - "save_profile": "Enregistrer le profil", - "profile_updated": "Profil mis à jour avec succès" - }, - "messages": { - "failed_to_load_dashboard_data": "Failed to load dashboard data", - "dashboard_refreshed": "Dashboard refreshed" - } + "dashboard": { + "title": "Tableau de bord", + "welcome": "Bienvenue", + "overview": "Vue d'ensemble", + "quick_stats": "Statistiques rapides", + "recent_activity": "Activité récente", + "total_products": "Total des produits", + "total_orders": "Total des commandes", + "total_customers": "Total des clients", + "total_revenue": "Chiffre d'affaires total", + "active_products": "Produits actifs", + "pending_orders": "Commandes en attente", + "new_customers": "Nouveaux clients", + "today": "Aujourd'hui", + "this_week": "Cette semaine", + "this_month": "Ce mois", + "this_year": "Cette année", + "error_loading": "Erreur lors du chargement du tableau de bord", + "no_data": "Aucune donnée disponible" + }, + "settings": { + "title": "Paramètres", + "general": "Général", + "store": "Boutique", + "store_name": "Nom de la boutique", + "store_description": "Description de la boutique", + "contact_email": "E-mail de contact", + "contact_phone": "Téléphone de contact", + "business_address": "Adresse professionnelle", + "tax_number": "Numéro de TVA", + "currency": "Devise", + "timezone": "Fuseau horaire", + "language": "Langue", + "language_settings": "Paramètres de langue", + "default_language": "Langue par défaut", + "dashboard_language": "Langue du tableau de bord", + "storefront_language": "Langue de la boutique", + "enabled_languages": "Langues activées", + "notifications": "Notifications", + "email_notifications": "Notifications par e-mail", + "integrations": "Intégrations", + "api_keys": "Clés API", + "webhooks": "Webhooks", + "save_settings": "Enregistrer les paramètres", + "settings_saved": "Paramètres enregistrés avec succès" + }, + "profile": { + "title": "Profil", + "my_profile": "Mon profil", + "edit_profile": "Modifier le profil", + "personal_info": "Informations personnelles", + "first_name": "Prénom", + "last_name": "Nom", + "email": "E-mail", + "phone": "Téléphone", + "avatar": "Avatar", + "change_avatar": "Changer l'avatar", + "security": "Sécurité", + "two_factor": "Authentification à deux facteurs", + "sessions": "Sessions actives", + "preferences": "Préférences", + "language_preference": "Préférence de langue", + "save_profile": "Enregistrer le profil", + "profile_updated": "Profil mis à jour avec succès" + }, + "messages": { + "failed_to_load_dashboard_data": "Failed to load dashboard data", + "dashboard_refreshed": "Dashboard refreshed" + }, + "menu": { + "dashboard": "Tableau de bord", + "platform_settings": "Paramètres de la plateforme", + "general": "Général", + "my_menu": "Mon menu", + "account_settings": "Paramètres du compte", + "profile": "Profil", + "settings": "Paramètres" + } } diff --git a/app/modules/core/locales/lb.json b/app/modules/core/locales/lb.json index 7a93ef90..9beccdda 100644 --- a/app/modules/core/locales/lb.json +++ b/app/modules/core/locales/lb.json @@ -1,71 +1,80 @@ { - "dashboard": { - "title": "Dashboard", - "welcome": "Wëllkomm zréck", - "overview": "Iwwersiicht", - "quick_stats": "Séier Statistiken", - "recent_activity": "Rezent Aktivitéit", - "total_products": "Produkter insgesamt", - "total_orders": "Bestellungen insgesamt", - "total_customers": "Clienten insgesamt", - "total_revenue": "Ëmsaz insgesamt", - "active_products": "Aktiv Produkter", - "pending_orders": "Aussteesend Bestellungen", - "new_customers": "Nei Clienten", - "today": "Haut", - "this_week": "Dës Woch", - "this_month": "Dëse Mount", - "this_year": "Dëst Joer", - "error_loading": "Feeler beim Lueden vum Dashboard", - "no_data": "Keng Donnéeën disponibel" - }, - "settings": { - "title": "Astellungen", - "general": "Allgemeng", - "store": "Buttek", - "store_name": "Butteknumm", - "store_description": "Buttekbeschreiwung", - "contact_email": "Kontakt E-Mail", - "contact_phone": "Kontakt Telefon", - "business_address": "Geschäftsadress", - "tax_number": "Steiernummer", - "currency": "Wärung", - "timezone": "Zäitzon", - "language": "Sprooch", - "language_settings": "Sproochastellungen", - "default_language": "Standard Sprooch", - "dashboard_language": "Dashboard Sprooch", - "storefront_language": "Buttek Sprooch", - "enabled_languages": "Aktivéiert Sproochen", - "notifications": "Notifikatiounen", - "email_notifications": "E-Mail Notifikatiounen", - "integrations": "Integratiounen", - "api_keys": "API Schlësselen", - "webhooks": "Webhooks", - "save_settings": "Astellunge späicheren", - "settings_saved": "Astellungen erfollegräich gespäichert" - }, - "profile": { - "title": "Profil", - "my_profile": "Mäi Profil", - "edit_profile": "Profil änneren", - "personal_info": "Perséinlech Informatiounen", - "first_name": "Virnumm", - "last_name": "Nonumm", - "email": "E-Mail", - "phone": "Telefon", - "avatar": "Avatar", - "change_avatar": "Avatar änneren", - "security": "Sécherheet", - "two_factor": "Zwee-Faktor Authentifikatioun", - "sessions": "Aktiv Sessiounen", - "preferences": "Astellungen", - "language_preference": "Sproochpräferenz", - "save_profile": "Profil späicheren", - "profile_updated": "Profil erfollegräich aktualiséiert" - }, - "messages": { - "failed_to_load_dashboard_data": "Failed to load dashboard data", - "dashboard_refreshed": "Dashboard refreshed" - } + "dashboard": { + "title": "Dashboard", + "welcome": "Wëllkomm zréck", + "overview": "Iwwersiicht", + "quick_stats": "Séier Statistiken", + "recent_activity": "Rezent Aktivitéit", + "total_products": "Produkter insgesamt", + "total_orders": "Bestellungen insgesamt", + "total_customers": "Clienten insgesamt", + "total_revenue": "Ëmsaz insgesamt", + "active_products": "Aktiv Produkter", + "pending_orders": "Aussteesend Bestellungen", + "new_customers": "Nei Clienten", + "today": "Haut", + "this_week": "Dës Woch", + "this_month": "Dëse Mount", + "this_year": "Dëst Joer", + "error_loading": "Feeler beim Lueden vum Dashboard", + "no_data": "Keng Donnéeën disponibel" + }, + "settings": { + "title": "Astellungen", + "general": "Allgemeng", + "store": "Buttek", + "store_name": "Butteknumm", + "store_description": "Buttekbeschreiwung", + "contact_email": "Kontakt E-Mail", + "contact_phone": "Kontakt Telefon", + "business_address": "Geschäftsadress", + "tax_number": "Steiernummer", + "currency": "Wärung", + "timezone": "Zäitzon", + "language": "Sprooch", + "language_settings": "Sproochastellungen", + "default_language": "Standard Sprooch", + "dashboard_language": "Dashboard Sprooch", + "storefront_language": "Buttek Sprooch", + "enabled_languages": "Aktivéiert Sproochen", + "notifications": "Notifikatiounen", + "email_notifications": "E-Mail Notifikatiounen", + "integrations": "Integratiounen", + "api_keys": "API Schlësselen", + "webhooks": "Webhooks", + "save_settings": "Astellunge späicheren", + "settings_saved": "Astellungen erfollegräich gespäichert" + }, + "profile": { + "title": "Profil", + "my_profile": "Mäi Profil", + "edit_profile": "Profil änneren", + "personal_info": "Perséinlech Informatiounen", + "first_name": "Virnumm", + "last_name": "Nonumm", + "email": "E-Mail", + "phone": "Telefon", + "avatar": "Avatar", + "change_avatar": "Avatar änneren", + "security": "Sécherheet", + "two_factor": "Zwee-Faktor Authentifikatioun", + "sessions": "Aktiv Sessiounen", + "preferences": "Astellungen", + "language_preference": "Sproochpräferenz", + "save_profile": "Profil späicheren", + "profile_updated": "Profil erfollegräich aktualiséiert" + }, + "messages": { + "failed_to_load_dashboard_data": "Failed to load dashboard data", + "dashboard_refreshed": "Dashboard refreshed" + }, + "menu": { + "dashboard": "Dashboard", + "platform_settings": "Plattform-Astellungen", + "general": "Allgemeng", + "my_menu": "Mäi Menü", + "account_settings": "Kont-Astellungen", + "profile": "Profil", + "settings": "Astellungen" + } } diff --git a/app/modules/core/routes/api/admin_menu_config.py b/app/modules/core/routes/api/admin_menu_config.py index 1cd49da5..ef067a7c 100644 --- a/app/modules/core/routes/api/admin_menu_config.py +++ b/app/modules/core/routes/api/admin_menu_config.py @@ -18,7 +18,7 @@ Menu rendering endpoints require authenticated admin/store access. import logging from typing import Any -from fastapi import APIRouter, Depends, Path, Query +from fastapi import APIRouter, Depends, Path, Query, Request from pydantic import BaseModel, Field from sqlalchemy.orm import Session @@ -180,6 +180,7 @@ def _build_menu_config_response( @router.get("/platforms/{platform_id}", response_model=MenuConfigResponse) async def get_platform_menu_config( + request: Request, platform_id: int = Path(..., description="Platform ID"), frontend_type: FrontendType = Query( FrontendType.ADMIN, description="Frontend type (admin or store)" @@ -203,8 +204,8 @@ async def get_platform_menu_config( f"for platform {platform.code} ({frontend_type.value})" ) - # Use user's preferred language, falling back to default - language = current_user.preferred_language or DEFAULT_LANGUAGE + # Use user's preferred language, falling back to middleware-resolved language + language = current_user.preferred_language or getattr(request.state, "language", "en") return _build_menu_config_response( items, frontend_type, language=language, platform_id=platform_id @@ -317,6 +318,7 @@ async def reset_platform_menu_config( @router.get("/user", response_model=MenuConfigResponse) async def get_user_menu_config( + request: Request, db: Session = Depends(get_db), current_user: UserContext = Depends(get_current_super_admin), ): @@ -331,8 +333,8 @@ async def get_user_menu_config( f"[MENU_CONFIG] Super admin {current_user.email} fetched their personal menu config" ) - # Use user's preferred language, falling back to default - language = current_user.preferred_language or DEFAULT_LANGUAGE + # Use user's preferred language, falling back to middleware-resolved language + language = current_user.preferred_language or getattr(request.state, "language", "en") return _build_menu_config_response( items, FrontendType.ADMIN, language=language, user_id=current_user.id @@ -442,6 +444,7 @@ async def show_all_platform_menu_config( @router.get("/render/admin", response_model=RenderedMenuResponse) async def get_rendered_admin_menu( + request: Request, db: Session = Depends(get_db), current_user: UserContext = Depends(get_current_admin_from_cookie_or_header), ): @@ -482,8 +485,8 @@ async def get_rendered_admin_menu( is_super_admin=False, ) - # Use user's preferred language, falling back to default - language = current_user.preferred_language or DEFAULT_LANGUAGE + # Use user's preferred language, falling back to middleware-resolved language + language = current_user.preferred_language or getattr(request.state, "language", "en") # Translate section and item labels sections = [] diff --git a/app/modules/customers/locales/de.json b/app/modules/customers/locales/de.json index 8d26d6f5..0a7b591b 100644 --- a/app/modules/customers/locales/de.json +++ b/app/modules/customers/locales/de.json @@ -1,35 +1,41 @@ { - "customers": { - "title": "Kunden", - "customer": "Kunde", - "add_customer": "Kunde hinzufügen", - "edit_customer": "Kunde bearbeiten", - "customer_name": "Kundenname", - "customer_email": "Kunden-E-Mail", - "customer_phone": "Kundentelefon", - "customer_number": "Kundennummer", - "first_name": "Vorname", - "last_name": "Nachname", - "merchant": "Firma", - "total_orders": "Bestellungen gesamt", - "total_spent": "Gesamtausgaben", - "last_order": "Letzte Bestellung", - "registered": "Registriert", - "no_customers": "Keine Kunden gefunden", - "search_customers": "Kunden suchen..." - }, - "features": { - "customer_view": { - "name": "Kundenansicht", - "description": "Kundeninformationen anzeigen und verwalten" + "customers": { + "title": "Kunden", + "customer": "Kunde", + "add_customer": "Kunde hinzufügen", + "edit_customer": "Kunde bearbeiten", + "customer_name": "Kundenname", + "customer_email": "Kunden-E-Mail", + "customer_phone": "Kundentelefon", + "customer_number": "Kundennummer", + "first_name": "Vorname", + "last_name": "Nachname", + "merchant": "Firma", + "total_orders": "Bestellungen gesamt", + "total_spent": "Gesamtausgaben", + "last_order": "Letzte Bestellung", + "registered": "Registriert", + "no_customers": "Keine Kunden gefunden", + "search_customers": "Kunden suchen..." }, - "customer_export": { - "name": "Kundenexport", - "description": "Kundendaten exportieren" + "features": { + "customer_view": { + "name": "Kundenansicht", + "description": "Kundeninformationen anzeigen und verwalten" + }, + "customer_export": { + "name": "Kundenexport", + "description": "Kundendaten exportieren" + }, + "customer_messaging": { + "name": "Kundennachrichten", + "description": "Nachrichten an Kunden senden" + } }, - "customer_messaging": { - "name": "Kundennachrichten", - "description": "Nachrichten an Kunden senden" + "menu": { + "store_operations": "Shop-Betrieb", + "customers_section": "Kunden", + "customers": "Kunden", + "all_customers": "Alle Kunden" } - } } diff --git a/app/modules/customers/locales/en.json b/app/modules/customers/locales/en.json index d3be95ad..6e000ba3 100644 --- a/app/modules/customers/locales/en.json +++ b/app/modules/customers/locales/en.json @@ -1,40 +1,46 @@ { - "customers": { - "title": "Customers", - "customer": "Customer", - "add_customer": "Add Customer", - "edit_customer": "Edit Customer", - "customer_name": "Customer Name", - "customer_email": "Customer Email", - "customer_phone": "Customer Phone", - "customer_number": "Customer Number", - "first_name": "First Name", - "last_name": "Last Name", - "merchant": "Merchant", - "total_orders": "Total Orders", - "total_spent": "Total Spent", - "last_order": "Last Order", - "registered": "Registered", - "no_customers": "No customers found", - "search_customers": "Search customers..." - }, - "messages": { - "failed_to_toggle_customer_status": "Failed to toggle customer status", - "failed_to_load_customer_details": "Failed to load customer details", - "failed_to_load_customer_orders": "Failed to load customer orders" - }, - "features": { - "customer_view": { - "name": "Customer View", - "description": "View and manage customer information" + "customers": { + "title": "Customers", + "customer": "Customer", + "add_customer": "Add Customer", + "edit_customer": "Edit Customer", + "customer_name": "Customer Name", + "customer_email": "Customer Email", + "customer_phone": "Customer Phone", + "customer_number": "Customer Number", + "first_name": "First Name", + "last_name": "Last Name", + "merchant": "Merchant", + "total_orders": "Total Orders", + "total_spent": "Total Spent", + "last_order": "Last Order", + "registered": "Registered", + "no_customers": "No customers found", + "search_customers": "Search customers..." }, - "customer_export": { - "name": "Customer Export", - "description": "Export customer data" + "messages": { + "failed_to_toggle_customer_status": "Failed to toggle customer status", + "failed_to_load_customer_details": "Failed to load customer details", + "failed_to_load_customer_orders": "Failed to load customer orders" }, - "customer_messaging": { - "name": "Customer Messaging", - "description": "Send messages to customers" + "features": { + "customer_view": { + "name": "Customer View", + "description": "View and manage customer information" + }, + "customer_export": { + "name": "Customer Export", + "description": "Export customer data" + }, + "customer_messaging": { + "name": "Customer Messaging", + "description": "Send messages to customers" + } + }, + "menu": { + "store_operations": "Store Operations", + "customers_section": "Customers", + "customers": "Customers", + "all_customers": "All Customers" } - } } diff --git a/app/modules/customers/locales/fr.json b/app/modules/customers/locales/fr.json index 8a63cf50..7908eaa1 100644 --- a/app/modules/customers/locales/fr.json +++ b/app/modules/customers/locales/fr.json @@ -1,35 +1,41 @@ { - "customers": { - "title": "Clients", - "customer": "Client", - "add_customer": "Ajouter un client", - "edit_customer": "Modifier le client", - "customer_name": "Nom du client", - "customer_email": "E-mail du client", - "customer_phone": "Téléphone du client", - "customer_number": "Numéro client", - "first_name": "Prénom", - "last_name": "Nom", - "merchant": "Entreprise", - "total_orders": "Total des commandes", - "total_spent": "Total dépensé", - "last_order": "Dernière commande", - "registered": "Inscrit", - "no_customers": "Aucun client trouvé", - "search_customers": "Rechercher des clients..." - }, - "features": { - "customer_view": { - "name": "Vue client", - "description": "Voir et gérer les informations clients" + "customers": { + "title": "Clients", + "customer": "Client", + "add_customer": "Ajouter un client", + "edit_customer": "Modifier le client", + "customer_name": "Nom du client", + "customer_email": "E-mail du client", + "customer_phone": "Téléphone du client", + "customer_number": "Numéro client", + "first_name": "Prénom", + "last_name": "Nom", + "merchant": "Entreprise", + "total_orders": "Total des commandes", + "total_spent": "Total dépensé", + "last_order": "Dernière commande", + "registered": "Inscrit", + "no_customers": "Aucun client trouvé", + "search_customers": "Rechercher des clients..." }, - "customer_export": { - "name": "Export clients", - "description": "Exporter les données clients" + "features": { + "customer_view": { + "name": "Vue client", + "description": "Voir et gérer les informations clients" + }, + "customer_export": { + "name": "Export clients", + "description": "Exporter les données clients" + }, + "customer_messaging": { + "name": "Messagerie clients", + "description": "Envoyer des messages aux clients" + } }, - "customer_messaging": { - "name": "Messagerie clients", - "description": "Envoyer des messages aux clients" + "menu": { + "store_operations": "Opérations du magasin", + "customers_section": "Clients", + "customers": "Clients", + "all_customers": "Tous les clients" } - } } diff --git a/app/modules/customers/locales/lb.json b/app/modules/customers/locales/lb.json index cf4ae3b5..3cbfa711 100644 --- a/app/modules/customers/locales/lb.json +++ b/app/modules/customers/locales/lb.json @@ -1,35 +1,41 @@ { - "customers": { - "title": "Clienten", - "customer": "Client", - "add_customer": "Client derbäisetzen", - "edit_customer": "Client änneren", - "customer_name": "Clientennumm", - "customer_email": "Client E-Mail", - "customer_phone": "Client Telefon", - "customer_number": "Clientennummer", - "first_name": "Virnumm", - "last_name": "Nonumm", - "merchant": "Firma", - "total_orders": "Bestellungen insgesamt", - "total_spent": "Total ausginn", - "last_order": "Lescht Bestellung", - "registered": "Registréiert", - "no_customers": "Keng Clienten fonnt", - "search_customers": "Clienten sichen..." - }, - "features": { - "customer_view": { - "name": "Kundenusiicht", - "description": "Kundeninformatiounen kucken a verwalten" + "customers": { + "title": "Clienten", + "customer": "Client", + "add_customer": "Client derbäisetzen", + "edit_customer": "Client änneren", + "customer_name": "Clientennumm", + "customer_email": "Client E-Mail", + "customer_phone": "Client Telefon", + "customer_number": "Clientennummer", + "first_name": "Virnumm", + "last_name": "Nonumm", + "merchant": "Firma", + "total_orders": "Bestellungen insgesamt", + "total_spent": "Total ausginn", + "last_order": "Lescht Bestellung", + "registered": "Registréiert", + "no_customers": "Keng Clienten fonnt", + "search_customers": "Clienten sichen..." }, - "customer_export": { - "name": "Kundenexport", - "description": "Kundendaten exportéieren" + "features": { + "customer_view": { + "name": "Kundenusiicht", + "description": "Kundeninformatiounen kucken a verwalten" + }, + "customer_export": { + "name": "Kundenexport", + "description": "Kundendaten exportéieren" + }, + "customer_messaging": { + "name": "Kundennoriichten", + "description": "Noriichten u Clienten schécken" + } }, - "customer_messaging": { - "name": "Kundennoriichten", - "description": "Noriichten u Clienten schécken" + "menu": { + "store_operations": "Buttek-Operatiounen", + "customers_section": "Clienten", + "customers": "Clienten", + "all_customers": "All Clienten" } - } } diff --git a/app/modules/dev_tools/locales/de.json b/app/modules/dev_tools/locales/de.json index 9253d042..7824aa35 100644 --- a/app/modules/dev_tools/locales/de.json +++ b/app/modules/dev_tools/locales/de.json @@ -1,12 +1,17 @@ { - "messages": { - "test_run_started": "Test run started...", - "failed_to_copy_code": "Failed to copy code", - "failed_to_copy_name": "Failed to copy name", - "added_to_cart": "Added to cart!", - "filters_applied": "Filters applied!", - "review_submitted_successfully": "Review submitted successfully!", - "thanks_for_your_feedback": "Thanks for your feedback!", - "code_copied_to_clipboard": "Code copied to clipboard!" - } + "messages": { + "test_run_started": "Test run started...", + "failed_to_copy_code": "Failed to copy code", + "failed_to_copy_name": "Failed to copy name", + "added_to_cart": "Added to cart!", + "filters_applied": "Filters applied!", + "review_submitted_successfully": "Review submitted successfully!", + "thanks_for_your_feedback": "Thanks for your feedback!", + "code_copied_to_clipboard": "Code copied to clipboard!" + }, + "menu": { + "developer_tools": "Entwicklerwerkzeuge", + "components": "Komponenten", + "icons": "Icons" + } } diff --git a/app/modules/dev_tools/locales/en.json b/app/modules/dev_tools/locales/en.json index 9253d042..61e89803 100644 --- a/app/modules/dev_tools/locales/en.json +++ b/app/modules/dev_tools/locales/en.json @@ -1,12 +1,17 @@ { - "messages": { - "test_run_started": "Test run started...", - "failed_to_copy_code": "Failed to copy code", - "failed_to_copy_name": "Failed to copy name", - "added_to_cart": "Added to cart!", - "filters_applied": "Filters applied!", - "review_submitted_successfully": "Review submitted successfully!", - "thanks_for_your_feedback": "Thanks for your feedback!", - "code_copied_to_clipboard": "Code copied to clipboard!" - } + "messages": { + "test_run_started": "Test run started...", + "failed_to_copy_code": "Failed to copy code", + "failed_to_copy_name": "Failed to copy name", + "added_to_cart": "Added to cart!", + "filters_applied": "Filters applied!", + "review_submitted_successfully": "Review submitted successfully!", + "thanks_for_your_feedback": "Thanks for your feedback!", + "code_copied_to_clipboard": "Code copied to clipboard!" + }, + "menu": { + "developer_tools": "Developer Tools", + "components": "Components", + "icons": "Icons" + } } diff --git a/app/modules/dev_tools/locales/fr.json b/app/modules/dev_tools/locales/fr.json index 9253d042..2a8756f1 100644 --- a/app/modules/dev_tools/locales/fr.json +++ b/app/modules/dev_tools/locales/fr.json @@ -1,12 +1,17 @@ { - "messages": { - "test_run_started": "Test run started...", - "failed_to_copy_code": "Failed to copy code", - "failed_to_copy_name": "Failed to copy name", - "added_to_cart": "Added to cart!", - "filters_applied": "Filters applied!", - "review_submitted_successfully": "Review submitted successfully!", - "thanks_for_your_feedback": "Thanks for your feedback!", - "code_copied_to_clipboard": "Code copied to clipboard!" - } + "messages": { + "test_run_started": "Test run started...", + "failed_to_copy_code": "Failed to copy code", + "failed_to_copy_name": "Failed to copy name", + "added_to_cart": "Added to cart!", + "filters_applied": "Filters applied!", + "review_submitted_successfully": "Review submitted successfully!", + "thanks_for_your_feedback": "Thanks for your feedback!", + "code_copied_to_clipboard": "Code copied to clipboard!" + }, + "menu": { + "developer_tools": "Outils de développement", + "components": "Composants", + "icons": "Icônes" + } } diff --git a/app/modules/dev_tools/locales/lb.json b/app/modules/dev_tools/locales/lb.json index 9253d042..fc1191dc 100644 --- a/app/modules/dev_tools/locales/lb.json +++ b/app/modules/dev_tools/locales/lb.json @@ -1,12 +1,17 @@ { - "messages": { - "test_run_started": "Test run started...", - "failed_to_copy_code": "Failed to copy code", - "failed_to_copy_name": "Failed to copy name", - "added_to_cart": "Added to cart!", - "filters_applied": "Filters applied!", - "review_submitted_successfully": "Review submitted successfully!", - "thanks_for_your_feedback": "Thanks for your feedback!", - "code_copied_to_clipboard": "Code copied to clipboard!" - } + "messages": { + "test_run_started": "Test run started...", + "failed_to_copy_code": "Failed to copy code", + "failed_to_copy_name": "Failed to copy name", + "added_to_cart": "Added to cart!", + "filters_applied": "Filters applied!", + "review_submitted_successfully": "Review submitted successfully!", + "thanks_for_your_feedback": "Thanks for your feedback!", + "code_copied_to_clipboard": "Code copied to clipboard!" + }, + "menu": { + "developer_tools": "Entwécklerwerkzäicher", + "components": "Komponenten", + "icons": "Icons" + } } diff --git a/app/modules/inventory/locales/de.json b/app/modules/inventory/locales/de.json index 20778013..b35cf9af 100644 --- a/app/modules/inventory/locales/de.json +++ b/app/modules/inventory/locales/de.json @@ -1,40 +1,46 @@ { - "inventory": { - "title": "Inventar", - "stock_level": "Lagerbestand", - "quantity": "Menge", - "reorder_point": "Nachbestellpunkt", - "adjust_stock": "Bestand anpassen", - "stock_in": "Wareneingang", - "stock_out": "Warenausgang", - "transfer": "Transfer", - "history": "Verlauf", - "low_stock_alert": "Warnung bei geringem Bestand", - "out_of_stock_alert": "Warnung bei Ausverkauf" - }, - "messages": { - "stock_adjusted_successfully": "Stock adjusted successfully", - "quantity_set_successfully": "Quantity set successfully", - "inventory_entry_deleted": "Inventory entry deleted.", - "please_select_a_store_and_file": "Please select a store and file", - "import_completed_with_errors": "Import completed with errors" - }, - "features": { - "inventory_basic": { - "name": "Basis-Inventar", - "description": "Grundlegende Lagerverwaltung" + "inventory": { + "title": "Inventar", + "stock_level": "Lagerbestand", + "quantity": "Menge", + "reorder_point": "Nachbestellpunkt", + "adjust_stock": "Bestand anpassen", + "stock_in": "Wareneingang", + "stock_out": "Warenausgang", + "transfer": "Transfer", + "history": "Verlauf", + "low_stock_alert": "Warnung bei geringem Bestand", + "out_of_stock_alert": "Warnung bei Ausverkauf" }, - "inventory_locations": { - "name": "Mehrere Standorte", - "description": "Inventar an mehreren Standorten verwalten" + "messages": { + "stock_adjusted_successfully": "Stock adjusted successfully", + "quantity_set_successfully": "Quantity set successfully", + "inventory_entry_deleted": "Inventory entry deleted.", + "please_select_a_store_and_file": "Please select a store and file", + "import_completed_with_errors": "Import completed with errors" }, - "inventory_purchase_orders": { - "name": "Bestellungen", - "description": "Bestellungen erstellen und verwalten" + "features": { + "inventory_basic": { + "name": "Basis-Inventar", + "description": "Grundlegende Lagerverwaltung" + }, + "inventory_locations": { + "name": "Mehrere Standorte", + "description": "Inventar an mehreren Standorten verwalten" + }, + "inventory_purchase_orders": { + "name": "Bestellungen", + "description": "Bestellungen erstellen und verwalten" + }, + "low_stock_alerts": { + "name": "Niedrigbestandswarnungen", + "description": "Automatische Benachrichtigungen bei niedrigem Lagerbestand" + } }, - "low_stock_alerts": { - "name": "Niedrigbestandswarnungen", - "description": "Automatische Benachrichtigungen bei niedrigem Lagerbestand" + "menu": { + "store_operations": "Shop-Betrieb", + "products_inventory": "Produkte & Inventar", + "products": "Produkte", + "inventory": "Inventar" } - } } diff --git a/app/modules/inventory/locales/en.json b/app/modules/inventory/locales/en.json index b4b59ae3..31a00a9a 100644 --- a/app/modules/inventory/locales/en.json +++ b/app/modules/inventory/locales/en.json @@ -1,49 +1,55 @@ { - "inventory": { - "title": "Inventory", - "stock_level": "Stock Level", - "quantity": "Quantity", - "reorder_point": "Reorder Point", - "adjust_stock": "Adjust Stock", - "stock_in": "Stock In", - "stock_out": "Stock Out", - "transfer": "Transfer", - "history": "History", - "low_stock_alert": "Low Stock Alert", - "out_of_stock_alert": "Out of Stock Alert" - }, - "messages": { - "stock_adjusted_successfully": "Stock adjusted successfully", - "quantity_set_successfully": "Quantity set successfully", - "inventory_entry_deleted": "Inventory entry deleted.", - "please_select_a_store_and_file": "Please select a store and file", - "import_completed_with_errors": "Import completed with errors", - "failed_to_adjust_stock": "Failed to adjust stock.", - "failed_to_set_quantity": "Failed to set quantity.", - "failed_to_delete_entry": "Failed to delete entry.", - "import_success": "Imported {quantity} units ({created} new, {updated} updated)", - "import_completed": "Import completed: {created} created, {updated} updated, {errors} errors", - "import_failed": "Import failed", - "bulk_adjust_success": "{count} item(s) adjusted by {amount}", - "failed_to_adjust_inventory": "Failed to adjust inventory", - "exported_items": "Exported {count} item(s)" - }, - "features": { - "inventory_basic": { - "name": "Basic Inventory", - "description": "Basic stock management" + "inventory": { + "title": "Inventory", + "stock_level": "Stock Level", + "quantity": "Quantity", + "reorder_point": "Reorder Point", + "adjust_stock": "Adjust Stock", + "stock_in": "Stock In", + "stock_out": "Stock Out", + "transfer": "Transfer", + "history": "History", + "low_stock_alert": "Low Stock Alert", + "out_of_stock_alert": "Out of Stock Alert" }, - "inventory_locations": { - "name": "Multiple Locations", - "description": "Manage inventory across multiple locations" + "messages": { + "stock_adjusted_successfully": "Stock adjusted successfully", + "quantity_set_successfully": "Quantity set successfully", + "inventory_entry_deleted": "Inventory entry deleted.", + "please_select_a_store_and_file": "Please select a store and file", + "import_completed_with_errors": "Import completed with errors", + "failed_to_adjust_stock": "Failed to adjust stock.", + "failed_to_set_quantity": "Failed to set quantity.", + "failed_to_delete_entry": "Failed to delete entry.", + "import_success": "Imported {quantity} units ({created} new, {updated} updated)", + "import_completed": "Import completed: {created} created, {updated} updated, {errors} errors", + "import_failed": "Import failed", + "bulk_adjust_success": "{count} item(s) adjusted by {amount}", + "failed_to_adjust_inventory": "Failed to adjust inventory", + "exported_items": "Exported {count} item(s)" }, - "inventory_purchase_orders": { - "name": "Purchase Orders", - "description": "Create and manage purchase orders" + "features": { + "inventory_basic": { + "name": "Basic Inventory", + "description": "Basic stock management" + }, + "inventory_locations": { + "name": "Multiple Locations", + "description": "Manage inventory across multiple locations" + }, + "inventory_purchase_orders": { + "name": "Purchase Orders", + "description": "Create and manage purchase orders" + }, + "low_stock_alerts": { + "name": "Low Stock Alerts", + "description": "Automatic notifications for low stock levels" + } }, - "low_stock_alerts": { - "name": "Low Stock Alerts", - "description": "Automatic notifications for low stock levels" + "menu": { + "store_operations": "Store Operations", + "products_inventory": "Products & Inventory", + "products": "Products", + "inventory": "Inventory" } - } } diff --git a/app/modules/inventory/locales/fr.json b/app/modules/inventory/locales/fr.json index 850577a5..c526b45a 100644 --- a/app/modules/inventory/locales/fr.json +++ b/app/modules/inventory/locales/fr.json @@ -1,40 +1,46 @@ { - "inventory": { - "title": "Inventaire", - "stock_level": "Niveau de stock", - "quantity": "Quantité", - "reorder_point": "Seuil de réapprovisionnement", - "adjust_stock": "Ajuster le stock", - "stock_in": "Entrée de stock", - "stock_out": "Sortie de stock", - "transfer": "Transfert", - "history": "Historique", - "low_stock_alert": "Alerte stock faible", - "out_of_stock_alert": "Alerte rupture de stock" - }, - "messages": { - "stock_adjusted_successfully": "Stock adjusted successfully", - "quantity_set_successfully": "Quantity set successfully", - "inventory_entry_deleted": "Inventory entry deleted.", - "please_select_a_store_and_file": "Please select a store and file", - "import_completed_with_errors": "Import completed with errors" - }, - "features": { - "inventory_basic": { - "name": "Inventaire de base", - "description": "Gestion de stock de base" + "inventory": { + "title": "Inventaire", + "stock_level": "Niveau de stock", + "quantity": "Quantité", + "reorder_point": "Seuil de réapprovisionnement", + "adjust_stock": "Ajuster le stock", + "stock_in": "Entrée de stock", + "stock_out": "Sortie de stock", + "transfer": "Transfert", + "history": "Historique", + "low_stock_alert": "Alerte stock faible", + "out_of_stock_alert": "Alerte rupture de stock" }, - "inventory_locations": { - "name": "Emplacements multiples", - "description": "Gérer l'inventaire sur plusieurs emplacements" + "messages": { + "stock_adjusted_successfully": "Stock adjusted successfully", + "quantity_set_successfully": "Quantity set successfully", + "inventory_entry_deleted": "Inventory entry deleted.", + "please_select_a_store_and_file": "Please select a store and file", + "import_completed_with_errors": "Import completed with errors" }, - "inventory_purchase_orders": { - "name": "Bons de commande", - "description": "Créer et gérer les bons de commande" + "features": { + "inventory_basic": { + "name": "Inventaire de base", + "description": "Gestion de stock de base" + }, + "inventory_locations": { + "name": "Emplacements multiples", + "description": "Gérer l'inventaire sur plusieurs emplacements" + }, + "inventory_purchase_orders": { + "name": "Bons de commande", + "description": "Créer et gérer les bons de commande" + }, + "low_stock_alerts": { + "name": "Alertes stock bas", + "description": "Notifications automatiques pour les niveaux de stock bas" + } }, - "low_stock_alerts": { - "name": "Alertes stock bas", - "description": "Notifications automatiques pour les niveaux de stock bas" + "menu": { + "store_operations": "Opérations du magasin", + "products_inventory": "Produits et Inventaire", + "products": "Produits", + "inventory": "Inventaire" } - } } diff --git a/app/modules/inventory/locales/lb.json b/app/modules/inventory/locales/lb.json index 94cd4b56..94b0942e 100644 --- a/app/modules/inventory/locales/lb.json +++ b/app/modules/inventory/locales/lb.json @@ -1,40 +1,46 @@ { - "inventory": { - "title": "Inventar", - "stock_level": "Lagerniveau", - "quantity": "Quantitéit", - "reorder_point": "Nobestellungspunkt", - "adjust_stock": "Lager upaassen", - "stock_in": "Lager eran", - "stock_out": "Lager eraus", - "transfer": "Transfer", - "history": "Geschicht", - "low_stock_alert": "Niddreg Lager Alarm", - "out_of_stock_alert": "Net op Lager Alarm" - }, - "messages": { - "stock_adjusted_successfully": "Stock adjusted successfully", - "quantity_set_successfully": "Quantity set successfully", - "inventory_entry_deleted": "Inventory entry deleted.", - "please_select_a_store_and_file": "Please select a store and file", - "import_completed_with_errors": "Import completed with errors" - }, - "features": { - "inventory_basic": { - "name": "Basis-Inventar", - "description": "Grondleeënd Lagerverwaltung" + "inventory": { + "title": "Inventar", + "stock_level": "Lagerniveau", + "quantity": "Quantitéit", + "reorder_point": "Nobestellungspunkt", + "adjust_stock": "Lager upaassen", + "stock_in": "Lager eran", + "stock_out": "Lager eraus", + "transfer": "Transfer", + "history": "Geschicht", + "low_stock_alert": "Niddreg Lager Alarm", + "out_of_stock_alert": "Net op Lager Alarm" }, - "inventory_locations": { - "name": "Méi Standuerter", - "description": "Inventar u méi Standuerter verwalten" + "messages": { + "stock_adjusted_successfully": "Stock adjusted successfully", + "quantity_set_successfully": "Quantity set successfully", + "inventory_entry_deleted": "Inventory entry deleted.", + "please_select_a_store_and_file": "Please select a store and file", + "import_completed_with_errors": "Import completed with errors" }, - "inventory_purchase_orders": { - "name": "Bestellungen", - "description": "Bestellungen erstellen an verwalten" + "features": { + "inventory_basic": { + "name": "Basis-Inventar", + "description": "Grondleeënd Lagerverwaltung" + }, + "inventory_locations": { + "name": "Méi Standuerter", + "description": "Inventar u méi Standuerter verwalten" + }, + "inventory_purchase_orders": { + "name": "Bestellungen", + "description": "Bestellungen erstellen an verwalten" + }, + "low_stock_alerts": { + "name": "Niddreg-Lagerbestandswarnungen", + "description": "Automatesch Benoriichtegungen bei niddregem Lagerbestand" + } }, - "low_stock_alerts": { - "name": "Niddreg-Lagerbestandswarnungen", - "description": "Automatesch Benoriichtegungen bei niddregem Lagerbestand" + "menu": { + "store_operations": "Buttek-Operatiounen", + "products_inventory": "Produkter & Inventar", + "products": "Produkter", + "inventory": "Inventar" } - } } diff --git a/app/modules/loyalty/locales/de.json b/app/modules/loyalty/locales/de.json index 76795d2c..afd927f1 100644 --- a/app/modules/loyalty/locales/de.json +++ b/app/modules/loyalty/locales/de.json @@ -1,72 +1,81 @@ { - "loyalty": { - "module": { - "name": "Treueprogramme", - "description": "Stempel- und punktebasierte Treueprogramme mit Wallet-Integration" + "loyalty": { + "module": { + "name": "Treueprogramme", + "description": "Stempel- und punktebasierte Treueprogramme mit Wallet-Integration" + }, + "program": { + "title": "Treueprogramm", + "create": "Programm erstellen", + "edit": "Programm bearbeiten", + "activate": "Aktivieren", + "deactivate": "Deaktivieren", + "type": { + "stamps": "Stempel", + "points": "Punkte", + "hybrid": "Hybrid" + } + }, + "card": { + "title": "Treuekarte", + "number": "Kartennummer", + "qr_code": "QR-Code", + "enroll": "Kunde anmelden", + "deactivate": "Karte deaktivieren" + }, + "stamp": { + "title": "Stempel", + "add": "Stempel hinzufügen", + "redeem": "Prämie einlösen", + "count": "{current} von {target}", + "until_reward": "Noch {count} bis zur Prämie" + }, + "points": { + "title": "Punkte", + "earn": "Punkte sammeln", + "redeem": "Punkte einlösen", + "balance": "{count} Punkte", + "per_euro": "{points} Punkte pro Euro" + }, + "pin": { + "title": "Mitarbeiter-PINs", + "create": "PIN erstellen", + "edit": "PIN bearbeiten", + "unlock": "PIN entsperren", + "locked": "PIN gesperrt bis {time}" + }, + "wallet": { + "google": "Zu Google Wallet hinzufügen", + "apple": "Zu Apple Wallet hinzufügen" + }, + "stats": { + "title": "Statistiken", + "total_cards": "Karten insgesamt", + "active_cards": "Aktive Karten", + "stamps_issued": "Ausgegebene Stempel", + "rewards_redeemed": "Eingelöste Prämien" + }, + "errors": { + "program_not_found": "Treueprogramm nicht gefunden", + "program_inactive": "Treueprogramm ist nicht aktiv", + "card_not_found": "Treuekarte nicht gefunden", + "card_inactive": "Treuekarte ist nicht aktiv", + "cooldown": "Bitte warten Sie {minutes} Minuten vor dem nächsten Stempel", + "daily_limit": "Tageslimit von {limit} Stempeln erreicht", + "insufficient_stamps": "Benötigt {required} Stempel, vorhanden {current}", + "insufficient_points": "Benötigt {required} Punkte, vorhanden {current}", + "pin_required": "Mitarbeiter-PIN erforderlich", + "pin_invalid": "Ungültiger PIN", + "pin_locked": "PIN wegen zu vieler Fehlversuche gesperrt" + } }, - "program": { - "title": "Treueprogramm", - "create": "Programm erstellen", - "edit": "Programm bearbeiten", - "activate": "Aktivieren", - "deactivate": "Deaktivieren", - "type": { - "stamps": "Stempel", - "points": "Punkte", - "hybrid": "Hybrid" - } - }, - "card": { - "title": "Treuekarte", - "number": "Kartennummer", - "qr_code": "QR-Code", - "enroll": "Kunde anmelden", - "deactivate": "Karte deaktivieren" - }, - "stamp": { - "title": "Stempel", - "add": "Stempel hinzufügen", - "redeem": "Prämie einlösen", - "count": "{current} von {target}", - "until_reward": "Noch {count} bis zur Prämie" - }, - "points": { - "title": "Punkte", - "earn": "Punkte sammeln", - "redeem": "Punkte einlösen", - "balance": "{count} Punkte", - "per_euro": "{points} Punkte pro Euro" - }, - "pin": { - "title": "Mitarbeiter-PINs", - "create": "PIN erstellen", - "edit": "PIN bearbeiten", - "unlock": "PIN entsperren", - "locked": "PIN gesperrt bis {time}" - }, - "wallet": { - "google": "Zu Google Wallet hinzufügen", - "apple": "Zu Apple Wallet hinzufügen" - }, - "stats": { - "title": "Statistiken", - "total_cards": "Karten insgesamt", - "active_cards": "Aktive Karten", - "stamps_issued": "Ausgegebene Stempel", - "rewards_redeemed": "Eingelöste Prämien" - }, - "errors": { - "program_not_found": "Treueprogramm nicht gefunden", - "program_inactive": "Treueprogramm ist nicht aktiv", - "card_not_found": "Treuekarte nicht gefunden", - "card_inactive": "Treuekarte ist nicht aktiv", - "cooldown": "Bitte warten Sie {minutes} Minuten vor dem nächsten Stempel", - "daily_limit": "Tageslimit von {limit} Stempeln erreicht", - "insufficient_stamps": "Benötigt {required} Stempel, vorhanden {current}", - "insufficient_points": "Benötigt {required} Punkte, vorhanden {current}", - "pin_required": "Mitarbeiter-PIN erforderlich", - "pin_invalid": "Ungültiger PIN", - "pin_locked": "PIN wegen zu vieler Fehlversuche gesperrt" + "menu": { + "loyalty": "Treueprogramm", + "loyalty_programs": "Treueprogramme", + "programs": "Programme", + "analytics": "Analytik", + "dashboard": "Dashboard", + "customer_cards": "Kundenkarten", + "statistics": "Statistiken" } - } } diff --git a/app/modules/loyalty/locales/en.json b/app/modules/loyalty/locales/en.json index b9570cc7..15a2b1af 100644 --- a/app/modules/loyalty/locales/en.json +++ b/app/modules/loyalty/locales/en.json @@ -1,72 +1,81 @@ { - "loyalty": { - "module": { - "name": "Loyalty Programs", - "description": "Stamp-based and points-based loyalty programs with wallet integration" + "loyalty": { + "module": { + "name": "Loyalty Programs", + "description": "Stamp-based and points-based loyalty programs with wallet integration" + }, + "program": { + "title": "Loyalty Program", + "create": "Create Program", + "edit": "Edit Program", + "activate": "Activate", + "deactivate": "Deactivate", + "type": { + "stamps": "Stamps", + "points": "Points", + "hybrid": "Hybrid" + } + }, + "card": { + "title": "Loyalty Card", + "number": "Card Number", + "qr_code": "QR Code", + "enroll": "Enroll Customer", + "deactivate": "Deactivate Card" + }, + "stamp": { + "title": "Stamps", + "add": "Add Stamp", + "redeem": "Redeem Reward", + "count": "{current} of {target}", + "until_reward": "{count} until reward" + }, + "points": { + "title": "Points", + "earn": "Earn Points", + "redeem": "Redeem Points", + "balance": "{count} points", + "per_euro": "{points} points per euro" + }, + "pin": { + "title": "Staff PINs", + "create": "Create PIN", + "edit": "Edit PIN", + "unlock": "Unlock PIN", + "locked": "PIN locked until {time}" + }, + "wallet": { + "google": "Add to Google Wallet", + "apple": "Add to Apple Wallet" + }, + "stats": { + "title": "Statistics", + "total_cards": "Total Cards", + "active_cards": "Active Cards", + "stamps_issued": "Stamps Issued", + "rewards_redeemed": "Rewards Redeemed" + }, + "errors": { + "program_not_found": "Loyalty program not found", + "program_inactive": "Loyalty program is not active", + "card_not_found": "Loyalty card not found", + "card_inactive": "Loyalty card is not active", + "cooldown": "Please wait {minutes} minutes before next stamp", + "daily_limit": "Daily stamp limit of {limit} reached", + "insufficient_stamps": "Need {required} stamps, have {current}", + "insufficient_points": "Need {required} points, have {current}", + "pin_required": "Staff PIN is required", + "pin_invalid": "Invalid staff PIN", + "pin_locked": "PIN locked due to too many failed attempts" + } }, - "program": { - "title": "Loyalty Program", - "create": "Create Program", - "edit": "Edit Program", - "activate": "Activate", - "deactivate": "Deactivate", - "type": { - "stamps": "Stamps", - "points": "Points", - "hybrid": "Hybrid" - } - }, - "card": { - "title": "Loyalty Card", - "number": "Card Number", - "qr_code": "QR Code", - "enroll": "Enroll Customer", - "deactivate": "Deactivate Card" - }, - "stamp": { - "title": "Stamps", - "add": "Add Stamp", - "redeem": "Redeem Reward", - "count": "{current} of {target}", - "until_reward": "{count} until reward" - }, - "points": { - "title": "Points", - "earn": "Earn Points", - "redeem": "Redeem Points", - "balance": "{count} points", - "per_euro": "{points} points per euro" - }, - "pin": { - "title": "Staff PINs", - "create": "Create PIN", - "edit": "Edit PIN", - "unlock": "Unlock PIN", - "locked": "PIN locked until {time}" - }, - "wallet": { - "google": "Add to Google Wallet", - "apple": "Add to Apple Wallet" - }, - "stats": { - "title": "Statistics", - "total_cards": "Total Cards", - "active_cards": "Active Cards", - "stamps_issued": "Stamps Issued", - "rewards_redeemed": "Rewards Redeemed" - }, - "errors": { - "program_not_found": "Loyalty program not found", - "program_inactive": "Loyalty program is not active", - "card_not_found": "Loyalty card not found", - "card_inactive": "Loyalty card is not active", - "cooldown": "Please wait {minutes} minutes before next stamp", - "daily_limit": "Daily stamp limit of {limit} reached", - "insufficient_stamps": "Need {required} stamps, have {current}", - "insufficient_points": "Need {required} points, have {current}", - "pin_required": "Staff PIN is required", - "pin_invalid": "Invalid staff PIN", - "pin_locked": "PIN locked due to too many failed attempts" + "menu": { + "loyalty": "Loyalty", + "loyalty_programs": "Loyalty Programs", + "programs": "Programs", + "analytics": "Analytics", + "dashboard": "Dashboard", + "customer_cards": "Customer Cards", + "statistics": "Statistics" } - } } diff --git a/app/modules/loyalty/locales/fr.json b/app/modules/loyalty/locales/fr.json index f9092e62..79c17c25 100644 --- a/app/modules/loyalty/locales/fr.json +++ b/app/modules/loyalty/locales/fr.json @@ -1,72 +1,81 @@ { - "loyalty": { - "module": { - "name": "Programmes de Fidélité", - "description": "Programmes de fidélité par tampons et points avec intégration wallet" + "loyalty": { + "module": { + "name": "Programmes de Fidélité", + "description": "Programmes de fidélité par tampons et points avec intégration wallet" + }, + "program": { + "title": "Programme de Fidélité", + "create": "Créer un Programme", + "edit": "Modifier le Programme", + "activate": "Activer", + "deactivate": "Désactiver", + "type": { + "stamps": "Tampons", + "points": "Points", + "hybrid": "Hybride" + } + }, + "card": { + "title": "Carte de Fidélité", + "number": "Numéro de Carte", + "qr_code": "Code QR", + "enroll": "Inscrire un Client", + "deactivate": "Désactiver la Carte" + }, + "stamp": { + "title": "Tampons", + "add": "Ajouter un Tampon", + "redeem": "Échanger la Récompense", + "count": "{current} sur {target}", + "until_reward": "Plus que {count} pour la récompense" + }, + "points": { + "title": "Points", + "earn": "Gagner des Points", + "redeem": "Échanger des Points", + "balance": "{count} points", + "per_euro": "{points} points par euro" + }, + "pin": { + "title": "Codes PIN du Personnel", + "create": "Créer un PIN", + "edit": "Modifier le PIN", + "unlock": "Débloquer le PIN", + "locked": "PIN bloqué jusqu'à {time}" + }, + "wallet": { + "google": "Ajouter à Google Wallet", + "apple": "Ajouter à Apple Wallet" + }, + "stats": { + "title": "Statistiques", + "total_cards": "Total des Cartes", + "active_cards": "Cartes Actives", + "stamps_issued": "Tampons Émis", + "rewards_redeemed": "Récompenses Échangées" + }, + "errors": { + "program_not_found": "Programme de fidélité introuvable", + "program_inactive": "Le programme de fidélité n'est pas actif", + "card_not_found": "Carte de fidélité introuvable", + "card_inactive": "La carte de fidélité n'est pas active", + "cooldown": "Veuillez attendre {minutes} minutes avant le prochain tampon", + "daily_limit": "Limite quotidienne de {limit} tampons atteinte", + "insufficient_stamps": "Il faut {required} tampons, vous en avez {current}", + "insufficient_points": "Il faut {required} points, vous en avez {current}", + "pin_required": "Le code PIN du personnel est requis", + "pin_invalid": "Code PIN invalide", + "pin_locked": "PIN bloqué suite à trop de tentatives échouées" + } }, - "program": { - "title": "Programme de Fidélité", - "create": "Créer un Programme", - "edit": "Modifier le Programme", - "activate": "Activer", - "deactivate": "Désactiver", - "type": { - "stamps": "Tampons", - "points": "Points", - "hybrid": "Hybride" - } - }, - "card": { - "title": "Carte de Fidélité", - "number": "Numéro de Carte", - "qr_code": "Code QR", - "enroll": "Inscrire un Client", - "deactivate": "Désactiver la Carte" - }, - "stamp": { - "title": "Tampons", - "add": "Ajouter un Tampon", - "redeem": "Échanger la Récompense", - "count": "{current} sur {target}", - "until_reward": "Plus que {count} pour la récompense" - }, - "points": { - "title": "Points", - "earn": "Gagner des Points", - "redeem": "Échanger des Points", - "balance": "{count} points", - "per_euro": "{points} points par euro" - }, - "pin": { - "title": "Codes PIN du Personnel", - "create": "Créer un PIN", - "edit": "Modifier le PIN", - "unlock": "Débloquer le PIN", - "locked": "PIN bloqué jusqu'à {time}" - }, - "wallet": { - "google": "Ajouter à Google Wallet", - "apple": "Ajouter à Apple Wallet" - }, - "stats": { - "title": "Statistiques", - "total_cards": "Total des Cartes", - "active_cards": "Cartes Actives", - "stamps_issued": "Tampons Émis", - "rewards_redeemed": "Récompenses Échangées" - }, - "errors": { - "program_not_found": "Programme de fidélité introuvable", - "program_inactive": "Le programme de fidélité n'est pas actif", - "card_not_found": "Carte de fidélité introuvable", - "card_inactive": "La carte de fidélité n'est pas active", - "cooldown": "Veuillez attendre {minutes} minutes avant le prochain tampon", - "daily_limit": "Limite quotidienne de {limit} tampons atteinte", - "insufficient_stamps": "Il faut {required} tampons, vous en avez {current}", - "insufficient_points": "Il faut {required} points, vous en avez {current}", - "pin_required": "Le code PIN du personnel est requis", - "pin_invalid": "Code PIN invalide", - "pin_locked": "PIN bloqué suite à trop de tentatives échouées" + "menu": { + "loyalty": "Fidélité", + "loyalty_programs": "Programmes de fidélité", + "programs": "Programmes", + "analytics": "Analytique", + "dashboard": "Tableau de bord", + "customer_cards": "Cartes clients", + "statistics": "Statistiques" } - } } diff --git a/app/modules/loyalty/locales/lb.json b/app/modules/loyalty/locales/lb.json index c58e9b99..f0a0fe90 100644 --- a/app/modules/loyalty/locales/lb.json +++ b/app/modules/loyalty/locales/lb.json @@ -1,72 +1,81 @@ { - "loyalty": { - "module": { - "name": "Treieprogrammer", - "description": "Stempel- a Punktebaséiert Treieprogrammer mat Wallet-Integratioun" + "loyalty": { + "module": { + "name": "Treieprogrammer", + "description": "Stempel- a Punktebaséiert Treieprogrammer mat Wallet-Integratioun" + }, + "program": { + "title": "Treieprogramm", + "create": "Programm erstellen", + "edit": "Programm beaarbechten", + "activate": "Aktivéieren", + "deactivate": "Deaktivéieren", + "type": { + "stamps": "Stempelen", + "points": "Punkten", + "hybrid": "Hybrid" + } + }, + "card": { + "title": "Treiekaart", + "number": "Kaartnummer", + "qr_code": "QR-Code", + "enroll": "Client aschreiben", + "deactivate": "Kaart deaktivéieren" + }, + "stamp": { + "title": "Stempelen", + "add": "Stempel derbäisetzen", + "redeem": "Belounung aléisen", + "count": "{current} vun {target}", + "until_reward": "{count} bis zur Belounung" + }, + "points": { + "title": "Punkten", + "earn": "Punkten sammelen", + "redeem": "Punkten aléisen", + "balance": "{count} Punkten", + "per_euro": "{points} Punkten pro Euro" + }, + "pin": { + "title": "Personal-PINen", + "create": "PIN erstellen", + "edit": "PIN beaarbechten", + "unlock": "PIN entspären", + "locked": "PIN gespaart bis {time}" + }, + "wallet": { + "google": "An Google Wallet derbäisetzen", + "apple": "An Apple Wallet derbäisetzen" + }, + "stats": { + "title": "Statistiken", + "total_cards": "Total Kaarten", + "active_cards": "Aktiv Kaarten", + "stamps_issued": "Stempelen ausgestallt", + "rewards_redeemed": "Belounungen agelées" + }, + "errors": { + "program_not_found": "Treieprogramm net fonnt", + "program_inactive": "Treieprogramm ass net aktiv", + "card_not_found": "Treiekaart net fonnt", + "card_inactive": "Treiekaart ass net aktiv", + "cooldown": "W.e.g. waart {minutes} Minutten virum nächste Stempel", + "daily_limit": "Deeglecht Stempel-Limit vun {limit} erreecht", + "insufficient_stamps": "Brauch {required} Stempelen, huet {current}", + "insufficient_points": "Brauch {required} Punkten, huet {current}", + "pin_required": "Personal-PIN erfuerderlech", + "pin_invalid": "Ongëlteg Personal-PIN", + "pin_locked": "PIN gespaart wéinst ze vill Fehlversich" + } }, - "program": { - "title": "Treieprogramm", - "create": "Programm erstellen", - "edit": "Programm beaarbechten", - "activate": "Aktivéieren", - "deactivate": "Deaktivéieren", - "type": { - "stamps": "Stempelen", - "points": "Punkten", - "hybrid": "Hybrid" - } - }, - "card": { - "title": "Treiekaart", - "number": "Kaartnummer", - "qr_code": "QR-Code", - "enroll": "Client aschreiben", - "deactivate": "Kaart deaktivéieren" - }, - "stamp": { - "title": "Stempelen", - "add": "Stempel derbäisetzen", - "redeem": "Belounung aléisen", - "count": "{current} vun {target}", - "until_reward": "{count} bis zur Belounung" - }, - "points": { - "title": "Punkten", - "earn": "Punkten sammelen", - "redeem": "Punkten aléisen", - "balance": "{count} Punkten", - "per_euro": "{points} Punkten pro Euro" - }, - "pin": { - "title": "Personal-PINen", - "create": "PIN erstellen", - "edit": "PIN beaarbechten", - "unlock": "PIN entspären", - "locked": "PIN gespaart bis {time}" - }, - "wallet": { - "google": "An Google Wallet derbäisetzen", - "apple": "An Apple Wallet derbäisetzen" - }, - "stats": { - "title": "Statistiken", - "total_cards": "Total Kaarten", - "active_cards": "Aktiv Kaarten", - "stamps_issued": "Stempelen ausgestallt", - "rewards_redeemed": "Belounungen agelées" - }, - "errors": { - "program_not_found": "Treieprogramm net fonnt", - "program_inactive": "Treieprogramm ass net aktiv", - "card_not_found": "Treiekaart net fonnt", - "card_inactive": "Treiekaart ass net aktiv", - "cooldown": "W.e.g. waart {minutes} Minutten virum nächste Stempel", - "daily_limit": "Deeglecht Stempel-Limit vun {limit} erreecht", - "insufficient_stamps": "Brauch {required} Stempelen, huet {current}", - "insufficient_points": "Brauch {required} Punkten, huet {current}", - "pin_required": "Personal-PIN erfuerderlech", - "pin_invalid": "Ongëlteg Personal-PIN", - "pin_locked": "PIN gespaart wéinst ze vill Fehlversich" + "menu": { + "loyalty": "Treiprogramm", + "loyalty_programs": "Treiprogrammer", + "programs": "Programmer", + "analytics": "Analytik", + "dashboard": "Dashboard", + "customer_cards": "Clientekaarten", + "statistics": "Statistiken" } - } } diff --git a/app/modules/messaging/locales/de.json b/app/modules/messaging/locales/de.json index 7be6c338..25d59448 100644 --- a/app/modules/messaging/locales/de.json +++ b/app/modules/messaging/locales/de.json @@ -1,54 +1,64 @@ { - "notifications": { - "title": "Benachrichtigungen", - "mark_read": "Als gelesen markieren", - "mark_all_read": "Alle als gelesen markieren", - "no_notifications": "Keine Benachrichtigungen", - "new_order": "Neue Bestellung", - "order_updated": "Bestellung aktualisiert", - "low_stock": "Warnung bei geringem Bestand", - "import_complete": "Import abgeschlossen", - "import_failed": "Import fehlgeschlagen" - }, - "messages": { - "failed_to_load_template": "Failed to load template", - "template_saved_successfully": "Template saved successfully", - "reverted_to_platform_default": "Reverted to platform default", - "failed_to_load_preview": "Failed to load preview", - "failed_to_send_test_email": "Failed to send test email", - "failed_to_load_conversations": "Failed to load conversations", - "failed_to_load_conversation": "Failed to load conversation", - "conversation_closed": "Conversation closed", - "failed_to_close_conversation": "Failed to close conversation", - "conversation_reopened": "Conversation reopened", - "failed_to_reopen_conversation": "Failed to reopen conversation", - "conversation_created": "Conversation created", - "notification_marked_as_read": "Notification marked as read", - "all_notifications_marked_as_read": "All notifications marked as read", - "notification_deleted": "Notification deleted", - "notification_settings_saved": "Notification settings saved", - "failed_to_load_templates": "Failed to load templates", - "failed_to_load_recipients": "Failed to load recipients", - "failed_to_load_notifications": "Failed to load notifications", - "failed_to_mark_notification_as_read": "Failed to mark notification as read", - "failed_to_mark_all_as_read": "Failed to mark all as read", - "failed_to_delete_notification": "Failed to delete notification", - "failed_to_load_alerts": "Failed to load alerts", - "alert_resolved_successfully": "Alert resolved successfully", - "failed_to_resolve_alert": "Failed to resolve alert" - }, - "features": { - "messaging_basic": { - "name": "Basis-Nachrichten", - "description": "Grundlegende Nachrichtenfunktionalität" + "notifications": { + "title": "Benachrichtigungen", + "mark_read": "Als gelesen markieren", + "mark_all_read": "Alle als gelesen markieren", + "no_notifications": "Keine Benachrichtigungen", + "new_order": "Neue Bestellung", + "order_updated": "Bestellung aktualisiert", + "low_stock": "Warnung bei geringem Bestand", + "import_complete": "Import abgeschlossen", + "import_failed": "Import fehlgeschlagen" }, - "email_templates": { - "name": "E-Mail-Vorlagen", - "description": "Anpassbare E-Mail-Vorlagen" + "messages": { + "failed_to_load_template": "Failed to load template", + "template_saved_successfully": "Template saved successfully", + "reverted_to_platform_default": "Reverted to platform default", + "failed_to_load_preview": "Failed to load preview", + "failed_to_send_test_email": "Failed to send test email", + "failed_to_load_conversations": "Failed to load conversations", + "failed_to_load_conversation": "Failed to load conversation", + "conversation_closed": "Conversation closed", + "failed_to_close_conversation": "Failed to close conversation", + "conversation_reopened": "Conversation reopened", + "failed_to_reopen_conversation": "Failed to reopen conversation", + "conversation_created": "Conversation created", + "notification_marked_as_read": "Notification marked as read", + "all_notifications_marked_as_read": "All notifications marked as read", + "notification_deleted": "Notification deleted", + "notification_settings_saved": "Notification settings saved", + "failed_to_load_templates": "Failed to load templates", + "failed_to_load_recipients": "Failed to load recipients", + "failed_to_load_notifications": "Failed to load notifications", + "failed_to_mark_notification_as_read": "Failed to mark notification as read", + "failed_to_mark_all_as_read": "Failed to mark all as read", + "failed_to_delete_notification": "Failed to delete notification", + "failed_to_load_alerts": "Failed to load alerts", + "alert_resolved_successfully": "Alert resolved successfully", + "failed_to_resolve_alert": "Failed to resolve alert" }, - "bulk_messaging": { - "name": "Massennachrichten", - "description": "Massennachrichten an Kunden senden" + "features": { + "messaging_basic": { + "name": "Basis-Nachrichten", + "description": "Grundlegende Nachrichtenfunktionalität" + }, + "email_templates": { + "name": "E-Mail-Vorlagen", + "description": "Anpassbare E-Mail-Vorlagen" + }, + "bulk_messaging": { + "name": "Massennachrichten", + "description": "Massennachrichten an Kunden senden" + } + }, + "menu": { + "platform_admin": "Plattform-Administration", + "platform_monitoring": "Plattform-Überwachung", + "platform_settings": "Plattform-Einstellungen", + "customers": "Kunden", + "account_settings": "Kontoeinstellungen", + "messages": "Nachrichten", + "notifications": "Benachrichtigungen", + "email_templates": "E-Mail-Vorlagen" } - } } diff --git a/app/modules/messaging/locales/en.json b/app/modules/messaging/locales/en.json index ac3e837d..bf7da4de 100644 --- a/app/modules/messaging/locales/en.json +++ b/app/modules/messaging/locales/en.json @@ -1,63 +1,73 @@ { - "notifications": { - "title": "Notifications", - "mark_read": "Mark as Read", - "mark_all_read": "Mark All as Read", - "no_notifications": "No notifications", - "new_order": "New Order", - "order_updated": "Order Updated", - "low_stock": "Low Stock Alert", - "import_complete": "Import Complete", - "import_failed": "Import Failed" - }, - "messages": { - "failed_to_load_template": "Failed to load template", - "template_saved_successfully": "Template saved successfully", - "reverted_to_platform_default": "Reverted to platform default", - "failed_to_load_preview": "Failed to load preview", - "failed_to_send_test_email": "Failed to send test email", - "failed_to_load_conversations": "Failed to load conversations", - "failed_to_load_conversation": "Failed to load conversation", - "conversation_closed": "Conversation closed", - "failed_to_close_conversation": "Failed to close conversation", - "conversation_reopened": "Conversation reopened", - "failed_to_reopen_conversation": "Failed to reopen conversation", - "conversation_created": "Conversation created", - "notification_marked_as_read": "Notification marked as read", - "all_notifications_marked_as_read": "All notifications marked as read", - "notification_deleted": "Notification deleted", - "notification_settings_saved": "Notification settings saved", - "failed_to_load_templates": "Failed to load templates", - "failed_to_load_recipients": "Failed to load recipients", - "failed_to_load_notifications": "Failed to load notifications", - "failed_to_mark_notification_as_read": "Failed to mark notification as read", - "failed_to_mark_all_as_read": "Failed to mark all as read", - "failed_to_delete_notification": "Failed to delete notification", - "failed_to_load_alerts": "Failed to load alerts", - "alert_resolved_successfully": "Alert resolved successfully", - "failed_to_resolve_alert": "Failed to resolve alert", - "no_template_for_language": "No template for {language} - create one by saving", - "failed_to_save_template": "Failed to save template", - "test_email_sent": "Test email sent to {email}" - }, - "confirmations": { - "delete_notification": "Are you sure you want to delete this notification?", - "close_conversation": "Close this conversation?", - "close_conversation_admin": "Are you sure you want to close this conversation?", - "delete_customization": "Are you sure you want to delete your customization and revert to the platform default?" - }, - "features": { - "messaging_basic": { - "name": "Basic Messaging", - "description": "Basic messaging functionality" + "notifications": { + "title": "Notifications", + "mark_read": "Mark as Read", + "mark_all_read": "Mark All as Read", + "no_notifications": "No notifications", + "new_order": "New Order", + "order_updated": "Order Updated", + "low_stock": "Low Stock Alert", + "import_complete": "Import Complete", + "import_failed": "Import Failed" }, - "email_templates": { - "name": "Email Templates", - "description": "Customizable email templates" + "messages": { + "failed_to_load_template": "Failed to load template", + "template_saved_successfully": "Template saved successfully", + "reverted_to_platform_default": "Reverted to platform default", + "failed_to_load_preview": "Failed to load preview", + "failed_to_send_test_email": "Failed to send test email", + "failed_to_load_conversations": "Failed to load conversations", + "failed_to_load_conversation": "Failed to load conversation", + "conversation_closed": "Conversation closed", + "failed_to_close_conversation": "Failed to close conversation", + "conversation_reopened": "Conversation reopened", + "failed_to_reopen_conversation": "Failed to reopen conversation", + "conversation_created": "Conversation created", + "notification_marked_as_read": "Notification marked as read", + "all_notifications_marked_as_read": "All notifications marked as read", + "notification_deleted": "Notification deleted", + "notification_settings_saved": "Notification settings saved", + "failed_to_load_templates": "Failed to load templates", + "failed_to_load_recipients": "Failed to load recipients", + "failed_to_load_notifications": "Failed to load notifications", + "failed_to_mark_notification_as_read": "Failed to mark notification as read", + "failed_to_mark_all_as_read": "Failed to mark all as read", + "failed_to_delete_notification": "Failed to delete notification", + "failed_to_load_alerts": "Failed to load alerts", + "alert_resolved_successfully": "Alert resolved successfully", + "failed_to_resolve_alert": "Failed to resolve alert", + "no_template_for_language": "No template for {language} - create one by saving", + "failed_to_save_template": "Failed to save template", + "test_email_sent": "Test email sent to {email}" }, - "bulk_messaging": { - "name": "Bulk Messaging", - "description": "Send bulk messages to customers" + "confirmations": { + "delete_notification": "Are you sure you want to delete this notification?", + "close_conversation": "Close this conversation?", + "close_conversation_admin": "Are you sure you want to close this conversation?", + "delete_customization": "Are you sure you want to delete your customization and revert to the platform default?" + }, + "features": { + "messaging_basic": { + "name": "Basic Messaging", + "description": "Basic messaging functionality" + }, + "email_templates": { + "name": "Email Templates", + "description": "Customizable email templates" + }, + "bulk_messaging": { + "name": "Bulk Messaging", + "description": "Send bulk messages to customers" + } + }, + "menu": { + "platform_admin": "Platform Admin", + "platform_monitoring": "Platform Monitoring", + "platform_settings": "Platform Settings", + "customers": "Customers", + "account_settings": "Account Settings", + "messages": "Messages", + "notifications": "Notifications", + "email_templates": "Email Templates" } - } } diff --git a/app/modules/messaging/locales/fr.json b/app/modules/messaging/locales/fr.json index c11e0cd3..99273ede 100644 --- a/app/modules/messaging/locales/fr.json +++ b/app/modules/messaging/locales/fr.json @@ -1,54 +1,64 @@ { - "notifications": { - "title": "Notifications", - "mark_read": "Marquer comme lu", - "mark_all_read": "Tout marquer comme lu", - "no_notifications": "Aucune notification", - "new_order": "Nouvelle commande", - "order_updated": "Commande mise à jour", - "low_stock": "Alerte stock faible", - "import_complete": "Importation terminée", - "import_failed": "Échec de l'importation" - }, - "messages": { - "failed_to_load_template": "Failed to load template", - "template_saved_successfully": "Template saved successfully", - "reverted_to_platform_default": "Reverted to platform default", - "failed_to_load_preview": "Failed to load preview", - "failed_to_send_test_email": "Failed to send test email", - "failed_to_load_conversations": "Failed to load conversations", - "failed_to_load_conversation": "Failed to load conversation", - "conversation_closed": "Conversation closed", - "failed_to_close_conversation": "Failed to close conversation", - "conversation_reopened": "Conversation reopened", - "failed_to_reopen_conversation": "Failed to reopen conversation", - "conversation_created": "Conversation created", - "notification_marked_as_read": "Notification marked as read", - "all_notifications_marked_as_read": "All notifications marked as read", - "notification_deleted": "Notification deleted", - "notification_settings_saved": "Notification settings saved", - "failed_to_load_templates": "Failed to load templates", - "failed_to_load_recipients": "Failed to load recipients", - "failed_to_load_notifications": "Failed to load notifications", - "failed_to_mark_notification_as_read": "Failed to mark notification as read", - "failed_to_mark_all_as_read": "Failed to mark all as read", - "failed_to_delete_notification": "Failed to delete notification", - "failed_to_load_alerts": "Failed to load alerts", - "alert_resolved_successfully": "Alert resolved successfully", - "failed_to_resolve_alert": "Failed to resolve alert" - }, - "features": { - "messaging_basic": { - "name": "Messagerie de base", - "description": "Fonctionnalité de messagerie de base" + "notifications": { + "title": "Notifications", + "mark_read": "Marquer comme lu", + "mark_all_read": "Tout marquer comme lu", + "no_notifications": "Aucune notification", + "new_order": "Nouvelle commande", + "order_updated": "Commande mise à jour", + "low_stock": "Alerte stock faible", + "import_complete": "Importation terminée", + "import_failed": "Échec de l'importation" }, - "email_templates": { - "name": "Modèles d'e-mail", - "description": "Modèles d'e-mail personnalisables" + "messages": { + "failed_to_load_template": "Failed to load template", + "template_saved_successfully": "Template saved successfully", + "reverted_to_platform_default": "Reverted to platform default", + "failed_to_load_preview": "Failed to load preview", + "failed_to_send_test_email": "Failed to send test email", + "failed_to_load_conversations": "Failed to load conversations", + "failed_to_load_conversation": "Failed to load conversation", + "conversation_closed": "Conversation closed", + "failed_to_close_conversation": "Failed to close conversation", + "conversation_reopened": "Conversation reopened", + "failed_to_reopen_conversation": "Failed to reopen conversation", + "conversation_created": "Conversation created", + "notification_marked_as_read": "Notification marked as read", + "all_notifications_marked_as_read": "All notifications marked as read", + "notification_deleted": "Notification deleted", + "notification_settings_saved": "Notification settings saved", + "failed_to_load_templates": "Failed to load templates", + "failed_to_load_recipients": "Failed to load recipients", + "failed_to_load_notifications": "Failed to load notifications", + "failed_to_mark_notification_as_read": "Failed to mark notification as read", + "failed_to_mark_all_as_read": "Failed to mark all as read", + "failed_to_delete_notification": "Failed to delete notification", + "failed_to_load_alerts": "Failed to load alerts", + "alert_resolved_successfully": "Alert resolved successfully", + "failed_to_resolve_alert": "Failed to resolve alert" }, - "bulk_messaging": { - "name": "Messagerie en masse", - "description": "Envoyer des messages en masse aux clients" + "features": { + "messaging_basic": { + "name": "Messagerie de base", + "description": "Fonctionnalité de messagerie de base" + }, + "email_templates": { + "name": "Modèles d'e-mail", + "description": "Modèles d'e-mail personnalisables" + }, + "bulk_messaging": { + "name": "Messagerie en masse", + "description": "Envoyer des messages en masse aux clients" + } + }, + "menu": { + "platform_admin": "Administration de la plateforme", + "platform_monitoring": "Surveillance de la plateforme", + "platform_settings": "Paramètres de la plateforme", + "customers": "Clients", + "account_settings": "Paramètres du compte", + "messages": "Messages", + "notifications": "Notifications", + "email_templates": "Modèles d'e-mail" } - } } diff --git a/app/modules/messaging/locales/lb.json b/app/modules/messaging/locales/lb.json index f055f574..a1aba88b 100644 --- a/app/modules/messaging/locales/lb.json +++ b/app/modules/messaging/locales/lb.json @@ -1,54 +1,64 @@ { - "notifications": { - "title": "Notifikatiounen", - "mark_read": "Als gelies markéieren", - "mark_all_read": "Alles als gelies markéieren", - "no_notifications": "Keng Notifikatiounen", - "new_order": "Nei Bestellung", - "order_updated": "Bestellung aktualiséiert", - "low_stock": "Niddreg Lager Alarm", - "import_complete": "Import fäerdeg", - "import_failed": "Import feelgeschloen" - }, - "messages": { - "failed_to_load_template": "Failed to load template", - "template_saved_successfully": "Template saved successfully", - "reverted_to_platform_default": "Reverted to platform default", - "failed_to_load_preview": "Failed to load preview", - "failed_to_send_test_email": "Failed to send test email", - "failed_to_load_conversations": "Failed to load conversations", - "failed_to_load_conversation": "Failed to load conversation", - "conversation_closed": "Conversation closed", - "failed_to_close_conversation": "Failed to close conversation", - "conversation_reopened": "Conversation reopened", - "failed_to_reopen_conversation": "Failed to reopen conversation", - "conversation_created": "Conversation created", - "notification_marked_as_read": "Notification marked as read", - "all_notifications_marked_as_read": "All notifications marked as read", - "notification_deleted": "Notification deleted", - "notification_settings_saved": "Notification settings saved", - "failed_to_load_templates": "Failed to load templates", - "failed_to_load_recipients": "Failed to load recipients", - "failed_to_load_notifications": "Failed to load notifications", - "failed_to_mark_notification_as_read": "Failed to mark notification as read", - "failed_to_mark_all_as_read": "Failed to mark all as read", - "failed_to_delete_notification": "Failed to delete notification", - "failed_to_load_alerts": "Failed to load alerts", - "alert_resolved_successfully": "Alert resolved successfully", - "failed_to_resolve_alert": "Failed to resolve alert" - }, - "features": { - "messaging_basic": { - "name": "Basis-Noriichten", - "description": "Grondleeënd Noriichtenfunktiounalitéit" + "notifications": { + "title": "Notifikatiounen", + "mark_read": "Als gelies markéieren", + "mark_all_read": "Alles als gelies markéieren", + "no_notifications": "Keng Notifikatiounen", + "new_order": "Nei Bestellung", + "order_updated": "Bestellung aktualiséiert", + "low_stock": "Niddreg Lager Alarm", + "import_complete": "Import fäerdeg", + "import_failed": "Import feelgeschloen" }, - "email_templates": { - "name": "E-Mail-Virlagen", - "description": "Upassbar E-Mail-Virlagen" + "messages": { + "failed_to_load_template": "Failed to load template", + "template_saved_successfully": "Template saved successfully", + "reverted_to_platform_default": "Reverted to platform default", + "failed_to_load_preview": "Failed to load preview", + "failed_to_send_test_email": "Failed to send test email", + "failed_to_load_conversations": "Failed to load conversations", + "failed_to_load_conversation": "Failed to load conversation", + "conversation_closed": "Conversation closed", + "failed_to_close_conversation": "Failed to close conversation", + "conversation_reopened": "Conversation reopened", + "failed_to_reopen_conversation": "Failed to reopen conversation", + "conversation_created": "Conversation created", + "notification_marked_as_read": "Notification marked as read", + "all_notifications_marked_as_read": "All notifications marked as read", + "notification_deleted": "Notification deleted", + "notification_settings_saved": "Notification settings saved", + "failed_to_load_templates": "Failed to load templates", + "failed_to_load_recipients": "Failed to load recipients", + "failed_to_load_notifications": "Failed to load notifications", + "failed_to_mark_notification_as_read": "Failed to mark notification as read", + "failed_to_mark_all_as_read": "Failed to mark all as read", + "failed_to_delete_notification": "Failed to delete notification", + "failed_to_load_alerts": "Failed to load alerts", + "alert_resolved_successfully": "Alert resolved successfully", + "failed_to_resolve_alert": "Failed to resolve alert" }, - "bulk_messaging": { - "name": "Massennoriichten", - "description": "Massennoriichten u Clienten schécken" + "features": { + "messaging_basic": { + "name": "Basis-Noriichten", + "description": "Grondleeënd Noriichtenfunktiounalitéit" + }, + "email_templates": { + "name": "E-Mail-Virlagen", + "description": "Upassbar E-Mail-Virlagen" + }, + "bulk_messaging": { + "name": "Massennoriichten", + "description": "Massennoriichten u Clienten schécken" + } + }, + "menu": { + "platform_admin": "Plattform-Administratioun", + "platform_monitoring": "Plattform-Iwwerwaachung", + "platform_settings": "Plattform-Astellungen", + "customers": "Clienten", + "account_settings": "Kont-Astellungen", + "messages": "Messagen", + "notifications": "Notifikatiounen", + "email_templates": "E-Mail-Virlagen" } - } } diff --git a/app/modules/monitoring/locales/de.json b/app/modules/monitoring/locales/de.json index 0967ef42..af01f789 100644 --- a/app/modules/monitoring/locales/de.json +++ b/app/modules/monitoring/locales/de.json @@ -1 +1,12 @@ -{} +{ + "menu": { + "platform_health": "Plattform-Gesundheit", + "platform_monitoring": "Plattform-Überwachung", + "capacity_monitor": "Kapazitätsmonitor", + "testing_hub": "Test-Center", + "code_quality": "Code-Qualität", + "import_jobs": "Import-Aufträge", + "background_tasks": "Hintergrundaufgaben", + "application_logs": "Anwendungsprotokolle" + } +} diff --git a/app/modules/monitoring/locales/en.json b/app/modules/monitoring/locales/en.json index 0967ef42..1ae0853e 100644 --- a/app/modules/monitoring/locales/en.json +++ b/app/modules/monitoring/locales/en.json @@ -1 +1,12 @@ -{} +{ + "menu": { + "platform_health": "Platform Health", + "platform_monitoring": "Platform Monitoring", + "capacity_monitor": "Capacity Monitor", + "testing_hub": "Testing Hub", + "code_quality": "Code Quality", + "import_jobs": "Import Jobs", + "background_tasks": "Background Tasks", + "application_logs": "Application Logs" + } +} diff --git a/app/modules/monitoring/locales/fr.json b/app/modules/monitoring/locales/fr.json index 0967ef42..ac0e4512 100644 --- a/app/modules/monitoring/locales/fr.json +++ b/app/modules/monitoring/locales/fr.json @@ -1 +1,12 @@ -{} +{ + "menu": { + "platform_health": "Santé de la plateforme", + "platform_monitoring": "Surveillance de la plateforme", + "capacity_monitor": "Moniteur de capacité", + "testing_hub": "Centre de tests", + "code_quality": "Qualité du code", + "import_jobs": "Tâches d'import", + "background_tasks": "Tâches de fond", + "application_logs": "Journaux applicatifs" + } +} diff --git a/app/modules/monitoring/locales/lb.json b/app/modules/monitoring/locales/lb.json index 0967ef42..03526bdb 100644 --- a/app/modules/monitoring/locales/lb.json +++ b/app/modules/monitoring/locales/lb.json @@ -1 +1,12 @@ -{} +{ + "menu": { + "platform_health": "Plattform-Gesondheet", + "platform_monitoring": "Plattform-Iwwerwaachung", + "capacity_monitor": "Kapazitéitsmonitor", + "testing_hub": "Test-Center", + "code_quality": "Code-Qualitéit", + "import_jobs": "Import-Aufträg", + "background_tasks": "Hannergrondaufgaben", + "application_logs": "Applikatiounsprotokoller" + } +} diff --git a/app/modules/orders/locales/de.json b/app/modules/orders/locales/de.json index c46e3500..aade3b60 100644 --- a/app/modules/orders/locales/de.json +++ b/app/modules/orders/locales/de.json @@ -1,78 +1,83 @@ { - "orders": { - "title": "Bestellungen", - "order": "Bestellung", - "order_id": "Bestellnummer", - "order_number": "Bestellnummer", - "order_date": "Bestelldatum", - "order_status": "Bestellstatus", - "order_details": "Bestelldetails", - "order_items": "Bestellartikel", - "order_total": "Bestellsumme", - "subtotal": "Zwischensumme", - "shipping": "Versand", - "tax": "Steuer", - "discount": "Rabatt", - "customer": "Kunde", - "shipping_address": "Lieferadresse", - "billing_address": "Rechnungsadresse", - "payment_method": "Zahlungsmethode", - "payment_status": "Zahlungsstatus", - "tracking": "Sendungsverfolgung", - "tracking_number": "Sendungsnummer", - "carrier": "Versanddienstleister", - "no_orders": "Keine Bestellungen gefunden", - "search_orders": "Bestellungen suchen...", - "filter_by_status": "Nach Status filtern", - "status_pending": "Ausstehend", - "status_processing": "In Bearbeitung", - "status_shipped": "Versendet", - "status_delivered": "Zugestellt", - "status_cancelled": "Storniert", - "status_refunded": "Erstattet", - "status_confirmed": "Bestätigt", - "status_rejected": "Abgelehnt", - "confirm_order": "Bestellung bestätigen", - "reject_order": "Bestellung ablehnen", - "set_tracking": "Sendungsverfolgung setzen", - "view_details": "Details ansehen" - }, - "messages": { - "order_status_updated": "Order status updated", - "item_shipped_successfully": "Item shipped successfully", - "all_items_shipped": "All items shipped", - "invoice_downloaded": "Invoice downloaded", - "failed_to_load_order_details": "Failed to load order details.", - "order_status_updated_successfully": "Order status updated successfully.", - "order_marked_as_shipped_successfully": "Order marked as shipped successfully.", - "no_shipping_label_url_available_for_this": "No shipping label URL available for this order." - }, - "features": { - "orders_per_month": { - "name": "Monatliche Bestellungen", - "description": "Maximale Bestellungen pro Monat", - "unit": "Bestellungen/Monat" + "orders": { + "title": "Bestellungen", + "order": "Bestellung", + "order_id": "Bestellnummer", + "order_number": "Bestellnummer", + "order_date": "Bestelldatum", + "order_status": "Bestellstatus", + "order_details": "Bestelldetails", + "order_items": "Bestellartikel", + "order_total": "Bestellsumme", + "subtotal": "Zwischensumme", + "shipping": "Versand", + "tax": "Steuer", + "discount": "Rabatt", + "customer": "Kunde", + "shipping_address": "Lieferadresse", + "billing_address": "Rechnungsadresse", + "payment_method": "Zahlungsmethode", + "payment_status": "Zahlungsstatus", + "tracking": "Sendungsverfolgung", + "tracking_number": "Sendungsnummer", + "carrier": "Versanddienstleister", + "no_orders": "Keine Bestellungen gefunden", + "search_orders": "Bestellungen suchen...", + "filter_by_status": "Nach Status filtern", + "status_pending": "Ausstehend", + "status_processing": "In Bearbeitung", + "status_shipped": "Versendet", + "status_delivered": "Zugestellt", + "status_cancelled": "Storniert", + "status_refunded": "Erstattet", + "status_confirmed": "Bestätigt", + "status_rejected": "Abgelehnt", + "confirm_order": "Bestellung bestätigen", + "reject_order": "Bestellung ablehnen", + "set_tracking": "Sendungsverfolgung setzen", + "view_details": "Details ansehen" }, - "order_history_months": { - "name": "Bestellverlauf", - "description": "Monate des aufbewahrten Bestellverlaufs", - "unit": "Monate" + "messages": { + "order_status_updated": "Order status updated", + "item_shipped_successfully": "Item shipped successfully", + "all_items_shipped": "All items shipped", + "invoice_downloaded": "Invoice downloaded", + "failed_to_load_order_details": "Failed to load order details.", + "order_status_updated_successfully": "Order status updated successfully.", + "order_marked_as_shipped_successfully": "Order marked as shipped successfully.", + "no_shipping_label_url_available_for_this": "No shipping label URL available for this order." }, - "order_management": { - "name": "Bestellverwaltung", - "description": "Vollständige Bestellverwaltungsfunktionen" + "features": { + "orders_per_month": { + "name": "Monatliche Bestellungen", + "description": "Maximale Bestellungen pro Monat", + "unit": "Bestellungen/Monat" + }, + "order_history_months": { + "name": "Bestellverlauf", + "description": "Monate des aufbewahrten Bestellverlaufs", + "unit": "Monate" + }, + "order_management": { + "name": "Bestellverwaltung", + "description": "Vollständige Bestellverwaltungsfunktionen" + }, + "order_bulk_actions": { + "name": "Massenaktionen", + "description": "Massenaktionen für Bestellungen durchführen" + }, + "order_export": { + "name": "Bestellexport", + "description": "Bestelldaten exportieren" + }, + "automation_rules": { + "name": "Automatisierungsregeln", + "description": "Automatisierte Bestellverarbeitungsregeln" + } }, - "order_bulk_actions": { - "name": "Massenaktionen", - "description": "Massenaktionen für Bestellungen durchführen" - }, - "order_export": { - "name": "Bestellexport", - "description": "Bestelldaten exportieren" - }, - "automation_rules": { - "name": "Automatisierungsregeln", - "description": "Automatisierte Bestellverarbeitungsregeln" + "menu": { + "store_operations": "Shop-Betrieb", + "sales_orders": "Verkäufe & Bestellungen", + "orders": "Bestellungen" } - } } diff --git a/app/modules/orders/locales/en.json b/app/modules/orders/locales/en.json index ba26fbd4..99a42f4b 100644 --- a/app/modules/orders/locales/en.json +++ b/app/modules/orders/locales/en.json @@ -1,78 +1,83 @@ { - "orders": { - "title": "Orders", - "order": "Order", - "order_id": "Order ID", - "order_number": "Order Number", - "order_date": "Order Date", - "order_status": "Order Status", - "order_details": "Order Details", - "order_items": "Order Items", - "order_total": "Order Total", - "subtotal": "Subtotal", - "shipping": "Shipping", - "tax": "Tax", - "discount": "Discount", - "customer": "Customer", - "shipping_address": "Shipping Address", - "billing_address": "Billing Address", - "payment_method": "Payment Method", - "payment_status": "Payment Status", - "tracking": "Tracking", - "tracking_number": "Tracking Number", - "carrier": "Carrier", - "no_orders": "No orders found", - "search_orders": "Search orders...", - "filter_by_status": "Filter by status", - "status_pending": "Pending", - "status_processing": "Processing", - "status_shipped": "Shipped", - "status_delivered": "Delivered", - "status_cancelled": "Cancelled", - "status_refunded": "Refunded", - "status_confirmed": "Confirmed", - "status_rejected": "Rejected", - "confirm_order": "Confirm Order", - "reject_order": "Reject Order", - "set_tracking": "Set Tracking", - "view_details": "View Details" - }, - "messages": { - "order_status_updated": "Order status updated", - "item_shipped_successfully": "Item shipped successfully", - "all_items_shipped": "All items shipped", - "invoice_downloaded": "Invoice downloaded", - "failed_to_load_order_details": "Failed to load order details.", - "order_status_updated_successfully": "Order status updated successfully.", - "order_marked_as_shipped_successfully": "Order marked as shipped successfully.", - "no_shipping_label_url_available_for_this": "No shipping label URL available for this order." - }, - "features": { - "orders_per_month": { - "name": "Monthly Orders", - "description": "Maximum orders per month", - "unit": "orders/month" + "orders": { + "title": "Orders", + "order": "Order", + "order_id": "Order ID", + "order_number": "Order Number", + "order_date": "Order Date", + "order_status": "Order Status", + "order_details": "Order Details", + "order_items": "Order Items", + "order_total": "Order Total", + "subtotal": "Subtotal", + "shipping": "Shipping", + "tax": "Tax", + "discount": "Discount", + "customer": "Customer", + "shipping_address": "Shipping Address", + "billing_address": "Billing Address", + "payment_method": "Payment Method", + "payment_status": "Payment Status", + "tracking": "Tracking", + "tracking_number": "Tracking Number", + "carrier": "Carrier", + "no_orders": "No orders found", + "search_orders": "Search orders...", + "filter_by_status": "Filter by status", + "status_pending": "Pending", + "status_processing": "Processing", + "status_shipped": "Shipped", + "status_delivered": "Delivered", + "status_cancelled": "Cancelled", + "status_refunded": "Refunded", + "status_confirmed": "Confirmed", + "status_rejected": "Rejected", + "confirm_order": "Confirm Order", + "reject_order": "Reject Order", + "set_tracking": "Set Tracking", + "view_details": "View Details" }, - "order_history_months": { - "name": "Order History", - "description": "Months of order history retained", - "unit": "months" + "messages": { + "order_status_updated": "Order status updated", + "item_shipped_successfully": "Item shipped successfully", + "all_items_shipped": "All items shipped", + "invoice_downloaded": "Invoice downloaded", + "failed_to_load_order_details": "Failed to load order details.", + "order_status_updated_successfully": "Order status updated successfully.", + "order_marked_as_shipped_successfully": "Order marked as shipped successfully.", + "no_shipping_label_url_available_for_this": "No shipping label URL available for this order." }, - "order_management": { - "name": "Order Management", - "description": "Full order management capabilities" + "features": { + "orders_per_month": { + "name": "Monthly Orders", + "description": "Maximum orders per month", + "unit": "orders/month" + }, + "order_history_months": { + "name": "Order History", + "description": "Months of order history retained", + "unit": "months" + }, + "order_management": { + "name": "Order Management", + "description": "Full order management capabilities" + }, + "order_bulk_actions": { + "name": "Bulk Actions", + "description": "Perform bulk actions on orders" + }, + "order_export": { + "name": "Order Export", + "description": "Export order data" + }, + "automation_rules": { + "name": "Automation Rules", + "description": "Automated order processing rules" + } }, - "order_bulk_actions": { - "name": "Bulk Actions", - "description": "Perform bulk actions on orders" - }, - "order_export": { - "name": "Order Export", - "description": "Export order data" - }, - "automation_rules": { - "name": "Automation Rules", - "description": "Automated order processing rules" + "menu": { + "store_operations": "Store Operations", + "sales_orders": "Sales & Orders", + "orders": "Orders" } - } } diff --git a/app/modules/orders/locales/fr.json b/app/modules/orders/locales/fr.json index 19b548d9..fc60c0fe 100644 --- a/app/modules/orders/locales/fr.json +++ b/app/modules/orders/locales/fr.json @@ -1,78 +1,83 @@ { - "orders": { - "title": "Commandes", - "order": "Commande", - "order_id": "ID de commande", - "order_number": "Numéro de commande", - "order_date": "Date de commande", - "order_status": "Statut de la commande", - "order_details": "Détails de la commande", - "order_items": "Articles de la commande", - "order_total": "Total de la commande", - "subtotal": "Sous-total", - "shipping": "Livraison", - "tax": "Taxe", - "discount": "Remise", - "customer": "Client", - "shipping_address": "Adresse de livraison", - "billing_address": "Adresse de facturation", - "payment_method": "Mode de paiement", - "payment_status": "Statut du paiement", - "tracking": "Suivi", - "tracking_number": "Numéro de suivi", - "carrier": "Transporteur", - "no_orders": "Aucune commande trouvée", - "search_orders": "Rechercher des commandes...", - "filter_by_status": "Filtrer par statut", - "status_pending": "En attente", - "status_processing": "En cours", - "status_shipped": "Expédiée", - "status_delivered": "Livrée", - "status_cancelled": "Annulée", - "status_refunded": "Remboursée", - "status_confirmed": "Confirmée", - "status_rejected": "Rejetée", - "confirm_order": "Confirmer la commande", - "reject_order": "Rejeter la commande", - "set_tracking": "Définir le suivi", - "view_details": "Voir les détails" - }, - "messages": { - "order_status_updated": "Order status updated", - "item_shipped_successfully": "Item shipped successfully", - "all_items_shipped": "All items shipped", - "invoice_downloaded": "Invoice downloaded", - "failed_to_load_order_details": "Failed to load order details.", - "order_status_updated_successfully": "Order status updated successfully.", - "order_marked_as_shipped_successfully": "Order marked as shipped successfully.", - "no_shipping_label_url_available_for_this": "No shipping label URL available for this order." - }, - "features": { - "orders_per_month": { - "name": "Commandes mensuelles", - "description": "Nombre maximum de commandes par mois", - "unit": "commandes/mois" + "orders": { + "title": "Commandes", + "order": "Commande", + "order_id": "ID de commande", + "order_number": "Numéro de commande", + "order_date": "Date de commande", + "order_status": "Statut de la commande", + "order_details": "Détails de la commande", + "order_items": "Articles de la commande", + "order_total": "Total de la commande", + "subtotal": "Sous-total", + "shipping": "Livraison", + "tax": "Taxe", + "discount": "Remise", + "customer": "Client", + "shipping_address": "Adresse de livraison", + "billing_address": "Adresse de facturation", + "payment_method": "Mode de paiement", + "payment_status": "Statut du paiement", + "tracking": "Suivi", + "tracking_number": "Numéro de suivi", + "carrier": "Transporteur", + "no_orders": "Aucune commande trouvée", + "search_orders": "Rechercher des commandes...", + "filter_by_status": "Filtrer par statut", + "status_pending": "En attente", + "status_processing": "En cours", + "status_shipped": "Expédiée", + "status_delivered": "Livrée", + "status_cancelled": "Annulée", + "status_refunded": "Remboursée", + "status_confirmed": "Confirmée", + "status_rejected": "Rejetée", + "confirm_order": "Confirmer la commande", + "reject_order": "Rejeter la commande", + "set_tracking": "Définir le suivi", + "view_details": "Voir les détails" }, - "order_history_months": { - "name": "Historique des commandes", - "description": "Mois d'historique des commandes conservés", - "unit": "mois" + "messages": { + "order_status_updated": "Order status updated", + "item_shipped_successfully": "Item shipped successfully", + "all_items_shipped": "All items shipped", + "invoice_downloaded": "Invoice downloaded", + "failed_to_load_order_details": "Failed to load order details.", + "order_status_updated_successfully": "Order status updated successfully.", + "order_marked_as_shipped_successfully": "Order marked as shipped successfully.", + "no_shipping_label_url_available_for_this": "No shipping label URL available for this order." }, - "order_management": { - "name": "Gestion des commandes", - "description": "Fonctionnalités complètes de gestion des commandes" + "features": { + "orders_per_month": { + "name": "Commandes mensuelles", + "description": "Nombre maximum de commandes par mois", + "unit": "commandes/mois" + }, + "order_history_months": { + "name": "Historique des commandes", + "description": "Mois d'historique des commandes conservés", + "unit": "mois" + }, + "order_management": { + "name": "Gestion des commandes", + "description": "Fonctionnalités complètes de gestion des commandes" + }, + "order_bulk_actions": { + "name": "Actions en masse", + "description": "Effectuer des actions en masse sur les commandes" + }, + "order_export": { + "name": "Export de commandes", + "description": "Exporter les données de commandes" + }, + "automation_rules": { + "name": "Règles d'automatisation", + "description": "Règles de traitement automatique des commandes" + } }, - "order_bulk_actions": { - "name": "Actions en masse", - "description": "Effectuer des actions en masse sur les commandes" - }, - "order_export": { - "name": "Export de commandes", - "description": "Exporter les données de commandes" - }, - "automation_rules": { - "name": "Règles d'automatisation", - "description": "Règles de traitement automatique des commandes" + "menu": { + "store_operations": "Opérations du magasin", + "sales_orders": "Ventes et Commandes", + "orders": "Commandes" } - } } diff --git a/app/modules/orders/locales/lb.json b/app/modules/orders/locales/lb.json index 7ba8a946..8ad7b19a 100644 --- a/app/modules/orders/locales/lb.json +++ b/app/modules/orders/locales/lb.json @@ -1,78 +1,83 @@ { - "orders": { - "title": "Bestellungen", - "order": "Bestellung", - "order_id": "Bestellungs-ID", - "order_number": "Bestellungsnummer", - "order_date": "Bestellungsdatum", - "order_status": "Bestellungsstatus", - "order_details": "Bestellungsdetailer", - "order_items": "Bestellungsartikelen", - "order_total": "Bestellungstotal", - "subtotal": "Subtotal", - "shipping": "Versand", - "tax": "Steier", - "discount": "Rabatt", - "customer": "Client", - "shipping_address": "Liwweradress", - "billing_address": "Rechnungsadress", - "payment_method": "Bezuelmethod", - "payment_status": "Bezuelstatus", - "tracking": "Tracking", - "tracking_number": "Trackingnummer", - "carrier": "Transporteur", - "no_orders": "Keng Bestellunge fonnt", - "search_orders": "Bestellunge sichen...", - "filter_by_status": "No Status filteren", - "status_pending": "Aussteesend", - "status_processing": "A Veraarbechtung", - "status_shipped": "Verschéckt", - "status_delivered": "Geliwwert", - "status_cancelled": "Annuléiert", - "status_refunded": "Rembourséiert", - "status_confirmed": "Bestätegt", - "status_rejected": "Ofgeleent", - "confirm_order": "Bestellung bestätegen", - "reject_order": "Bestellung oflehnen", - "set_tracking": "Tracking setzen", - "view_details": "Detailer kucken" - }, - "messages": { - "order_status_updated": "Order status updated", - "item_shipped_successfully": "Item shipped successfully", - "all_items_shipped": "All items shipped", - "invoice_downloaded": "Invoice downloaded", - "failed_to_load_order_details": "Failed to load order details.", - "order_status_updated_successfully": "Order status updated successfully.", - "order_marked_as_shipped_successfully": "Order marked as shipped successfully.", - "no_shipping_label_url_available_for_this": "No shipping label URL available for this order." - }, - "features": { - "orders_per_month": { - "name": "Monatslech Bestellungen", - "description": "Maximal Bestellungen pro Mount", - "unit": "Bestellungen/Mount" + "orders": { + "title": "Bestellungen", + "order": "Bestellung", + "order_id": "Bestellungs-ID", + "order_number": "Bestellungsnummer", + "order_date": "Bestellungsdatum", + "order_status": "Bestellungsstatus", + "order_details": "Bestellungsdetailer", + "order_items": "Bestellungsartikelen", + "order_total": "Bestellungstotal", + "subtotal": "Subtotal", + "shipping": "Versand", + "tax": "Steier", + "discount": "Rabatt", + "customer": "Client", + "shipping_address": "Liwweradress", + "billing_address": "Rechnungsadress", + "payment_method": "Bezuelmethod", + "payment_status": "Bezuelstatus", + "tracking": "Tracking", + "tracking_number": "Trackingnummer", + "carrier": "Transporteur", + "no_orders": "Keng Bestellunge fonnt", + "search_orders": "Bestellunge sichen...", + "filter_by_status": "No Status filteren", + "status_pending": "Aussteesend", + "status_processing": "A Veraarbechtung", + "status_shipped": "Verschéckt", + "status_delivered": "Geliwwert", + "status_cancelled": "Annuléiert", + "status_refunded": "Rembourséiert", + "status_confirmed": "Bestätegt", + "status_rejected": "Ofgeleent", + "confirm_order": "Bestellung bestätegen", + "reject_order": "Bestellung oflehnen", + "set_tracking": "Tracking setzen", + "view_details": "Detailer kucken" }, - "order_history_months": { - "name": "Bestellverlaf", - "description": "Méint vum opbewaartene Bestellverlaf", - "unit": "Méint" + "messages": { + "order_status_updated": "Order status updated", + "item_shipped_successfully": "Item shipped successfully", + "all_items_shipped": "All items shipped", + "invoice_downloaded": "Invoice downloaded", + "failed_to_load_order_details": "Failed to load order details.", + "order_status_updated_successfully": "Order status updated successfully.", + "order_marked_as_shipped_successfully": "Order marked as shipped successfully.", + "no_shipping_label_url_available_for_this": "No shipping label URL available for this order." }, - "order_management": { - "name": "Bestellverwaltung", - "description": "Vollstänneg Bestellverwaltungsfunktiounen" + "features": { + "orders_per_month": { + "name": "Monatslech Bestellungen", + "description": "Maximal Bestellungen pro Mount", + "unit": "Bestellungen/Mount" + }, + "order_history_months": { + "name": "Bestellverlaf", + "description": "Méint vum opbewaartene Bestellverlaf", + "unit": "Méint" + }, + "order_management": { + "name": "Bestellverwaltung", + "description": "Vollstänneg Bestellverwaltungsfunktiounen" + }, + "order_bulk_actions": { + "name": "Massenaktiounen", + "description": "Massenaktiounen fir Bestellungen duerchféieren" + }, + "order_export": { + "name": "Bestellexport", + "description": "Bestelldaten exportéieren" + }, + "automation_rules": { + "name": "Automatiséierungsreegelen", + "description": "Automatiséiert Bestellveraarbechtungsreegelen" + } }, - "order_bulk_actions": { - "name": "Massenaktiounen", - "description": "Massenaktiounen fir Bestellungen duerchféieren" - }, - "order_export": { - "name": "Bestellexport", - "description": "Bestelldaten exportéieren" - }, - "automation_rules": { - "name": "Automatiséierungsreegelen", - "description": "Automatiséiert Bestellveraarbechtungsreegelen" + "menu": { + "store_operations": "Buttek-Operatiounen", + "sales_orders": "Verkaf & Bestellungen", + "orders": "Bestellungen" } - } } diff --git a/app/modules/tenancy/locales/de.json b/app/modules/tenancy/locales/de.json index 0c1c0792..2fe0af03 100644 --- a/app/modules/tenancy/locales/de.json +++ b/app/modules/tenancy/locales/de.json @@ -1,108 +1,116 @@ { - "menu": { - "user_management": "Benutzerverwaltung", - "merchant_users": "Händler-Benutzer" - }, - "team": { - "title": "Team", - "members": "Mitglieder", - "add_member": "Mitglied hinzufügen", - "invite_member": "Mitglied einladen", - "remove_member": "Mitglied entfernen", - "role": "Rolle", - "owner": "Inhaber", - "manager": "Manager", - "editor": "Bearbeiter", - "viewer": "Betrachter", - "permissions": "Berechtigungen", - "pending_invitations": "Ausstehende Einladungen", - "invitation_sent": "Einladung gesendet", - "invitation_accepted": "Einladung angenommen" - }, - "messages": { - "business_info_saved": "Business info saved", - "marketplace_settings_saved": "Marketplace settings saved", - "please_enter_a_url_first": "Please enter a URL first", - "could_not_validate_url_it_may_still_work": "Could not validate URL - it may still work", - "localization_settings_saved": "Localization settings saved", - "failed_to_load_email_settings": "Failed to load email settings", - "from_email_and_from_name_are_required": "From Email and From Name are required", - "email_settings_saved": "Email settings saved", - "please_enter_a_test_email_address": "Please enter a test email address", - "please_save_your_email_settings_first": "Please save your email settings first", - "test_email_sent_check_your_inbox": "Test email sent! Check your inbox.", - "please_fix_the_errors_before_saving": "Please fix the errors before saving", - "profile_updated_successfully": "Profile updated successfully", - "email_is_required": "Email is required", - "invitation_sent_successfully": "Invitation sent successfully", - "team_member_updated": "Team member updated", - "team_member_removed": "Team member removed", - "invalid_merchant_url": "Invalid merchant URL", - "failed_to_load_merchant_details": "Failed to load merchant details", - "merchant_deleted_successfully": "Merchant deleted successfully", - "merchant_details_refreshed": "Merchant details refreshed", - "invalid_admin_user_url": "Invalid admin user URL", - "failed_to_load_admin_user_details": "Failed to load admin user details", - "you_cannot_deactivate_your_own_account": "You cannot deactivate your own account", - "you_cannot_delete_your_own_account": "You cannot delete your own account", - "admin_user_deleted_successfully": "Admin user deleted successfully", - "admin_user_details_refreshed": "Admin user details refreshed", - "failed_to_initialize_page": "Failed to initialize page", - "failed_to_load_merchant": "Failed to load merchant", - "merchant_updated_successfully": "Merchant updated successfully", - "ownership_transferred_successfully": "Ownership transferred successfully", - "theme_saved_successfully": "Theme saved successfully", - "failed_to_apply_preset": "Failed to apply preset", - "theme_reset_to_default": "Theme reset to default", - "failed_to_reset_theme": "Failed to reset theme", - "failed_to_load_stores": "Failed to load stores", - "store_deleted_successfully": "Store deleted successfully", - "stores_list_refreshed": "Stores list refreshed", - "invalid_user_url": "Invalid user URL", - "failed_to_load_user_details": "Failed to load user details", - "user_deleted_successfully": "User deleted successfully", - "user_details_refreshed": "User details refreshed", - "invalid_store_url": "Invalid store URL", - "failed_to_load_store_details": "Failed to load store details", - "no_store_loaded": "No store loaded", - "subscription_created_successfully": "Subscription created successfully", - "store_details_refreshed": "Store details refreshed", - "failed_to_load_users": "Failed to load users", - "failed_to_delete_user": "Failed to delete user", - "failed_to_load_admin_users": "Failed to load admin users", - "failed_to_load_admin_user": "Failed to load admin user", - "you_cannot_demote_yourself_from_super_ad": "You cannot demote yourself from super admin", - "platform_assigned_successfully": "Platform assigned successfully", - "platform_admin_must_be_assigned_to_at_le": "Platform admin must be assigned to at least one platform", - "platform_removed_successfully": "Platform removed successfully", - "please_fix_the_errors_before_submitting": "Please fix the errors before submitting", - "failed_to_load_store": "Failed to load store", - "store_updated_successfully": "Store updated successfully", - "all_contact_fields_reset_to_merchant_defa": "All contact fields reset to merchant defaults", - "failed_to_load_user": "Failed to load user", - "user_updated_successfully": "User updated successfully" - }, - "features": { - "team_members": { - "name": "Teammitglieder", - "description": "Maximale Anzahl an Teammitgliedern", - "unit": "Mitglieder" + "menu": { + "user_management": "Benutzerverwaltung", + "merchant_users": "Händler-Benutzer", + "platform_admin": "Plattform-Administration", + "content_management": "Inhaltsverwaltung", + "account_settings": "Kontoeinstellungen", + "admin_users": "Admin-Benutzer", + "merchants": "Händler", + "stores": "Shops", + "platforms": "Plattformen", + "team": "Team" }, - "single_user": { - "name": "Einzelbenutzer", - "description": "Einzelbenutzerzugang" + "team": { + "title": "Team", + "members": "Mitglieder", + "add_member": "Mitglied hinzufügen", + "invite_member": "Mitglied einladen", + "remove_member": "Mitglied entfernen", + "role": "Rolle", + "owner": "Inhaber", + "manager": "Manager", + "editor": "Bearbeiter", + "viewer": "Betrachter", + "permissions": "Berechtigungen", + "pending_invitations": "Ausstehende Einladungen", + "invitation_sent": "Einladung gesendet", + "invitation_accepted": "Einladung angenommen" }, - "team_basic": { - "name": "Basis-Team", - "description": "Grundlegende Team-Zusammenarbeit" + "messages": { + "business_info_saved": "Business info saved", + "marketplace_settings_saved": "Marketplace settings saved", + "please_enter_a_url_first": "Please enter a URL first", + "could_not_validate_url_it_may_still_work": "Could not validate URL - it may still work", + "localization_settings_saved": "Localization settings saved", + "failed_to_load_email_settings": "Failed to load email settings", + "from_email_and_from_name_are_required": "From Email and From Name are required", + "email_settings_saved": "Email settings saved", + "please_enter_a_test_email_address": "Please enter a test email address", + "please_save_your_email_settings_first": "Please save your email settings first", + "test_email_sent_check_your_inbox": "Test email sent! Check your inbox.", + "please_fix_the_errors_before_saving": "Please fix the errors before saving", + "profile_updated_successfully": "Profile updated successfully", + "email_is_required": "Email is required", + "invitation_sent_successfully": "Invitation sent successfully", + "team_member_updated": "Team member updated", + "team_member_removed": "Team member removed", + "invalid_merchant_url": "Invalid merchant URL", + "failed_to_load_merchant_details": "Failed to load merchant details", + "merchant_deleted_successfully": "Merchant deleted successfully", + "merchant_details_refreshed": "Merchant details refreshed", + "invalid_admin_user_url": "Invalid admin user URL", + "failed_to_load_admin_user_details": "Failed to load admin user details", + "you_cannot_deactivate_your_own_account": "You cannot deactivate your own account", + "you_cannot_delete_your_own_account": "You cannot delete your own account", + "admin_user_deleted_successfully": "Admin user deleted successfully", + "admin_user_details_refreshed": "Admin user details refreshed", + "failed_to_initialize_page": "Failed to initialize page", + "failed_to_load_merchant": "Failed to load merchant", + "merchant_updated_successfully": "Merchant updated successfully", + "ownership_transferred_successfully": "Ownership transferred successfully", + "theme_saved_successfully": "Theme saved successfully", + "failed_to_apply_preset": "Failed to apply preset", + "theme_reset_to_default": "Theme reset to default", + "failed_to_reset_theme": "Failed to reset theme", + "failed_to_load_stores": "Failed to load stores", + "store_deleted_successfully": "Store deleted successfully", + "stores_list_refreshed": "Stores list refreshed", + "invalid_user_url": "Invalid user URL", + "failed_to_load_user_details": "Failed to load user details", + "user_deleted_successfully": "User deleted successfully", + "user_details_refreshed": "User details refreshed", + "invalid_store_url": "Invalid store URL", + "failed_to_load_store_details": "Failed to load store details", + "no_store_loaded": "No store loaded", + "subscription_created_successfully": "Subscription created successfully", + "store_details_refreshed": "Store details refreshed", + "failed_to_load_users": "Failed to load users", + "failed_to_delete_user": "Failed to delete user", + "failed_to_load_admin_users": "Failed to load admin users", + "failed_to_load_admin_user": "Failed to load admin user", + "you_cannot_demote_yourself_from_super_ad": "You cannot demote yourself from super admin", + "platform_assigned_successfully": "Platform assigned successfully", + "platform_admin_must_be_assigned_to_at_le": "Platform admin must be assigned to at least one platform", + "platform_removed_successfully": "Platform removed successfully", + "please_fix_the_errors_before_submitting": "Please fix the errors before submitting", + "failed_to_load_store": "Failed to load store", + "store_updated_successfully": "Store updated successfully", + "all_contact_fields_reset_to_merchant_defa": "All contact fields reset to merchant defaults", + "failed_to_load_user": "Failed to load user", + "user_updated_successfully": "User updated successfully" }, - "team_roles": { - "name": "Team-Rollen", - "description": "Rollenbasierte Zugriffskontrolle für Teammitglieder" - }, - "audit_log": { - "name": "Audit-Protokoll", - "description": "Alle Benutzeraktionen und Änderungen nachverfolgen" + "features": { + "team_members": { + "name": "Teammitglieder", + "description": "Maximale Anzahl an Teammitgliedern", + "unit": "Mitglieder" + }, + "single_user": { + "name": "Einzelbenutzer", + "description": "Einzelbenutzerzugang" + }, + "team_basic": { + "name": "Basis-Team", + "description": "Grundlegende Team-Zusammenarbeit" + }, + "team_roles": { + "name": "Team-Rollen", + "description": "Rollenbasierte Zugriffskontrolle für Teammitglieder" + }, + "audit_log": { + "name": "Audit-Protokoll", + "description": "Alle Benutzeraktionen und Änderungen nachverfolgen" + } } - } } diff --git a/app/modules/tenancy/locales/en.json b/app/modules/tenancy/locales/en.json index 0fce670f..133b4002 100644 --- a/app/modules/tenancy/locales/en.json +++ b/app/modules/tenancy/locales/en.json @@ -1,115 +1,123 @@ { - "menu": { - "user_management": "User Management", - "merchant_users": "Merchant Users" - }, - "team": { - "title": "Team", - "members": "Members", - "add_member": "Add Member", - "invite_member": "Invite Member", - "remove_member": "Remove Member", - "role": "Role", - "owner": "Owner", - "manager": "Manager", - "editor": "Editor", - "viewer": "Viewer", - "permissions": "Permissions", - "pending_invitations": "Pending Invitations", - "invitation_sent": "Invitation Sent", - "invitation_accepted": "Invitation Accepted" - }, - "messages": { - "business_info_saved": "Business info saved", - "marketplace_settings_saved": "Marketplace settings saved", - "please_enter_a_url_first": "Please enter a URL first", - "could_not_validate_url_it_may_still_work": "Could not validate URL - it may still work", - "localization_settings_saved": "Localization settings saved", - "failed_to_load_email_settings": "Failed to load email settings", - "from_email_and_from_name_are_required": "From Email and From Name are required", - "email_settings_saved": "Email settings saved", - "please_enter_a_test_email_address": "Please enter a test email address", - "please_save_your_email_settings_first": "Please save your email settings first", - "test_email_sent_check_your_inbox": "Test email sent! Check your inbox.", - "please_fix_the_errors_before_saving": "Please fix the errors before saving", - "profile_updated_successfully": "Profile updated successfully", - "email_is_required": "Email is required", - "invitation_sent_successfully": "Invitation sent successfully", - "team_member_updated": "Team member updated", - "team_member_removed": "Team member removed", - "invalid_merchant_url": "Invalid merchant URL", - "failed_to_load_merchant_details": "Failed to load merchant details", - "merchant_deleted_successfully": "Merchant deleted successfully", - "merchant_details_refreshed": "Merchant details refreshed", - "invalid_admin_user_url": "Invalid admin user URL", - "failed_to_load_admin_user_details": "Failed to load admin user details", - "you_cannot_deactivate_your_own_account": "You cannot deactivate your own account", - "you_cannot_delete_your_own_account": "You cannot delete your own account", - "admin_user_deleted_successfully": "Admin user deleted successfully", - "admin_user_details_refreshed": "Admin user details refreshed", - "failed_to_initialize_page": "Failed to initialize page", - "failed_to_load_merchant": "Failed to load merchant", - "merchant_updated_successfully": "Merchant updated successfully", - "ownership_transferred_successfully": "Ownership transferred successfully", - "theme_saved_successfully": "Theme saved successfully", - "failed_to_apply_preset": "Failed to apply preset", - "theme_reset_to_default": "Theme reset to default", - "failed_to_reset_theme": "Failed to reset theme", - "failed_to_load_stores": "Failed to load stores", - "store_deleted_successfully": "Store deleted successfully", - "stores_list_refreshed": "Stores list refreshed", - "invalid_user_url": "Invalid user URL", - "failed_to_load_user_details": "Failed to load user details", - "user_deleted_successfully": "User deleted successfully", - "user_details_refreshed": "User details refreshed", - "invalid_store_url": "Invalid store URL", - "failed_to_load_store_details": "Failed to load store details", - "no_store_loaded": "No store loaded", - "subscription_created_successfully": "Subscription created successfully", - "store_details_refreshed": "Store details refreshed", - "failed_to_load_users": "Failed to load users", - "failed_to_delete_user": "Failed to delete user", - "failed_to_load_admin_users": "Failed to load admin users", - "failed_to_load_admin_user": "Failed to load admin user", - "you_cannot_demote_yourself_from_super_ad": "You cannot demote yourself from super admin", - "platform_assigned_successfully": "Platform assigned successfully", - "platform_admin_must_be_assigned_to_at_le": "Platform admin must be assigned to at least one platform", - "platform_removed_successfully": "Platform removed successfully", - "please_fix_the_errors_before_submitting": "Please fix the errors before submitting", - "failed_to_load_store": "Failed to load store", - "store_updated_successfully": "Store updated successfully", - "all_contact_fields_reset_to_merchant_defa": "All contact fields reset to merchant defaults", - "failed_to_load_user": "Failed to load user", - "user_updated_successfully": "User updated successfully" - }, - "confirmations": { - "enable_all_modules": "This will enable all modules. Continue?", - "disable_optional_modules": "This will disable all optional modules, keeping only core modules. Continue?", - "reset_theme": "Reset theme to default? This cannot be undone.", - "show_all_menu_items": "This will show all menu items. Continue?", - "hide_all_menu_items": "This will hide all menu items (except mandatory ones). You can then enable the ones you want. Continue?" - }, - "features": { - "team_members": { - "name": "Team Members", - "description": "Maximum number of team members", - "unit": "members" + "menu": { + "user_management": "User Management", + "merchant_users": "Merchant Users", + "platform_admin": "Platform Admin", + "content_management": "Content Management", + "account_settings": "Account Settings", + "admin_users": "Admin Users", + "merchants": "Merchants", + "stores": "Stores", + "platforms": "Platforms", + "team": "Team" }, - "single_user": { - "name": "Single User", - "description": "Single user access" + "team": { + "title": "Team", + "members": "Members", + "add_member": "Add Member", + "invite_member": "Invite Member", + "remove_member": "Remove Member", + "role": "Role", + "owner": "Owner", + "manager": "Manager", + "editor": "Editor", + "viewer": "Viewer", + "permissions": "Permissions", + "pending_invitations": "Pending Invitations", + "invitation_sent": "Invitation Sent", + "invitation_accepted": "Invitation Accepted" }, - "team_basic": { - "name": "Basic Team", - "description": "Basic team collaboration features" + "messages": { + "business_info_saved": "Business info saved", + "marketplace_settings_saved": "Marketplace settings saved", + "please_enter_a_url_first": "Please enter a URL first", + "could_not_validate_url_it_may_still_work": "Could not validate URL - it may still work", + "localization_settings_saved": "Localization settings saved", + "failed_to_load_email_settings": "Failed to load email settings", + "from_email_and_from_name_are_required": "From Email and From Name are required", + "email_settings_saved": "Email settings saved", + "please_enter_a_test_email_address": "Please enter a test email address", + "please_save_your_email_settings_first": "Please save your email settings first", + "test_email_sent_check_your_inbox": "Test email sent! Check your inbox.", + "please_fix_the_errors_before_saving": "Please fix the errors before saving", + "profile_updated_successfully": "Profile updated successfully", + "email_is_required": "Email is required", + "invitation_sent_successfully": "Invitation sent successfully", + "team_member_updated": "Team member updated", + "team_member_removed": "Team member removed", + "invalid_merchant_url": "Invalid merchant URL", + "failed_to_load_merchant_details": "Failed to load merchant details", + "merchant_deleted_successfully": "Merchant deleted successfully", + "merchant_details_refreshed": "Merchant details refreshed", + "invalid_admin_user_url": "Invalid admin user URL", + "failed_to_load_admin_user_details": "Failed to load admin user details", + "you_cannot_deactivate_your_own_account": "You cannot deactivate your own account", + "you_cannot_delete_your_own_account": "You cannot delete your own account", + "admin_user_deleted_successfully": "Admin user deleted successfully", + "admin_user_details_refreshed": "Admin user details refreshed", + "failed_to_initialize_page": "Failed to initialize page", + "failed_to_load_merchant": "Failed to load merchant", + "merchant_updated_successfully": "Merchant updated successfully", + "ownership_transferred_successfully": "Ownership transferred successfully", + "theme_saved_successfully": "Theme saved successfully", + "failed_to_apply_preset": "Failed to apply preset", + "theme_reset_to_default": "Theme reset to default", + "failed_to_reset_theme": "Failed to reset theme", + "failed_to_load_stores": "Failed to load stores", + "store_deleted_successfully": "Store deleted successfully", + "stores_list_refreshed": "Stores list refreshed", + "invalid_user_url": "Invalid user URL", + "failed_to_load_user_details": "Failed to load user details", + "user_deleted_successfully": "User deleted successfully", + "user_details_refreshed": "User details refreshed", + "invalid_store_url": "Invalid store URL", + "failed_to_load_store_details": "Failed to load store details", + "no_store_loaded": "No store loaded", + "subscription_created_successfully": "Subscription created successfully", + "store_details_refreshed": "Store details refreshed", + "failed_to_load_users": "Failed to load users", + "failed_to_delete_user": "Failed to delete user", + "failed_to_load_admin_users": "Failed to load admin users", + "failed_to_load_admin_user": "Failed to load admin user", + "you_cannot_demote_yourself_from_super_ad": "You cannot demote yourself from super admin", + "platform_assigned_successfully": "Platform assigned successfully", + "platform_admin_must_be_assigned_to_at_le": "Platform admin must be assigned to at least one platform", + "platform_removed_successfully": "Platform removed successfully", + "please_fix_the_errors_before_submitting": "Please fix the errors before submitting", + "failed_to_load_store": "Failed to load store", + "store_updated_successfully": "Store updated successfully", + "all_contact_fields_reset_to_merchant_defa": "All contact fields reset to merchant defaults", + "failed_to_load_user": "Failed to load user", + "user_updated_successfully": "User updated successfully" }, - "team_roles": { - "name": "Team Roles", - "description": "Role-based access control for team members" + "confirmations": { + "enable_all_modules": "This will enable all modules. Continue?", + "disable_optional_modules": "This will disable all optional modules, keeping only core modules. Continue?", + "reset_theme": "Reset theme to default? This cannot be undone.", + "show_all_menu_items": "This will show all menu items. Continue?", + "hide_all_menu_items": "This will hide all menu items (except mandatory ones). You can then enable the ones you want. Continue?" }, - "audit_log": { - "name": "Audit Log", - "description": "Track all user actions and changes" + "features": { + "team_members": { + "name": "Team Members", + "description": "Maximum number of team members", + "unit": "members" + }, + "single_user": { + "name": "Single User", + "description": "Single user access" + }, + "team_basic": { + "name": "Basic Team", + "description": "Basic team collaboration features" + }, + "team_roles": { + "name": "Team Roles", + "description": "Role-based access control for team members" + }, + "audit_log": { + "name": "Audit Log", + "description": "Track all user actions and changes" + } } - } } diff --git a/app/modules/tenancy/locales/fr.json b/app/modules/tenancy/locales/fr.json index 75fe9229..5b1de444 100644 --- a/app/modules/tenancy/locales/fr.json +++ b/app/modules/tenancy/locales/fr.json @@ -1,108 +1,116 @@ { - "menu": { - "user_management": "Gestion des utilisateurs", - "merchant_users": "Utilisateurs marchands" - }, - "team": { - "title": "Équipe", - "members": "Membres", - "add_member": "Ajouter un membre", - "invite_member": "Inviter un membre", - "remove_member": "Retirer un membre", - "role": "Rôle", - "owner": "Propriétaire", - "manager": "Gestionnaire", - "editor": "Éditeur", - "viewer": "Lecteur", - "permissions": "Permissions", - "pending_invitations": "Invitations en attente", - "invitation_sent": "Invitation envoyée", - "invitation_accepted": "Invitation acceptée" - }, - "messages": { - "business_info_saved": "Business info saved", - "marketplace_settings_saved": "Marketplace settings saved", - "please_enter_a_url_first": "Please enter a URL first", - "could_not_validate_url_it_may_still_work": "Could not validate URL - it may still work", - "localization_settings_saved": "Localization settings saved", - "failed_to_load_email_settings": "Failed to load email settings", - "from_email_and_from_name_are_required": "From Email and From Name are required", - "email_settings_saved": "Email settings saved", - "please_enter_a_test_email_address": "Please enter a test email address", - "please_save_your_email_settings_first": "Please save your email settings first", - "test_email_sent_check_your_inbox": "Test email sent! Check your inbox.", - "please_fix_the_errors_before_saving": "Please fix the errors before saving", - "profile_updated_successfully": "Profile updated successfully", - "email_is_required": "Email is required", - "invitation_sent_successfully": "Invitation sent successfully", - "team_member_updated": "Team member updated", - "team_member_removed": "Team member removed", - "invalid_merchant_url": "Invalid merchant URL", - "failed_to_load_merchant_details": "Failed to load merchant details", - "merchant_deleted_successfully": "Merchant deleted successfully", - "merchant_details_refreshed": "Merchant details refreshed", - "invalid_admin_user_url": "Invalid admin user URL", - "failed_to_load_admin_user_details": "Failed to load admin user details", - "you_cannot_deactivate_your_own_account": "You cannot deactivate your own account", - "you_cannot_delete_your_own_account": "You cannot delete your own account", - "admin_user_deleted_successfully": "Admin user deleted successfully", - "admin_user_details_refreshed": "Admin user details refreshed", - "failed_to_initialize_page": "Failed to initialize page", - "failed_to_load_merchant": "Failed to load merchant", - "merchant_updated_successfully": "Merchant updated successfully", - "ownership_transferred_successfully": "Ownership transferred successfully", - "theme_saved_successfully": "Theme saved successfully", - "failed_to_apply_preset": "Failed to apply preset", - "theme_reset_to_default": "Theme reset to default", - "failed_to_reset_theme": "Failed to reset theme", - "failed_to_load_stores": "Failed to load stores", - "store_deleted_successfully": "Store deleted successfully", - "stores_list_refreshed": "Stores list refreshed", - "invalid_user_url": "Invalid user URL", - "failed_to_load_user_details": "Failed to load user details", - "user_deleted_successfully": "User deleted successfully", - "user_details_refreshed": "User details refreshed", - "invalid_store_url": "Invalid store URL", - "failed_to_load_store_details": "Failed to load store details", - "no_store_loaded": "No store loaded", - "subscription_created_successfully": "Subscription created successfully", - "store_details_refreshed": "Store details refreshed", - "failed_to_load_users": "Failed to load users", - "failed_to_delete_user": "Failed to delete user", - "failed_to_load_admin_users": "Failed to load admin users", - "failed_to_load_admin_user": "Failed to load admin user", - "you_cannot_demote_yourself_from_super_ad": "You cannot demote yourself from super admin", - "platform_assigned_successfully": "Platform assigned successfully", - "platform_admin_must_be_assigned_to_at_le": "Platform admin must be assigned to at least one platform", - "platform_removed_successfully": "Platform removed successfully", - "please_fix_the_errors_before_submitting": "Please fix the errors before submitting", - "failed_to_load_store": "Failed to load store", - "store_updated_successfully": "Store updated successfully", - "all_contact_fields_reset_to_merchant_defa": "All contact fields reset to merchant defaults", - "failed_to_load_user": "Failed to load user", - "user_updated_successfully": "User updated successfully" - }, - "features": { - "team_members": { - "name": "Membres de l'équipe", - "description": "Nombre maximum de membres d'équipe", - "unit": "membres" + "menu": { + "user_management": "Gestion des utilisateurs", + "merchant_users": "Utilisateurs marchands", + "platform_admin": "Administration de la plateforme", + "content_management": "Gestion du contenu", + "account_settings": "Paramètres du compte", + "admin_users": "Utilisateurs administrateurs", + "merchants": "Marchands", + "stores": "Magasins", + "platforms": "Plateformes", + "team": "Équipe" }, - "single_user": { - "name": "Utilisateur unique", - "description": "Accès utilisateur unique" + "team": { + "title": "Équipe", + "members": "Membres", + "add_member": "Ajouter un membre", + "invite_member": "Inviter un membre", + "remove_member": "Retirer un membre", + "role": "Rôle", + "owner": "Propriétaire", + "manager": "Gestionnaire", + "editor": "Éditeur", + "viewer": "Lecteur", + "permissions": "Permissions", + "pending_invitations": "Invitations en attente", + "invitation_sent": "Invitation envoyée", + "invitation_accepted": "Invitation acceptée" }, - "team_basic": { - "name": "Équipe de base", - "description": "Fonctionnalités de collaboration d'équipe de base" + "messages": { + "business_info_saved": "Business info saved", + "marketplace_settings_saved": "Marketplace settings saved", + "please_enter_a_url_first": "Please enter a URL first", + "could_not_validate_url_it_may_still_work": "Could not validate URL - it may still work", + "localization_settings_saved": "Localization settings saved", + "failed_to_load_email_settings": "Failed to load email settings", + "from_email_and_from_name_are_required": "From Email and From Name are required", + "email_settings_saved": "Email settings saved", + "please_enter_a_test_email_address": "Please enter a test email address", + "please_save_your_email_settings_first": "Please save your email settings first", + "test_email_sent_check_your_inbox": "Test email sent! Check your inbox.", + "please_fix_the_errors_before_saving": "Please fix the errors before saving", + "profile_updated_successfully": "Profile updated successfully", + "email_is_required": "Email is required", + "invitation_sent_successfully": "Invitation sent successfully", + "team_member_updated": "Team member updated", + "team_member_removed": "Team member removed", + "invalid_merchant_url": "Invalid merchant URL", + "failed_to_load_merchant_details": "Failed to load merchant details", + "merchant_deleted_successfully": "Merchant deleted successfully", + "merchant_details_refreshed": "Merchant details refreshed", + "invalid_admin_user_url": "Invalid admin user URL", + "failed_to_load_admin_user_details": "Failed to load admin user details", + "you_cannot_deactivate_your_own_account": "You cannot deactivate your own account", + "you_cannot_delete_your_own_account": "You cannot delete your own account", + "admin_user_deleted_successfully": "Admin user deleted successfully", + "admin_user_details_refreshed": "Admin user details refreshed", + "failed_to_initialize_page": "Failed to initialize page", + "failed_to_load_merchant": "Failed to load merchant", + "merchant_updated_successfully": "Merchant updated successfully", + "ownership_transferred_successfully": "Ownership transferred successfully", + "theme_saved_successfully": "Theme saved successfully", + "failed_to_apply_preset": "Failed to apply preset", + "theme_reset_to_default": "Theme reset to default", + "failed_to_reset_theme": "Failed to reset theme", + "failed_to_load_stores": "Failed to load stores", + "store_deleted_successfully": "Store deleted successfully", + "stores_list_refreshed": "Stores list refreshed", + "invalid_user_url": "Invalid user URL", + "failed_to_load_user_details": "Failed to load user details", + "user_deleted_successfully": "User deleted successfully", + "user_details_refreshed": "User details refreshed", + "invalid_store_url": "Invalid store URL", + "failed_to_load_store_details": "Failed to load store details", + "no_store_loaded": "No store loaded", + "subscription_created_successfully": "Subscription created successfully", + "store_details_refreshed": "Store details refreshed", + "failed_to_load_users": "Failed to load users", + "failed_to_delete_user": "Failed to delete user", + "failed_to_load_admin_users": "Failed to load admin users", + "failed_to_load_admin_user": "Failed to load admin user", + "you_cannot_demote_yourself_from_super_ad": "You cannot demote yourself from super admin", + "platform_assigned_successfully": "Platform assigned successfully", + "platform_admin_must_be_assigned_to_at_le": "Platform admin must be assigned to at least one platform", + "platform_removed_successfully": "Platform removed successfully", + "please_fix_the_errors_before_submitting": "Please fix the errors before submitting", + "failed_to_load_store": "Failed to load store", + "store_updated_successfully": "Store updated successfully", + "all_contact_fields_reset_to_merchant_defa": "All contact fields reset to merchant defaults", + "failed_to_load_user": "Failed to load user", + "user_updated_successfully": "User updated successfully" }, - "team_roles": { - "name": "Rôles d'équipe", - "description": "Contrôle d'accès basé sur les rôles" - }, - "audit_log": { - "name": "Journal d'audit", - "description": "Suivre toutes les actions et modifications" + "features": { + "team_members": { + "name": "Membres de l'équipe", + "description": "Nombre maximum de membres d'équipe", + "unit": "membres" + }, + "single_user": { + "name": "Utilisateur unique", + "description": "Accès utilisateur unique" + }, + "team_basic": { + "name": "Équipe de base", + "description": "Fonctionnalités de collaboration d'équipe de base" + }, + "team_roles": { + "name": "Rôles d'équipe", + "description": "Contrôle d'accès basé sur les rôles" + }, + "audit_log": { + "name": "Journal d'audit", + "description": "Suivre toutes les actions et modifications" + } } - } } diff --git a/app/modules/tenancy/locales/lb.json b/app/modules/tenancy/locales/lb.json index cc902b67..7b6e46e2 100644 --- a/app/modules/tenancy/locales/lb.json +++ b/app/modules/tenancy/locales/lb.json @@ -1,108 +1,116 @@ { - "menu": { - "user_management": "Benotzerverwaltung", - "merchant_users": "Händler-Benotzer" - }, - "team": { - "title": "Team", - "members": "Memberen", - "add_member": "Member derbäisetzen", - "invite_member": "Member invitéieren", - "remove_member": "Member ewechhuelen", - "role": "Roll", - "owner": "Proprietär", - "manager": "Manager", - "editor": "Editeur", - "viewer": "Betruechter", - "permissions": "Rechter", - "pending_invitations": "Aussteesend Invitatiounen", - "invitation_sent": "Invitatioun geschéckt", - "invitation_accepted": "Invitatioun ugeholl" - }, - "messages": { - "business_info_saved": "Business info saved", - "marketplace_settings_saved": "Marketplace settings saved", - "please_enter_a_url_first": "Please enter a URL first", - "could_not_validate_url_it_may_still_work": "Could not validate URL - it may still work", - "localization_settings_saved": "Localization settings saved", - "failed_to_load_email_settings": "Failed to load email settings", - "from_email_and_from_name_are_required": "From Email and From Name are required", - "email_settings_saved": "Email settings saved", - "please_enter_a_test_email_address": "Please enter a test email address", - "please_save_your_email_settings_first": "Please save your email settings first", - "test_email_sent_check_your_inbox": "Test email sent! Check your inbox.", - "please_fix_the_errors_before_saving": "Please fix the errors before saving", - "profile_updated_successfully": "Profile updated successfully", - "email_is_required": "Email is required", - "invitation_sent_successfully": "Invitation sent successfully", - "team_member_updated": "Team member updated", - "team_member_removed": "Team member removed", - "invalid_merchant_url": "Invalid merchant URL", - "failed_to_load_merchant_details": "Failed to load merchant details", - "merchant_deleted_successfully": "Merchant deleted successfully", - "merchant_details_refreshed": "Merchant details refreshed", - "invalid_admin_user_url": "Invalid admin user URL", - "failed_to_load_admin_user_details": "Failed to load admin user details", - "you_cannot_deactivate_your_own_account": "You cannot deactivate your own account", - "you_cannot_delete_your_own_account": "You cannot delete your own account", - "admin_user_deleted_successfully": "Admin user deleted successfully", - "admin_user_details_refreshed": "Admin user details refreshed", - "failed_to_initialize_page": "Failed to initialize page", - "failed_to_load_merchant": "Failed to load merchant", - "merchant_updated_successfully": "Merchant updated successfully", - "ownership_transferred_successfully": "Ownership transferred successfully", - "theme_saved_successfully": "Theme saved successfully", - "failed_to_apply_preset": "Failed to apply preset", - "theme_reset_to_default": "Theme reset to default", - "failed_to_reset_theme": "Failed to reset theme", - "failed_to_load_stores": "Failed to load stores", - "store_deleted_successfully": "Store deleted successfully", - "stores_list_refreshed": "Stores list refreshed", - "invalid_user_url": "Invalid user URL", - "failed_to_load_user_details": "Failed to load user details", - "user_deleted_successfully": "User deleted successfully", - "user_details_refreshed": "User details refreshed", - "invalid_store_url": "Invalid store URL", - "failed_to_load_store_details": "Failed to load store details", - "no_store_loaded": "No store loaded", - "subscription_created_successfully": "Subscription created successfully", - "store_details_refreshed": "Store details refreshed", - "failed_to_load_users": "Failed to load users", - "failed_to_delete_user": "Failed to delete user", - "failed_to_load_admin_users": "Failed to load admin users", - "failed_to_load_admin_user": "Failed to load admin user", - "you_cannot_demote_yourself_from_super_ad": "You cannot demote yourself from super admin", - "platform_assigned_successfully": "Platform assigned successfully", - "platform_admin_must_be_assigned_to_at_le": "Platform admin must be assigned to at least one platform", - "platform_removed_successfully": "Platform removed successfully", - "please_fix_the_errors_before_submitting": "Please fix the errors before submitting", - "failed_to_load_store": "Failed to load store", - "store_updated_successfully": "Store updated successfully", - "all_contact_fields_reset_to_merchant_defa": "All contact fields reset to merchant defaults", - "failed_to_load_user": "Failed to load user", - "user_updated_successfully": "User updated successfully" - }, - "features": { - "team_members": { - "name": "Team-Memberen", - "description": "Maximal Unzuel vu Team-Memberen", - "unit": "Memberen" + "menu": { + "user_management": "Benotzerverwaltung", + "merchant_users": "Händler-Benotzer", + "platform_admin": "Plattform-Administratioun", + "content_management": "Inhaltsverwaltung", + "account_settings": "Kont-Astellungen", + "admin_users": "Admin-Benotzer", + "merchants": "Händler", + "stores": "Butteker", + "platforms": "Plattformen", + "team": "Team" }, - "single_user": { - "name": "Eenzel-Benotzer", - "description": "Eenzel-Benotzer Zougang" + "team": { + "title": "Team", + "members": "Memberen", + "add_member": "Member derbäisetzen", + "invite_member": "Member invitéieren", + "remove_member": "Member ewechhuelen", + "role": "Roll", + "owner": "Proprietär", + "manager": "Manager", + "editor": "Editeur", + "viewer": "Betruechter", + "permissions": "Rechter", + "pending_invitations": "Aussteesend Invitatiounen", + "invitation_sent": "Invitatioun geschéckt", + "invitation_accepted": "Invitatioun ugeholl" }, - "team_basic": { - "name": "Basis-Team", - "description": "Grondfunktiounen fir Team-Zesummenaarbecht" + "messages": { + "business_info_saved": "Business info saved", + "marketplace_settings_saved": "Marketplace settings saved", + "please_enter_a_url_first": "Please enter a URL first", + "could_not_validate_url_it_may_still_work": "Could not validate URL - it may still work", + "localization_settings_saved": "Localization settings saved", + "failed_to_load_email_settings": "Failed to load email settings", + "from_email_and_from_name_are_required": "From Email and From Name are required", + "email_settings_saved": "Email settings saved", + "please_enter_a_test_email_address": "Please enter a test email address", + "please_save_your_email_settings_first": "Please save your email settings first", + "test_email_sent_check_your_inbox": "Test email sent! Check your inbox.", + "please_fix_the_errors_before_saving": "Please fix the errors before saving", + "profile_updated_successfully": "Profile updated successfully", + "email_is_required": "Email is required", + "invitation_sent_successfully": "Invitation sent successfully", + "team_member_updated": "Team member updated", + "team_member_removed": "Team member removed", + "invalid_merchant_url": "Invalid merchant URL", + "failed_to_load_merchant_details": "Failed to load merchant details", + "merchant_deleted_successfully": "Merchant deleted successfully", + "merchant_details_refreshed": "Merchant details refreshed", + "invalid_admin_user_url": "Invalid admin user URL", + "failed_to_load_admin_user_details": "Failed to load admin user details", + "you_cannot_deactivate_your_own_account": "You cannot deactivate your own account", + "you_cannot_delete_your_own_account": "You cannot delete your own account", + "admin_user_deleted_successfully": "Admin user deleted successfully", + "admin_user_details_refreshed": "Admin user details refreshed", + "failed_to_initialize_page": "Failed to initialize page", + "failed_to_load_merchant": "Failed to load merchant", + "merchant_updated_successfully": "Merchant updated successfully", + "ownership_transferred_successfully": "Ownership transferred successfully", + "theme_saved_successfully": "Theme saved successfully", + "failed_to_apply_preset": "Failed to apply preset", + "theme_reset_to_default": "Theme reset to default", + "failed_to_reset_theme": "Failed to reset theme", + "failed_to_load_stores": "Failed to load stores", + "store_deleted_successfully": "Store deleted successfully", + "stores_list_refreshed": "Stores list refreshed", + "invalid_user_url": "Invalid user URL", + "failed_to_load_user_details": "Failed to load user details", + "user_deleted_successfully": "User deleted successfully", + "user_details_refreshed": "User details refreshed", + "invalid_store_url": "Invalid store URL", + "failed_to_load_store_details": "Failed to load store details", + "no_store_loaded": "No store loaded", + "subscription_created_successfully": "Subscription created successfully", + "store_details_refreshed": "Store details refreshed", + "failed_to_load_users": "Failed to load users", + "failed_to_delete_user": "Failed to delete user", + "failed_to_load_admin_users": "Failed to load admin users", + "failed_to_load_admin_user": "Failed to load admin user", + "you_cannot_demote_yourself_from_super_ad": "You cannot demote yourself from super admin", + "platform_assigned_successfully": "Platform assigned successfully", + "platform_admin_must_be_assigned_to_at_le": "Platform admin must be assigned to at least one platform", + "platform_removed_successfully": "Platform removed successfully", + "please_fix_the_errors_before_submitting": "Please fix the errors before submitting", + "failed_to_load_store": "Failed to load store", + "store_updated_successfully": "Store updated successfully", + "all_contact_fields_reset_to_merchant_defa": "All contact fields reset to merchant defaults", + "failed_to_load_user": "Failed to load user", + "user_updated_successfully": "User updated successfully" }, - "team_roles": { - "name": "Team-Rollen", - "description": "Rollebaséiert Zougangskontroll fir Team-Memberen" - }, - "audit_log": { - "name": "Audit-Protokoll", - "description": "All Benotzeraktiounen an Ännerungen nospueren" + "features": { + "team_members": { + "name": "Team-Memberen", + "description": "Maximal Unzuel vu Team-Memberen", + "unit": "Memberen" + }, + "single_user": { + "name": "Eenzel-Benotzer", + "description": "Eenzel-Benotzer Zougang" + }, + "team_basic": { + "name": "Basis-Team", + "description": "Grondfunktiounen fir Team-Zesummenaarbecht" + }, + "team_roles": { + "name": "Team-Rollen", + "description": "Rollebaséiert Zougangskontroll fir Team-Memberen" + }, + "audit_log": { + "name": "Audit-Protokoll", + "description": "All Benotzeraktiounen an Ännerungen nospueren" + } } - } } diff --git a/middleware/language.py b/middleware/language.py index 2f99f9f0..3d6d1816 100644 --- a/middleware/language.py +++ b/middleware/language.py @@ -61,9 +61,9 @@ class LanguageMiddleware(BaseHTTPMiddleware): # Resolve language based on frontend type if frontend_type == FrontendType.ADMIN: - # Admin dashboard: English only (for now) - # TODO: Implement admin language support later - language = "en" + # Admin dashboard: respect user's preferred language + user_preferred = self._get_user_language_from_token(request) + language = user_preferred or "en" elif frontend_type == FrontendType.STORE: # Store dashboard