Files
petfeed/messages/de.json
T
admin 8186c36b9a feat(stories): support 30s video uploads, mirroring normal video posts
Story gains mediaType (IMAGE/VIDEO) plus the same Mux fields as
VideoPost (muxUploadId/AssetId/PlaybackId, videoStatus, durationSecs,
aspectRatio); storageKey becomes optional since video stories don't
use Supabase Storage.

- 30s duration cap (deliberately shorter than the 180s normal-post
  cap) enforced client-side before upload (reads the file's own
  duration) and again server-side in the mux webhook and
  stories.getVideoStatus's self-heal path, so a bypassed client check
  or a direct API call can't produce an oversized story video.
- MAX_STORY_VIDEO_DURATION_SECS lives in a new client-safe
  src/lib/story-video-limits.ts rather than stories.ts, which is
  server-only — importing from a server-only module into StoryForm
  (a client component) pulled the pg driver into the client bundle
  and broke the build.
- Mux webhook now resolves an asset to either a VideoPost or a Story;
  video stories never fan out to the feed (mirrors the normal-post
  webhook branch, minus fanOutPost).
- StoryViewer: video stories autoplay muted (tap to unmute — browsers
  block autoplay-with-sound past the story that was directly clicked
  open) with a real playback-time progress bar (image stories keep
  the fixed 5s bar), rendered via object-contain to correctly handle
  the ~9:16 portrait ratio typical of phone-shot story videos instead
  of a fixed 16:9 box.
2026-08-16 14:36:44 +02:00

