- Add database fields for language preferences: - Vendor: dashboard_language, storefront_language, storefront_languages - User: preferred_language - Customer: preferred_language - Add language middleware for request-level language detection: - Cookie-based persistence - Browser Accept-Language fallback - Vendor storefront language constraints - Add language API endpoints (/api/v1/language/*): - POST /set - Set language preference - GET /current - Get current language info - GET /list - List available languages - DELETE /clear - Clear preference - Add i18n utilities (app/utils/i18n.py): - JSON-based translation loading - Jinja2 template integration - Language resolution helpers - Add reusable language selector macros for templates - Add languageSelector() Alpine.js component - Add translation files (en, fr, de, lb) in static/locales/ - Add architecture rules documentation for language implementation - Update marketplace-product-detail.js to use native language names 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
476 lines
15 KiB
JSON
476 lines
15 KiB
JSON
{
|
|
"common": {
|
|
"save": "Späicheren",
|
|
"cancel": "Ofbriechen",
|
|
"delete": "Läschen",
|
|
"edit": "Änneren",
|
|
"create": "Erstellen",
|
|
"update": "Aktualiséieren",
|
|
"add": "Derbäisetzen",
|
|
"remove": "Ewechhuelen",
|
|
"close": "Zoumaachen",
|
|
"back": "Zréck",
|
|
"next": "Weider",
|
|
"previous": "Virdrun",
|
|
"submit": "Ofschécken",
|
|
"confirm": "Bestätegen",
|
|
"yes": "Jo",
|
|
"no": "Nee",
|
|
"ok": "OK",
|
|
"done": "Fäerdeg",
|
|
"loading": "Lueden...",
|
|
"saving": "Späicheren...",
|
|
"processing": "Veraarbechten...",
|
|
"searching": "Sichen...",
|
|
"refresh": "Aktualiséieren",
|
|
"retry": "Nach eng Kéier probéieren",
|
|
"view": "Kucken",
|
|
"view_details": "Detailer kucken",
|
|
"view_all": "Alles kucken",
|
|
"show_more": "Méi weisen",
|
|
"show_less": "Manner weisen",
|
|
"search": "Sichen",
|
|
"filter": "Filteren",
|
|
"sort": "Sortéieren",
|
|
"export": "Exportéieren",
|
|
"import": "Importéieren",
|
|
"download": "Eroflueden",
|
|
"upload": "Eroplueden",
|
|
"select": "Auswielen",
|
|
"select_all": "Alles auswielen",
|
|
"deselect_all": "Alles ofwielen",
|
|
"actions": "Aktiounen",
|
|
"status": "Status",
|
|
"date": "Datum",
|
|
"time": "Zäit",
|
|
"name": "Numm",
|
|
"email": "E-Mail",
|
|
"phone": "Telefon",
|
|
"address": "Adress",
|
|
"description": "Beschreiwung",
|
|
"notes": "Notizen",
|
|
"total": "Total",
|
|
"amount": "Betrag",
|
|
"quantity": "Quantitéit",
|
|
"price": "Präis",
|
|
"items": "Artikelen",
|
|
"id": "ID",
|
|
"type": "Typ",
|
|
"category": "Kategorie",
|
|
"tags": "Tags",
|
|
"active": "Aktiv",
|
|
"inactive": "Inaktiv",
|
|
"enabled": "Aktivéiert",
|
|
"disabled": "Deaktivéiert",
|
|
"pending": "Aussteesend",
|
|
"completed": "Fäerdeg",
|
|
"failed": "Feelgeschloen",
|
|
"success": "Erfollegräich",
|
|
"error": "Feeler",
|
|
"warning": "Warnung",
|
|
"info": "Info",
|
|
"all": "Alles",
|
|
"none": "Keen",
|
|
"other": "Anerer",
|
|
"unknown": "Onbekannt",
|
|
"not_available": "N/A",
|
|
"required": "Obligatoresch",
|
|
"optional": "Optional",
|
|
"language": "Sprooch",
|
|
"settings": "Astellungen",
|
|
"help": "Hëllef",
|
|
"support": "Ënnerstëtzung",
|
|
"contact": "Kontakt",
|
|
"about": "Iwwer eis",
|
|
"privacy": "Dateschutz",
|
|
"terms": "Konditiounen",
|
|
"copyright": "Copyright"
|
|
},
|
|
"auth": {
|
|
"sign_in": "Umellen",
|
|
"sign_out": "Ofmellen",
|
|
"sign_up": "Registréieren",
|
|
"login": "Login",
|
|
"logout": "Logout",
|
|
"register": "Registréieren",
|
|
"forgot_password": "Passwuert vergiess?",
|
|
"reset_password": "Passwuert zrécksetzen",
|
|
"change_password": "Passwuert änneren",
|
|
"username": "Benotzernumm",
|
|
"password": "Passwuert",
|
|
"confirm_password": "Passwuert bestätegen",
|
|
"current_password": "Aktuellt Passwuert",
|
|
"new_password": "Neit Passwuert",
|
|
"remember_me": "Un mech erënneren",
|
|
"email_placeholder": "Gitt Är E-Mail an",
|
|
"username_placeholder": "Gitt Äre Benotzernumm an",
|
|
"password_placeholder": "Gitt Äert Passwuert an",
|
|
"login_success": "Login erfollegräich",
|
|
"login_failed": "Login feelgeschloen",
|
|
"logout_success": "Dir sidd ofgemellt",
|
|
"invalid_credentials": "Ongëltege Benotzernumm oder Passwuert",
|
|
"session_expired": "Är Sessioun ass ofgelaf. Mellt Iech w.e.g. erëm un.",
|
|
"account_locked": "Äre Kont ass gespaart",
|
|
"account_inactive": "Äre Kont ass inaktiv"
|
|
},
|
|
"nav": {
|
|
"dashboard": "Dashboard",
|
|
"products": "Produkter",
|
|
"orders": "Bestellungen",
|
|
"customers": "Clienten",
|
|
"inventory": "Inventar",
|
|
"analytics": "Analysen",
|
|
"reports": "Rapporten",
|
|
"settings": "Astellungen",
|
|
"profile": "Profil",
|
|
"team": "Team",
|
|
"marketplace": "Marchéplaz",
|
|
"integrations": "Integratiounen",
|
|
"notifications": "Notifikatiounen",
|
|
"help": "Hëllef",
|
|
"home": "Heem",
|
|
"shop": "Buttek",
|
|
"cart": "Kuerf",
|
|
"checkout": "Bezuelen",
|
|
"account": "Kont",
|
|
"wishlist": "Wonschlëscht"
|
|
},
|
|
"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"
|
|
},
|
|
"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"
|
|
},
|
|
"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"
|
|
},
|
|
"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",
|
|
"company": "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..."
|
|
},
|
|
"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"
|
|
},
|
|
"marketplace": {
|
|
"title": "Marchéplaz",
|
|
"import": "Import",
|
|
"export": "Export",
|
|
"sync": "Synchroniséieren",
|
|
"source": "Quell",
|
|
"source_url": "Quell URL",
|
|
"import_products": "Produkter importéieren",
|
|
"start_import": "Import starten",
|
|
"importing": "Importéieren...",
|
|
"import_complete": "Import fäerdeg",
|
|
"import_failed": "Import feelgeschloen",
|
|
"import_history": "Importgeschicht",
|
|
"job_id": "Job ID",
|
|
"started_at": "Ugefaang um",
|
|
"completed_at": "Fäerdeg um",
|
|
"duration": "Dauer",
|
|
"imported_count": "Importéiert",
|
|
"error_count": "Feeler",
|
|
"total_processed": "Total veraarbecht",
|
|
"progress": "Fortschrëtt",
|
|
"no_import_jobs": "Nach keng Import Jobs",
|
|
"start_first_import": "Start Ären éischten Import mat der Form uewendriwwer"
|
|
},
|
|
"letzshop": {
|
|
"title": "Letzshop Integratioun",
|
|
"connection": "Verbindung",
|
|
"credentials": "Umeldungsdaten",
|
|
"api_key": "API Schlëssel",
|
|
"api_endpoint": "API Endpunkt",
|
|
"auto_sync": "Automatesch Sync",
|
|
"sync_interval": "Sync Intervall",
|
|
"every_hour": "All Stonn",
|
|
"every_day": "All Dag",
|
|
"test_connection": "Verbindung testen",
|
|
"save_credentials": "Umeldungsdaten späicheren",
|
|
"connection_success": "Verbindung erfollegräich",
|
|
"connection_failed": "Verbindung feelgeschloen",
|
|
"last_sync": "Läschte Sync",
|
|
"sync_status": "Sync Status",
|
|
"import_orders": "Bestellungen importéieren",
|
|
"export_products": "Produkter exportéieren",
|
|
"no_credentials": "Konfiguréiert Ären API Schlëssel an den Astellungen fir unzefänken",
|
|
"carriers": {
|
|
"dhl": "DHL",
|
|
"ups": "UPS",
|
|
"fedex": "FedEx",
|
|
"dpd": "DPD",
|
|
"gls": "GLS",
|
|
"post_luxembourg": "Post Lëtzebuerg",
|
|
"other": "Anerer"
|
|
}
|
|
},
|
|
"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"
|
|
},
|
|
"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"
|
|
},
|
|
"errors": {
|
|
"generic": "E Feeler ass opgetrueden",
|
|
"not_found": "Net fonnt",
|
|
"unauthorized": "Net autoriséiert",
|
|
"forbidden": "Verbueden",
|
|
"bad_request": "Ongëlteg Ufro",
|
|
"server_error": "Server Feeler",
|
|
"network_error": "Netzwierk Feeler",
|
|
"timeout": "Ufro Timeout",
|
|
"validation_error": "Validéierungsfeeler",
|
|
"field_required": "Dëst Feld ass obligatoresch",
|
|
"invalid_email": "Ongëlteg E-Mail Adress",
|
|
"invalid_phone": "Ongëlteg Telefonsnummer",
|
|
"password_mismatch": "Passwierder stëmmen net iwwereneen",
|
|
"password_too_short": "Passwuert ass ze kuerz",
|
|
"try_again": "Probéiert w.e.g. nach eng Kéier",
|
|
"contact_support": "Kontaktéiert w.e.g. den Support wann de Problem bestoe bleift"
|
|
},
|
|
"confirmations": {
|
|
"delete_title": "Läsche bestätegen",
|
|
"delete_message": "Sidd Dir sécher datt Dir dësen Artikel läsche wëllt?",
|
|
"delete_warning": "Dës Aktioun kann net réckgängeg gemaach ginn.",
|
|
"cancel_title": "Ofbriechen bestätegen",
|
|
"cancel_message": "Sidd Dir sécher datt Dir ofbrieche wëllt?",
|
|
"unsaved_changes": "Dir hutt net gespäichert Ännerungen. Sidd Dir sécher datt Dir fortfuere wëllt?",
|
|
"logout_title": "Ofmellen bestätegen",
|
|
"logout_message": "Sidd Dir sécher datt Dir Iech ofmelle wëllt?"
|
|
},
|
|
"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"
|
|
},
|
|
"shop": {
|
|
"welcome": "Wëllkomm an eisem Buttek",
|
|
"browse_products": "Produkter duerchsichen",
|
|
"add_to_cart": "An de Kuerf",
|
|
"buy_now": "Elo kafen",
|
|
"view_cart": "Kuerf kucken",
|
|
"checkout": "Bezuelen",
|
|
"continue_shopping": "Weider akafen",
|
|
"start_shopping": "Ufänken mat Akafen",
|
|
"empty_cart": "Äre Kuerf ass eidel",
|
|
"cart_total": "Kuerf Total",
|
|
"proceed_checkout": "Zur Bezuelung goen",
|
|
"payment": "Bezuelung",
|
|
"place_order": "Bestellung opgi",
|
|
"order_placed": "Bestellung erfollegräich opginn",
|
|
"thank_you": "Merci fir Är Bestellung",
|
|
"order_confirmation": "Bestellungsbestätegung"
|
|
},
|
|
"footer": {
|
|
"all_rights_reserved": "All Rechter reservéiert",
|
|
"powered_by": "Ënnerstëtzt vun"
|
|
},
|
|
"time": {
|
|
"now": "Elo",
|
|
"today": "Haut",
|
|
"yesterday": "Gëschter",
|
|
"tomorrow": "Muer",
|
|
"this_week": "Dës Woch",
|
|
"last_week": "Lescht Woch",
|
|
"this_month": "Dëse Mount",
|
|
"last_month": "Läschte Mount",
|
|
"this_year": "Dëst Joer",
|
|
"ago": "hier",
|
|
"seconds": "Sekonnen",
|
|
"minutes": "Minutten",
|
|
"hours": "Stonnen",
|
|
"days": "Deeg",
|
|
"weeks": "Wochen",
|
|
"months": "Méint",
|
|
"years": "Joer"
|
|
},
|
|
"formats": {
|
|
"date": "DD.MM.YYYY",
|
|
"time": "HH:mm",
|
|
"datetime": "DD.MM.YYYY HH:mm",
|
|
"currency": "{amount} {symbol}"
|
|
}
|
|
}
|