{ "Nav": { "home": "Home", "myPets": "My Pets", "explore": "Explore", "search": "Search", "notifications": "Notifications", "messages": "Messages", "invite": "Invite Friends", "newPost": "New Post", "addPet": "Add Pet", "account": "Account", "profile": "Profile" }, "PostType": { "title": "Create", "photo": "Photo Post", "story": "Story", "video": "Video Post", "milestone": "Milestone", "newPost": "New Post", "newStory": "New Story", "newMilestone": "New Milestone", "newVideo": "New Video" }, "Feed": { "emptyTitle": "Your feed is empty", "emptyBody": "Follow some pets to see their posts here.", "findPets": "Find Pets" }, "Welcome": { "title": "Welcome to PawFeed!", "subtitle": "Here's what your pet can do:", "close": "Close", "understood": "Got it", "ctaHint": "Press + in the nav to create your first post.", "photosTitle": "Photos & Videos", "photosDesc": "Share moments from your pet's life — single images, carousels, or short videos.", "storiesTitle": "Stories", "storiesDesc": "24 h stories disappear automatically. See who viewed your story.", "milestonesTitle": "Milestones", "milestonesDesc": "Celebrate birthdays, adoption anniversaries, first outings and more.", "dmsTitle": "DMs", "dmsDesc": "Message other pets directly — perfect for playdates or questions.", "healthTitle": "Health Tracking", "healthDesc": "Track weight, vaccinations and vet visits. Share the Health Card with your vet." }, "Explore": { "title": "Explore", "trending": "Trending", "all": "All", "allBreeds": "All breeds", "loadMore": "Load more", "noPetsYet": "No {species} pets yet", "noTrending": "No trending content yet — check back soon", "trendingHashtags": "Trending hashtags", "hotPosts": "Hot posts · last 48 h" }, "PetForm": { "name": "Pet name", "namePlaceholder": "Enter pet name", "nameRequired": "This field is required.", "nameMaxLength": "Pet name must be 30 characters or fewer.", "species": "Species", "selectSpecies": "Select species", "speciesRequired": "Please select a species.", "breed": "Breed", "selectBreed": "Select breed (optional)", "selectSpeciesFirst": "Select a species first", "noBreedsFound": "No breeds found.", "bio": "Bio", "bioPlaceholder": "Tell us about {petName}…", "bioPlaceholderFallback": "Tell us about your pet…", "adoptionStory": "Adoption story", "adoptionStoryPlaceholder": "How did {petName} join your family?", "adoptionStoryPlaceholderFallback": "How did your pet join your family?", "birthday": "Birthday", "birthdayHint": "For birthday reminders", "adoptedAt": "Adoption date", "adoptedAtHint": "For anniversary reminders", "addPet": "Add Pet", "saveChanges": "Save changes", "petCreated": "Pet profile created", "changesSaved": "Changes saved", "error": "Something went wrong. Please try again." }, "DateWheelPicker": { "selectDate": "Select date", "apply": "Apply" }, "LegalUpdateBanner": { "title": "Our Terms of Service or Privacy Policy have changed", "readFull": "Read the full text", "acknowledge": "Got it", "disagree": "Disagree — delete my account" }, "AvatarUpload": { "uploadPhoto": "Upload photo", "changePhoto": "Change photo", "savePetFirst": "Save your pet first to upload a photo.", "uploadFailed": "Upload failed — please try again", "photoUpdated": "Profile photo updated", "fileTooLarge": "Photo must be under 10 MB.", "invalidType": "Upload a JPG, PNG, or WebP image.", "uploading": "Uploading…" }, "Onboarding": { "addFirstPet": "Add your first pet", "addFirstPetDesc": "Your pet will be their own star on PawFeed.", "addPhoto": "Add a profile photo", "addPhotoDesc": "Give your pet a face on PawFeed. You can always change this later.", "done": "Done", "skipForNow": "Skip for now" }, "Language": { "switch": "Language", "en": "English", "de": "Deutsch" }, "PostCard": { "justNow": "just now", "minutesAgo": "{count}m ago", "hoursAgo": "{count}h ago", "daysAgo": "{count}d ago", "editCaption": "Edit caption", "deletePost": "Delete post", "reportPost": "Report post", "blockPet": "Block {name}", "captionPlaceholder": "Write a caption…", "charsRemaining": "{count} characters remaining", "saveCaption": "Save caption", "cancel": "Cancel", "more": "more", "less": "less", "deleteTitle": "Delete this post?", "deleteDesc": "This will permanently delete the post and all its photos. This can't be undone.", "keepPost": "Keep post", "yesDelete": "Yes, delete", "captionUpdated": "Caption updated", "captionUpdateError": "Couldn't update caption. Please try again.", "postDeleted": "Post deleted", "deleteError": "Couldn't delete post. Please try again." }, "Comments": { "title": "Comments", "justNow": "now", "empty": "No comments yet — be the first!", "placeholder": "Add a comment…", "post": "Post", "sending": "Sending…", "postError": "Couldn't post comment. Please try again.", "deleteError": "Couldn't delete comment. Please try again.", "countSingular": "1 comment", "countPlural": "{count} comments" }, "RelativeTime": { "justNow": "now", "minutes": "{count}m", "hours": "{count}h", "days": "{count}d" }, "Follow": { "follow": "Follow", "following": "Following", "unfollow": "Unfollow", "unfollowTitle": "Unfollow {name}?", "unfollowDesc": "You'll stop seeing {name}'s posts in your feed.", "keepFollowing": "Keep following", "followError": "Something went wrong. Try again.", "nowFollowing": "You're now following {name}", "unfollowed": "Unfollowed {name}" }, "Search": { "title": "Search", "placeholder": "Search pets, people or hashtags…", "tabPets": "Pets", "tabPeople": "People", "tabTags": "Tags", "typeMore": "Type at least 2 characters to search", "typeHashtag": "Type a hashtag to search", "noPets": "No pets found for \"{query}\"", "noPeople": "No people found for \"{query}\"", "noTags": "No posts tagged #{tag}", "followerCount": "{count} followers" }, "Messages": { "pageTitle": "Messages", "noMessages": "No messages yet", "noMessagesHint": "Visit a pet's profile and tap Message to start a conversation.", "you": "You", "startConversation": "Start the conversation", "timeNow": "now", "relativeMinutes": "{count}m", "relativeHours": "{count}h", "relativeDays": "{count}d", "today": "Today", "yesterday": "Yesterday", "empty": "Say hello 👋", "placeholder": "Message…", "charsLeft": "{count} characters left", "sendError": "Failed to send message. Try again." }, "FeedList": { "forYou": "For you", "recent": "Recent", "allCaughtUp": "You're all caught up. Follow more pets to see more posts.", "discoveryBanner": "You're not following anyone yet — here's what other pets like yours are sharing." }, "ProfileTabs": { "posts": "Posts", "milestones": "Milestones", "noPosts": "No posts yet", "noMilestones": "No milestones yet" }, "ExploreCard": { "followerSingular": "1 follower", "followerPlural": "{count} followers", "yourPet": "Your pet" }, "Health": { "pageTitle": "Health — {petName}", "shareCard": "Share Card", "tabWeight": "Weight", "tabVet": "Vet Visits", "tabVaccines": "Vaccines", "cancel": "Cancel", "save": "Save", "weight": { "add": "Add Weight", "noEntries": "No weight entries yet", "singular": "1 entry", "plural": "{count} entries", "labelDate": "Date", "labelWeight": "Weight (kg)", "placeholderWeight": "e.g. 4.2", "labelNotes": "Notes (optional)", "placeholderNotes": "e.g. after morning walk", "toastAdded": "Weight entry added", "toastDeleted": "Entry deleted", "toastError": "Failed to save weight entry", "toastDeleteError": "Failed to delete entry", "toastValidation": "Please fill in date and a valid weight", "chartHistory": "History" }, "vet": { "add": "Add Visit", "noEntries": "No vet visits yet", "singular": "1 visit", "plural": "{count} visits", "labelDate": "Date", "labelVet": "Vet / Clinic (optional)", "placeholderVet": "e.g. Dr. Müller", "labelReason": "Reason *", "placeholderReason": "e.g. Annual checkup", "labelNotes": "Notes (optional)", "placeholderNotes": "Diagnosis, treatment, medications…", "toastAdded": "Vet visit added", "toastDeleted": "Entry deleted", "toastError": "Failed to save vet visit", "toastDeleteError": "Failed to delete entry", "toastValidation": "Please fill in date and reason" }, "vaccines": { "add": "Add Vaccine", "noEntries": "No vaccines recorded yet", "singular": "1 vaccine", "plural": "{count} vaccines", "labelName": "Vaccine Name *", "placeholderName": "e.g. Rabies, DHPP", "labelDateGiven": "Date Given *", "labelNextDue": "Next Due (optional)", "labelNotes": "Notes (optional)", "placeholderNotes": "Batch number, clinic…", "badgeOverdue": "Overdue", "badgeDue": "Due {date}", "textGiven": "Given {date}", "toastAdded": "Vaccine added", "toastDeleted": "Entry deleted", "toastError": "Failed to save vaccine", "toastDeleteError": "Failed to delete entry", "toastValidation": "Please fill in vaccine name and date given" }, "feeding": { "sectionTitle": "Feeding", "edit": "Edit", "add": "Add Feeding Info", "labelFoodType": "Food type", "labelFeedingTimes": "Feedings per day", "labelDailyAmount": "Daily amount (g)", "labelBrand": "Brand (optional)", "labelSpecialDiet": "Special diet / allergies (optional)", "placeholderFoodType": "e.g. Dry food, Wet food, BARF", "placeholderFeedingTimes": "e.g. 2", "placeholderDailyAmount": "e.g. 200", "placeholderBrand": "e.g. Royal Canin", "placeholderSpecialDiet": "e.g. Grain-free, chicken allergy…", "noInfo": "No feeding info saved yet.", "timesPerDay": "{count}x per day", "gramsPerDay": "{amount} g / day", "toastSaved": "Feeding info saved", "toastDeleted": "Feeding info removed", "toastError": "Could not save feeding info", "toastDeleteError": "Could not remove feeding info" }, "share": { "title": "Share Health Card — {petName}", "description": "Anyone with this link can view {petName}'s health data — weight, vaccines, and vet visits. No login required.", "validityLabel": "Validity period", "expiryDays": "{count} days", "generate": "Generate", "validUntil": "Valid until", "openPdf": "Open as PDF / Print", "regenerateTitle": "Regenerate link", "regenerateDesc": "Creates a new link and invalidates the current one. Useful for revoking access.", "toastGenerateError": "Could not generate link", "toastRegenerateSuccess": "New link created — old link is now invalid", "toastRegenerateError": "Could not regenerate link" } }, "DeleteAccount": { "trigger": "Delete account", "warningTitle": "Delete your account?", "warningIntro": "This action is irreversible. The following will be permanently deleted:", "itemPets": "All pet profiles", "itemPosts": "All posts, comments, and reactions", "itemMedia": "All photos and videos", "itemMessages": "All chats and messages", "itemHealth": "All health records", "itemAccount": "Your PawFeed account", "cancel": "Cancel", "understand": "I understand, continue", "confirmTitle": "Confirmation required", "confirmIntro": "Enter the name of one of your pets to confirm deletion:", "inputPlaceholder": "Enter pet name…", "confirmDelete": "Permanently delete account", "deleting": "Deleting account…", "doneTitle": "Account successfully deleted.", "doneRedirect": "You're being redirected…", "unknownError": "Unknown error", "genericError": "Something went wrong" }, "NotificationsPage": { "title": "Notifications", "emptyTitle": "No notifications yet", "emptyDesc": "When pets follow you or react to your posts, you'll see it here.", "typeFollow": "started following you", "typeReaction": "reacted to your post", "commentedPrefix": "commented:", "typeCommentNoBody": "commented on your post", "typeMessage": "sent you a message", "typeMention": "mentioned you in a comment", "typePawBack": "shared your post (Paw-Back)", "typeBirthday": "🎂 Happy Birthday! Create an anniversary post.", "typeAdoptionDay": "🏠 Today is adoption day! Celebrate the anniversary." }, "PhotoPostForm": { "captionPlaceholder": "Write a caption…", "captionError": "Caption must be 500 characters or fewer.", "charactersRemaining": "{count} characters remaining", "shareCta": "Share Post", "sharing": "Sharing…", "successToast": "Post shared", "errorToast": "Couldn't share your post. Please try again.", "noPetSelected": "No active pet selected.", "noPhoto": "Please add at least one photo." }, "StoryForm": { "addPhoto": "Add a photo", "disappearsNote": "Stories disappear after 24 hours", "changePhoto": "Change photo", "postCta": "Post Story", "posting": "Posting…", "successToast": "Story posted", "errorToast": "Couldn't post your story. Please try again.", "noPetSelected": "No active pet selected.", "fileTooLarge": "Photo must be under 10 MB.", "invalidType": "Upload a JPG, PNG, or WebP image.", "uploadFailed": "Upload failed — please try again." }, "MilestoneForm": { "questionLabel": "What's the milestone?", "selectPlaceholder": "Select a milestone…", "litterDetailsLabel": "Litter details", "optional": "(optional)", "litterPlaceholder": "e.g. 5 healthy kittens, born 13 June…", "charactersRemaining": "{count} characters remaining", "photoLabel": "Photo", "addPhoto": "Add a photo", "change": "Change", "noteLabel": "Add a note", "notePlaceholder": "Add a note… (optional)", "shareCta": "Share Milestone", "sharing": "Sharing…", "successToast": "Milestone shared", "errorToast": "Couldn't share this milestone. Please try again.", "fileTooLarge": "Photo must be under 10 MB.", "invalidType": "Upload a JPG, PNG, or WebP image.", "uploadFailed": "Upload failed — please try again." }, "VideoUploadForm": { "selectVideo": "Select a video", "formatHint": "MP4, MOV or WebM · up to 500 MB · max 3 minutes", "selectVideoAria": "Select video", "changeVideo": "Choose a different video", "captionLabel": "Caption", "captionPlaceholder": "Write a caption…", "charactersLeft": "{count} left", "uploading": "Uploading…", "processingDone": "Uploaded — video is being processed", "uploadFailedGeneric": "Upload failed — please try again", "cancel": "Cancel", "postVideo": "Post video", "invalidType": "Upload an MP4, MOV, or WebM video.", "fileTooLarge": "Video must be under 500 MB.", "uploadSuccessToast": "Video uploaded — processing in the background", "uploadFailedToast": "Upload failed: {msg}" }, "StoryViewer": { "closeStory": "Close story", "storyAriaLabel": "{petName}'s story", "sheetTitleZero": "No views yet", "sheetTitleSingular": "Seen by 1 pet", "sheetTitlePlural": "Seen by {count} pets", "noViewersYet": "No one has viewed this story yet." }, "StoryTray": { "storiesAriaLabel": "Stories", "addStory": "Add story", "newStoryTitle": "New Story" }, "RepostCard": { "pawedBackBy": "Pawed-back by" }, "OnboardingGuidelines": { "title": "Before you get started", "subtitle": "A quick overview of our community guidelines.", "linksIntro": "Full details in our", "termsLink": "Terms of Service", "privacyLink": "Privacy Policy (incl. cookies)", "continueCta": "I understand, continue" }, "UploadConsent": { "title": "Two quick confirmations", "subtitle": "Before you create your first pet, we need your explicit consent to the following.", "contentRightsLabel": "I confirm that I own all rights to the photos and videos I upload, and that they do not infringe any third party's copyright.", "dataProcessingLabel": "I consent to my data being transferred to Clerk (authentication), Cloudflare (media storage), Mux (video processing), and Supabase (database) to provide the service.", "linksIntro": "Details on the service providers we use are in our", "privacyLink": "Privacy Policy", "continueCta": "Confirm and continue" }, "PetsPage": { "title": "My Pets", "addPet": "Add Pet", "emptyTitle": "Add your first pet", "emptyDesc": "Give your pet their own profile on PawFeed." }, "PetProfile": { "editProfile": "Edit profile", "health": "Health", "managedBy": "Managed by @{username}", "statsPosts": "posts", "statsFollowers": "followers", "statsFollowing": "following", "adoptionStory": "Adoption story" }, "FollowersPage": { "title": "{count} Followers", "empty": "{petName} doesn't have any followers yet." }, "FollowingPage": { "title": "Following {count}", "empty": "{petName} isn't following anyone yet." }, "ProfileActions": { "message": "Message", "cannotStartConversation": "Cannot start conversation.", "moreOptions": "More options", "reportProfile": "Report profile", "blockPet": "Block {petName}" }, "ReportSheet": { "title": "Report", "reasonQuestion": "Why are you reporting this?", "reasonSpam": "Spam", "reasonHarassment": "Harassment or bullying", "reasonInappropriate": "Inappropriate content", "reasonMisinformation": "False or misleading information", "reasonOther": "Something else", "notesPlaceholder": "Add details (optional)", "charactersRemaining": "{count} characters remaining", "submit": "Submit Report", "cancel": "Don't report", "successToast": "Report submitted. We'll review it shortly.", "errorToast": "Couldn't submit your report. Please try again." }, "BlockDialog": { "title": "Block {petName}?", "description": "{petName}'s posts and profile will be hidden from you. They won't know you blocked them.", "cancel": "Don't block", "confirm": "Block", "successToast": "You've blocked {petName}", "errorToast": "Couldn't block this pet. Please try again." }, "Landing": { "tagline": "Where pets are the stars. Profiles, posts, and stories — built for dogs, cats, and birds.", "getStarted": "Get started", "logIn": "Log in", "previewAlt": "The PawFeed feed, showing pet posts from Noctis and Bubi", "featuresHeading": "Built for the pet, not the person", "feature1Title": "Pets, not humans, are the profile", "feature1Body": "Every dog, cat, or bird gets its own identity — its own posts, followers, and story, separate from its owner's.", "feature2Title": "Posts, stories & short video", "feature2Body": "Photos, short-form video, and 24-hour stories — all built around what your pet is up to.", "feature3Title": "Health tracking", "feature3Body": "Weight logs, vet visits, and vaccine records in one place — shareable with a vet via a private link.", "feature4Title": "Pet-to-pet messaging", "feature4Body": "Direct messages happen between pets, not owners — matching how the whole platform is built.", "footerImpressum": "Imprint", "footerDatenschutz": "Privacy Policy", "footerAgb": "Terms" } }