Files
immich-folio/lib/i18n/locales/de.ts
2026-10-02 18:14:23 +02:00

295 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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',
},
};