@base44/app-plugin-commerce 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +4 -10
  2. package/base44/entities/commerce.ProductReview.jsonc +2 -2
  3. package/base44/functions/commerce/storefront-catalog/entry.ts +7 -3
  4. package/package.json +1 -1
  5. package/scripts/install.js +2 -4
  6. package/skills/commerce/SKILL.md +9 -3
  7. package/skills/commerce/docs/api-storefront.md +3 -3
  8. package/skills/commerce/install/01-install.md +8 -24
  9. package/skills/commerce/install/02-storefront.md +22 -9
  10. package/skills/commerce/references/admin-localization.md +95 -0
  11. package/skills/commerce/references/catalog-rendering.md +1 -1
  12. package/skills/commerce/references/reviews.md +7 -6
  13. package/src/commerce/admin/README.md +36 -14
  14. package/src/commerce/admin/bot/StoreAdminBot.jsx +12 -11
  15. package/src/commerce/admin/components/AddressForm.jsx +13 -12
  16. package/src/commerce/admin/components/ConfirmDialog.jsx +5 -4
  17. package/src/commerce/admin/components/CountrySelect.jsx +12 -8
  18. package/src/commerce/admin/components/DataTable.jsx +3 -2
  19. package/src/commerce/admin/components/DateRangePicker.jsx +11 -10
  20. package/src/commerce/admin/components/EmptyState.jsx +2 -1
  21. package/src/commerce/admin/components/MediaUploader.jsx +3 -2
  22. package/src/commerce/admin/components/MetaDataEditor.jsx +4 -3
  23. package/src/commerce/admin/components/SearchSelect.jsx +4 -3
  24. package/src/commerce/admin/context/SettingsContext.jsx +12 -25
  25. package/src/commerce/admin/hooks/useMoney.js +3 -2
  26. package/src/commerce/admin/i18n/index.js +54 -0
  27. package/src/commerce/admin/i18n/locales/de.js +896 -0
  28. package/src/commerce/admin/i18n/locales/en.js +900 -0
  29. package/src/commerce/admin/i18n/locales/es.js +896 -0
  30. package/src/commerce/admin/i18n/locales/fr.js +896 -0
  31. package/src/commerce/admin/i18n/locales/ja.js +896 -0
  32. package/src/commerce/admin/i18n/locales/pt.js +896 -0
  33. package/src/commerce/admin/index.jsx +6 -30
  34. package/src/commerce/admin/layout/AccessDenied.jsx +8 -9
  35. package/src/commerce/admin/layout/AuthGuard.jsx +2 -1
  36. package/src/commerce/admin/layout/Sidebar.jsx +29 -18
  37. package/src/commerce/admin/layout/Topbar.jsx +4 -3
  38. package/src/commerce/admin/lib/api.js +3 -2
  39. package/src/commerce/admin/lib/constants.js +44 -43
  40. package/src/commerce/admin/lib/format.js +4 -3
  41. package/src/commerce/admin/lib/paths.js +2 -3
  42. package/src/commerce/admin/pages/Dashboard.jsx +25 -24
  43. package/src/commerce/admin/pages/coupons/CouponEditor.jsx +55 -57
  44. package/src/commerce/admin/pages/coupons/CouponsList.jsx +22 -21
  45. package/src/commerce/admin/pages/customers/CustomerEditor.jsx +31 -30
  46. package/src/commerce/admin/pages/customers/CustomersList.jsx +19 -18
  47. package/src/commerce/admin/pages/orders/OrderEditor.jsx +75 -71
  48. package/src/commerce/admin/pages/orders/OrdersList.jsx +16 -15
  49. package/src/commerce/admin/pages/orders/components/AddProductDialog.jsx +12 -11
  50. package/src/commerce/admin/pages/orders/components/DownloadPermissionsPanel.jsx +14 -13
  51. package/src/commerce/admin/pages/orders/components/LineItemsTable.jsx +12 -11
  52. package/src/commerce/admin/pages/orders/components/OrderNotesPanel.jsx +11 -10
  53. package/src/commerce/admin/pages/orders/components/PaymentPanel.jsx +22 -22
  54. package/src/commerce/admin/pages/orders/components/RefundPanel.jsx +18 -17
  55. package/src/commerce/admin/pages/orders/components/TotalsBox.jsx +18 -17
  56. package/src/commerce/admin/pages/products/Categories.jsx +14 -13
  57. package/src/commerce/admin/pages/products/ProductEditor.jsx +16 -15
  58. package/src/commerce/admin/pages/products/ProductsList.jsx +41 -36
  59. package/src/commerce/admin/pages/products/Reviews.jsx +54 -46
  60. package/src/commerce/admin/pages/products/components/AttributesSection.jsx +45 -39
  61. package/src/commerce/admin/pages/products/components/ProductDataPanel.jsx +8 -7
  62. package/src/commerce/admin/pages/products/components/PublishBox.jsx +10 -9
  63. package/src/commerce/admin/pages/products/components/TaxonomyPanel.jsx +18 -17
  64. package/src/commerce/admin/pages/products/components/tabs/DownloadsTab.jsx +11 -10
  65. package/src/commerce/admin/pages/products/components/tabs/LinkedTab.jsx +9 -10
  66. package/src/commerce/admin/pages/products/components/tabs/ModifiersTab.jsx +3 -9
  67. package/src/commerce/admin/pages/products/components/tabs/PriceInventoryTab.jsx +76 -78
  68. package/src/commerce/admin/pages/reports/Reports.jsx +33 -32
  69. package/src/commerce/admin/pages/settings/EmailsSettings.jsx +36 -39
  70. package/src/commerce/admin/pages/settings/GeneralSettings.jsx +13 -14
  71. package/src/commerce/admin/pages/settings/InventorySettings.jsx +12 -13
  72. package/src/commerce/admin/pages/settings/LocationEditor.jsx +48 -47
  73. package/src/commerce/admin/pages/settings/PaymentsSettings.jsx +32 -33
  74. package/src/commerce/admin/pages/settings/SettingsLayout.jsx +13 -12
  75. package/src/commerce/admin/pages/settings/ShippingTaxSettings.jsx +31 -31
  76. package/src/commerce/admin/pages/settings/useGroupForm.jsx +4 -3
  77. package/src/commerce/admin/pages/status/WebhookEditor.jsx +34 -31
  78. package/src/commerce/admin/pages/status/Webhooks.jsx +11 -10
  79. package/src/commerce/admin/routes.jsx +31 -43
  80. package/src/commerce/storefront/pickers.jsx +19 -5
  81. package/src/commerce/storefront/useCheckout.jsx +28 -3
  82. package/src/commerce/utils/storefront.js +49 -2
