Files
indiekit-endpoint-activitypub/locales/en.json
Ricardo 145e329d2f feat: add TweetDeck-style deck layout for explore view
Users can favorite instances (with local or federated scope) as persistent
columns in a multi-column deck view. Each column streams its own public
timeline with independent infinite scroll. Includes two-tab explore UI
(Search + Decks), deck CRUD API with CSRF/SSRF protection, 8-deck limit,
responsive CSS Grid layout, and scope badges.
2026-02-27 11:24:53 +01:00

291 lines
12 KiB
JSON

{
"activitypub": {
"title": "ActivityPub",
"followers": "Followers",
"following": "Following",
"activities": "Activity log",
"featured": "Pinned Posts",
"featuredTags": "Featured Tags",
"recentActivity": "Recent activity",
"noActivity": "No activity yet. Once your actor is federated, interactions will appear here.",
"noFollowers": "No followers yet.",
"noFollowing": "Not following anyone yet.",
"followerCount": "%d follower",
"followerCount_plural": "%d followers",
"followingCount": "%d following",
"followedAt": "Followed",
"source": "Source",
"sourceImport": "Mastodon import",
"sourceManual": "Manual",
"sourceFederation": "Federation",
"sourceRefollowPending": "Re-follow pending",
"sourceRefollowFailed": "Re-follow failed",
"direction": "Direction",
"directionInbound": "Received",
"directionOutbound": "Sent",
"profile": {
"title": "Profile",
"intro": "Edit how your actor appears to other fediverse users. Changes take effect immediately.",
"nameLabel": "Display name",
"nameHint": "Your name as shown on your fediverse profile",
"summaryLabel": "Bio",
"summaryHint": "A short description of yourself. HTML is allowed.",
"urlLabel": "Website URL",
"urlHint": "Your website address, shown as a link on your profile",
"iconLabel": "Avatar URL",
"iconHint": "URL to your profile picture (square, at least 400x400px recommended)",
"imageLabel": "Header image URL",
"imageHint": "URL to a banner image shown at the top of your profile",
"manualApprovalLabel": "Manually approve followers",
"manualApprovalHint": "When enabled, follow requests require your approval before they take effect",
"actorTypeLabel": "Actor type",
"actorTypeHint": "How your account appears in the fediverse. Person for individuals, Service for bots or automated accounts, Organization for groups or companies.",
"linksLabel": "Profile links",
"linksHint": "Links shown on your fediverse profile. Add your website, social accounts, or other URLs. Pages that link back with rel=\"me\" will show as verified on Mastodon.",
"linkNameLabel": "Label",
"linkValueLabel": "URL",
"addLink": "Add link",
"removeLink": "Remove",
"authorizedFetchLabel": "Require authorized fetch (secure mode)",
"authorizedFetchHint": "When enabled, only servers with valid HTTP Signatures can fetch your actor and collections. This improves privacy but may reduce compatibility with some clients.",
"save": "Save profile",
"saved": "Profile saved. Changes are now visible to the fediverse.",
"public": {
"followPrompt": "Follow me on the fediverse",
"copyHandle": "Copy handle",
"copied": "Copied!",
"pinnedPosts": "Pinned posts",
"recentPosts": "Recent posts",
"joinedDate": "Joined",
"posts": "Posts",
"followers": "Followers",
"following": "Following",
"viewOnSite": "View on site"
},
"remote": {
"follow": "Follow",
"unfollow": "Unfollow",
"viewOn": "View on",
"postsTitle": "Posts",
"noPosts": "No posts from this account yet.",
"followToSee": "Follow this account to see their posts in your timeline.",
"notFound": "Could not find this account. It may have been deleted or the server may be unavailable."
}
},
"migrate": {
"title": "Mastodon migration",
"intro": "This guide walks you through moving your Mastodon identity to your IndieWeb site. Complete each step in order — your existing followers will be notified and can re-follow you automatically.",
"step1Title": "Step 1 — Link your old account",
"step1Desc": "Tell the fediverse that your old Mastodon account and this site belong to the same person. This sets the <code>alsoKnownAs</code> property on your ActivityPub actor, which Mastodon checks before allowing a Move.",
"aliasLabel": "Old Mastodon account URL",
"aliasHint": "The full URL of your Mastodon profile, e.g. https://mstdn.social/users/rmdes",
"aliasSave": "Save alias",
"aliasCurrent": "Current alias",
"aliasNone": "No alias configured yet.",
"step2Title": "Step 2 — Import your social graph",
"step2Desc": "Upload the CSV files from your Mastodon data export to bring over your connections. Go to your Mastodon instance → Preferences → Import and export → Data export to download them.",
"importLegend": "What to import",
"fileLabel": "CSV file",
"fileHint": "Select a CSV file from your Mastodon data export (e.g. following_accounts.csv or followers.csv)",
"importButton": "Import",
"importFollowing": "Following list",
"importFollowingHint": "Accounts you follow — they will appear in your Following list immediately",
"importFollowers": "Followers list",
"importFollowersHint": "Your current followers — they will be recorded as pending until they re-follow you after the Move in step 3",
"step3Title": "Step 3 — Move your account",
"step3Desc": "Once you have saved your alias and imported your data, go to your Mastodon instance → Preferences → Account → <strong>Move to a different account</strong>. Enter your new fediverse handle and confirm. Mastodon will notify all your followers, and those whose servers support it will automatically re-follow you here. This step is irreversible — your old account will become a redirect.",
"errorNoFile": "Please select a CSV file before importing.",
"success": "Imported %d following, %d followers (%d failed).",
"failedList": "Could not resolve: %s",
"failedListSummary": "Failed handles",
"aliasSuccess": "Alias saved — your actor document now includes this account as alsoKnownAs."
},
"refollow": {
"title": "Batch re-follow",
"progress": "Re-follow progress",
"remaining": "Remaining",
"awaitingAccept": "Awaiting accept",
"accepted": "Accepted",
"failed": "Failed",
"pause": "Pause",
"resume": "Resume",
"status": {
"idle": "Idle",
"running": "Running",
"paused": "Paused",
"completed": "Completed"
}
},
"moderation": {
"title": "Moderation",
"blockedTitle": "Blocked accounts",
"mutedActorsTitle": "Muted accounts",
"mutedKeywordsTitle": "Muted keywords",
"noBlocked": "No blocked accounts.",
"noMutedActors": "No muted accounts.",
"noMutedKeywords": "No muted keywords.",
"unblock": "Unblock",
"unmute": "Unmute",
"addKeywordTitle": "Add muted keyword",
"keywordPlaceholder": "Enter keyword or phrase…",
"addKeyword": "Add",
"muteActor": "Mute",
"blockActor": "Block",
"filterModeTitle": "Filter mode",
"filterModeHint": "Choose how muted content is handled in your timeline. Blocked accounts are always hidden.",
"filterModeHide": "Hide — remove from timeline",
"filterModeWarn": "Warn — show behind content warning",
"cwMutedAccount": "Muted account",
"cwMutedKeyword": "Muted keyword:",
"cwFiltered": "Filtered content"
},
"compose": {
"title": "Compose reply",
"modeLabel": "Reply mode",
"modeMicropub": "Post as blog reply",
"modeMicropubHint": "Creates a permanent post on your blog, syndicated to the fediverse",
"modeQuick": "Quick reply",
"modeQuickHint": "Sends a reply directly to the fediverse (no blog post created)",
"placeholder": "Write your reply…",
"syndicateLabel": "Syndicate to",
"submitMicropub": "Post reply",
"submitQuick": "Send reply",
"cancel": "Cancel",
"errorEmpty": "Reply content cannot be empty"
},
"notifications": {
"title": "Notifications",
"empty": "No notifications yet. Interactions from other fediverse users will appear here.",
"liked": "liked your post",
"boostedPost": "boosted your post",
"followedYou": "followed you",
"repliedTo": "replied to your post",
"mentionedYou": "mentioned you",
"markAllRead": "Mark all read",
"clearAll": "Clear all",
"clearConfirm": "Delete all notifications? This cannot be undone.",
"dismiss": "Dismiss",
"viewThread": "View thread",
"tabs": {
"all": "All",
"replies": "Replies",
"likes": "Likes",
"boosts": "Boosts",
"follows": "Follows"
},
"emptyTab": "No %s notifications yet."
},
"reader": {
"title": "Reader",
"tabs": {
"all": "All",
"notes": "Notes",
"articles": "Articles",
"replies": "Replies",
"boosts": "Boosts",
"media": "Media"
},
"empty": "Your timeline is empty. Follow some accounts to see their posts here.",
"boosted": "boosted",
"replyingTo": "Replying to",
"showContent": "Show content",
"hideContent": "Hide content",
"sensitiveContent": "Sensitive content",
"videoNotSupported": "Your browser does not support the video element.",
"audioNotSupported": "Your browser does not support the audio element.",
"actions": {
"reply": "Reply",
"boost": "Boost",
"unboost": "Undo boost",
"like": "Like",
"unlike": "Unlike",
"viewOriginal": "View original",
"liked": "Liked",
"boosted": "Boosted",
"likeError": "Could not like this post",
"boostError": "Could not boost this post"
},
"post": {
"title": "Post Detail",
"notFound": "Post not found or no longer available.",
"openExternal": "Open on original instance",
"parentPosts": "Thread",
"replies": "Replies",
"back": "Back to timeline",
"loadingThread": "Loading thread...",
"threadError": "Could not load full thread"
},
"resolve": {
"placeholder": "Paste a fediverse URL or @user@domain handle…",
"label": "Look up a fediverse post or account",
"button": "Look up",
"notFoundTitle": "Not found",
"notFound": "Could not find this post or account. The URL may be invalid, the server may be unavailable, or the content may have been deleted.",
"followersLabel": "followers"
},
"linkPreview": {
"label": "Link preview"
},
"explore": {
"title": "Explore",
"description": "Browse public timelines from remote Mastodon-compatible instances.",
"instancePlaceholder": "Enter an instance hostname, e.g. mastodon.social",
"browse": "Browse",
"local": "Local",
"federated": "Federated",
"loadError": "Could not load timeline from this instance. It may be unavailable or not support the Mastodon API.",
"timeout": "Request timed out. The instance may be slow or unavailable.",
"noResults": "No posts found on this instance's public timeline.",
"invalidInstance": "Invalid instance hostname. Please enter a valid domain name.",
"mauLabel": "MAU",
"timelineSupported": "Public timeline available",
"timelineUnsupported": "Public timeline not available",
"tabs": {
"search": "Search",
"decks": "Decks"
},
"deck": {
"addToDeck": "Add to deck",
"removeFromDeck": "Remove from deck",
"inDeck": "In deck",
"deckLimitReached": "Maximum of 8 decks reached",
"localBadge": "Local",
"federatedBadge": "Federated",
"removeColumn": "Remove column",
"retry": "Retry",
"loadError": "Could not load timeline from this instance.",
"emptyState": "No decks yet. Browse an instance in the Search tab and click the star to add it.",
"emptyStateLink": "Go to Search"
}
},
"tagTimeline": {
"postsTagged": "%d posts",
"postsTagged_plural": "%d posts",
"noPosts": "No posts found with #%s in your timeline.",
"followTag": "Follow hashtag",
"unfollowTag": "Unfollow hashtag",
"following": "Following"
},
"pagination": {
"newer": "← Newer",
"older": "Older →",
"loadMore": "Load more",
"loading": "Loading…",
"noMore": "You're all caught up."
}
},
"myProfile": {
"title": "My Profile",
"posts": "posts",
"editProfile": "Edit profile",
"empty": "Nothing here yet.",
"tabs": {
"posts": "Posts",
"replies": "Replies",
"likes": "Likes",
"boosts": "Boosts"
}
}
}
}