/** * German dictionary. * * Typed as `Dictionary` (derived from `en.ts`), so a key added to English but * forgotten here fails the type-check rather than falling through to English * at runtime. */ import type { Dictionary } from '../index'; const plural = (n: number, one: string, other: string) => `${n} ${n === 1 ? one : other}`; export const de: Dictionary = { dateLocale: 'de-DE', nav: { home: 'Start', about: 'Über mich', map: 'Karte', journal: 'Journal', skipToContent: 'Zum Inhalt springen', mainNavAria: 'Hauptnavigation', heroNavAria: 'Bereiche', openMenu: 'Menü öffnen', closeMenu: 'Menü schließen', }, common: { backTo: (label: string) => `Zurück zu ${label}`, backToGallery: 'Zurück zur Galerie', backToJournal: 'Zurück zum Journal', email: 'E-Mail', website: 'Website', home: 'Start', photos: (n: number) => plural(n, 'Foto', 'Fotos'), albums: (n: number) => plural(n, 'Album', 'Alben'), collections: (n: number) => plural(n, 'Sammlung', 'Sammlungen'), prevAlbum: 'Vorheriges Album', nextAlbum: 'Nächstes Album', prevAlbumAria: (name: string) => `Vorheriges Album: ${name}`, nextAlbumAria: (name: string) => `Nächstes Album: ${name}`, albumNavAria: 'Albumnavigation', prevEntry: 'Vorheriger Beitrag', nextEntry: 'Nächster Beitrag', prevEntryAria: (title: string) => `Vorheriger Beitrag: ${title}`, nextEntryAria: (title: string) => `Nächster Beitrag: ${title}`, entryNavAria: 'Journal-Navigation', loadingGallery: 'Galerie wird geladen', gallery: 'Galerie', loadingPhotos: 'Fotos werden geladen', downloadAlbum: 'Album herunterladen', }, home: { enter: 'Eintreten', pauseSlideshow: 'Diashow anhalten', playSlideshow: 'Diashow abspielen', }, error: { notFoundTitle: 'Nicht gefunden', notFoundText: 'Diese Seite existiert nicht, oder das Album ist nicht mehr veröffentlicht.', errorTitle: 'Etwas ist schiefgelaufen', errorText: 'Diese Seite konnte gerade nicht geladen werden. Das ist meist vorübergehend — bitte gleich noch einmal versuchen.', tryAgain: 'Erneut versuchen', reference: (digest: string) => `Referenz: ${digest}`, }, download: { unavailableTitle: 'Download nicht möglich', notAvailable: 'Dieser Download ist nicht verfügbar.', rateLimited: 'Zu viele Download-Anfragen. Bitte einen Moment warten und erneut versuchen.', immichUnavailable: 'Die Fotobibliothek ist gerade nicht erreichbar. Bitte gleich noch einmal versuchen.', back: 'Zurück zur Galerie', limitReached: 'Das Download-Limit für diesen Link ist erreicht.', }, theme: { switchToLight: 'Zum hellen Modus wechseln', switchToDark: 'Zum dunklen Modus wechseln', scrollToTop: 'Nach oben', }, password: { subtitle: 'Diese Galerie ist passwortgeschützt.', siteSubtitle: 'Diese Website ist passwortgeschützt.', pageSubtitle: 'Diese Seite ist passwortgeschützt.', journalSubtitle: 'Dieser Journal-Eintrag ist passwortgeschützt.', protectedPage: 'Geschützte Seite', placeholder: 'Passwort eingeben', submit: 'Öffnen', verifying: 'Wird geprüft…', incorrect: 'Falsches Passwort. Bitte erneut versuchen.', failed: 'Passwort konnte nicht geprüft werden. Bitte später erneut versuchen.', tooManyAttempts: (seconds: number | null) => seconds ? `Zu viele Versuche – bitte in ${seconds} ${seconds === 1 ? 'Sekunde' : 'Sekunden'} erneut versuchen.` : 'Zu viele Versuche – bitte später erneut versuchen.', legalNavAria: 'Rechtliche Hinweise', }, about: { kicker: 'Über mich', title: 'Über mich', metaTitle: (name: string) => `Über mich — ${name}`, portraitAlt: 'Porträt', gear: 'Ausrüstung', }, map: { title: 'Karte', kicker: 'Wo', subtitle: 'Wo die Fotos entstanden sind', loading: 'Karte wird geladen…', loadFailed: (status: number) => `Kartendaten konnten nicht geladen werden (${status})`, initFailed: 'Karte konnte nicht initialisiert werden', zoomIn: 'Vergrößern', zoomOut: 'Verkleinern', leafletTitle: 'Eine JavaScript-Bibliothek für interaktive Karten', }, subpage: { collectionKicker: (index: string) => `${index} — Sammlung`, sectionsNav: 'Abschnitte', coverAria: (albumName: string, count: string) => `${albumName}, ${count}`, nextSubpage: 'Weiter', nextSubpageAria: (name: string) => `Weiter: ${name}`, }, journal: { title: 'Journal', kicker: 'Geschichten & Essays', subtitle: 'Fotoessays, visuelle Geschichten und Notizen von unterwegs.', entryDescription: 'Journal-Eintrag', empty: 'Noch keine Journal-Einträge veröffentlicht.', readStory: 'Geschichte lesen →', minRead: (n: number) => `${n} Min. Lesezeit`, draft: 'Entwurf', by: (author: string) => `von ${author}`, notFound: 'Nicht gefunden', }, lightbox: { viewer: 'Bildansicht', position: (n: number, total: number) => `Foto ${n} von ${total}`, openPhoto: (n: number) => `Foto ${n} ansehen`, close: 'Schließen', closeTitle: 'Schließen (Esc)', previous: 'Vorheriges Foto', previousTitle: 'Vorheriges Foto (Pfeil links)', next: 'Nächstes Foto', nextTitle: 'Nächstes Foto (Pfeil rechts)', toggleInfo: 'Fotoinfos ein-/ausblenden', toggleInfoTitle: 'Fotoinfos ein-/ausblenden (i)', hideInfo: 'Infos ausblenden', info: 'Infos', loading: 'Wird geladen...', camera: 'Kamera', lens: 'Objektiv', focalLength: 'Brennweite', aperture: 'Blende', shutter: 'Belichtungszeit', iso: 'ISO', location: 'Ort', noExif: 'Keine EXIF-Daten vorhanden', copyLink: 'Link zu diesem Foto kopieren', copyLinkTitle: 'Link zu diesem Foto kopieren (c)', copyLinkShort: 'Link', copied: 'Kopiert', copyManual: 'Diesen Link kopieren', shortcuts: 'Tastaturkürzel', shortcutNavigate: 'Vorheriges / nächstes Foto', shortcutInfo: 'Fotoinfos', shortcutFullscreen: 'Vollbild', shortcutExitFullscreen: 'Vollbild verlassen', download: 'Originaldatei herunterladen', downloadTitle: 'Originaldatei herunterladen (d)', downloadShort: 'Original', shortcutDownload: 'Original herunterladen', shortcutSlideshow: 'Diashow', shortcutSlideshowRunning: (seconds: number) => `Diashow — alle ${seconds}s`, slideshowStopped: 'Diashow angehalten', slideshowRunning: (seconds: number) => `Diashow läuft, wechselt alle ${seconds} Sekunden`, shortcutCopyLink: 'Link zum Foto kopieren', shortcutList: 'Diese Liste', shortcutClose: 'Ansicht schließen', zoomIn: 'Auf volle Auflösung zoomen', zoomInTitle: 'Auf volle Auflösung zoomen (+ oder Doppelklick)', zoomOut: 'Foto an den Bildschirm anpassen', zoomOutTitle: 'Einpassen (0 oder Esc)', zoomLoading: 'Volle Auflösung wird geladen …', zoomUnavailable: 'Für dieses Foto ist keine volle Auflösung verfügbar.', shortcutZoom: 'Hinein- / herauszoomen', shortcutZoomReset: 'Einpassen', }, proofing: { addFavorite: 'Zur Auswahl hinzufügen', removeFavorite: 'Aus Auswahl entfernen', addToFavorites: 'Zur Auswahl hinzufügen', removeFromFavorites: 'Aus Auswahl entfernen', saved: 'Gemerkt', favorite: 'Merken', showAll: 'Alle anzeigen', filterEmpty: 'Keine Fotos ausgewählt.', selected: (n: number) => `❤️ ${n} ausgewählt`, shareExport: 'Teilen & Export', modalTitle: (n: number) => `❤️ Auswahl (${n})`, closeModal: 'Dialog schließen', intro: (n: number) => `Du hast ${plural(n, 'Foto', 'Fotos')} ausgewählt. Wähle unten eine Export-Option, um deine Auswahl zu teilen:`, copyLink: 'Teilbaren Link kopieren', linkCopied: 'Link kopiert!', copyList: 'Textliste kopieren (#1, #2...)', listCopied: 'Liste kopiert!', copyManualLink: 'Diesen Link kopieren', copyManualList: 'Diese Liste kopieren', sendEmail: '✉️ E-Mail an den Fotografen', downloadSelected: 'Auswahl herunterladen (.zip)', clearSelection: 'Auswahl löschen', confirmClear: 'Die gesamte Auswahl löschen?', listEmpty: (albumName: string) => `${albumName}: Keine Fotos ausgewählt.`, listSummary: (albumName: string, count: number, indices: string) => `${albumName} — Ausgewählte Fotos (${count}): ${indices}`, mailSubject: (n: number) => `Fotoauswahl (${plural(n, 'Foto', 'Fotos')})`, mailBody: (list: string, url: string) => `Hallo,\n\nhier ist meine Fotoauswahl:\n\n${list}\n\nLink zur Auswahl: ${url}\n\nViele Grüße,`, }, proofSession: { greeting: (name: string) => `Auswahl für ${name}`, intro: 'Markiere die gewünschten Fotos mit dem Herz. Deine Auswahl wird laufend gespeichert — du kannst mit diesem Link jederzeit zurückkommen.', saving: 'Wird gespeichert…', saved: 'Auswahl gespeichert', saveFailed: 'Deine Auswahl konnte nicht gespeichert werden. Prüfe die Verbindung und versuche es erneut.', review: 'Prüfen & absenden', modalTitle: (n: number) => `Deine Auswahl (${n})`, empty: 'Noch keine Fotos ausgewählt.', submit: 'Auswahl absenden', submitting: 'Wird gesendet…', confirmSubmit: (n: number) => `${plural(n, 'Foto', 'Fotos')} absenden? Danach lässt sich die Auswahl nicht mehr ändern.`, submitted: 'Danke — deine Auswahl wurde abgeschickt.', locked: 'Diese Auswahl wurde abgeschickt und kann nicht mehr geändert werden.', validUntil: (date: string) => `Dieser Link ist gültig bis ${date}.`, expiredTitle: 'Dieser Link ist abgelaufen', expiredText: 'Bitte frag deinen Fotografen nach einem neuen Link.', downloadSelection: 'Auswahl herunterladen (.zip)', downloadAll: 'Alle Fotos herunterladen (.zip)', downloadsLeft: (n: number) => `Noch ${plural(n, 'Download', 'Downloads')}`, }, legal: { navLabel: 'Impressum', title: 'Impressum', subtitle: 'Angaben gemäß § 5 DDG', address: 'Anschrift', contact: 'Kontakt', email: 'E-Mail', phone: 'Telefon', contactForm: 'Kontaktformular', taxSection: 'Steuernummer', taxId: 'Steuernummer', vatId: 'Umsatzsteuer-ID', extraInfo: 'Weitere Informationen', }, contact: { navLabel: 'Kontakt', title: 'Kontakt', subtitle: 'Schreib mir eine Nachricht', name: 'Name', email: 'E-Mail', message: 'Nachricht', submit: 'Nachricht senden', sending: 'Wird gesendet…', successTitle: 'Danke', successText: 'Deine Nachricht ist angekommen. Ich antworte dir per E-Mail.', invalid: 'Bitte fülle alle Felder aus und gib eine gültige E-Mail-Adresse an.', tooMany: 'Zu viele Nachrichten in kurzer Zeit. Bitte versuch es in einer Minute noch einmal.', failed: 'Die Nachricht konnte nicht gesendet werden. Bitte versuch es später noch einmal.', privacy: (days: number) => `Deine Nachricht wird auf dem eigenen Server dieser Seite gespeichert, nur für die Antwort verwendet und nach ${days} ${days === 1 ? 'Tag' : 'Tagen'} gelöscht.`, }, privacy: { navLabel: 'Datenschutz', title: 'Datenschutzerklärung', }, };