295 lines
11 KiB
TypeScript
295 lines
11 KiB
TypeScript
/**
|
||
* 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',
|
||
},
|
||
};
|