690 lines
31 KiB
JSON
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.
{
"Nav": {
"home": "Startseite",
"myPets": "Meine Tiere",
"explore": "Entdecken",
"search": "Suchen",
"notifications": "Benachrichtigungen",
"messages": "Nachrichten",
"invite": "Einladen",
"sponsor": "Unterstützen",
"newPost": "Beitrag erstellen",
"addPet": "Tier hinzufügen",
"account": "Konto",
"profile": "Profil",
"collapseSidebar": "Sidebar einklappen",
"expandSidebar": "Sidebar ausklappen"
},
"PostType": {
"title": "Erstellen",
"photo": "Foto-Beitrag",
"story": "Story",
"video": "Video-Beitrag",
"milestone": "Meilenstein",
"newPost": "Neuer Beitrag",
"newStory": "Neue Story",
"newMilestone": "Neuer Meilenstein",
"newVideo": "Neues Video"
},
"Feed": {
"emptyTitle": "Dein Feed ist leer",
"emptyBody": "Folge anderen Tieren, um ihre Beiträge hier zu sehen.",
"findPets": "Tiere entdecken"
},
"Welcome": {
"title": "Willkommen bei PawFeed!",
"subtitle": "Das kann dein Tier alles machen:",
"close": "Schließen",
"understood": "Verstanden",
"ctaHint": "Drücke + in der Navigation, um deinen ersten Beitrag zu erstellen.",
"photosTitle": "Fotos & Videos",
"photosDesc": "Teile Momente aus dem Leben deines Tieres — Einzelbilder, Karussells oder Kurzvideos.",
"storiesTitle": "Stories",
"storiesDesc": "24-Stunden-Stories verschwinden automatisch. Sieh, wer deine Story gesehen hat.",
"milestonesTitle": "Meilensteine",
"milestonesDesc": "Feiere Geburtstage, Adoptions-Jahrestage, erste Ausflüge und mehr.",
"dmsTitle": "Direktnachrichten",
"dmsDesc": "Schreibe anderen Tieren direkt — perfekt für Spielverabredungen oder Fragen.",
"healthTitle": "Gesundheitsakte",
"healthDesc": "Verfolge Gewicht, Impfungen und Tierarztbesuche. Teile die Gesundheitskarte mit deinem Tierarzt."
},
"Explore": {
"title": "Entdecken",
"trending": "Trending",
"all": "Alle",
"allBreeds": "Alle Rassen",
"loadMore": "Mehr laden",
"noPetsYet": "Noch keine {species}",
"noTrending": "Noch keine Trending-Inhalte — schau später wieder rein",
"trendingHashtags": "Trending-Hashtags",
"hotPosts": "Beliebte Beiträge · letzte 48 Std."
},
"PetForm": {
"name": "Name des Tieres",
"namePlaceholder": "Name eingeben",
"nameRequired": "Dieses Feld ist erforderlich.",
"nameMaxLength": "Der Name darf maximal 30 Zeichen lang sein.",
"nickname": "Rufname / Spitzname (optional)",
"nicknamePlaceholder": "z. B. Rexi",
"species": "Tierart",
"selectSpecies": "Tierart auswählen",
"speciesRequired": "Bitte wähle eine Tierart aus.",
"breed": "Rasse",
"selectBreed": "Rasse auswählen (optional)",
"selectSpeciesFirst": "Wähle zuerst eine Tierart aus",
"noBreedsFound": "Keine Rassen gefunden.",
"bio": "Biografie",
"bioPlaceholder": "Erzähl uns von {petName}…",
"bioPlaceholderFallback": "Erzähl uns von deinem Tier…",
"adoptionStory": "Adoptionsgeschichte",
"adoptionStoryPlaceholder": "Wie kam {petName} zu deiner Familie?",
"adoptionStoryPlaceholderFallback": "Wie kam dein Tier zu deiner Familie?",
"birthday": "Geburtstag",
"birthdayHint": "Für Geburtstags-Erinnerungen",
"adoptedAt": "Adoptionsdatum",
"adoptedAtHint": "Für Jahrestags-Erinnerungen",
"addPet": "Tier anlegen",
"saveChanges": "Änderungen speichern",
"petCreated": "Tierprofil erstellt",
"changesSaved": "Änderungen gespeichert",
"error": "Etwas ist schiefgelaufen. Bitte versuche es erneut."
},
"DateWheelPicker": {
"selectDate": "Datum auswählen",
"apply": "Übernehmen"
},
"LegalUpdateBanner": {
"title": "Unsere Nutzungsbedingungen oder Datenschutzerklärung haben sich geändert",
"readFull": "Vollständigen Text lesen",
"acknowledge": "Verstanden",
"disagree": "Nicht einverstanden — Konto löschen"
},
"BroadcastBanner": {
"title": "Mitteilung vom PawFeed-Team",
"acknowledge": "Gelesen"
},
"AvatarUpload": {
"uploadPhoto": "Foto hochladen",
"changePhoto": "Foto ändern",
"savePetFirst": "Speichere dein Tier zuerst, um ein Foto hochzuladen.",
"uploadFailed": "Upload fehlgeschlagen — bitte versuche es erneut",
"photoUpdated": "Profilfoto aktualisiert",
"fileTooLarge": "Das Foto muss kleiner als 10 MB sein.",
"invalidType": "Lade ein JPG-, PNG- oder WebP-Bild hoch.",
"uploading": "Wird hochgeladen…",
"cropTitle": "Foto zuschneiden",
"zoom": "Zoom",
"cropCancel": "Abbrechen",
"cropSave": "Übernehmen",
"cropSaving": "Wird verarbeitet…"
},
"Onboarding": {
"addFirstPet": "Füge dein erstes Tier hinzu",
"addFirstPetDesc": "Dein Tier wird sein eigener Star auf PawFeed.",
"addPhoto": "Profilfoto hinzufügen",
"addPhotoDesc": "Gib deinem Tier ein Gesicht auf PawFeed. Du kannst das jederzeit ändern.",
"done": "Fertig",
"skipForNow": "Jetzt überspringen"
},
"Language": {
"switch": "Sprache",
"en": "English",
"de": "Deutsch"
},
"Theme": {
"toggleLabel": "Dark Mode"
},
"Sponsor": {
"title": "PawFeed unterstützen",
"subtitle": "PawFeed wird komplett privat finanziert — ganz ohne Investoren, aus eigener Tasche. Server-Hardware, Software-Lizenzen und weitere Tools verursachen laufende Kosten. Mit deinem freiwilligen Beitrag hilfst du, die Plattform am Laufen zu halten — als Dankeschön bekommst du das Sponsor-Badge auf deinem Profil und bei jedem Beitrag.",
"poweredByStripe": "Zahlungsabwicklung über",
"oneTime": "Einmalig",
"monthly": "Monatlich",
"customAmountLabel": "Betrag in Euro",
"minAmountHint": "Mindestbetrag: {min}€",
"submitOneTime": "Jetzt einmalig unterstützen",
"submitSubscription": "Jetzt Abo starten",
"noPerksHint": "Kein Vorteil außer dem Sponsor-Badge — freiwilliger Beitrag, keine steuerlich absetzbare Spende.",
"alreadySponsorTitle": "Du bist schon Sponsor — danke!",
"oneTimeSince": "Einmaliger Beitrag am {date}.",
"activeSubscriptionSince": "Aktives Abo seit {date}.",
"cancelSubscription": "Abo kündigen",
"canceledUntil": "Gekündigt — dein Sponsor-Badge bleibt bis zum {date} aktiv.",
"historyTitle": "Deine Beiträge",
"paymentSuccess": "Danke für deine Unterstützung!",
"paymentCanceled": "Zahlung abgebrochen — kein Betrag wurde abgebucht.",
"checkoutError": "Der Bezahlvorgang konnte nicht gestartet werden. Bitte versuch es später erneut.",
"cancelError": "Die Kündigung ist fehlgeschlagen. Bitte versuch es später erneut."
},
"AiDisclosure": {
"question": "Enthält dieser Inhalt KI-generierte oder KI-bearbeitete Bilder/Texte?",
"none": "Nein",
"modified": "KI-bearbeitet",
"generated": "KI-generiert",
"modifiedBadgeAlt": "Mit KI bearbeitet",
"generatedBadgeAlt": "Mit KI generiert"
},
"Invite": {
"title": "Freunde einladen",
"subtitle": "Du hast {available} von {total} Einladungen verfügbar. Teile einen Link — jeder Code kann nur einmal verwendet werden.",
"empty": "Du hast noch keine Einladungen. Melde dich mit einem Einladungscode an, um 3 eigene zu erhalten.",
"statusRevoked": "Widerrufen",
"statusUsed": "Verwendet",
"share": "Teilen",
"copy": "Kopieren",
"copied": "Kopiert",
"copiedToast": "Link kopiert!",
"shareTitle": "Du bist zu PawFeed eingeladen!",
"shareText": "Erstelle ein Profil für dein Tier auf PawFeed – der sozialen Plattform für Haustiere 🐾",
"usedSummary": "{used} von {total} Codes bereits verwendet."
},
"EmergencyVet": {
"openInMap": "In Karte öffnen",
"mapTitle": "Tierarzt Standort",
"savedToast": "Tierarzt gespeichert",
"saveErrorToast": "Speichern fehlgeschlagen",
"removedToast": "Tierarzt entfernt",
"removeErrorToast": "Löschen fehlgeschlagen",
"nameRequiredToast": "Name ist erforderlich",
"sectionTitle": "Notfalltierarzt",
"addVet": "Tierarzt hinterlegen",
"website": "Website",
"searchLabel": "Tierarzt suchen",
"searchPlaceholder": "z.B. Tierarzt Musterstraße München…",
"close": "Schließen",
"nameLabel": "Name *",
"namePlaceholder": "Dr. Muster Tierarztpraxis",
"addressLabel": "Adresse",
"addressPlaceholder": "Musterstraße 1, 80333 München",
"phoneLabel": "Telefon",
"phonePlaceholder": "+49 89 123456",
"websiteLabel": "Website",
"websitePlaceholder": "www.tierarzt.de",
"cancel": "Abbrechen",
"save": "Speichern",
"empty": "Noch kein Notfalltierarzt hinterlegt. Im Notfall weiß jeder sofort wohin."
},
"PostCard": {
"justNow": "gerade eben",
"minutesAgo": "vor {count} Min.",
"hoursAgo": "vor {count} Std.",
"daysAgo": "vor {count} T.",
"editCaption": "Beschreibung bearbeiten",
"deletePost": "Beitrag löschen",
"reportPost": "Beitrag melden",
"blockPet": "{name} blockieren",
"captionPlaceholder": "Beschreibung eingeben…",
"charsRemaining": "Noch {count} Zeichen",
"saveCaption": "Speichern",
"cancel": "Abbrechen",
"more": "mehr",
"less": "weniger",
"deleteTitle": "Beitrag löschen?",
"deleteDesc": "Dieser Beitrag und alle Fotos werden dauerhaft gelöscht. Das kann nicht rückgängig gemacht werden.",
"keepPost": "Behalten",
"yesDelete": "Ja, löschen",
"captionUpdated": "Beschreibung aktualisiert",
"captionUpdateError": "Beschreibung konnte nicht aktualisiert werden. Bitte versuche es erneut.",
"postDeleted": "Beitrag gelöscht",
"deleteError": "Beitrag konnte nicht gelöscht werden. Bitte versuche es erneut."
},
"Comments": {
"title": "Kommentare",
"justNow": "jetzt",
"empty": "Noch keine Kommentare — sei der Erste!",
"placeholder": "Kommentar hinzufügen…",
"post": "Senden",
"sending": "Wird gesendet…",
"postError": "Kommentar konnte nicht gepostet werden. Bitte versuche es erneut.",
"deleteError": "Kommentar konnte nicht gelöscht werden. Bitte versuche es erneut.",
"countSingular": "1 Kommentar",
"countPlural": "{count} Kommentare"
},
"RelativeTime": {
"justNow": "gerade eben",
"minutes": "{count}m",
"hours": "{count}h",
"days": "{count}d"
},
"Follow": {
"follow": "Folgen",
"following": "Gefolgt",
"unfollow": "Entfolgen",
"unfollowTitle": "{name} entfolgen?",
"unfollowDesc": "Du siehst {name}'s Beiträge nicht mehr in deinem Feed.",
"keepFollowing": "Weiter folgen",
"followError": "Etwas ist schiefgelaufen. Bitte versuche es erneut.",
"nowFollowing": "Du folgst jetzt {name}",
"unfollowed": "{name} entfolgt"
},
"Search": {
"title": "Suchen",
"placeholder": "Tiere, Personen oder Hashtags suchen…",
"tabPets": "Tiere",
"tabPeople": "Personen",
"tabTags": "Tags",
"typeMore": "Mindestens 2 Zeichen eingeben",
"typeHashtag": "Hashtag eingeben zum Suchen",
"noPets": "Keine Tiere gefunden für \"{query}\"",
"noPeople": "Keine Personen gefunden für \"{query}\"",
"noTags": "Keine Beiträge mit #{tag}",
"followerCount": "{count} Follower"
},
"Messages": {
"pageTitle": "Nachrichten",
"noMessages": "Noch keine Nachrichten",
"noMessagesHint": "Besuche ein Tierprofil und tippe auf Nachricht, um ein Gespräch zu starten.",
"you": "Du",
"startConversation": "Gespräch starten",
"timeNow": "jetzt",
"relativeMinutes": "{count} Min.",
"relativeHours": "{count} Std.",
"relativeDays": "{count} T.",
"today": "Heute",
"yesterday": "Gestern",
"empty": "Sag Hallo 👋",
"placeholder": "Nachricht…",
"charsLeft": "Noch {count} Zeichen",
"sendError": "Nachricht konnte nicht gesendet werden. Bitte versuche es erneut."
},
"FeedList": {
"forYou": "Für dich",
"recent": "Aktuell",
"allCaughtUp": "Du bist auf dem neuesten Stand. Folge mehr Tieren für weitere Beiträge.",
"discoveryBanner": "Du folgst noch niemandem — hier siehst du, was andere Tiere wie deins gerade teilen."
},
"ProfileTabs": {
"posts": "Beiträge",
"milestones": "Meilensteine",
"noPosts": "Noch keine Beiträge",
"noMilestones": "Noch keine Meilensteine"
},
"ExploreCard": {
"followerSingular": "1 Follower",
"followerPlural": "{count} Follower",
"yourPet": "Dein Tier"
},
"Health": {
"pageTitle": "Gesundheit — {petName}",
"shareCard": "Karte teilen",
"tabWeight": "Gewicht",
"tabVet": "Tierarzt",
"tabVaccines": "Impfungen",
"cancel": "Abbrechen",
"save": "Speichern",
"weight": {
"add": "Gewicht hinzufügen",
"noEntries": "Noch keine Gewichtseinträge",
"singular": "1 Eintrag",
"plural": "{count} Einträge",
"labelDate": "Datum",
"labelWeight": "Gewicht (kg)",
"placeholderWeight": "z.B. 4,2",
"labelNotes": "Notizen (optional)",
"placeholderNotes": "z.B. nach dem Morgenspaziergang",
"toastAdded": "Gewichtseintrag hinzugefügt",
"toastDeleted": "Eintrag gelöscht",
"toastError": "Gewichtseintrag konnte nicht gespeichert werden",
"toastDeleteError": "Eintrag konnte nicht gelöscht werden",
"toastValidation": "Bitte Datum und gültiges Gewicht eingeben",
"chartHistory": "Verlauf"
},
"vet": {
"add": "Besuch hinzufügen",
"noEntries": "Noch keine Tierarztbesuche",
"singular": "1 Besuch",
"plural": "{count} Besuche",
"labelDate": "Datum",
"labelVet": "Tierarzt / Klinik (optional)",
"placeholderVet": "z.B. Dr. Müller",
"labelReason": "Grund *",
"placeholderReason": "z.B. Jahresuntersuchung",
"labelNotes": "Notizen (optional)",
"placeholderNotes": "Diagnose, Behandlung, Medikamente…",
"toastAdded": "Tierarztbesuch hinzugefügt",
"toastDeleted": "Eintrag gelöscht",
"toastError": "Tierarztbesuch konnte nicht gespeichert werden",
"toastDeleteError": "Eintrag konnte nicht gelöscht werden",
"toastValidation": "Bitte Datum und Grund eingeben"
},
"vaccines": {
"add": "Impfung hinzufügen",
"noEntries": "Noch keine Impfungen eingetragen",
"singular": "1 Impfung",
"plural": "{count} Impfungen",
"labelName": "Impfstoff *",
"placeholderName": "z.B. Tollwut, DHPP",
"labelDateGiven": "Gegeben am *",
"labelNextDue": "Nächste Fälligkeit (optional)",
"labelNotes": "Notizen (optional)",
"placeholderNotes": "Chargennummer, Klinik…",
"badgeOverdue": "Überfällig",
"badgeDue": "Fällig {date}",
"textGiven": "Gegeben {date}",
"toastAdded": "Impfung hinzugefügt",
"toastDeleted": "Eintrag gelöscht",
"toastError": "Impfung konnte nicht gespeichert werden",
"toastDeleteError": "Eintrag konnte nicht gelöscht werden",
"toastValidation": "Bitte Impfstoffname und Datum eingeben"
},
"feeding": {
"sectionTitle": "Fütterung",
"edit": "Bearbeiten",
"add": "Fütterungsinfo hinzufügen",
"labelFoodType": "Futterart",
"labelFeedingTimes": "Mahlzeiten pro Tag",
"labelDailyAmount": "Tagesration (g)",
"labelBrand": "Marke (optional)",
"labelSpecialDiet": "Spezialdiät / Allergien (optional)",
"placeholderFoodType": "z.B. Trockenfutter, Nassfutter, BARF",
"placeholderFeedingTimes": "z.B. 2",
"placeholderDailyAmount": "z.B. 200",
"placeholderBrand": "z.B. Royal Canin",
"placeholderSpecialDiet": "z.B. Getreidefrei, Hühnchen-Allergie…",
"noInfo": "Noch keine Fütterungsinfos hinterlegt.",
"timesPerDay": "{count}x täglich",
"gramsPerDay": "{amount} g / Tag",
"toastSaved": "Fütterungsinfo gespeichert",
"toastDeleted": "Fütterungsinfo entfernt",
"toastError": "Fütterungsinfo konnte nicht gespeichert werden",
"toastDeleteError": "Fütterungsinfo konnte nicht entfernt werden"
},
"share": {
"title": "Health Card teilen — {petName}",
"description": "Jeder mit diesem Link kann {petName}s Gesundheitsdaten einsehen — Gewicht, Impfungen und Tierarztbesuche. Kein Login erforderlich.",
"validityLabel": "Gültigkeitsdauer",
"expiryDays": "{count} Tage",
"generate": "Generieren",
"validUntil": "Gültig bis",
"openPdf": "Als PDF öffnen / drucken",
"regenerateTitle": "Link neu generieren",
"regenerateDesc": "Erstellt einen neuen Link und macht den aktuellen ungültig. Nützlich zum Widerrufen von Zugriffen.",
"toastGenerateError": "Link konnte nicht generiert werden",
"toastRegenerateSuccess": "Neuer Link erstellt — alter Link ist jetzt ungültig",
"toastRegenerateError": "Link konnte nicht neu generiert werden"
}
},
"DeleteAccount": {
"trigger": "Konto löschen",
"warningTitle": "Konto wirklich löschen?",
"warningIntro": "Diese Aktion ist unwiderruflich. Folgendes wird dauerhaft gelöscht:",
"itemPets": "Alle Tierprofile",
"itemPosts": "Alle Posts, Kommentare und Reaktionen",
"itemMedia": "Alle Bilder und Videos",
"itemMessages": "Alle Chats und Nachrichten",
"itemHealth": "Alle Gesundheitsdaten",
"itemAccount": "Dein PawFeed-Konto",
"cancel": "Abbrechen",
"understand": "Ich verstehe, weiter",
"confirmTitle": "Bestätigung erforderlich",
"confirmIntro": "Gib den Namen eines deiner Haustiere ein, um die Löschung zu bestätigen:",
"inputPlaceholder": "Tiername eingeben…",
"confirmDelete": "Konto endgültig löschen",
"deleting": "Konto wird gelöscht…",
"doneTitle": "Konto erfolgreich gelöscht.",
"doneRedirect": "Du wirst weitergeleitet…",
"unknownError": "Unbekannter Fehler",
"genericError": "Etwas ist schiefgelaufen"
},
"NotificationsPage": {
"title": "Benachrichtigungen",
"emptyTitle": "Noch keine Benachrichtigungen",
"emptyDesc": "Wenn Tiere dir folgen oder auf deine Posts reagieren, siehst du es hier.",
"typeFollow": "folgt dir jetzt",
"typeReaction": "hat auf deinen Post reagiert",
"commentedPrefix": "kommentierte:",
"typeCommentNoBody": "hat deinen Post kommentiert",
"typeMessage": "hat dir eine Nachricht gesendet",
"typeMention": "hat dich in einem Kommentar erwähnt",
"typePawBack": "hat deinen Post geteilt (Paw-Back)",
"typeBirthday": "🎂 Alles Gute zum Geburtstag! Erstelle einen Jubiläums-Post.",
"typeAdoptionDay": "🏠 Heute ist der Adoptionstag! Feiere den Jahrestag."
},
"PhotoPostForm": {
"captionPlaceholder": "Bildunterschrift schreiben…",
"captionError": "Bildunterschrift darf höchstens 500 Zeichen haben.",
"charactersRemaining": "Noch {count} Zeichen",
"shareCta": "Post teilen",
"sharing": "Wird geteilt…",
"successToast": "Post geteilt",
"errorToast": "Dein Post konnte nicht geteilt werden. Bitte versuch es erneut.",
"noPetSelected": "Kein aktives Tier ausgewählt.",
"noPhoto": "Bitte füge mindestens ein Foto hinzu."
},
"StoryForm": {
"addMedia": "Foto oder Video hinzufügen",
"disappearsNote": "Storys verschwinden nach 24 Stunden",
"changeMedia": "Ändern",
"postCta": "Story posten",
"posting": "Wird gepostet…",
"successToast": "Story gepostet",
"errorToast": "Deine Story konnte nicht gepostet werden. Bitte versuch es erneut.",
"noPetSelected": "Kein aktives Tier ausgewählt.",
"fileTooLarge": "Foto muss unter 10 MB sein.",
"invalidType": "Lade ein JPG-, PNG-, WebP-Bild oder ein MP4-, MOV-, WebM-Video hoch.",
"uploadFailed": "Upload fehlgeschlagen — bitte versuch es erneut.",
"videoLengthHint": "Video max. {max} Sekunden",
"videoTooLarge": "Video muss unter 500 MB sein.",
"videoTooLong": "Story-Videos dürfen höchstens {max} Sekunden lang sein.",
"videoUnreadable": "Videolänge konnte nicht gelesen werden — bitte versuch eine andere Datei."
},
"MilestoneForm": {
"questionLabel": "Was ist der Meilenstein?",
"selectPlaceholder": "Meilenstein auswählen…",
"litterDetailsLabel": "Wurf-Details",
"optional": "(optional)",
"litterPlaceholder": "z.B. 5 gesunde Kätzchen, geboren am 13. Juni…",
"charactersRemaining": "Noch {count} Zeichen",
"photoLabel": "Foto",
"addPhoto": "Foto hinzufügen",
"change": "Ändern",
"noteLabel": "Notiz hinzufügen",
"notePlaceholder": "Notiz hinzufügen… (optional)",
"shareCta": "Meilenstein teilen",
"sharing": "Wird geteilt…",
"successToast": "Meilenstein geteilt",
"errorToast": "Meilenstein konnte nicht geteilt werden. Bitte versuch es erneut.",
"fileTooLarge": "Foto muss unter 10 MB sein.",
"invalidType": "Lade ein JPG-, PNG- oder WebP-Bild hoch.",
"uploadFailed": "Upload fehlgeschlagen — bitte versuch es erneut."
},
"VideoUploadForm": {
"selectVideo": "Video auswählen",
"formatHint": "MP4, MOV oder WebM · bis 500 MB · max. 3 Minuten",
"selectVideoAria": "Video auswählen",
"changeVideo": "Anderes Video wählen",
"captionLabel": "Bildunterschrift",
"captionPlaceholder": "Bildunterschrift schreiben…",
"charactersLeft": "Noch {count}",
"uploading": "Wird hochgeladen…",
"processingDone": "Hochgeladen — Video wird verarbeitet",
"uploadFailedGeneric": "Upload fehlgeschlagen — bitte versuch es erneut",
"cancel": "Abbrechen",
"postVideo": "Video posten",
"invalidType": "Lade ein MP4-, MOV- oder WebM-Video hoch.",
"fileTooLarge": "Video muss unter 500 MB sein.",
"uploadSuccessToast": "Video hochgeladen — wird im Hintergrund verarbeitet",
"uploadFailedToast": "Upload fehlgeschlagen: {msg}"
},
"StoryViewer": {
"closeStory": "Story schließen",
"storyAriaLabel": "Story von {petName}",
"sheetTitleZero": "Noch keine Aufrufe",
"sheetTitleSingular": "Von 1 Tier gesehen",
"sheetTitlePlural": "Von {count} Tieren gesehen",
"noViewersYet": "Noch niemand hat diese Story angesehen.",
"mute": "Stummschalten",
"unmute": "Ton einschalten",
"videoError": "Video konnte nicht verarbeitet werden."
},
"StoryTray": {
"storiesAriaLabel": "Storys",
"addStory": "Story hinzufügen",
"newStoryTitle": "Neue Story"
},
"RepostCard": {
"pawedBackBy": "Paw-Back von"
},
"OnboardingGuidelines": {
"title": "Bevor es losgeht",
"subtitle": "Ein kurzer Überblick über unsere Community-Richtlinien.",
"linksIntro": "Alle Details in unseren",
"termsLink": "Nutzungsbedingungen",
"privacyLink": "Datenschutzerklärung (inkl. Cookies)",
"continueCta": "Verstanden, weiter"
},
"UploadConsent": {
"title": "Zwei kurze Bestätigungen",
"subtitle": "Bevor du dein erstes Tier anlegst, brauchen wir deine ausdrückliche Zustimmung zu Folgendem.",
"contentRightsLabel": "Ich bestätige, dass ich alle Rechte an den von mir hochgeladenen Bildern und Videos besitze und dass diese kein fremdes Urheberrecht verletzen.",
"dataProcessingLabel": "Ich willige ein, dass meine Daten zur Bereitstellung des Dienstes an Clerk (Authentifizierung), Cloudflare (Medienspeicherung), Mux (Videoverarbeitung) und Supabase (Datenbank) übermittelt werden.",
"linksIntro": "Details zu den eingesetzten Dienstleistern in unserer",
"privacyLink": "Datenschutzerklärung",
"continueCta": "Bestätigen und weiter"
},
"ArachnophobiaOptIn": {
"title": "Arachnophobie-Helfer",
"subtitle": "PawFeed ist jetzt auch für Spinnen-Halter da. Wenn dir vor Spinnenbildern graut, blenden wir sie für dich komplett aus — im Feed, bei Explore und in der Suche.",
"checkboxLabel": "Ja, bitte Spinnen-Inhalte für mich ausblenden.",
"laterHint": "Du kannst das jederzeit unter \"Meine Tiere\" wieder ändern.",
"continueCta": "Weiter"
},
"HideSpidersToggle": {
"label": "Spinnen-Inhalte ausblenden",
"description": "Blendet Pets und Beiträge der Tierart Spinne im Feed, bei Explore und in der Suche aus."
},
"PetsPage": {
"title": "Meine Tiere",
"addPet": "Tier anlegen",
"emptyTitle": "Füge dein erstes Tier hinzu",
"emptyDesc": "Gib deinem Tier ein eigenes Profil auf PawFeed."
},
"PetProfile": {
"editProfile": "Profil bearbeiten",
"health": "Gesundheit",
"managedBy": "Verwaltet von @{username}",
"statsPosts": "Posts",
"statsFollowers": "Follower",
"statsFollowing": "Folgt",
"adoptionStory": "Adoptionsgeschichte",
"verified": "Verifiziert"
},
"EditPet": {
"title": "{name} bearbeiten",
"privacyHeading": "Privatsphäre",
"whoCanMessage": "Wer kann {name} Nachrichten schreiben?",
"everyone": "Alle",
"onlyFollowedPets": "Nur Tiere, denen ich folge",
"save": "Speichern",
"dmFollowersOnlyHint": "Nur Tiere, denen du folgst, können dir Direktnachrichten schreiben.",
"dmEveryoneHint": "Jedes Tier auf PawFeed kann dir Direktnachrichten schreiben.",
"privacySaved": "Privatsphäre-Einstellung gespeichert",
"privacySaveFailed": "Privatsphäre-Einstellung konnte nicht gespeichert werden",
"verificationHeading": "Verifizierung",
"verifiedStatus": "Dieses Tier ist verifiziert.",
"pendingStatus": "Dein Verifizierungsantrag wird noch geprüft.",
"rejectedPrefix": "Der letzte Antrag wurde abgelehnt: {reason}",
"criteriaHint": "Worauf wir achten: ein echtes, bekanntes Tier, ein vollständiges Profil, ein sauberer Stand und eine etablierte, aktive Präsenz.",
"messagePlaceholder": "Warum sollte dieses Tier verifiziert werden?",
"requestButton": "Verifizierung beantragen",
"requestSubmitted": "Verifizierungsantrag eingereicht.",
"dangerZoneHeading": "Gefahrenzone",
"deletePet": "Tier löschen",
"deleteDialogTitle": "Tierprofil löschen?",
"deleteDialogDescription": "Dies löscht das Profil von {name} und alle Posts dauerhaft. Das kann nicht rückgängig gemacht werden.",
"keepPet": "Behalten",
"yesDelete": "Ja, löschen",
"petDeleted": "Tierprofil gelöscht",
"deleteFailed": "Etwas ist schiefgelaufen. Bitte versuch es erneut."
},
"FollowersPage": {
"title": "{count} Follower",
"empty": "{petName} hat noch keine Follower."
},
"FollowingPage": {
"title": "Folgt {count}",
"empty": "{petName} folgt noch niemandem."
},
"ProfileActions": {
"message": "Nachricht",
"cannotStartConversation": "Unterhaltung konnte nicht gestartet werden.",
"moreOptions": "Weitere Optionen",
"reportProfile": "Profil melden",
"blockPet": "{petName} blockieren"
},
"ReportSheet": {
"title": "Melden",
"reasonQuestion": "Warum meldest du das?",
"reasonSpam": "Spam",
"reasonHarassment": "Belästigung oder Mobbing",
"reasonInappropriate": "Unangemessene Inhalte",
"reasonMisinformation": "Falsche oder irreführende Informationen",
"reasonOther": "Etwas anderes",
"notesPlaceholder": "Details hinzufügen (optional)",
"charactersRemaining": "Noch {count} Zeichen",
"submit": "Meldung absenden",
"cancel": "Nicht melden",
"successToast": "Meldung übermittelt. Wir prüfen sie in Kürze.",
"errorToast": "Deine Meldung konnte nicht übermittelt werden. Bitte versuch es erneut."
},
"BlockDialog": {
"title": "{petName} blockieren?",
"description": "{petName}s Posts und Profil werden für dich ausgeblendet. Niemand erfährt, dass du blockiert hast.",
"cancel": "Nicht blockieren",
"confirm": "Blockieren",
"successToast": "Du hast {petName} blockiert",
"errorToast": "Tier konnte nicht blockiert werden. Bitte versuch es erneut."
},
"Landing": {
"tagline": "Wo Haustiere die Stars sind. Profile, Beiträge und Storys — gemacht für Hunde, Katzen und Vögel.",
"getStarted": "Jetzt starten",
"logIn": "Anmelden",
"previewAlt": "Der PawFeed-Feed mit Tierbeiträgen von Noctis und Bubi",
"featuresHeading": "Gebaut für dein Tier, nicht für den Menschen",
"feature1Title": "Nicht Menschen, sondern Tiere sind das Profil",
"feature1Body": "Jeder Hund, jede Katze, jeder Vogel bekommt eine eigene Identität — eigene Beiträge, Follower und eine eigene Story, getrennt vom Besitzer.",
"feature2Title": "Beiträge, Storys & Kurzvideos",
"feature2Body": "Fotos, Kurzvideos und 24-Stunden-Storys — alles rund um das, was dein Tier gerade erlebt.",
"feature3Title": "Gesundheits-Tracking",
"feature3Body": "Gewichtsverlauf, Tierarztbesuche und Impfungen an einem Ort — per privatem Link mit dem Tierarzt teilbar.",
"feature4Title": "Nachrichten von Tier zu Tier",
"feature4Body": "Direktnachrichten laufen zwischen den Tieren, nicht den Besitzern — passend zum Aufbau der ganzen Plattform.",
"footerImpressum": "Impressum",
"footerDatenschutz": "Datenschutz",
"footerAgb": "AGB",
"navHome": "Home",
"navAbout": "Über uns",
"navLogin": "Anmelden",
"navSignUp": "Registrieren",
"heroBadge1": "Neuer Beitrag von Bubi",
"heroBadge2": "Likes, Follows, Reaktionen",
"heroBadge3": "Story ist aktiv",
"catchHeading": "Für jedes Tier, jeden Menschen dahinter",
"catchSubline": "PawFeed dreht das übliche Social Network um: dein Hund, deine Katze oder dein Vogel bekommt das Profil — du kümmerst dich einfach nur drum.",
"detailHeading": "Von der ersten Story bis zum Tierarztbesuch",
"detailBody": "Alles, was zum Leben deines Tieres gehört, an einem Ort — geteilt mit anderen Tierhaltern, nicht mit einem anonymen Algorithmus.",
"detailPoint1": "Kurzvideos und Storys verschwinden nicht in einem Feed voller Menschen",
"detailPoint2": "Gesundheitsdaten bleiben privat, außer du teilst sie bewusst per Link",
"footerTagline": "Wo Haustiere die Stars sind.",
"footerDesignedBy": "Designed & Powered by PawFeed"
},
"AboutPage": {
"metaTitle": "Über uns — PawFeed",
"kicker": "Unsere Geschichte",
"title": "Wie aus einem späten Abend eine echte Herzenssache wurde",
"paragraph1": "Kennst du diese Abende, an denen du im Bett liegst, durch Social Media scrollst und dir nach der zehnten Werbeanzeige und dem hundertsten Lifestyle-Post denkst: Eigentlich will ich nur Bilder von Tieren sehen? Genau an so einem Abend, Ende 2025, ist PawFeed entstanden.",
"paragraph2": "Ich habe mich gefragt, warum es keine Plattform gibt, die sich einzig und allein um das dreht, was uns wirklich Freude macht: unsere Tiere — Hund, Katze oder Vogel. Also habe ich angefangen, genau diesen Raum zu bauen.",
"pullQuote": "Sie verdienen einen eigenen Raum, in dem sie nicht Nebendarsteller sind, sondern die Hauptrolle spielen.",
"sectionHeading": "Von Tier zu Tier, von Herz zu Herz",
"paragraph3": "Bei PawFeed dreht sich alles um echte Geschichten statt erzwungene Trends. Du folgst den Rassen und Tieren, die dir wirklich am Herzen liegen, teilst Adoptionsgeschichten und den ganz normalen Alltag mit deinem Vierbeiner — ganz ohne den Lärm, der uns sonst überall begegnet.",
"paragraph4": "Aus einer späten Idee wurde nach Monaten voller Arbeit und Herzblut eine echte Herzenssache. Am 1. September 2026 startet PawFeed offiziell — und ich freue mich schon riesig darauf, all die wunderbaren Fellnasen und ihre Geschichten kennenzulernen.",
"statsHeading": "PawFeed in Zahlen",
"statsSubline": "Live aus unserem System — keine Marketing-Zahlen.",
"statOwners": "Mitglieder",
"statPets": "Tiere",
"statSponsors": "Unterstützer:innen",
"ctaHeading": "Lust, dabei zu sein?",
"ctaButton": "Jetzt starten"
}
}