@@ -0,0 +1,896 @@
1
+ /**
2
+ * Deutsch (German). Same keys as en.js — a key missing here falls back to the
3
+ * English value. Formal register (Sie); `{placeholders}` are kept verbatim.
4
+ */
5
+ export default {
6
+ $locale: "de",
7
+
8
+ // ── shared vocabulary ───────────────────────────────────────────
9
+ "common.add": "Hinzufügen",
10
+ "common.amount": "Betrag",
11
+ "common.cancel": "Abbrechen",
12
+ "common.confirm": "Bestätigen",
13
+ "common.delete": "Löschen",
14
+ "common.description": "Beschreibung",
15
+ "common.edit": "Bearbeiten",
16
+ "common.email": "E-Mail",
17
+ "common.name": "Name",
18
+ "common.no_results": "Keine Ergebnisse.",
19
+ "common.phone": "Telefon",
20
+ "common.request_failed": "Anfrage fehlgeschlagen",
21
+ "common.save": "Speichern",
22
+ "common.search": "Suchen…",
23
+ "common.selected_count": "{count} ausgewählt",
24
+ "common.status": "Status",
25
+ "common.type": "Typ",
26
+ "common.upload_failed": "Upload fehlgeschlagen",
27
+
28
+ // ── generic table ───────────────────────────────────────────────
29
+ "table.empty_title": "Noch nichts vorhanden",
30
+ "table.page": "Seite {page}",
31
+
32
+ // ── confirm dialog ──────────────────────────────────────────────
33
+ "confirm.description": "Diese Aktion kann nicht rückgängig gemacht werden.",
34
+ "confirm.title": "Sind Sie sicher?",
35
+
36
+ // ── date-range presets ──────────────────────────────────────────
37
+ "dates.all_time": "Gesamter Zeitraum",
38
+ "dates.last_7_days": "Letzte 7 Tage",
39
+ "dates.last_month": "Letzter Monat",
40
+ "dates.this_month": "Dieser Monat",
41
+ "dates.this_year": "Dieses Jahr",
42
+ "dates.today": "Heute",
43
+
44
+ // ── navigation ──────────────────────────────────────────────────
45
+ "nav.all_products": "Alle Produkte",
46
+ "nav.marketing_group": "Marketing",
47
+ "nav.products_group": "Produkte",
48
+ "nav.store_management": "Shop-Verwaltung",
49
+ "nav.storeadmin_bot": "StoreAdmin-Bot",
50
+ "nav.view_storefront": "Shop ansehen",
51
+
52
+ // ── route + breadcrumb labels ───────────────────────────────────
53
+ "routes.categories": "Kategorien",
54
+ "routes.coupons": "Gutscheine",
55
+ "routes.coupons_edit": "Gutschein bearbeiten",
56
+ "routes.coupons_new": "Gutschein hinzufügen",
57
+ "routes.customer": "Kunde",
58
+ "routes.customers": "Kunden",
59
+ "routes.customers_new": "Kunde hinzufügen",
60
+ "routes.dashboard": "Dashboard",
61
+ "routes.order": "Bestellung",
62
+ "routes.orders": "Bestellungen",
63
+ "routes.orders_new": "Bestellung hinzufügen",
64
+ "routes.products": "Produkte",
65
+ "routes.products_edit": "Produkt bearbeiten",
66
+ "routes.products_new": "Produkt hinzufügen",
67
+ "routes.reports": "Berichte",
68
+ "routes.reviews": "Bewertungen",
69
+ "routes.settings": "Einstellungen",
70
+ "routes.settings_emails": "E-Mails",
71
+ "routes.settings_general": "Allgemein",
72
+ "routes.settings_inventory": "Lagerbestand",
73
+ "routes.settings_location": "Standort",
74
+ "routes.settings_payments": "Zahlungen",
75
+ "routes.settings_shipping_tax": "Versand & Steuern",
76
+ "routes.settings_webhooks": "Webhooks",
77
+ "routes.webhook": "Webhook",
78
+ "routes.webhooks_new": "Webhook hinzufügen",
79
+
80
+ // ── 404 ─────────────────────────────────────────────────────────
81
+ "notfound.back": "Zurück zum Dashboard",
82
+ "notfound.description": "Dies ist keine Admin-Seite.",
83
+ "notfound.title": "Seite nicht gefunden",
84
+
85
+ // ── auth / access screens ───────────────────────────────────────
86
+ "auth.admin_required": "Admin-Zugriff erforderlich",
87
+ "auth.administrator": "Administrator",
88
+ "auth.checking_access": "Zugriff wird geprüft…",
89
+ "auth.must_sign_in": "Sie müssen sich anmelden, um die Shop-Verwaltung zu nutzen.",
90
+ "auth.no_admin_role": "Ihr Konto hat keine Admin-Rolle. Bitten Sie einen Shop-Administrator, Ihnen Zugriff zu gewähren.",
91
+ "auth.sign_in": "Anmelden",
92
+ "auth.sign_in_required": "Anmeldung erforderlich",
93
+ "auth.sign_in_timeout": "Wir konnten Ihre Identität nicht bestätigen. Melden Sie sich an, um fortzufahren — falls diese Seite in einer Vorschau eingebettet ist, öffnen Sie sie zuerst in einem eigenen Browser-Tab, da die Anmeldung in einem Frame nicht abgeschlossen werden kann.",
94
+ "auth.sign_out": "Abmelden",
95
+ "auth.signed_in_as": "Angemeldet als {email}",
96
+
97
+ // ── address form ────────────────────────────────────────────────
98
+ "address.city": "Stadt",
99
+ "address.company": "Firma",
100
+ "address.country": "Land",
101
+ "address.first_name": "Vorname",
102
+ "address.last_name": "Nachname",
103
+ "address.line1": "Adresszeile 1",
104
+ "address.line2": "Adresszeile 2",
105
+ "address.postcode": "Postleitzahl",
106
+ "address.select_state": "Bundesland wählen…",
107
+ "address.state": "Bundesland / Provinz",
108
+
109
+ // ── country picker ──────────────────────────────────────────────
110
+ "country.any": "Beliebiges Land",
111
+ "country.none_found": "Kein Land gefunden.",
112
+ "country.search": "Länder suchen…",
113
+ "country.select": "Land wählen…",
114
+
115
+ // ── media uploader ──────────────────────────────────────────────
116
+ "media.add_images": "Bilder hinzufügen",
117
+ "media.set_image": "Bild festlegen",
118
+
119
+ // ── meta-data editor ────────────────────────────────────────────
120
+ "meta.add_field": "Feld hinzufügen",
121
+ "meta.key": "Schlüssel",
122
+ "meta.value": "Wert",
123
+
124
+ // ── first-run setup screen ──────────────────────────────────────
125
+ "setup.description": "Dies scheint eine neue Installation zu sein. Initialisieren Sie den Shop mit Standardeinstellungen (Währung, Steuerklassen, Zahlungsmethoden, Versandzone und E-Mail-Konfiguration), um die Verwaltung zu nutzen.",
126
+ "setup.run": "Shop-Standardwerte initialisieren",
127
+ "setup.sample_hint": "Fügt Demo-Kategorien, 10 Produkte (drei mit Größen-/Farbvarianten, eines als Download) und Gutscheine hinzu, damit Sie die Verwaltung erkunden können.",
128
+ "setup.sample_label": "Beispieldaten einfügen",
129
+ "setup.schema_error_description": "Die Entity-Schemas dieser App wurden so verändert, dass das Anlegen der Standarddaten nicht möglich ist. Stellen Sie die Vorlagen-Schemas wieder her oder korrigieren Sie die unten aufgeführten Felder, und versuchen Sie es erneut.",
130
+ "setup.schema_error_title": "Entity-Schemas sind inkompatibel",
131
+ "setup.store_name": "Shop-Name",
132
+ "setup.store_name_hint": "Wird im Betreff und als Absendername jeder Transaktions-E-Mail verwendet. Später unter Einstellungen → E-Mails änderbar.",
133
+ "setup.store_name_placeholder": "Name Ihres Shops",
134
+ "setup.success": "Shop-Standardwerte initialisiert",
135
+ "setup.title": "Shop einrichten",
136
+
137
+ // ── status enums ────────────────────────────────────────────────
138
+ "status.order.cancelled": "Storniert",
139
+ "status.order.completed": "Abgeschlossen",
140
+ "status.order.failed": "Fehlgeschlagen",
141
+ "status.order.on-hold": "Wartend",
142
+ "status.order.pending": "Zahlung ausstehend",
143
+ "status.order.processing": "In Bearbeitung",
144
+ "status.order.refunded": "Erstattet",
145
+ "status.product.draft": "Entwurf",
146
+ "status.product.pending": "Prüfung ausstehend",
147
+ "status.product.private": "Privat",
148
+ "status.product.publish": "Veröffentlicht",
149
+ "status.review.approved": "Freigegeben",
150
+ "status.review.hold": "Ausstehend",
151
+ "status.review.spam": "Spam",
152
+ "status.review.trash": "Papierkorb",
153
+ "status.stock.instock": "Auf Lager",
154
+ "status.stock.onbackorder": "Im Lieferrückstand",
155
+ "status.stock.outofstock": "Nicht auf Lager",
156
+ "status.webhook.active": "Aktiv",
157
+ "status.webhook.disabled": "Deaktiviert",
158
+ "status.webhook.paused": "Pausiert",
159
+
160
+ // ── backorder options ───────────────────────────────────────────
161
+ "backorder.no": "Nicht erlauben",
162
+ "backorder.notify": "Erlauben, aber Kunden benachrichtigen",
163
+ "backorder.yes": "Erlauben",
164
+
165
+ // ── tax status ──────────────────────────────────────────────────
166
+ "tax_status.none": "Keine",
167
+ "tax_status.taxable": "Steuerpflichtig",
168
+
169
+ // ── coupon types ────────────────────────────────────────────────
170
+ "coupon_type.fixed_cart": "Fester Warenkorb-Rabatt",
171
+ "coupon_type.fixed_product": "Fester Produktrabatt",
172
+ "coupon_type.percent": "Prozentualer Rabatt",
173
+
174
+ // ── transactional emails ────────────────────────────────────────
175
+ "email_type.cancelled_order": "Stornierte Bestellung",
176
+ "email_type.completed_order": "Abgeschlossene Bestellung",
177
+ "email_type.customer_invoice": "Kundenrechnung / Bestelldetails",
178
+ "email_type.customer_note": "Kundenhinweis",
179
+ "email_type.failed_order": "Fehlgeschlagene Bestellung",
180
+ "email_type.low_stock": "Niedriger Lagerbestand",
181
+ "email_type.new_account": "Neues Konto",
182
+ "email_type.new_order": "Neue Bestellung",
183
+ "email_type.on_hold_order": "Bestellung wartend",
184
+ "email_type.out_of_stock": "Nicht auf Lager",
185
+ "email_type.processing_order": "Bestellung in Bearbeitung",
186
+ "email_type.refunded_order": "Erstattete Bestellung",
187
+ "email_type.reset_password": "Passwort zurücksetzen",
188
+
189
+ // ── dashboard ───────────────────────────────────────────────────
190
+ "dashboard.all_stocked_description": "Keine Produkte mit niedrigem Bestand.",
191
+ "dashboard.all_stocked_title": "Bestand in Ordnung",
192
+ "dashboard.awaiting_processing": "Wartet auf Bearbeitung",
193
+ "dashboard.create_coupon": "Gutschein erstellen",
194
+ "dashboard.date": "Datum",
195
+ "dashboard.latest_orders": "Neueste Bestellungen",
196
+ "dashboard.low_on_stock": "Geringer Bestand",
197
+ "dashboard.low_stock": "Niedriger Bestand",
198
+ "dashboard.low_stock_hint": "Produkte auf oder unter dem Schwellenwert",
199
+ "dashboard.n_left": "noch {count}",
200
+ "dashboard.net_sales_month": "Nettoumsatz diesen Monat",
201
+ "dashboard.net_sales_today": "Nettoumsatz heute",
202
+ "dashboard.no_orders_description": "Bestellungen erscheinen hier, sobald sie eingehen.",
203
+ "dashboard.no_orders_title": "Noch keine Bestellungen",
204
+ "dashboard.orders_to_fulfill": "Bestellungen auszuführen",
205
+ "dashboard.sku": "SKU: {sku}",
206
+ "dashboard.status_count": "{status}: {count}",
207
+ "dashboard.subtitle": "Ihr Shop auf einen Blick.",
208
+ "dashboard.total": "Gesamt",
209
+ "dashboard.view_reports": "Berichte ansehen",
210
+
211
+ // ── orders ──────────────────────────────────────────────────────
212
+ "orders.add_fee": "Gebühr hinzufügen",
213
+ "orders.add_note_placeholder": "Notiz hinzufügen…",
214
+ "orders.add_products": "Produkt(e) hinzufügen",
215
+ "orders.add_shipping": "Versand hinzufügen",
216
+ "orders.add_to_order": "Zur Bestellung hinzufügen",
217
+ "orders.addr_billing": "Rechnungsadresse",
218
+ "orders.addr_shipping": "Lieferadresse",
219
+ "orders.all": "Alle",
220
+ "orders.already_customer_linked": "{name} ist bereits Kunde — verknüpft. Speichern Sie die Bestellung, um die Verknüpfung zu behalten.",
221
+ "orders.and_separator": " und ",
222
+ "orders.apply": "Anwenden",
223
+ "orders.apply_coupon": "Gutschein anwenden",
224
+ "orders.apply_coupon_dirty_tip": "Speichert Ihre offenen Änderungen und wendet dann den Gutschein an",
225
+ "orders.available_to_refund": "Insgesamt erstattbar:",
226
+ "orders.awaiting_payment": "Zahlung ausstehend",
227
+ "orders.billing": "Rechnung",
228
+ "orders.change_status_to": "Status ändern zu…",
229
+ "orders.check_payment": "Zahlung prüfen",
230
+ "orders.choose_variation": "Variante wählen…",
231
+ "orders.close_refund": "Erstattung schließen",
232
+ "orders.copy_failed": "Kopieren nicht möglich — markieren Sie den Link und kopieren Sie ihn manuell",
233
+ "orders.copy_from_billing": "Rechnungsadresse in die Lieferadresse übernehmen",
234
+ "orders.copy_link": "Link kopieren",
235
+ "orders.cost": "Kosten",
236
+ "orders.coupon_applied": "Gutschein {code} angewendet",
237
+ "orders.coupon_code": "Gutscheincode",
238
+ "orders.coupon_code_placeholder": "z. B. welcome10",
239
+ "orders.coupon_removed": "Gutschein {code} entfernt",
240
+ "orders.coupons_codes": "Gutschein(e): {codes}",
241
+ "orders.coupons_label": "Gutscheine:",
242
+ "orders.create_payment_link": "Zahlungslink erstellen",
243
+ "orders.custom_fields": "Benutzerdefinierte Felder",
244
+ "orders.customer_created": "Kunde {name} angelegt. Speichern Sie die Bestellung, um die Verknüpfung zu behalten.",
245
+ "orders.customer_load_failed": "Dieser Kundendatensatz konnte nicht geladen werden",
246
+ "orders.customer_no_saved_address": "Dieser Kunde hat keine gespeicherte Adresse",
247
+ "orders.customer_provided_note": "Vom Kunden hinterlassene Notiz",
248
+ "orders.date": "Datum",
249
+ "orders.delete_note": "Notiz löschen",
250
+ "orders.delete_order": "Bestellung löschen",
251
+ "orders.delete_order_description": "Nur ausstehende, stornierte oder fehlgeschlagene Bestellungen können gelöscht werden. Dies kann nicht rückgängig gemacht werden.",
252
+ "orders.delete_order_title": "Bestellung #{number} löschen?",
253
+ "orders.deleted": "Bestellung gelöscht",
254
+ "orders.discount": "Rabatt",
255
+ "orders.download_granted": "Download-Zugriff gewährt",
256
+ "orders.download_permissions": "Berechtigungen für herunterladbare Produkte",
257
+ "orders.download_revoked": "Download-Zugriff entzogen",
258
+ "orders.empty_description": "Bestellungen erscheinen hier, sobald sie eingehen.",
259
+ "orders.empty_search_hint": "Passen Sie Ihre Suche oder den Zeitraum an.",
260
+ "orders.empty_title": "Keine Bestellungen gefunden",
261
+ "orders.expires": "Läuft ab",
262
+ "orders.fee": "Gebühr",
263
+ "orders.fee_name": "Bezeichnung der Gebühr",
264
+ "orders.fees": "Gebühren",
265
+ "orders.file": "Datei",
266
+ "orders.filled_from": "{parts} aus {name} übernommen",
267
+ "orders.from_billing": "Aus Rechnungsadresse",
268
+ "orders.general": "Allgemein",
269
+ "orders.grant_access": "Zugriff gewähren",
270
+ "orders.guest_order": "Gastbestellung",
271
+ "orders.guest_order_hint": "Gastbestellung. Wählen Sie einen Kunden, um die Adressen aus seinem Datensatz zu übernehmen, oder geben Sie die Daten unten ein — an die Rechnungs-E-Mail gehen die E-Mails zu dieser Bestellung.",
272
+ "orders.guest_order_needs_email": "Gastbestellung — Rechnungs-E-Mail erforderlich",
273
+ "orders.guest_search_customers": "Gast — Kunden suchen…",
274
+ "orders.invoice_sent": "Bestelldetails an den Kunden gesendet",
275
+ "orders.item": "Artikel",
276
+ "orders.items": "Artikel",
277
+ "orders.items_subtotal": "Zwischensumme Artikel",
278
+ "orders.kept_existing_addresses": "Die vorhandenen Adressen dieser Bestellung wurden beibehalten — nutzen Sie „Adressen des Kunden verwenden“, um sie zu ersetzen.",
279
+ "orders.link_copied": "Link kopiert",
280
+ "orders.link_sets_method": "Ein Zahlungslink stellt diese Bestellung auf Kartenzahlung um.",
281
+ "orders.link_switches_method": "Ein Zahlungslink wechselt diese Bestellung von {method} zur Kartenzahlung.",
282
+ "orders.loading_variations": "Varianten werden geladen…",
283
+ "orders.method": "Methode",
284
+ "orders.method_title": "Bezeichnung der Methode",
285
+ "orders.n_orders": "{count} Bestellung(en)",
286
+ "orders.n_updated": "{count} Bestellung(en) aktualisiert",
287
+ "orders.net_payment": "Nettozahlung",
288
+ "orders.never": "Nie",
289
+ "orders.new_payment_link": "Neuer Zahlungslink",
290
+ "orders.no_address_set": "Keine Adresse hinterlegt.",
291
+ "orders.no_card_payment_tip": "Für diese Bestellung ist keine Kartenzahlung hinterlegt, die erstattet werden könnte",
292
+ "orders.no_download_permissions": "Keine Download-Berechtigungen für diese Bestellung.",
293
+ "orders.no_items": "Keine Artikel.",
294
+ "orders.no_items_hint": "Nutzen Sie unten „Produkt(e) hinzufügen“.",
295
+ "orders.no_notes": "Noch keine Notizen.",
296
+ "orders.no_payment_method_hint": "Für diese Bestellung ist keine Zahlungsmethode gesetzt. Nehmen Sie die Zahlung außerhalb des Shops entgegen und setzen Sie die Bestellung auf „In Bearbeitung“, oder senden Sie dem Kunden einen Zahlungslink.",
297
+ "orders.no_payment_yet": "Noch keine Zahlung eingegangen",
298
+ "orders.no_saved_address_enter_below": "{name} hat keine gespeicherte Adresse — geben Sie die Daten unten ein.",
299
+ "orders.no_variations": "Dieses Produkt hat noch keine Varianten.",
300
+ "orders.not_found": "Bestellung nicht gefunden.",
301
+ "orders.note_added": "Notiz hinzugefügt",
302
+ "orders.note_sent": "Notiz an Kunden gesendet",
303
+ "orders.note_to_customer": "Notiz an den Kunden",
304
+ "orders.open": "Öffnen",
305
+ "orders.open_customer": "Kunden öffnen",
306
+ "orders.order_actions": "Bestellaktionen",
307
+ "orders.order_notes": "Bestellnotizen",
308
+ "orders.order_number": "Bestellnr.",
309
+ "orders.order_total": "Bestellsumme",
310
+ "orders.paid": "Bezahlt",
311
+ "orders.pay_outside_hint": "Diese Bestellung wird außerhalb des Shops bezahlt ({method}). Setzen Sie sie auf „In Bearbeitung“, sobald das Geld eingegangen ist.",
312
+ "orders.payment": "Zahlung",
313
+ "orders.payment_confirmed": "Zahlung bestätigt",
314
+ "orders.payment_link_created": "Zahlungslink erstellt",
315
+ "orders.payment_link_hint": "Senden Sie diesen Link an den Kunden — er öffnet die sichere Zahlungsseite des Anbieters. Die Bestellung aktualisiert sich selbst nach der Zahlung.",
316
+ "orders.placed_via": "{date} über {via}",
317
+ "orders.preview_failed": "Diese Änderungen konnten nicht berechnet werden:",
318
+ "orders.preview_failed_generic": "Diese Änderungen konnten nicht berechnet werden",
319
+ "orders.previous_refunds": "Frühere Erstattungen",
320
+ "orders.pricing_changes": "Änderungen werden berechnet…",
321
+ "orders.private_note": "Interne Notiz",
322
+ "orders.product": "Produkt",
323
+ "orders.qty": "Anz.",
324
+ "orders.quantity": "Menge",
325
+ "orders.recalculate": "Neu berechnen",
326
+ "orders.recalculate_dirty_tip": "Speichert Ihre offenen Änderungen und berechnet Steuern und Summen mit den aktuellen Einstellungen neu",
327
+ "orders.recalculate_tip": "Steuern und Summen mit den aktuellen Einstellungen neu berechnen",
328
+ "orders.recalculated": "Summen neu berechnet",
329
+ "orders.reference": "Referenz",
330
+ "orders.refund": "Erstattung",
331
+ "orders.refund_amount": "Erstattung",
332
+ "orders.refund_over_max": "Der Betrag übersteigt die erstattbare Summe.",
333
+ "orders.refund_reason": "Grund für die Erstattung (optional)",
334
+ "orders.refund_shipping": "Versand erstatten",
335
+ "orders.refund_via_provider": "Geld über den Zahlungsanbieter zurücksenden",
336
+ "orders.refunded": "Erstattet",
337
+ "orders.refunded_amount": "{amount} erstattet",
338
+ "orders.refunded_by": "von {name}",
339
+ "orders.refunded_via_provider": "{amount} über den Zahlungsanbieter erstattet",
340
+ "orders.remaining": "Verbleibend",
341
+ "orders.remove_coupon": "Gutschein entfernen",
342
+ "orders.replaced_from_customer": "{parts} aus dem Kundendatensatz ersetzt",
343
+ "orders.restock_items": "Erstattete Artikel wieder einlagern",
344
+ "orders.revoke": "Entziehen",
345
+ "orders.save_and_recalculate": "Speichern & neu berechnen",
346
+ "orders.save_as_customer": "Als Kunde speichern",
347
+ "orders.save_as_customer_needs_email_tip": "Geben Sie unten eine Rechnungs-E-Mail an, um diese Daten als Kunde zu speichern",
348
+ "orders.save_as_customer_tip": "Aus den Rechnungsdaten unten einen Kunden anlegen und diese Bestellung damit verknüpfen",
349
+ "orders.save_order": "Bestellung speichern",
350
+ "orders.saved": "Bestellung gespeichert",
351
+ "orders.saved_recalculated": "Bestellung gespeichert und Summen neu berechnet",
352
+ "orders.search_downloadable": "Herunterladbare Produkte suchen…",
353
+ "orders.search_placeholder": "Bestellnr., Name, E-Mail suchen…",
354
+ "orders.search_products": "Produkte suchen…",
355
+ "orders.send_details": "Bestelldetails an den Kunden senden",
356
+ "orders.sent_to_customer": "· an Kunden gesendet",
357
+ "orders.shipping": "Versand",
358
+ "orders.sku": "SKU: {sku}",
359
+ "orders.system": "· System",
360
+ "orders.tax": "Steuer",
361
+ "orders.total": "Gesamt",
362
+ "orders.unsaved_totals": "Nicht gespeichert — die Summen unten enthalten Ihre Änderungen",
363
+ "orders.use_customer_addresses": "Adressen des Kunden verwenden",
364
+ "orders.use_customer_addresses_tip": "Rechnungs- und Lieferadresse der Bestellung durch die gespeicherten Adressen des Kunden ersetzen",
365
+ "orders.used_count": "(genutzt {count})",
366
+ "orders.variation": "Variante",
367
+ "orders.view_edit": "Ansehen / bearbeiten",
368
+
369
+ // ── products ────────────────────────────────────────────────────
370
+ "products.add_file": "Datei hinzufügen",
371
+ "products.add_gallery_images": "Galeriebilder hinzufügen",
372
+ "products.add_new": "Neu hinzufügen",
373
+ "products.add_new_category": "Neue Kategorie hinzufügen",
374
+ "products.add_new_product": "Neues Produkt hinzufügen",
375
+ "products.add_new_ribbon": "Neues Band hinzufügen",
376
+ "products.add_option_placeholder": "Option hinzufügen…",
377
+ "products.add_value": "Wert hinzufügen",
378
+ "products.all_categories": "Alle Kategorien",
379
+ "products.all_stock": "Alle Bestände",
380
+ "products.backorders": "Lieferrückstände",
381
+ "products.bulk_copied": "Auf {count} Variante(n) kopiert.",
382
+ "products.bulk_price_set": "Preis für {count} Variante(n) gesetzt.",
383
+ "products.bulk_stock_set": "Bestand für {count} Variante(n) gesetzt.",
384
+ "products.category_create_failed": "Kategorie konnte nicht erstellt werden",
385
+ "products.category_created": "Kategorie erstellt",
386
+ "products.category_name_placeholder": "Kategoriename",
387
+ "products.clear": "Zurücksetzen",
388
+ "products.code": "Code",
389
+ "products.confirm_delete_bulk": "{count} Produkt(e) löschen?",
390
+ "products.confirm_delete_description": "Damit werden das Produkt und seine Varianten dauerhaft gelöscht.",
391
+ "products.confirm_delete_one": "„{name}“ löschen?",
392
+ "products.confirm_delete_this": "Dieses Produkt löschen?",
393
+ "products.confirm_remove_option": "Die Option „{name}“ entfernen?",
394
+ "products.confirm_remove_option_all": "Damit werden alle {count} Variante(n) mit ihren Preisen, Beständen und SKUs gelöscht.",
395
+ "products.confirm_remove_option_rebuild": "Die Variantenliste wird ohne sie neu aufgebaut — Preise, Bestände und SKUs der aktuellen {count} Variante(n) können verloren gehen.",
396
+ "products.confirm_remove_values": "{values} entfernen?",
397
+ "products.confirm_remove_values_description": "Damit werden {count} Variante(n) gelöscht. Ihre Preise, Bestände und SKUs gehen beim Speichern verloren.",
398
+ "products.confirm_remove_values_description_stock": "Damit werden {count} Variante(n) und ihre {stock} Lagereinheiten gelöscht. Ihre Preise, Bestände und SKUs gehen beim Speichern verloren.",
399
+ "products.copy_to_selected": "Auf Auswahl kopieren",
400
+ "products.create_named": "„{name}“ erstellen",
401
+ "products.created": "Produkt erstellt",
402
+ "products.cross_sells": "Cross-Sells",
403
+ "products.cross_sells_hint": "Wird im Warenkorb zusammen mit diesem Produkt beworben.",
404
+ "products.cross_sells_placeholder": "Produkte für Cross-Selling suchen…",
405
+ "products.date": "Datum",
406
+ "products.default": "Standard",
407
+ "products.default_value_name": "Wert {number}",
408
+ "products.delete_count": "Löschen ({count})",
409
+ "products.delete_product": "Produkt löschen",
410
+ "products.delete_variants": "Varianten löschen",
411
+ "products.deleted": "Produkt gelöscht",
412
+ "products.deleted_product": "(gelöschtes Produkt)",
413
+ "products.description_placeholder": "Vollständige Produktbeschreibung (HTML erlaubt)",
414
+ "products.dimensions_with_unit": "Maße L×B×H ({unit})",
415
+ "products.done": "Fertig",
416
+ "products.download_expiry": "Download-Ablauf (Tage)",
417
+ "products.download_expiry_hint": "-1 für keinen Ablauf.",
418
+ "products.download_limit": "Download-Limit",
419
+ "products.download_limit_hint": "-1 für unbegrenzte Downloads.",
420
+ "products.download_name_placeholder": "z. B. Bedienungsanleitung",
421
+ "products.downloadable": "Herunterladbar",
422
+ "products.downloadable_files": "Herunterladbare Dateien",
423
+ "products.downloads": "Downloads",
424
+ "products.duplicate": "Duplizieren",
425
+ "products.duplicated": "Produkt dupliziert",
426
+ "products.empty_create": "Legen Sie Ihr erstes Produkt an, um zu starten.",
427
+ "products.empty_search": "Versuchen Sie eine andere Suche oder einen anderen Filter.",
428
+ "products.empty_title": "Keine Produkte gefunden",
429
+ "products.enable_variant": "{name} aktivieren",
430
+ "products.enabled": "Aktiv",
431
+ "products.featured_product": "Empfohlenes Produkt",
432
+ "products.file": "Datei",
433
+ "products.file_url": "Datei-URL",
434
+ "products.from_price": "ab {price}",
435
+ "products.has_variants": "Hat Varianten",
436
+ "products.image": "Bild",
437
+ "products.linked_products": "Verknüpfte Produkte",
438
+ "products.load_failed": "Produkt konnte nicht geladen werden",
439
+ "products.low_stock_threshold": "Schwelle für niedrigen Bestand",
440
+ "products.lowest_enabled_variant": "(günstigste aktive Variante)",
441
+ "products.make_default": "{name} als Standard festlegen",
442
+ "products.manage_catalog": "Verwalten Sie Ihren Katalog",
443
+ "products.manage_option_catalog": "Optionskatalog verwalten (betrifft alle Produkte)",
444
+ "products.max_one_per_order": "max. 1 pro Bestellung",
445
+ "products.modifiers_empty_hint": "Soll das Produkt in Varianten erhältlich sein? Fügen Sie es als Option unter Preis & Bestand hinzu.",
446
+ "products.modifiers_hint": "Beschreibende Angaben auf der Produktseite (z. B. Inhaltsstoffe, Allergene, Pflegehinweise).",
447
+ "products.more_fields": "Weitere Felder (Bild, Aktion, Versand)",
448
+ "products.move_down": "Nach unten",
449
+ "products.move_up": "Nach oben",
450
+ "products.n_deleted": "{count} Produkt(e) gelöscht",
451
+ "products.name_placeholder": "Produktname",
452
+ "products.name_required": "Ein Produktname ist erforderlich",
453
+ "products.new_option": "Neue Option",
454
+ "products.new_option_placeholder": "z. B. Stoff",
455
+ "products.no_categories": "Noch keine Kategorien.",
456
+ "products.no_options": "Noch keine Optionen.",
457
+ "products.no_parent": "— Keine —",
458
+ "products.no_title": "(ohne Titel)",
459
+ "products.no_values": "Noch keine Werte.",
460
+ "products.no_variants_description": "Wählen Sie oben die Werte, in denen dieses Produkt erhältlich ist — die Varianten erscheinen dann automatisch hier.",
461
+ "products.no_variants_title": "Noch keine Varianten — Kunden können dieses Produkt nicht kaufen",
462
+ "products.not_tracked": "Nicht verfolgt — Menge eingeben, um sie zu verfolgen",
463
+ "products.option_catalog": "Optionskatalog",
464
+ "products.option_catalog_hint": "Gilt für alle Produkte — Änderungen werden sofort gespeichert. Um eine Option oder einen Wert zu löschen, entfernen Sie sie aus den Entity-Daten.",
465
+ "products.options": "Optionen",
466
+ "products.options_empty": "Noch keine Optionen. Fügen Sie eine hinzu (Größe, Farbe, Packung …) und wählen Sie die Werte, in denen dieses Produkt erhältlich ist.",
467
+ "products.options_hint": "Worin dieses Produkt erhältlich ist — jede Kombination von Werten wird unten zu einer Variante.",
468
+ "products.order": "Reihenfolge",
469
+ "products.parent": "Übergeordnet",
470
+ "products.price": "Preis",
471
+ "products.price_inventory": "Preis & Bestand",
472
+ "products.product_data": "Produktdaten",
473
+ "products.product_gallery": "Produktgalerie",
474
+ "products.product_image": "Produktbild",
475
+ "products.publish": "Veröffentlichen",
476
+ "products.qty": "Anz.",
477
+ "products.quick_edit": "Schnellbearbeitung",
478
+ "products.regular_price": "Regulärer Preis",
479
+ "products.remove_from_product": "Von diesem Produkt entfernen",
480
+ "products.remove_option": "Option entfernen",
481
+ "products.remove_variants": "Varianten entfernen",
482
+ "products.ribbon_create_failed": "Band konnte nicht erstellt werden",
483
+ "products.ribbon_created": "Band erstellt",
484
+ "products.ribbons": "Bänder",
485
+ "products.sale_end": "Aktionsende",
486
+ "products.sale_price": "Aktionspreis",
487
+ "products.sale_start": "Aktionsbeginn",
488
+ "products.saved": "Produkt gespeichert",
489
+ "products.schedule_sale": "Aktion planen",
490
+ "products.search_placeholder": "Produkte suchen…",
491
+ "products.section_files": "Dateien",
492
+ "products.section_inventory": "Bestand",
493
+ "products.section_price": "Preis",
494
+ "products.section_sale": "Aktion",
495
+ "products.section_shipping": "Versand",
496
+ "products.section_type": "Typ",
497
+ "products.select_all_variants": "Alle Varianten auswählen",
498
+ "products.select_ribbons": "Bänder auswählen",
499
+ "products.select_variant": "{name} auswählen",
500
+ "products.set_price": "Preis setzen",
501
+ "products.set_product_image": "Produktbild festlegen",
502
+ "products.set_stock": "Bestand setzen",
503
+ "products.short_description": "Kurzbeschreibung",
504
+ "products.short_description_placeholder": "Kurze Zusammenfassung für Übersichten",
505
+ "products.single_hint": "Ein Preis, ein Bestand. Wechseln Sie, wenn es das Produkt in Größen, Packungen oder Farben gibt.",
506
+ "products.single_product": "Einzelprodukt",
507
+ "products.sku": "SKU",
508
+ "products.sku_line": "SKU: {sku}",
509
+ "products.sku_placeholder": "Eindeutige Artikelnummer",
510
+ "products.slug_label": "Slug:",
511
+ "products.sold_individually": "Käufe auf 1 Artikel pro Bestellung begrenzen",
512
+ "products.specifications": "Spezifikationen",
513
+ "products.stock": "Bestand",
514
+ "products.stock_dont_track": "Nicht verfolgen",
515
+ "products.stock_management": "Bestandsverwaltung",
516
+ "products.stock_quantity": "Lagerbestand",
517
+ "products.stock_same_as_product": "Wie das Produkt",
518
+ "products.stock_status": "Bestandsstatus",
519
+ "products.stock_track_quantity": "Menge verfolgen",
520
+ "products.store_default": "Shop-Standard",
521
+ "products.store_price": "Shop-Preis:",
522
+ "products.switch_single_description": "Damit werden {count} Variante(n) mit ihren Beständen und Preisen entfernt. Das Produkt behält einen Preis und einen Bestand.",
523
+ "products.switch_single_title": "Zu einem Einzelprodukt wechseln?",
524
+ "products.tax_group": "Steuergruppe",
525
+ "products.tax_purchase_rules": "Steuer- & Kaufregeln",
526
+ "products.tax_status": "Steuerstatus",
527
+ "products.toggle_featured": "Empfehlung umschalten",
528
+ "products.track_stock_quantity": "Lagerbestand verfolgen",
529
+ "products.tracked_quantity": "Verfolgte Menge",
530
+ "products.updated": "Produkt aktualisiert",
531
+ "products.upload_file": "Datei hochladen",
532
+ "products.upsells": "Upsells",
533
+ "products.upsells_hint": "Wird anstelle dieses Produkts empfohlen, z. B. hochwertigere Alternativen.",
534
+ "products.upsells_placeholder": "Produkte für Upselling suchen…",
535
+ "products.values": "Werte",
536
+ "products.values_placeholder": "Werte, in denen dieses Produkt erhältlich ist…",
537
+ "products.variant": "Variante",
538
+ "products.variant_count": "{count} Variante(n)",
539
+ "products.variants_hint": "Jede Kombination von Optionswerten wird zu einer Variante mit eigenem Preis, Bestand und SKU.",
540
+ "products.virtual": "Virtuell",
541
+ "products.visible": "Sichtbar",
542
+ "products.visible_off": "Verborgen — als Entwurf gespeichert",
543
+ "products.visible_on": "Im Shop sichtbar",
544
+ "products.weight_with_unit": "Gewicht ({unit})",
545
+
546
+ // ── categories ──────────────────────────────────────────────────
547
+ "categories.add": "Kategorie hinzufügen",
548
+ "categories.added": "Kategorie hinzugefügt",
549
+ "categories.confirm_delete_description": "Produkte in dieser Kategorie werden nicht gelöscht; sie verlieren lediglich die Kategorie. Dies kann nicht rückgängig gemacht werden.",
550
+ "categories.confirm_delete_title": "„{name}“ löschen?",
551
+ "categories.deleted": "Kategorie gelöscht",
552
+ "categories.description": "Produkte in Kategorien organisieren",
553
+ "categories.empty": "Noch keine Kategorien — legen Sie unten die erste an.",
554
+ "categories.name_placeholder": "Kategoriename",
555
+ "categories.order": "Reihenfolge",
556
+ "categories.saved": "Kategorie gespeichert",
557
+ "categories.slug": "Slug",
558
+ "categories.slug_placeholder": "automatisch aus dem Namen",
559
+
560
+ // ── reviews ─────────────────────────────────────────────────────
561
+ "reviews.anonymous": "Anonym",
562
+ "reviews.approve": "Freigeben",
563
+ "reviews.author": "Autor",
564
+ "reviews.auto_approve_label": "Neue Bewertungen automatisch freigeben",
565
+ "reviews.auto_approve_off": "Neue Bewertungen werden zur Moderation zurückgehalten",
566
+ "reviews.auto_approve_on": "Neue Bewertungen werden sofort veröffentlicht",
567
+ "reviews.confirm_delete_bulk": "{count} Bewertung(en) löschen?",
568
+ "reviews.confirm_delete_description": "Damit wird die Bewertung dauerhaft entfernt.",
569
+ "reviews.confirm_delete_one": "Diese Bewertung löschen?",
570
+ "reviews.date": "Datum",
571
+ "reviews.delete_permanently": "Dauerhaft löschen",
572
+ "reviews.deleted": "Bewertung gelöscht",
573
+ "reviews.deleted_plural": "Bewertungen gelöscht",
574
+ "reviews.deleted_product": "(gelöschtes Produkt)",
575
+ "reviews.edit_review": "Bewertung bearbeiten",
576
+ "reviews.empty_description": "Von Kunden abgegebene Bewertungen erscheinen hier.",
577
+ "reviews.empty_title": "Keine Bewertungen",
578
+ "reviews.hold": "Zurückhalten",
579
+ "reviews.page_description": "Produktbewertungen von Kunden moderieren",
580
+ "reviews.product": "Produkt",
581
+ "reviews.rating": "Bewertung",
582
+ "reviews.rating_only": "Nur Bewertung — kein Text",
583
+ "reviews.review": "Bewertung",
584
+ "reviews.save_failed": "Speichern fehlgeschlagen",
585
+ "reviews.tab_all": "Alle",
586
+ "reviews.updated": "Bewertung aktualisiert",
587
+ "reviews.updated_plural": "Bewertungen aktualisiert",
588
+ "reviews.verified_owner": "✓ Verifizierter Käufer",
589
+
590
+ // ── coupons ─────────────────────────────────────────────────────
591
+ "coupons.allowed_emails": "Zugelassene E-Mail-Adressen",
592
+ "coupons.allowed_emails_hint": "Nur diese Adressen können den Gutschein einlösen. Leer lassen, um ihn für alle freizugeben.",
593
+ "coupons.amount_label": "Betrag",
594
+ "coupons.amount_label_percent": "Prozentsatz",
595
+ "coupons.amount_required": "Ein Rabattbetrag ist erforderlich",
596
+ "coupons.any_category": "Beliebige Kategorie",
597
+ "coupons.any_product": "Beliebiges Produkt",
598
+ "coupons.apply_all_items": "Auf alle infrage kommenden Artikel anwenden",
599
+ "coupons.code": "Code",
600
+ "coupons.code_placeholder": "z. B. SOMMER20",
601
+ "coupons.code_required": "Ein Gutscheincode ist erforderlich",
602
+ "coupons.confirm_delete_description": "Kunden können ihn dann nicht mehr einlösen. Dies kann nicht rückgängig gemacht werden.",
603
+ "coupons.confirm_delete_many": "{count} Gutschein(e) löschen?",
604
+ "coupons.confirm_delete_one": "Diesen Gutschein löschen?",
605
+ "coupons.coupon_code": "Gutscheincode",
606
+ "coupons.coupon_expiry_date": "Ablaufdatum des Gutscheins",
607
+ "coupons.create": "Gutschein erstellen",
608
+ "coupons.delete_selected": "Auswahl löschen ({count})",
609
+ "coupons.deleted": "Gutschein gelöscht",
610
+ "coupons.description_optional": "Beschreibung (optional)",
611
+ "coupons.disabled": "Deaktiviert",
612
+ "coupons.disabled_hint": "Deaktiviert — Kunden können diesen Gutschein nicht anwenden, und Warenkörbe verlieren ihn.",
613
+ "coupons.discount_type": "Rabattart",
614
+ "coupons.email_chips_placeholder": "email@example.com oder *@example.com — Enter drücken",
615
+ "coupons.empty_description": "Mit Gutscheinen gewähren Sie Rabatte an der Kasse.",
616
+ "coupons.empty_title": "Noch keine Gutscheine",
617
+ "coupons.enabled": "Aktiviert",
618
+ "coupons.exclude_categories": "Kategorien ausschließen",
619
+ "coupons.exclude_products": "Produkte ausschließen",
620
+ "coupons.exclude_sale_items": "Aktionsartikel ausschließen",
621
+ "coupons.exclude_sale_items_hint": "Der Gutschein gilt nicht für reduzierte Artikel.",
622
+ "coupons.expiry_date": "Ablaufdatum",
623
+ "coupons.free_shipping": "Kostenlosen Versand erlauben",
624
+ "coupons.free_shipping_hint": "Gibt Versandarten frei, die einen Gutschein voraussetzen.",
625
+ "coupons.general": "Allgemein",
626
+ "coupons.generate": "Generieren",
627
+ "coupons.individual_use": "Nur einzeln verwendbar",
628
+ "coupons.individual_use_hint": "Kann nicht mit anderen Gutscheinen kombiniert werden.",
629
+ "coupons.limit_usage_items": "Auf X Artikel begrenzen",
630
+ "coupons.limit_usage_items_hint": "Maximale Anzahl einzelner Artikel, für die der Gutschein gilt (Produktrabatte).",
631
+ "coupons.maximum_spend": "Maximaler Bestellwert ({code})",
632
+ "coupons.minimum_spend": "Mindestbestellwert ({code})",
633
+ "coupons.n_deleted": "{count} Gutschein(e) gelöscht",
634
+ "coupons.no_exclusions": "Keine Ausschlüsse",
635
+ "coupons.no_maximum": "Kein Maximum",
636
+ "coupons.no_minimum": "Kein Minimum",
637
+ "coupons.product_categories": "Produktkategorien",
638
+ "coupons.publish": "Veröffentlichen",
639
+ "coupons.save": "Gutschein speichern",
640
+ "coupons.saved": "Gutschein gespeichert",
641
+ "coupons.search_placeholder": "Gutscheine suchen…",
642
+ "coupons.subtitle": "Rabattcodes erstellen und verwalten.",
643
+ "coupons.title_with_code": "Gutschein: {code}",
644
+ "coupons.unlimited": "Unbegrenzt",
645
+ "coupons.usage_limit_col": "Nutzung / Limit",
646
+ "coupons.usage_limit_per_coupon": "Nutzungslimit pro Gutschein",
647
+ "coupons.usage_limit_per_coupon_hint": "Wie oft der Gutschein insgesamt eingelöst werden kann.",
648
+ "coupons.usage_limit_per_user": "Nutzungslimit pro Kunde",
649
+ "coupons.usage_limit_per_user_hint": "Wie oft ein einzelner Kunde (nach Rechnungs-E-Mail) ihn einlösen kann.",
650
+ "coupons.usage_limits": "Nutzungslimits",
651
+ "coupons.usage_restriction": "Nutzungsbeschränkung",
652
+ "coupons.used_times": "Genutzt: {count}",
653
+
654
+ // ── customers ───────────────────────────────────────────────────
655
+ "customers.account": "Konto",
656
+ "customers.average_order_value": "Durchschnittlicher Bestellwert",
657
+ "customers.billing_address": "Rechnungsadresse",
658
+ "customers.confirm_delete_description": "Die Bestellungen bleiben erhalten und werden Gast zugeordnet. Dies kann nicht rückgängig gemacht werden.",
659
+ "customers.confirm_delete_title": "Diesen Kunden löschen?",
660
+ "customers.copied_from_billing": "Aus Rechnungsadresse übernommen",
661
+ "customers.copy_from_billing": "Aus Rechnungsadresse übernehmen",
662
+ "customers.create": "Kunde anlegen",
663
+ "customers.custom_fields": "Benutzerdefinierte Felder",
664
+ "customers.deleted": "Kunde gelöscht",
665
+ "customers.email_address_required": "E-Mail-Adresse *",
666
+ "customers.email_required": "Eine E-Mail-Adresse ist erforderlich",
667
+ "customers.email_username": "E-Mail / Benutzername",
668
+ "customers.empty_description": "Kunden erscheinen hier nach einer Bestellung oder wenn Sie sie manuell anlegen.",
669
+ "customers.empty_title": "Noch keine Kunden",
670
+ "customers.guest_badge": "Gast",
671
+ "customers.invite_sent": "Einladung gesendet",
672
+ "customers.location": "Ort",
673
+ "customers.no_orders_yet": "Noch keine Bestellungen.",
674
+ "customers.paying_customer": "Zahlender Kunde ✓",
675
+ "customers.recalculate": "Neu berechnen",
676
+ "customers.recent_orders": "Letzte Bestellungen",
677
+ "customers.save": "Kunde speichern",
678
+ "customers.saved": "Kunde gespeichert",
679
+ "customers.search_placeholder": "Nach Name, E-Mail oder Benutzername suchen…",
680
+ "customers.send_invite": "Dem neuen Nutzer eine Kontoeinladung senden",
681
+ "customers.shipping_address": "Lieferadresse",
682
+ "customers.stats": "Statistik",
683
+ "customers.stats_recalculated": "Statistik neu berechnet",
684
+ "customers.subtitle": "Registrierte Kunden und Gäste an der Kasse.",
685
+ "customers.total_spend": "Gesamtumsatz",
686
+ "customers.username": "Benutzername",
687
+
688
+ // ── reports ─────────────────────────────────────────────────────
689
+ "reports.attributes": "Attribute",
690
+ "reports.coupons_by_type": "Gutscheine nach Art",
691
+ "reports.discounted": "Rabattiert",
692
+ "reports.empty_no_sales": "Keine Verkäufe in diesem Zeitraum",
693
+ "reports.gross_sales": "Bruttoumsatz",
694
+ "reports.items_sold": "Verkaufte Artikel",
695
+ "reports.net_revenue": "Nettoerlös",
696
+ "reports.net_sales": "Nettoumsatz",
697
+ "reports.no_sales_in_period": "Keine Verkäufe in diesem Zeitraum.",
698
+ "reports.orders_by_status": "Bestellungen nach Status",
699
+ "reports.product": "Produkt",
700
+ "reports.products_by_status": "Produkte nach Status",
701
+ "reports.quantity": "Menge",
702
+ "reports.quantity_sold": "Verkaufte Menge",
703
+ "reports.reviews_by_status": "Bewertungen nach Status",
704
+ "reports.ribbons": "Bänder",
705
+ "reports.shipping": "Versand",
706
+ "reports.subtitle": "Verkaufsentwicklung und Shop-Summen.",
707
+ "reports.tab_sales": "Umsatz",
708
+ "reports.tab_top_sellers": "Bestseller",
709
+ "reports.tab_totals": "Summen",
710
+ "reports.top_sellers_by_quantity": "Bestseller nach Menge",
711
+
712
+ // ── settings ────────────────────────────────────────────────────
713
+ "settings.description": "Konfigurieren Sie, wie Ihr Shop arbeitet.",
714
+ "settings.emails.additional_content": "Zusätzlicher Inhalt",
715
+ "settings.emails.additional_content_placeholder": "Text, der unter dem E-Mail-Text angefügt wird.",
716
+ "settings.emails.admin": "Admin",
717
+ "settings.emails.admin_recipients": "Empfänger der Admin-Benachrichtigungen",
718
+ "settings.emails.admin_users_fallback": "die Admin-Nutzer Ihrer App",
719
+ "settings.emails.default_placeholder": "Leer lassen für den Standard",
720
+ "settings.emails.done": "Fertig",
721
+ "settings.emails.enabled": "Aktiviert",
722
+ "settings.emails.heading": "E-Mail-Überschrift",
723
+ "settings.emails.manage": "Verwalten",
724
+ "settings.emails.managed_by_auth": "Wird von Base44 Auth verwaltet",
725
+ "settings.emails.manual": "Manuell",
726
+ "settings.emails.no_admin_warning": "Kein App-Nutzer hat die Admin-Rolle — bleibt dieses Feld leer, gehen diese E-Mails ins Leere.",
727
+ "settings.emails.notifications": "E-Mail-Benachrichtigungen",
728
+ "settings.emails.notifications_description": "Aktivieren, deaktivieren und passen Sie jede Transaktions-E-Mail an, einschließlich der Warnungen zu niedrigem und fehlendem Bestand.",
729
+ "settings.emails.placeholders_hint": "Verfügbare Platzhalter: {order_number}, {customer_name}, {store_name}, {order_total}",
730
+ "settings.emails.recipient": "Empfänger",
731
+ "settings.emails.recipient_override_hint": "Kommagetrennt. Überschreibt die Admin-Empfänger oben nur für diese E-Mail.",
732
+ "settings.emails.recipient_placeholder": "Leer lassen, um die Standard-Admin-Empfänger zu verwenden",
733
+ "settings.emails.recipients_hint": "Leer lassen, um {users} zu benachrichtigen.",
734
+ "settings.emails.recipients_label": "Empfänger",
735
+ "settings.emails.recipients_placeholder": "admin@example.com, ops@example.com",
736
+ "settings.emails.sender_options": "Absenderoptionen",
737
+ "settings.emails.sender_options_description": "Wie Transaktions-E-Mails benannt werden und wer die Admin-Kopien erhält. Die Absenderadresse steuert Ihre Base44-E-Mail-Konfiguration, nicht diese Seite.",
738
+ "settings.emails.sent_to_admin": "An die Shop-Verwaltung gesendet",
739
+ "settings.emails.sent_to_customer": "An den Kunden gesendet",
740
+ "settings.emails.store_name_hint": "Wird als „{name}“ im Betreff und als Absendername jeder Transaktions-E-Mail verwendet.",
741
+ "settings.emails.subject": "Betreff",
742
+ "settings.emails.type_email_title": "E-Mail „{type}“",
743
+ "settings.emails.your_store": "Ihr Shop",
744
+ "settings.general.checkout": "Kasse",
745
+ "settings.general.checkout_description": "Wohin Kunden nach der Zahlung zurückkehren.",
746
+ "settings.general.currency": "Währung",
747
+ "settings.general.currency_description": "Jeder Preis im Shop wird in dieser Währung gespeichert und angezeigt.",
748
+ "settings.general.dimension_unit": "Maßeinheit",
749
+ "settings.general.measurements": "Maße",
750
+ "settings.general.measurements_description": "Einheiten für Produktgewicht und -maße.",
751
+ "settings.general.payment_return_path": "Rückkehrpfad nach Zahlung",
752
+ "settings.general.payment_return_path_hint": "Die Storefront-Route, zu der Kunden nach der Zahlung zurückkehren — auf der Adresse Ihrer eigenen Storefront. Sie muss zur gebauten Seite passen; ein falscher Pfad führt zahlende Kunden auf eine 404-Seite.",
753
+ "settings.general.weight_unit": "Gewichtseinheit",
754
+ "settings.inventory.description": "Standardwerte der Bestandsverwaltung für Produkte, die den Bestand verfolgen.",
755
+ "settings.inventory.hide_out_of_stock": "Nicht vorrätige Artikel im Katalog ausblenden",
756
+ "settings.inventory.hide_out_of_stock_hint": "Die Storefront-APIs schließen nicht vorrätige Produkte aus Listen aus.",
757
+ "settings.inventory.hold_stock": "Bestand reservieren (Minuten)",
758
+ "settings.inventory.hold_stock_hint": "Reserviert den Bestand unbezahlter Bestellungen für so viele Minuten. Nach Ablauf wird die offene Bestellung storniert und ihr Bestand freigegeben. Die Freigabe läuft opportunistisch — siehe references/operations.md im Commerce-Skill.",
759
+ "settings.inventory.low_stock_threshold": "Schwelle für niedrigen Bestand",
760
+ "settings.inventory.manage_stock": "Bestand verwalten",
761
+ "settings.inventory.manage_stock_hint": "Aktiviert die Bestandsverwaltung shopweit.",
762
+ "settings.inventory.out_of_stock_threshold": "Schwelle für „nicht vorrätig“",
763
+ "settings.inventory.visibility": "Sichtbarkeit",
764
+ "settings.location.add_rate": "Satz hinzufügen",
765
+ "settings.location.add_region": "Region hinzufügen",
766
+ "settings.location.add_tax_group": "Steuergruppe hinzufügen",
767
+ "settings.location.continent": "Kontinent",
768
+ "settings.location.cost": "Kosten",
769
+ "settings.location.created": "Standort erstellt",
770
+ "settings.location.default_group_hint": "Standardgruppe — Produkte ohne Steuergruppe werden hiermit berechnet",
771
+ "settings.location.delivery_option": "Lieferoption",
772
+ "settings.location.edit_location": "Standort bearbeiten",
773
+ "settings.location.exact_amount": "Exakter Betrag",
774
+ "settings.location.free_over": "Kostenlos ab",
775
+ "settings.location.free_over_title": "Zwischensumme der Artikel (nach Rabatten), ab der dieser Satz kostenlos wird",
776
+ "settings.location.group_name_placeholder": "Gruppenname",
777
+ "settings.location.header_description": "Verwalten Sie, wo Sie verkaufen und welche Versandkosten und Steuern dort anfallen.",
778
+ "settings.location.load_failed": "Standort konnte nicht geladen werden",
779
+ "settings.location.match_order": "Prüfreihenfolge",
780
+ "settings.location.name_placeholder": "z. B. Deutschland",
781
+ "settings.location.name_required": "Ein Standortname ist erforderlich",
782
+ "settings.location.never": "Nie",
783
+ "settings.location.no_tax_rates": "Keine Steuersätze für {name}-Artikel.",
784
+ "settings.location.no_tax_rates_default": "Keine Steuersätze — diese Artikel werden hier nicht besteuert.",
785
+ "settings.location.no_tax_rates_unnamed": "Keine Steuersätze für diese Artikel.",
786
+ "settings.location.not_taxed": "Nicht besteuert",
787
+ "settings.location.rate_name_placeholder": "z. B. Standardversand",
788
+ "settings.location.rate_percent": "Satz %",
789
+ "settings.location.rate_placeholder": "Name des Satzes — z. B. Umsatzsteuer, MwSt.",
790
+ "settings.location.rates_hint": "Sätze, die an der Kasse für Bestellungen an diesen Standort angeboten werden.",
791
+ "settings.location.regions_hint": "Lassen Sie die Regionen leer, damit dieser Standort als Auffangregel jede Adresse abdeckt, die kein anderer Standort abdeckt.",
792
+ "settings.location.save_failed": "Standort konnte nicht gespeichert werden",
793
+ "settings.location.saved": "Standort gespeichert",
794
+ "settings.location.select_continent": "Kontinent wählen…",
795
+ "settings.location.state": "Bundesland",
796
+ "settings.location.state_placeholder": "LAND:REGION — z. B. US:CA",
797
+ "settings.location.tax_example": "Beispiel: {base} in der Gruppe „Products“ bei 18 % ergibt {tax} Steuer.",
798
+ "settings.location.tax_group": "Steuergruppe",
799
+ "settings.location.tax_hint": "Gilt für {group}-Artikel.",
800
+ "settings.location.tax_on_shipping": "Steuer auf Versand",
801
+ "settings.location.tax_on_shipping_hint": "Wird auf die Versandkosten an diesem Standort angewendet — getrennt von den Produktgruppen oben.",
802
+ "settings.payments.account_n": "Konto",
803
+ "settings.payments.account_name": "Kontoinhaber",
804
+ "settings.payments.account_number": "Kontonummer",
805
+ "settings.payments.add_account": "Konto hinzufügen",
806
+ "settings.payments.add_method": "Zahlungsmethode hinzufügen",
807
+ "settings.payments.added": "Zahlungsmethode hinzugefügt",
808
+ "settings.payments.bank_details": "Bankverbindung",
809
+ "settings.payments.bank_name": "Name der Bank",
810
+ "settings.payments.bank_none": "Noch keine — für Nachnahme in Ordnung; für Überweisung fügen Sie eine hinzu.",
811
+ "settings.payments.bic": "BIC / Swift",
812
+ "settings.payments.checkout_options": "Optionen an der Kasse",
813
+ "settings.payments.checkout_options_description": "Welche Zahlungsoptionen Kunden an der Kasse wählen können, in dieser Reihenfolge, und mit welcher Bezeichnung. Alle Optionen außer Kreditkarte werden außerhalb des Shops beglichen: Die Bestellung geht mit der Beschreibung der Option als Anleitung auf „Wartend“, und Sie setzen sie nach Zahlungseingang weiter.",
814
+ "settings.payments.delete_confirm": "Zahlungsoption „{title}“ löschen?",
815
+ "settings.payments.delete_failed": "Löschen fehlgeschlagen",
816
+ "settings.payments.deleted": "Zahlungsmethode gelöscht",
817
+ "settings.payments.description_hint": "Wird nach der Bestellung auch als Zahlungsanleitung angezeigt.",
818
+ "settings.payments.iban": "IBAN",
819
+ "settings.payments.reorder_failed": "Neusortierung fehlgeschlagen",
820
+ "settings.payments.saved": "Zahlungsmethode gespeichert",
821
+ "settings.payments.sort_code": "Bankleitzahl",
822
+ "settings.payments.title_hint": "Wird Kunden an der Kasse angezeigt.",
823
+ "settings.payments.title_label": "Bezeichnung",
824
+ "settings.payments.title_required": "Geben Sie der Zahlungsmethode eine Bezeichnung",
825
+ "settings.payments.update_failed": "Gateway konnte nicht aktualisiert werden",
826
+ "settings.save_changes": "Änderungen speichern",
827
+ "settings.save_failed": "Speichern fehlgeschlagen",
828
+ "settings.save_settings_failed": "Einstellungen konnten nicht gespeichert werden",
829
+ "settings.saved": "Einstellungen gespeichert",
830
+ "settings.shipping.add_location": "Standort hinzufügen",
831
+ "settings.shipping.charge_shipping": "Versandkosten berechnen",
832
+ "settings.shipping.charge_shipping_hint": "Aus bedeutet, dass Warenkörbe nie einen Versandschritt enthalten — für rein virtuelle Shops.",
833
+ "settings.shipping.clone": "Duplizieren",
834
+ "settings.shipping.clone_failed": "Standort konnte nicht dupliziert werden",
835
+ "settings.shipping.copy_name": "{name} (Kopie)",
836
+ "settings.shipping.delete_confirm_description": "Bereits aufgegebene Bestellungen behalten ihre Kosten; Warenkörbe mit Lieferung an diesen Standort verlieren ihre Optionen.",
837
+ "settings.shipping.delete_confirm_title": "„{name}“ löschen?",
838
+ "settings.shipping.delete_failed": "Standort konnte nicht gelöscht werden",
839
+ "settings.shipping.disabled_toast": "Versand deaktiviert",
840
+ "settings.shipping.empty_description": "Fügen Sie einen Standort hinzu, um festzulegen, wohin Sie liefern und welche Steuer gilt.",
841
+ "settings.shipping.empty_title": "Noch keine Standorte",
842
+ "settings.shipping.enabled_toast": "Versand aktiviert",
843
+ "settings.shipping.everywhere_else": "Überall sonst (Auffangregel)",
844
+ "settings.shipping.location": "Standort",
845
+ "settings.shipping.location_cloned": "Standort dupliziert",
846
+ "settings.shipping.location_deleted": "Standort gelöscht",
847
+ "settings.shipping.locations_intro": "Ein Standort deckt die Regionen ab, die er nennt; der Standort ohne Regionen fängt alle übrigen auf. Jeder hat eigene Versandsätze und eigene Steuern.",
848
+ "settings.shipping.no_rates": "keine — hierhin wird nicht geliefert",
849
+ "settings.shipping.no_tax": "keine Steuer",
850
+ "settings.shipping.rate_fallback": "Satz",
851
+ "settings.shipping.regions": "Regionen",
852
+ "settings.shipping.shipping_amount": "Versand {amount}",
853
+ "settings.shipping.shipping_rates": "Versandsätze",
854
+ "settings.shipping.tax": "Steuer",
855
+
856
+ // ── webhooks ────────────────────────────────────────────────────
857
+ "webhooks.api_version": "API-Version",
858
+ "webhooks.create": "Webhook erstellen",
859
+ "webhooks.created": "Erstellt",
860
+ "webhooks.created_toast": "Webhook erstellt",
861
+ "webhooks.delete_confirm": "Webhook löschen?",
862
+ "webhooks.delete_failed": "Löschen fehlgeschlagen",
863
+ "webhooks.deleted": "Webhook gelöscht",
864
+ "webhooks.delivery_url": "Ziel-URL",
865
+ "webhooks.description": "Externe Dienste benachrichtigen, wenn Shop-Ereignisse eintreten.",
866
+ "webhooks.details": "Webhook-Details",
867
+ "webhooks.edit_title": "Webhook bearbeiten",
868
+ "webhooks.empty_description": "Erstellen Sie einen Webhook, um Ereignisdaten per POST an eine externe URL zu senden.",
869
+ "webhooks.empty_title": "Keine Webhooks",
870
+ "webhooks.failures": "Fehlschläge",
871
+ "webhooks.generate": "Generieren",
872
+ "webhooks.load_failed": "Webhook konnte nicht geladen werden",
873
+ "webhooks.name_url_required": "Name und Ziel-URL sind erforderlich",
874
+ "webhooks.no_deliveries": "Noch keine Zustellungen.",
875
+ "webhooks.recent_deliveries": "Letzte Zustellungen",
876
+ "webhooks.redeliver": "Erneut senden",
877
+ "webhooks.redelivered": "Erneut gesendet",
878
+ "webhooks.request": "Anfrage",
879
+ "webhooks.response": "Antwort",
880
+ "webhooks.save_failed": "Webhook konnte nicht gespeichert werden",
881
+ "webhooks.saved": "Webhook gespeichert",
882
+ "webhooks.secret": "Secret",
883
+ "webhooks.secret_placeholder": "Wird zum Signieren der Nutzdaten verwendet (HMAC-SHA256)",
884
+ "webhooks.send_test": "Test senden",
885
+ "webhooks.test_delivered": "Test zugestellt",
886
+ "webhooks.test_delivered_code": "Test zugestellt — HTTP {code}",
887
+ "webhooks.topic": "Thema",
888
+
889
+ // ── StoreAdmin bot ──────────────────────────────────────────────
890
+ "bot.error_reach": "StoreAdmin konnte nicht erreicht werden",
891
+ "bot.input_placeholder": "z. B. Zeige offene Bestellungen als Tabelle",
892
+ "bot.intro": "Fragen Sie mich alles zu Ihrem Shop — ich kann nachschlagen und Änderungen für Sie vornehmen.",
893
+ "bot.new_chat": "Neuer Chat",
894
+ "bot.title": "StoreAdmin",
895
+ "bot.working": "Arbeitet…",
896
+ };