// Gemeinsamer Vertrag fuer alle Sprachversionen: jede Datei unter // dictionaries/.ts muss diesem Typ entsprechen. Fehlt in einer neuen // Sprachdatei ein Schluessel oder stimmt ein Werttyp nicht, meldet TypeScript // das beim Build — so kann eine neue Sprache nie "leise" unvollstaendig // bleiben, ohne dass es dabei die deutschen Formulierungen 1:1 vorschreibt // (die deutsche Datei ist keine Typquelle, sondern implementiert denselben // Vertrag wie jede andere Sprache auch). export interface TitledText { title: string; text: string; } // Slugs sind locale-unabhaengige URL-Bestandteile (bleiben in beiden Sprachen // gleich, siehe lib/site-config.ts) — nur Titel/Anrisstext/Fliesstext pro // Artikel werden uebersetzt. Als literale Union statt string, damit // TypeScript erzwingt, dass jede Sprachdatei fuer JEDEN Slug einen Eintrag // hat (kein leises Fehlen bei einer neuen Sprache). export type WissenSlug = | "warum-kristallisiert-honig" | "fluessiger-oder-cremiger-honig" | "was-bedeutet-fruehtracht" | "was-bedeutet-sommertracht" | "wie-entsteht-honig" | "warum-schmeckt-jede-honigernte-anders" | "wie-lange-ist-honig-haltbar" | "was-macht-regionalen-honig-aus" | "wie-honig-richtig-lagern" | "warum-nie-ueber-28-grad-erwaermt"; export interface WissenArticleContent { title: string; excerpt: string; body: string[]; } export interface LegalSectionContent { heading: string; paragraphs: string[]; } export interface Dictionary { common: { categories: { HONIG: string; KERZEN: string; PROPOLIS: string; }; siteDescription: string; /** Sicherheitspruefung (Cloudflare Turnstile) konnte nicht geladen werden. */ turnstile: { loadError: string; retry: string; }; }; nav: { shop: string; harvests: string; origin: string; apiary: string; business: string; knowledge: string; contact: string; account: string; discoverHoney: string; searchPlaceholder: string; openSearch: string; openMenu: string; closeMenu: string; openCart: (count: number) => string; skipToContent: string; }; footer: { columnWabenhain: string; columnShopping: string; columnLegal: string; aboutUs: string; businessCustomers: string; trackOrder: string; tagline: string; bottomLine: string; /** aria-label fuer die Social-Media-Icons im Footer, z.B. "Wabenhain bei TikTok". */ socialAriaLabel: (platform: string) => string; }; legalTitles: { impressum: string; datenschutz: string; agb: string; widerruf: string; versandZahlung: string; cookieRichtlinie: string; }; cart: { title: string; close: string; empty: string; remove: string; subtotal: string; checkout: string; viewCart: string; }; orderStatusBadge: { NEU: string; BEZAHLT: string; IN_VORBEREITUNG: string; VERSANDBEREIT: string; VERSENDET: string; ABHOLBEREIT: string; ABGEHOLT: string; STORNIERT: string; }; orderStatusTimeline: { ordered: string; paid: string; preparing: string; readyToShip: string; shipped: string; readyForPickup: string; pickedUp: string; cancelled: string; ariaLabel: string; }; ordersPage: { backToAccount: string; title: string; emptyTitle: string; emptyDescription: string; shippedOn: (date: string) => string; shippingPending: string; pickedUpOn: (date: string) => string; pickupPending: string; readySince: (date: string) => string; giftMessagePrefix: string; viewInvoice: string; requestReturn: string; reorder: string; returnStatusLabels: { ANGEFRAGT: string; ANGENOMMEN: string; ABGELEHNT: string; ERSTATTET: string; }; }; herkunftPage: { eyebrow: string; title: string; subtitle: string; aspects: TitledText[]; privacyNote: string; }; imkereiPage: { eyebrow: string; title: string; paragraphs: string[]; imageLabel: string; }; unternehmenPage: { eyebrow: string; title: string; subtitle: string; packages: { key: string; title: string; text: string }[]; inquiryHeading: string; }; businessInquiryForm: { companyLabel: string; contactPersonLabel: string; emailLabel: string; phoneOptionalLabel: string; quantityLabel: string; deliveryDateLabel: string; packageLabel: string; messageLabel: string; submitting: string; submit: string; successMessage: string; errorMessage: string; }; legalPage: { reviewNotice: string; }; notFoundPage: { title: string; text: string; backToShop: string; backToHome: string; }; siteErrorPage: { title: string; text: string; retry: string; backToHome: string; }; cookieConsent: { dialogLabel: string; bannerTextBeforeLink: string; policyLinkLabel: string; bannerTextAfterLink: string; essentialOnly: string; acceptAll: string; changeSettings: string; }; impressumPage: { title: string; contactHeading: string; phoneLabel: string; emailLabel: string; sections: LegalSectionContent[]; }; datenschutzPage: { title: string; sections: LegalSectionContent[]; }; agbPage: { title: string; sections: LegalSectionContent[]; }; widerrufPage: { title: string; sections: LegalSectionContent[]; }; versandZahlungPage: { title: string; shippingHeading: string; shippingIntro: string; tierRange: (min: number, max: number, price: string) => string; tierMinimum: (min: number, price: string) => string; pickupNote: string; /** Liefergebiet — welcher Satz erscheint, steuert der Admin-Bereich. */ regionHeading: string; regionTextDe: string; regionTextEu: string; paymentHeading: string; paymentText: string; deliveryTimeHeading: string; deliveryTimeText: string; /** * Wer die Ruecksendekosten traegt. Steht hier und nicht in der * Widerrufsbelehrung, weil die Ausnahme fuer mangelhafte Ware * Gewaehrleistung ist (§ 439 BGB) und nicht Widerruf — siehe Kommentar * bei widerrufPage in de.ts. */ returnsHeading: string; returnsText: string; returnsDefectText: string; }; cookieRichtliniePage: { title: string; sections: LegalSectionContent[]; }; wissenListPage: { eyebrow: string; title: string; readMore: string; }; wissenArticlePage: { backLabel: string; eyebrow: string; otherArticlesHeading: string; }; wissenArticles: Record; kontaktPage: { eyebrow: string; title: string; pickupHeading: string; pickupText: string; }; twoFactorPage: { title: string; subtitle: string; backLabel: string; activeStatus: (count: number) => string; disableHeading: string; passwordConfirmLabel: string; disableButton: string; setupButton: string; }; wishlistPage: { title: string; emptyTitle: string; emptyDescription: string; }; twoFactorCodePage: { title: string; subtitle: string; cancelLabel: string; codeLabel: string; confirm: string; }; twoFactorBackupCodesPage: { title: string; subtitle: string; warning: string; done: string; }; twoFactorSetupPage: { title: string; subtitle: string; backLabel: string; qrAlt: string; manualEntryLabel: string; appCodeLabel: string; activate: string; }; retourePage: { backLabel: string; orderEyebrow: (orderNumber: string) => string; title: string; reasonLabel: string; reasonPlaceholder: string; submit: string; }; erntenPage: { title: string; batchCount: (count: number) => string; emptyText: string; }; erntenDetailPage: { backLabel: string; batchesHeading: string; productsHeading: string; glassesAvailable: (remaining: number, total: number) => string; }; chargePage: { verifiedBatch: string; provenanceNote: (code: string) => string; stepHarvest: string; stepFilling: string; stepBestBefore: string; regionLabel: string; fromThisBatch: string; }; newsletterBestaetigtPage: { confirmedTitle: string; invalidTitle: string; unsubscribedTitle: string; confirmedText: string; invalidText: string; unsubscribedText: string; backHome: string; discountHeading: string; discountText: (percent: number) => string; discountCopyHint: string; copyCode: string; codeCopied: string; }; adminReviewsPage: { backToDashboard: string; title: string; searchLabel: string; searchPlaceholder: string; filterButton: string; resetFilter: string; noResultsFiltered: string; colProduct: string; colCustomer: string; colRating: string; colComment: string; colDate: string; colStatus: string; statusPublished: string; statusPending: string; approve: string; deleteConfirm: string; delete: string; noReviewsYet: string; }; adminAuditLogPage: { backToDashboard: string; title: string; intro: (limit: number) => string; colTimestamp: string; colAdmin: string; colAction: string; colObject: string; colDetails: string; noEntriesYet: string; }; adminVouchersPage: { backToDashboard: string; title: string; newVoucher: string; colCode: string; colDiscount: string; colMinOrder: string; colMinQuantity: string; colUsage: string; colValidity: string; colStatus: string; immediately: string; unlimited: string; statusActive: string; statusInactive: string; statusExpired: string; edit: string; deleteConfirm: (code: string) => string; delete: string; noVouchersYet: string; }; adminVoucherEditPage: { sectionDiscount: string; sectionConditions: string; sectionValidity: string; backToVouchers: string; title: string; codeLabel: string; typeLabel: string; typePercent: string; typeFixed: string; valueLabel: string; minOrderLabel: string; minQuantityLabel: string; maxUsesLabel: string; validFromLabel: string; validUntilLabel: string; activeLabel: string; redeemedSoFar: (count: number, max: number | null) => string; save: string; }; adminVoucherNewPage: { sectionDiscount: string; sectionConditions: string; sectionValidity: string; backToVouchers: string; title: string; codeLabel: string; codePlaceholder: string; typeLabel: string; typePercent: string; typeFixed: string; valueLabel: string; minOrderLabel: string; minQuantityLabel: string; maxUsesLabel: string; validFromLabel: string; validUntilLabel: string; activeLabel: string; create: string; }; adminShippingPage: { backToDashboard: string; title: string; newTier: string; intro: string; colQuantity: string; colPrice: string; quantityFrom: (min: number) => string; quantityRange: (min: number, max: number) => string; edit: string; deleteConfirm: string; delete: string; noTiersYet: string; }; adminShippingEditPage: { backToShipping: string; title: string; minQuantityLabel: string; maxQuantityLabel: string; priceLabel: string; save: string; }; adminShippingNewPage: { backToShipping: string; title: string; minQuantityLabel: string; maxQuantityLabel: string; priceLabel: string; create: string; }; adminUsersPage: { backToDashboard: string; title: string; newUser: string; searchLabel: string; searchPlaceholder: string; filterButton: string; resetFilter: string; noResultsFiltered: string; colName: string; colEmail: string; colRole: string; colStatus: string; col2fa: string; colCreated: string; roleCustomer: string; roleAdmin: string; youSuffix: string; statusBlocked: string; statusTemporarilyLocked: string; statusActive: string; edit: string; unblock: string; block: string; delete: string; deleteConfirm: (name: string) => string; noUsersYet: string; }; adminUserEditPage: { sectionProfile: string; sectionDanger: string; backToUsers: string; createdOn: (date: string) => string; firstNameLabel: string; lastNameLabel: string; emailLabel: string; phoneLabel: string; roleLabel: string; roleCustomer: string; roleAdmin: string; cannotChangeOwnRole: string; save: string; securityHeading: string; twoFactorLabel: string; twoFactorActive: string; twoFactorInactive: string; statusLabel: string; blockedSince: (date: string) => string; temporarilyLockedFailedAttempts: string; statusActive: string; sendPasswordReset: string; unblock: string; block: string; deleteAccount: string; deleteConfirm: (name: string) => string; }; adminUserNewPage: { backToUsers: string; title: string; intro: string; firstNameLabel: string; lastNameLabel: string; emailLabel: string; roleLabel: string; roleCustomer: string; roleAdmin: string; createAndSend: string; }; adminBatchesPage: { backToDashboard: string; notDeletable: string; title: string; colBatch: string; colHarvest: string; colFillDate: string; colBestBefore: string; colTotalGlasses: string; colRemaining: string; edit: string; delete: string; deleteConfirm: (code: string) => string; noBatchesYet: string; newBatchHeading: string; codeLabel: string; codePlaceholder: string; harvestLabel: string; fillDateLabel: string; bestBeforeDateLabel: string; glassCountLabel: string; remainingGlassesLabel: string; create: string; }; adminBatchEditPage: { sectionDetails: string; backToBatches: string; title: string; fillDateLabel: string; bestBeforeDateLabel: string; glassCountLabel: string; remainingGlassesLabel: string; imagesLabel: string; image1Label: string; image2Label: string; save: string; }; trackOrderPage: { title: string; intro: string; orderNumberLabel: string; orderNumberPlaceholder: string; submit: string; notFoundError: string; rateLimitError: string; itemsHeading: string; totalLabel: string; viewInvoice: string; }; passwordStrength: { weak: string; fair: string; strong: string; }; shipmentInfo: { heading: string; carrierLabel: string; trackingNumberLabel: string; trackPackage: string; historyHeading: string; historyAriaLabel: string; estimatedDelivery: (date: string) => string; notYetScanned: string; historyUnavailable: string; dataSource: string; statuses: { "pre-transit": string; transit: string; delivered: string; failure: string; unknown: string; }; }; flash: { close: string; success: string; error: string; info: string; }; adminArchive: { tabsAriaLabel: string; tabActive: string; tabArchive: string; archive: string; restore: string; archivedOn: (date: string) => string; manualHint: string; autoRuleOrders: string; autoRuleReturns: string; autoRuleProducts: string; emptyArchive: string; }; errorPage: { eyebrow: string; title: string; description: string; retry: string; backHome: string; }; adminHarvestsPage: { backToDashboard: string; notDeletable: string; title: string; colType: string; colYear: string; colHarvestDate: string; colLocation: string; colBatches: string; colProducts: string; colStatus: string; statusPublished: string; statusDraft: string; publish: string; unpublish: string; edit: string; delete: string; deleteConfirm: (label: string) => string; noHarvestsYet: string; newHarvestHeading: string; typeLabel: string; yearLabel: string; harvestDateLabel: string; locationLabel: string; descriptionLabel: string; isPublishedLabel: string; create: string; /** created, updated, skipped, failed */ /** created, skipped, failed */ }; adminHarvestEditPage: { sectionDetails: string; sectionVisibility: string; backToHarvests: string; title: string; typeLabel: string; yearLabel: string; harvestDateLabel: string; locationLabel: string; descriptionLabel: string; imagesLabel: string; image1Label: string; image2Label: string; isPublishedLabel: string; isPublishedHint: string; draftNotice: string; publishNow: string; save: string; }; /** Gemeinsam von /admin/ernten und /admin/produkte genutzt: EIN Sync-Knopf * fuer Ernten, Chargen und Produkte. */ adminApiCoreSync: { heading: string; intro: string; button: string; resultHarvests: (created: number, updated: number, skipped: number, failed: number) => string; resultBatches: (created: number, skipped: number, failed: number) => string; resultProducts: (created: number, skipped: number, failed: number) => string; pending: (count: number) => string; discontinued: (count: number) => string; error: string; batchLoadError: string; }; adminProductsPage: { backToDashboard: string; delete: string; deleteConfirm: (label: string) => string; notDeletable: string; title: string; newProduct: string; colProduct: string; colCategory: string; colHarvest: string; colBatch: string; colWeight: string; colPrice: string; colStock: string; colStatus: string; statusActive: string; statusInactive: string; edit: string; noProductsYet: string; draftHint: string; }; adminProductEditPage: { backToProducts: string; title: string; harvestBatchSuffix: (type: string, year: number, code: string) => string; nameLabel: string; descriptionLabel: string; tasteTagsLabel: string; consistencyLabel: string; intensityMildLabel: string; intensityFloralLabel: string; intensityKraeftigLabel: string; weightLabel: string; stockLabel: string; priceLabel: string; pricePerKgLabel: string; vatRateLabel: string; vatRateHint: string; imagesLabel: string; visibleInShop: string; sectionText: string; sectionTaste: string; sectionPriceStock: string; sectionVisibility: string; save: string; }; adminProductNewPage: { backToProducts: string; title: string; nameLabel: string; slugLabel: string; categoryLabel: string; categoryHint: string; harvestLabel: string; noneOption: string; batchLabel: string; batchOption: (code: string, type: string, year: number) => string; descriptionLabel: string; tasteTagsLabel: string; tasteTagsPlaceholder: string; consistencyLabel: string; consistencyPlaceholder: string; intensityMildLabel: string; intensityFloralLabel: string; intensityKraeftigLabel: string; weightLabel: string; stockLabel: string; priceLabel: string; pricePerKgLabel: string; vatRateLabel: string; vatRateHint: string; pricePlaceholder: string; pricePerKgPlaceholder: string; imagesLabel: string; visibleInShop: string; sectionText: string; sectionCategory: string; sectionTaste: string; sectionPriceStock: string; sectionVisibility: string; create: string; }; adminReturnsPage: { refundConfirm: (orderNumber: string, amount: string) => string; rejectConfirm: (orderNumber: string) => string; backToDashboard: string; title: string; searchLabel: string; searchPlaceholder: string; filterButton: string; resetFilter: string; noResultsFiltered: string; statusRequested: string; statusAccepted: string; statusRejected: string; statusRefunded: string; accept: string; reject: string; refundNow: string; noRequestsYet: string; }; adminInquiriesPage: { backToDashboard: string; title: string; searchLabel: string; searchPlaceholder: string; filterButton: string; resetFilter: string; noResultsFiltered: string; statusNew: string; statusInProgress: string; statusCompleted: string; statusRejected: string; statusSelectLabel: string; save: string; packageLabel: string; quantityLabel: string; unitsSuffix: (quantity: number) => string; deliveryDateLabel: string; noInquiriesYet: string; }; adminOrderDetailPage: { postNumberLabel: string; backToOrders: string; saveStatus: string; giftHeading: string; customerHeading: string; registeredAccount: string; guestOrder: string; shippingAddressHeading: string; pickupHeading: string; shippedOn: (date: string) => string; notShippedYet: string; pickedUpOn: (date: string) => string; notPickedUpYet: string; readySince: (date: string) => string; itemsHeading: string; colProduct: string; colBatch: string; colQuantity: string; colTotal: string; subtotalLabel: string; shippingLabel: string; freeShipping: string; discountLabel: string; totalLabel: string; paymentHeading: string; paidOn: (date: string) => string; noPaymentYet: string; invoiceHeading: string; downloadPdf: string; noInvoiceYet: string; /** Bereich zum endgueltigen Loeschen einer Bestellung (siehe deleteOrderAction). */ deleteHeading: string; deleteHint: string; deleteButton: string; deleteConfirm: (orderNumber: string) => string; deleteBlocked: string; trackingHeading: string; carrierLabel: string; carrierPlaceholder: string; trackingNumberLabel: string; saveTracking: string; dhlHeading: string; dhlCreateButton: string; dhlAlreadyCreated: (trackingNumber: string) => string; dhlNotConfigured: string; }; adminOrdersPage: { backToDashboard: string; title: string; searchLabel: string; searchPlaceholder: string; statusLabel: string; statusAll: string; filterButton: string; resetFilter: string; colNumber: string; colCustomer: string; colDate: string; colItems: string; colTotal: string; colStatus: string; colFulfillment: string; giftOrderTitle: string; save: string; shipping: string; pickup: string; noResultsFiltered: string; noOrdersYet: string; }; adminDashboardPage: { missingUploadsTitle: (missing: number, checked: number) => string; uploadsNotPersistentTitle: string; uploadsNotPersistentHint: (uploadDir: string) => string; missingUploadsHint: string; title: string; statRevenueToday: string; statRevenueMonth: string; statOpenOrders: string; statInventory: string; statSoldGlasses: string; statAvgCart: string; statRepeatCustomers: string; topProductsHeading: string; noSalesYet: string; unitsSuffix: (quantity: number) => string; revenueByCategoryHeading: string; revenueTrendHeading: (days: number) => string; daysAgoLabel: (days: number) => string; todayLabel: string; topVouchersHeading: string; noVouchersYet: string; usedCountLabel: (count: number, maxUses: number | null) => string; viewAllOrders: string; greeting: (part: "morning" | "day" | "evening", name: string) => string; todayRevenueLabel: string; monthRevenueLabel: string; vsYesterday: (delta: string, up: boolean) => string; toDoHeading: string; toDoOrders: (count: number) => string; toDoReturns: (count: number) => string; toDoReviews: (count: number) => string; toDoInquiries: (count: number) => string; allDoneTitle: string; allDoneText: string; chartTooltip: (day: string, value: string) => string; }; adminContentPage: { backToDashboard: string; title: string; intro: string; sectionImages: string; sectionImagesIntro: string; sectionText: string; sectionTextIntro: string; groupBrand: string; groupCompany: string; groupShipping: string; groupHome: string; groupPages: string; groupLegal: string; groupSocial: string; deLabel: string; enLabel: string; save: string; saved: string; }; /** Gemeinsame Texte fuer AdminImageField/AdminImageListField (Bild-Upload * in admin/inhalte, admin/produkte, admin/ernten). */ adminImageField: { none: string; chooseFile: string; uploading: string; remove: string; removeImageAt: (position: number) => string; uploadError: string; /** Meldung, wenn die Antwort gar kein verwertbares JSON war — dann ist * nur der HTTP-Status bekannt (siehe lib/upload-client.ts). */ uploadErrorStatus: (status: number) => string; /** Meldung, wenn der Request den Server gar nicht erreicht hat oder die * Verbindung waehrend des Uploads abbrach. */ uploadErrorNetwork: string; }; /** Wie adminImageField, aber fuer AdminVideoField (Hero-Hintergrundvideo, * admin/inhalte). */ adminVideoField: { none: string; chooseFile: string; uploading: string; remove: string; uploadError: string; /** Wie adminImageField.uploadErrorStatus, aber mit dem fuer Videos * haeufigsten Grund (Zeitueberschreitung beim Umrechnen) im Text. */ uploadErrorStatus: (status: number) => string; uploadErrorNetwork: string; }; adminShell: { backToWebsite: string; navDashboard: string; navOrders: string; navReturns: string; navProducts: string; navHarvests: string; navBatches: string; navBusinessInquiries: string; navUsers: string; navShipping: string; navVouchers: string; navReviews: string; navAuditLog: string; navContent: string; navAriaLabel: string; mobileNavAriaLabel: string; openMenu: string; closeMenu: string; loggedInAs: (name: string) => string; logout: string; groupSales: string; groupRange: string; groupCustomers: string; groupSite: string; paletteOpen: string; paletteShortcut: string; palettePlaceholder: string; paletteNoResults: string; paletteSectionPages: string; paletteSectionActions: string; actionNewProduct: string; actionNewVoucher: string; actionNewUser: string; actionNewShippingTier: string; actionViewShop: string; badgeWaiting: (count: number) => string; twoFactorWarning: string; twoFactorSetupLink: string; }; invoicePage: { loginRequiredError: string; backToOrders: string; downloadPdf: string; invoiceLabel: (invoiceNumber: string) => string; orderLabel: (orderNumber: string) => string; dateLabel: string; itemHeader: string; quantityHeader: string; priceHeader: string; totalHeader: string; subtotalLabel: string; shippingLabel: string; freeShipping: string; discountLabel: string; netLabel: string; vatLabel: (ratePercent: number) => string; smallBusinessNote: string; totalLabel: string; legalNote: string; }; addressesPage: { title: string; standard: string; setDefault: string; delete: string; emptyTitle: string; emptyDescription: string; addNewHeading: string; labelField: string; labelDefaultValue: string; useAsDefault: string; save: string; }; account: { loginRegisterTitle: string; login: string; register: string; emailLabel: string; passwordLabel: string; passwordMinLabel: string; passwordConfirmLabel: string; firstNameLabel: string; lastNameLabel: string; forgotPassword: string; ssoDivider: string; ssoButton: string; greeting: (name: string) => string; verifyEmailPrompt: string; resendVerification: string; navOrders: { title: string; description: string }; navAddresses: { title: string; description: string }; navWishlist: { title: string; description: string }; navSecurity: { title: string; twoFactorLabel: string; twoFactorActive: string; twoFactorInactive: string }; navAdmin: { title: string; description: string }; newsletterHeading: string; newsletterSubscribed: string; newsletterNotSubscribed: string; subscribe: string; unsubscribe: string; logoutAllDevicesHeading: string; logoutAllDevicesDescription: string; logout: string; privacy: { heading: string; downloadDataHeading: string; downloadDataDescription: string; downloadDataButton: string; deleteAccountHeading: string; deleteAccountDescription: string; deleteAccountPasswordLabel: string; deleteAccountButton: string; deleteAccountConfirm: string; deleteAccountAdminBlocked: string; }; }; trustBadges: { sslEncrypted: string; securePayment: string; returnPolicy: string; }; passwortVergessenPage: { backLabel: string; title: string; sentMessage: string; intro: string; requestLink: string; }; passwortZuruecksetzenPage: { backLabel: string; title: string; incompleteLinkTextBefore: string; incompleteLinkLabel: string; incompleteLinkTextAfter: string; newPasswordLabel: string; save: string; }; checkoutSuccessPage: { pendingEyebrow: string; successEyebrow: string; pendingTitle: string; successTitle: string; orderNumberLabel: string; pendingText: string; successText: string; continueShopping: string; trackOrder: string; openEyebrow: string; openTitle: string; openText: string; cancelPayment: string; notCompletedEyebrow: string; notCompletedTitle: string; notCompletedText: string; backToCart: string; }; checkoutCancelPage: { title: string; text: string; released: string; backToCart: string; }; checkoutPage: { paymentHeading: string; paymentBack: string; paymentCancelling: string; paymentCancelError: string; paymentLoading: string; paymentLoadError: string; paymentUnavailable: string; eyebrow: string; emptyCart: string; yourDetails: string; stepPayment: string; stepsAriaLabel: string; firstName: string; lastName: string; email: string; phoneOptional: string; fulfillmentLabel: string; shippingOption: string; pickupOption: string; deliveryTimeNote: string; deliveryTargetAddress: string; deliveryTargetPackstation: string; packstationIntro: string; packstationZipLabel: string; packstationSearchButton: string; packstationSearching: string; packstationNoResults: string; packstationChooseHint: string; packstationSelectedLabel: string; packstationChange: string; packstationDistance: (meters: number) => string; postNumberLabel: string; postNumberHint: string; streetLabel: string; zipLabel: string; cityLabel: string; countryLabel: string; /** Hinweis neben der Laenderauswahl, wenn nur nach Deutschland geliefert wird. */ shippingRegionDeNote: string; discountCodeLabel: string; discountCodePlaceholder: string; isGiftLabel: string; giftMessageLabel: string; giftMessagePlaceholder: string; genericError: string; submitting: string; placeOrder: string; paymentMethodsNote: string; yourOrderHeading: string; shippingWithCount: (count: number) => string; shippingPickup: string; }; cartPage: { title: string; goToShop: string; shippingLabel: (count: number) => string; free: string; total: string; nextTierHint: (unitsUntilNext: number, nextPrice: string) => string; pickupHint: string; bulkDiscountProgress: (unitsUntilNext: number, percent: number) => string; discountLabel: string; }; product: { tasteMild: string; tasteFloral: string; tasteIntense: string; addToCart: string; added: string; outOfStock: string; onlyLeft: (count: number) => string; toHoney: string; toProduct: string; viewProduct: string; }; productPage: { reviewsLink: (count: number) => string; noReviews: string; shippingHint: (price: string) => string; onlyLeftInStock: (count: number) => string; soldOut: string; currentlyUnavailable: string; notifyMeLabel: string; emailPlaceholder: string; notifySubmit: string; removeFromWishlist: string; addToWishlist: string; loginToSave: string; loginLinkLabel: string; checklist: { HONIG: string[]; KERZEN: string[]; PROPOLIS: string[]; }; detailLabels: { description: string; origin: string; harvest: string; batch: string; storage: string; note: string; }; storageText: string; infantWarningText: string; nonHoneyOriginText: string; viewBatchOrigin: string; giftHint: string; learnMoreLabel: string; reviewsHeading: string; noReviewsForProduct: string; loginToReview: string; alreadyReviewed: string; alreadyReviewedPending: string; onlyBuyersCanReview: string; yourRating: string; commentPlaceholder: string; submitReview: string; relatedProductsHeading: string; recentlyViewedHeading: string; starsOutOf5: (rating: number) => string; starLabel: (value: number) => string; }; shop: { title: string; subtitle: string; allCategories: string; sortLabel: string; sortNewest: string; sortPriceAsc: string; sortPriceDesc: string; sortAvailability: string; apply: string; onlyAvailable: string; searchInputLabel: string; clearSearch: string; searchResults: (query: string, count: number) => string; noSearchResults: string; noProducts: string; productsHeading: string; }; home: { hero: { intro: string; ctaPrimary: string; ctaSecondary: string; footnote: string; }; currentHarvest: { title: string; subtitle: string; }; originStory: { eyebrow: string; title: string; paragraph1: string; paragraph2: string; facts: string[]; cta: string; }; philosophy: { title: string; items: TitledText[]; }; productSpotlight: { description: string; consistency: string; harvest: string; batch: string; weight: string; price: string; cta: string; }; processTimeline: { title: string; steps: { number: string; title: string; text: string }[]; }; regionalSection: { eyebrow: string; title: string; paragraph1: string; paragraph2: string; ctaAbout: string; ctaPickup: string; }; sustainability: { title: string; items: TitledText[]; }; businessTeaser: { eyebrow: string; title: string; paragraph: string; cta: string; }; reviews: { title: string; googleReviewsCount: (rating: string, count: number) => string; seeAllOnGoogle: string; starsOutOf5: (rating: number) => string; testimonials: { quote: string; author: string }[]; }; newsletter: { title: string; description: string; successMessage: string; emailPlaceholder: string; subscribe: string; subscribing: string; errorMessage: string; consentBeforeLink: string; consentAfterLink: string; privacyLinkLabel: string; }; }; }