Docker Image bauen und veroeffentlichen / typecheck (push) Successful in 2m57s
Docker Image bauen und veroeffentlichen / lint (push) Successful in 3m7s
Docker Image bauen und veroeffentlichen / build-and-push (push) Canceled after 0s
Docker Image bauen und veroeffentlichen / test (push) Canceled after 1m22s
- Oeffentliche Kuendigung: exakte Identifikation, Limits je Vertrag und Adresse, Bestaetigung nur an die Kontoadresse mit Ruecknahme-Link (HMAC) - Vorschau: Body-Grenze beim Lesen, Parallelitaets- und Minutenlimit, Cache - Rabatte gelten nicht fuer Patenschaftspositionen - Abo aktiv erst nach bestaetigter Zahlung, offene Abschluesse zaehlen zum Kontingent und werden nach 24 h aufgeraeumt, Sitzung 58 Minuten - Konto-Loeschung nur ohne laufendes Abo, Urkunden-Dateien werden entfernt - Abo-Lieferungen mit Zahlungszeile (DHL-Marke moeglich) - Shop zeigt freien Bestand nach Abo-Reservierung - Storno/volle Erstattung widerruft die Patenschaft (Status WIDERRUFEN) - Umsatzsteuer der Patenschaft per VAT_RATE_PERCENT_PATENSCHAFT (19 %) - Digitale Bestellungen archivieren sich, Kalendertage in Europe/Berlin, Monatsenden begrenzt, Datenauskunft um Patenschaften ergaenzt Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
527 lines
21 KiB
TypeScript
527 lines
21 KiB
TypeScript
import type { Locale } from "@/i18n/config";
|
|
import type { SponsorshipLifecycle } from "@/lib/sponsorship/access";
|
|
import type { TransferValidity } from "@/lib/sponsorship/transfer-validity";
|
|
|
|
/**
|
|
* Texte des Kontobereichs "Patenschaft", der Uebertragung und der
|
|
* Medaillenleiste. Eigenes Modul statt der grossen Woerterbuecher, damit
|
|
* die parallel entstehenden Teile der Patenschaft sich dort nicht in die
|
|
* Quere kommen. Ansprache wie auf der ganzen Seite: du.
|
|
*/
|
|
export interface AccountSponsorshipStrings {
|
|
navCard: { title: string; description: string };
|
|
overview: {
|
|
metaTitle: string;
|
|
back: string;
|
|
title: string;
|
|
subtitle: string;
|
|
listTitle: string;
|
|
emptyTitle: string;
|
|
emptyDescription: string;
|
|
emptyAction: string;
|
|
pendingTitle: string;
|
|
pendingHint: string;
|
|
pendingBadge: string;
|
|
openDetail: (beeName: string) => string;
|
|
manageSubscription: string;
|
|
};
|
|
kind: { oneTime: string; subscription: string };
|
|
lifecycle: Record<SponsorshipLifecycle, string>;
|
|
term: {
|
|
range: (start: string, end: string) => string;
|
|
since: (start: string) => string;
|
|
startsOn: (start: string) => string;
|
|
endsOn: (end: string) => string;
|
|
};
|
|
shelf: {
|
|
title: string;
|
|
intro: string;
|
|
empty: string;
|
|
sponsorshipCaption: (year: number) => string;
|
|
regularCaption: string;
|
|
regularProgress: (missing: number, next: string) => string;
|
|
regularNone: (missing: number, first: string) => string;
|
|
subscriptionCaption: (months: number) => string;
|
|
vipCaption: string;
|
|
vipBadge: string;
|
|
tier: Record<"BRONZE" | "SILBER" | "GOLD" | "ABO", string>;
|
|
};
|
|
detail: {
|
|
metaTitle: (beeName: string) => string;
|
|
back: string;
|
|
numberLabel: string;
|
|
stageTitle: (beeName: string) => string;
|
|
stageHeading: string;
|
|
stageHint: string;
|
|
stage: {
|
|
enableMotion: string;
|
|
flipCertificate: string;
|
|
flipMedal: string;
|
|
resetView: string;
|
|
loading: string;
|
|
noWebgl: string;
|
|
};
|
|
pendingTitle: string;
|
|
pendingText: string;
|
|
revokedTitle: string;
|
|
revokedText: string;
|
|
detailsHeading: string;
|
|
fields: {
|
|
number: string;
|
|
offer: string;
|
|
term: string;
|
|
recipient: string;
|
|
givers: string;
|
|
occasion: string;
|
|
status: string;
|
|
};
|
|
occasions: Record<"SELBST" | "GEBURTSTAG" | "WEIHNACHTEN" | "DANKESCHOEN" | "GESCHENK", string>;
|
|
downloadsHeading: string;
|
|
downloadsIntro: string;
|
|
downloads: {
|
|
pdf: string;
|
|
pdfHint: string;
|
|
png: string;
|
|
pngHint: string;
|
|
svg: string;
|
|
svgHint: string;
|
|
all: string;
|
|
allHint: string;
|
|
};
|
|
menuLabel: string;
|
|
menuTransfer: string;
|
|
menuManageSubscription: string;
|
|
menuDownloadAll: string;
|
|
subscriptionNote: string;
|
|
symbolicNote: string;
|
|
};
|
|
transfer: {
|
|
sectionHeading: string;
|
|
sectionIntro: string;
|
|
openLinkLabel: string;
|
|
openLinkExpires: (date: string) => string;
|
|
openLinkHidden: string;
|
|
revoke: string;
|
|
revoked: string;
|
|
revokeFailed: string;
|
|
dialogTitle: string;
|
|
dialogIntro: string;
|
|
validityLegend: string;
|
|
validity: Record<TransferValidity, string>;
|
|
next: string;
|
|
back: string;
|
|
cancel: string;
|
|
close: string;
|
|
confirmTitle: string;
|
|
confirmText: string;
|
|
confirmButton: string;
|
|
creating: string;
|
|
doneTitle: string;
|
|
doneText: (date: string) => string;
|
|
linkLabel: string;
|
|
copy: string;
|
|
copied: string;
|
|
onceHint: string;
|
|
errorGeneric: string;
|
|
errorNotTransferable: string;
|
|
errorRateLimited: string;
|
|
};
|
|
claim: {
|
|
metaTitle: string;
|
|
title: string;
|
|
invalidTitle: string;
|
|
invalidText: string;
|
|
toShop: string;
|
|
loginTitle: string;
|
|
loginText: string;
|
|
loginButton: string;
|
|
verifyTitle: string;
|
|
verifyText: string;
|
|
verifyButton: string;
|
|
ownTitle: string;
|
|
ownText: string;
|
|
toAccount: string;
|
|
confirmIntro: string;
|
|
beeLabel: string;
|
|
termLabel: string;
|
|
confirmText: string;
|
|
confirmButton: string;
|
|
successText: string;
|
|
};
|
|
readme: {
|
|
title: (beeName: string) => string;
|
|
numberLabel: string;
|
|
termOpen: (start: string) => string;
|
|
termRange: (start: string, end: string) => string;
|
|
contents: string;
|
|
pdf: string;
|
|
png: string;
|
|
svg: string;
|
|
symbolic: string;
|
|
footer: string;
|
|
};
|
|
}
|
|
|
|
const SYMBOLIC_DE =
|
|
"Die Namensgebung ist symbolisch. Sie gilt keiner einzeln begleiteten Biene, sondern unterstützt die Imkerei Wabenhain und ihre Bienenvölker.";
|
|
const SYMBOLIC_EN =
|
|
"The naming is symbolic. It does not refer to an individually tracked bee; it supports the Wabenhain apiary and its colonies.";
|
|
|
|
const de: AccountSponsorshipStrings = {
|
|
navCard: {
|
|
title: "Patenschaft",
|
|
description: "Urkunden, Medaillen und Downloads deiner Bienenpatenschaften",
|
|
},
|
|
overview: {
|
|
metaTitle: "Meine Patenschaften",
|
|
back: "Zurück zum Konto",
|
|
title: "Deine Patenschaften",
|
|
subtitle: "Hier liegen deine Urkunden und Medaillen. Öffne eine Patenschaft, um sie in 3D anzusehen und herunterzuladen.",
|
|
listTitle: "Patenschaften",
|
|
emptyTitle: "Noch keine Patenschaft",
|
|
emptyDescription: "Gib einer Biene der Imkerei Wabenhain symbolisch einen Namen, für dich oder als Geschenk.",
|
|
emptyAction: "Patenschaft entdecken",
|
|
pendingTitle: "Deine Urkunde wird gerade erstellt",
|
|
pendingHint: "Das dauert meist nur einen Moment. Diese Seite aktualisiert sich von selbst.",
|
|
pendingBadge: "Wird erstellt",
|
|
openDetail: (beeName) => `Patenschaft ${beeName} öffnen`,
|
|
manageSubscription: "Abo verwalten",
|
|
},
|
|
kind: { oneTime: "Einmalig", subscription: "Im Abo" },
|
|
lifecycle: {
|
|
SCHEDULED: "Beginnt bald",
|
|
ACTIVE: "Aktiv",
|
|
EXPIRED: "Abgelaufen",
|
|
CANCELLING: "Gekündigt",
|
|
ENDED: "Beendet",
|
|
REVOKED: "Widerrufen",
|
|
},
|
|
term: {
|
|
range: (start, end) => `${start} bis ${end}`,
|
|
since: (start) => `seit ${start}`,
|
|
startsOn: (start) => `beginnt am ${start}`,
|
|
endsOn: (end) => `läuft bis ${end}`,
|
|
},
|
|
shelf: {
|
|
title: "Deine Medaillen",
|
|
intro: "Jede Patenschaft bringt ihre eigene Medaille mit. Treue zum Shop und zum Abo lässt weitere entstehen.",
|
|
empty: "Deine erste Medaille erscheint hier, sobald eine Urkunde fertig ist.",
|
|
sponsorshipCaption: (year) => `Patenschaft ${year}`,
|
|
regularCaption: "Stammkundschaft",
|
|
regularProgress: (missing, next) =>
|
|
`Noch ${missing} ${missing === 1 ? "Bestellung" : "Bestellungen"} bis „${next}“`,
|
|
regularNone: (missing, first) =>
|
|
`Noch ${missing} ${missing === 1 ? "Bestellung" : "Bestellungen"} bis zur ersten Stufe „${first}“`,
|
|
subscriptionCaption: (months) => `${months} ${months === 1 ? "Monat" : "Monate"} im Abo`,
|
|
vipCaption: "Besonders treue Patenschaft",
|
|
vipBadge: "VIP",
|
|
tier: { BRONZE: "Bronze", SILBER: "Silber", GOLD: "Gold", ABO: "Abo-Prägung" },
|
|
},
|
|
detail: {
|
|
metaTitle: (beeName) => `Patenschaft ${beeName}`,
|
|
back: "Alle Patenschaften",
|
|
numberLabel: "Nr.",
|
|
stageTitle: (beeName) => `Urkunde und Medaille der Bienenpatenschaft ${beeName}`,
|
|
stageHeading: "Urkunde und Medaille",
|
|
stageHint: "Ziehen dreht, Doppelklick wendet. Mit der Tastatur: Pfeiltasten drehen, Leertaste wendet.",
|
|
stage: {
|
|
enableMotion: "Bewegung aktivieren",
|
|
flipCertificate: "Urkunde wenden",
|
|
flipMedal: "Medaille wenden",
|
|
resetView: "Ansicht zurücksetzen",
|
|
loading: "Die 3D-Ansicht wird geladen …",
|
|
noWebgl: "Die 3D-Ansicht ist in diesem Browser nicht verfügbar. Urkunde und Medaille kannst du unten herunterladen.",
|
|
},
|
|
pendingTitle: "Deine Urkunde wird gerade erstellt",
|
|
pendingText: "Sobald sie fertig ist, erscheinen hier Urkunde, Medaille und Downloads. Diese Seite aktualisiert sich von selbst.",
|
|
revokedTitle: "Diese Patenschaft wurde widerrufen",
|
|
revokedText:
|
|
"Die Bestellung wurde storniert oder erstattet. Urkunde, Medaille und Downloads stehen deshalb nicht mehr zur Verfügung. Bei Fragen schreib uns gern.",
|
|
detailsHeading: "Angaben",
|
|
fields: {
|
|
number: "Patenschaftsnummer",
|
|
offer: "Paket",
|
|
term: "Laufzeit",
|
|
recipient: "Ausgestellt für",
|
|
givers: "Geschenkt von",
|
|
occasion: "Anlass",
|
|
status: "Status",
|
|
},
|
|
occasions: {
|
|
SELBST: "Für mich selbst",
|
|
GEBURTSTAG: "Geburtstag",
|
|
WEIHNACHTEN: "Weihnachten",
|
|
DANKESCHOEN: "Dankeschön",
|
|
GESCHENK: "Geschenk",
|
|
},
|
|
downloadsHeading: "Herunterladen",
|
|
downloadsIntro: "Alles bleibt dauerhaft in deinem Konto, auch nach Ablauf der Patenschaft.",
|
|
downloads: {
|
|
pdf: "Urkunde",
|
|
pdfHint: "PDF, A4, druckfertig",
|
|
png: "Medaille",
|
|
pngHint: "PNG, 2048 px, transparent",
|
|
svg: "Medaille",
|
|
svgHint: "SVG, Vektor",
|
|
all: "Alles herunterladen",
|
|
allHint: "ZIP mit Urkunde und Medaille",
|
|
},
|
|
menuLabel: "Weitere Aktionen",
|
|
menuTransfer: "Übertragen …",
|
|
menuManageSubscription: "Abo verwalten",
|
|
menuDownloadAll: "Alles herunterladen",
|
|
subscriptionNote: "Abo-Patenschaften lassen sich nicht übertragen, weil die Zahlung an deinem Konto hängt.",
|
|
symbolicNote: SYMBOLIC_DE,
|
|
},
|
|
transfer: {
|
|
sectionHeading: "Übertragung",
|
|
sectionIntro: "Für diese Patenschaft gibt es einen offenen Übertragungslink.",
|
|
openLinkLabel: "Offener Link",
|
|
openLinkExpires: (date) => `Gültig bis ${date}.`,
|
|
openLinkHidden: "Aus Sicherheitsgründen zeigen wir den Link nur direkt nach dem Erstellen. Brauchst du ihn erneut, erstelle einen neuen. Der alte wird dabei ungültig.",
|
|
revoke: "Link widerrufen",
|
|
revoked: "Der Übertragungslink wurde widerrufen.",
|
|
revokeFailed: "Der Link ist nicht mehr offen. Er wurde schon eingelöst, widerrufen oder ist abgelaufen.",
|
|
dialogTitle: "Patenschaft übertragen",
|
|
dialogIntro:
|
|
"Mit einem Übertragungslink kann die beschenkte Person die Patenschaft in ihr eigenes Konto übernehmen. Urkunde, Medaille und Downloads wandern mit. Bestellung und Rechnung bleiben bei dir.",
|
|
validityLegend: "Wie lange soll der Link gültig sein?",
|
|
validity: { "24h": "24 Stunden", "7d": "1 Woche", "30d": "30 Tage" },
|
|
next: "Weiter",
|
|
back: "Zurück",
|
|
cancel: "Abbrechen",
|
|
close: "Schließen",
|
|
confirmTitle: "Link wirklich erstellen?",
|
|
confirmText:
|
|
"Möchtest du den Übertragungslink wirklich erstellen? Jede Person, die diesen Link hat, kann die Patenschaft in ihr Konto übernehmen. Gib ihn nur an die beschenkte Person weiter. Die Weitergabe geschieht auf eigene Verantwortung.",
|
|
confirmButton: "Link erstellen",
|
|
creating: "Wird erstellt …",
|
|
doneTitle: "Dein Übertragungslink",
|
|
doneText: (date) => `Der Link ist einmal nutzbar und gültig bis ${date}.`,
|
|
linkLabel: "Übertragungslink",
|
|
copy: "Kopieren",
|
|
copied: "Kopiert",
|
|
onceHint: "Wir zeigen dir diesen Link nur jetzt. Kopiere ihn, bevor du das Fenster schließt.",
|
|
errorGeneric: "Der Link konnte nicht erstellt werden. Bitte versuche es noch einmal.",
|
|
errorNotTransferable: "Diese Patenschaft lässt sich nicht übertragen.",
|
|
errorRateLimited: "Du hast gerade viele Links erstellt. Bitte warte ein paar Minuten.",
|
|
},
|
|
claim: {
|
|
metaTitle: "Patenschaft übernehmen",
|
|
title: "Patenschaft übernehmen",
|
|
invalidTitle: "Dieser Link ist nicht gültig",
|
|
invalidText:
|
|
"Der Übertragungslink ist abgelaufen, wurde widerrufen oder schon eingelöst. Bitte die Person, die dir die Patenschaft schenkt, um einen neuen Link.",
|
|
toShop: "Zur Startseite",
|
|
loginTitle: "Melde dich an, um die Patenschaft zu übernehmen",
|
|
loginText:
|
|
"Eine Bienenpatenschaft wurde dir geschenkt. Damit Urkunde, Medaille und Downloads dir gehören, brauchst du ein Kundenkonto. Melde dich an oder registriere dich. Danach geht es hier weiter.",
|
|
loginButton: "Anmelden oder registrieren",
|
|
verifyTitle: "Bitte bestätige zuerst deine E-Mail-Adresse",
|
|
verifyText: "Patenschaften gehören nur zu bestätigten Konten. Den Bestätigungslink findest du in deinem Postfach, auf der Kontoseite kannst du ihn neu anfordern.",
|
|
verifyButton: "Zur Kontoseite",
|
|
ownTitle: "Diese Patenschaft gehört schon dir",
|
|
ownText: "Der Link wurde aus deinem eigenen Konto erstellt. Gib ihn an die Person weiter, die die Patenschaft übernehmen soll.",
|
|
toAccount: "Zu deinen Patenschaften",
|
|
confirmIntro: "Diese Bienenpatenschaft wurde dir geschenkt:",
|
|
beeLabel: "Patenbiene",
|
|
termLabel: "Laufzeit",
|
|
confirmText: "Mit der Übernahme gehören Urkunde, Medaille und Downloads zu deinem Konto.",
|
|
confirmButton: "Patenschaft übernehmen",
|
|
successText: "Die Patenschaft gehört jetzt zu deinem Konto.",
|
|
},
|
|
readme: {
|
|
title: (beeName) => `Bienenpatenschaft ${beeName}`,
|
|
numberLabel: "Patenschaftsnummer",
|
|
termOpen: (start) => `Patenschaft seit ${start}`,
|
|
termRange: (start, end) => `Patenschaft vom ${start} bis ${end}`,
|
|
contents: "Inhalt dieses Archivs:",
|
|
pdf: "die Urkunde als druckfertige PDF (A4)",
|
|
png: "die Medaille als Bild mit transparentem Hintergrund",
|
|
svg: "die Medaille als Vektorgrafik",
|
|
symbolic: SYMBOLIC_DE,
|
|
footer: "Imkerei Wabenhain · wabenhain.com",
|
|
},
|
|
};
|
|
|
|
const en: AccountSponsorshipStrings = {
|
|
navCard: {
|
|
title: "Bee sponsorship",
|
|
description: "Certificates, medals and downloads of your bee sponsorships",
|
|
},
|
|
overview: {
|
|
metaTitle: "My sponsorships",
|
|
back: "Back to account",
|
|
title: "Your sponsorships",
|
|
subtitle: "Your certificates and medals live here. Open a sponsorship to view it in 3D and download it.",
|
|
listTitle: "Sponsorships",
|
|
emptyTitle: "No sponsorship yet",
|
|
emptyDescription: "Give a bee of the Wabenhain apiary a symbolic name, for yourself or as a gift.",
|
|
emptyAction: "Discover sponsorships",
|
|
pendingTitle: "Your certificate is being created",
|
|
pendingHint: "This usually takes just a moment. This page refreshes on its own.",
|
|
pendingBadge: "In progress",
|
|
openDetail: (beeName) => `Open sponsorship ${beeName}`,
|
|
manageSubscription: "Manage subscription",
|
|
},
|
|
kind: { oneTime: "One-time", subscription: "Subscription" },
|
|
lifecycle: {
|
|
SCHEDULED: "Starts soon",
|
|
ACTIVE: "Active",
|
|
EXPIRED: "Expired",
|
|
CANCELLING: "Cancelled",
|
|
ENDED: "Ended",
|
|
REVOKED: "Revoked",
|
|
},
|
|
term: {
|
|
range: (start, end) => `${start} to ${end}`,
|
|
since: (start) => `since ${start}`,
|
|
startsOn: (start) => `starts on ${start}`,
|
|
endsOn: (end) => `runs until ${end}`,
|
|
},
|
|
shelf: {
|
|
title: "Your medals",
|
|
intro: "Every sponsorship comes with its own medal. Loyalty to the shop and to your subscription earns more.",
|
|
empty: "Your first medal appears here as soon as a certificate is ready.",
|
|
sponsorshipCaption: (year) => `Sponsorship ${year}`,
|
|
regularCaption: "Regular customer",
|
|
regularProgress: (missing, next) => `${missing} more ${missing === 1 ? "order" : "orders"} to “${next}”`,
|
|
regularNone: (missing, first) => `${missing} more ${missing === 1 ? "order" : "orders"} to the first level “${first}”`,
|
|
subscriptionCaption: (months) => `${months} ${months === 1 ? "month" : "months"} subscribed`,
|
|
vipCaption: "A particularly loyal sponsorship",
|
|
vipBadge: "VIP",
|
|
tier: { BRONZE: "Bronze", SILBER: "Silver", GOLD: "Gold", ABO: "Subscription strike" },
|
|
},
|
|
detail: {
|
|
metaTitle: (beeName) => `Sponsorship ${beeName}`,
|
|
back: "All sponsorships",
|
|
numberLabel: "No.",
|
|
stageTitle: (beeName) => `Certificate and medal of the bee sponsorship ${beeName}`,
|
|
stageHeading: "Certificate and medal",
|
|
stageHint: "Drag to rotate, double-click to flip. Keyboard: arrow keys rotate, space flips.",
|
|
stage: {
|
|
enableMotion: "Enable motion",
|
|
flipCertificate: "Flip certificate",
|
|
flipMedal: "Flip medal",
|
|
resetView: "Reset view",
|
|
loading: "Loading the 3D view …",
|
|
noWebgl: "The 3D view is not available in this browser. You can download the certificate and medal below.",
|
|
},
|
|
pendingTitle: "Your certificate is being created",
|
|
pendingText: "As soon as it is ready, the certificate, medal and downloads appear here. This page refreshes on its own.",
|
|
revokedTitle: "This sponsorship has been revoked",
|
|
revokedText:
|
|
"The order was cancelled or refunded, so the certificate, medal and downloads are no longer available. Feel free to contact us with any questions.",
|
|
detailsHeading: "Details",
|
|
fields: {
|
|
number: "Sponsorship number",
|
|
offer: "Package",
|
|
term: "Term",
|
|
recipient: "Issued to",
|
|
givers: "Gift from",
|
|
occasion: "Occasion",
|
|
status: "Status",
|
|
},
|
|
occasions: {
|
|
SELBST: "For myself",
|
|
GEBURTSTAG: "Birthday",
|
|
WEIHNACHTEN: "Christmas",
|
|
DANKESCHOEN: "Thank you",
|
|
GESCHENK: "Gift",
|
|
},
|
|
downloadsHeading: "Download",
|
|
downloadsIntro: "Everything stays in your account for good, even after the sponsorship ends.",
|
|
downloads: {
|
|
pdf: "Certificate",
|
|
pdfHint: "PDF, A4, print-ready",
|
|
png: "Medal",
|
|
pngHint: "PNG, 2048 px, transparent",
|
|
svg: "Medal",
|
|
svgHint: "SVG, vector",
|
|
all: "Download everything",
|
|
allHint: "ZIP with certificate and medal",
|
|
},
|
|
menuLabel: "More actions",
|
|
menuTransfer: "Transfer …",
|
|
menuManageSubscription: "Manage subscription",
|
|
menuDownloadAll: "Download everything",
|
|
subscriptionNote: "Subscription sponsorships cannot be transferred because the payment is tied to your account.",
|
|
symbolicNote: SYMBOLIC_EN,
|
|
},
|
|
transfer: {
|
|
sectionHeading: "Transfer",
|
|
sectionIntro: "There is an open transfer link for this sponsorship.",
|
|
openLinkLabel: "Open link",
|
|
openLinkExpires: (date) => `Valid until ${date}.`,
|
|
openLinkHidden: "For security reasons we only show the link right after it is created. If you need it again, create a new one. The old one stops working.",
|
|
revoke: "Revoke link",
|
|
revoked: "The transfer link has been revoked.",
|
|
revokeFailed: "The link is no longer open. It has been used, revoked or has expired.",
|
|
dialogTitle: "Transfer sponsorship",
|
|
dialogIntro:
|
|
"With a transfer link, the person you are gifting can move the sponsorship into their own account. Certificate, medal and downloads go with it. The order and invoice stay with you.",
|
|
validityLegend: "How long should the link be valid?",
|
|
validity: { "24h": "24 hours", "7d": "1 week", "30d": "30 days" },
|
|
next: "Continue",
|
|
back: "Back",
|
|
cancel: "Cancel",
|
|
close: "Close",
|
|
confirmTitle: "Create the link?",
|
|
confirmText:
|
|
"Do you really want to create the transfer link? Anyone who has this link can move the sponsorship into their account. Only share it with the person you are gifting. Sharing it is at your own risk.",
|
|
confirmButton: "Create link",
|
|
creating: "Creating …",
|
|
doneTitle: "Your transfer link",
|
|
doneText: (date) => `The link works once and is valid until ${date}.`,
|
|
linkLabel: "Transfer link",
|
|
copy: "Copy",
|
|
copied: "Copied",
|
|
onceHint: "We only show you this link now. Copy it before you close this window.",
|
|
errorGeneric: "The link could not be created. Please try again.",
|
|
errorNotTransferable: "This sponsorship cannot be transferred.",
|
|
errorRateLimited: "You have created many links just now. Please wait a few minutes.",
|
|
},
|
|
claim: {
|
|
metaTitle: "Accept sponsorship",
|
|
title: "Accept sponsorship",
|
|
invalidTitle: "This link is not valid",
|
|
invalidText:
|
|
"The transfer link has expired, was revoked or has already been used. Please ask the person gifting you the sponsorship for a new link.",
|
|
toShop: "Go to homepage",
|
|
loginTitle: "Sign in to accept the sponsorship",
|
|
loginText:
|
|
"A bee sponsorship has been gifted to you. To own the certificate, medal and downloads you need a customer account. Sign in or register, then you will continue here.",
|
|
loginButton: "Sign in or register",
|
|
verifyTitle: "Please confirm your email address first",
|
|
verifyText: "Sponsorships only belong to confirmed accounts. You will find the confirmation link in your inbox; you can request a new one on the account page.",
|
|
verifyButton: "Go to account",
|
|
ownTitle: "This sponsorship is already yours",
|
|
ownText: "The link was created from your own account. Share it with the person who should receive the sponsorship.",
|
|
toAccount: "Go to your sponsorships",
|
|
confirmIntro: "This bee sponsorship has been gifted to you:",
|
|
beeLabel: "Sponsored bee",
|
|
termLabel: "Term",
|
|
confirmText: "Once accepted, the certificate, medal and downloads belong to your account.",
|
|
confirmButton: "Accept sponsorship",
|
|
successText: "The sponsorship now belongs to your account.",
|
|
},
|
|
readme: {
|
|
title: (beeName) => `Bee sponsorship ${beeName}`,
|
|
numberLabel: "Sponsorship number",
|
|
termOpen: (start) => `Sponsorship since ${start}`,
|
|
termRange: (start, end) => `Sponsorship from ${start} to ${end}`,
|
|
contents: "Contents of this archive:",
|
|
pdf: "the certificate as a print-ready PDF (A4)",
|
|
png: "the medal as an image with a transparent background",
|
|
svg: "the medal as a vector graphic",
|
|
symbolic: SYMBOLIC_EN,
|
|
footer: "Imkerei Wabenhain · wabenhain.com",
|
|
},
|
|
};
|
|
|
|
const STRINGS: Record<Locale, AccountSponsorshipStrings> = { de, en };
|
|
|
|
export function getAccountSponsorshipStrings(locale: Locale): AccountSponsorshipStrings {
|
|
return STRINGS[locale];
|
|
}
|