Files
petfeed/messages/en.json
T
admin f899ed5f7c feat(landing): translate landing page copy (Landing i18n namespace)
The landing page was hardcoded English, so switching languages had no
visible effect on it — added a "Landing" namespace to both message
catalogs and wired src/app/page.tsx up via getTranslations, matching
the pattern already used by other server-rendered pages.
2026-08-11 20:09:13 +02:00

523 lines
20 KiB
JSON

{
"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"
}
}