mirror of
https://github.com/svemagie/indiekit-endpoint-activitypub.git
synced 2026-04-02 15:44:58 +02:00
- Add setGlobalFollow/removeGlobalFollow/getFollowedTagsWithState to followed-tags storage; unfollowTag now preserves global follow state - Add followTagGloballyController/unfollowTagGloballyController that send AP Follow/Undo via Fedify to tags.pub actor URLs - Register POST /admin/reader/follow-tag-global and unfollow-tag-global routes with plugin reference for Fedify access - Tag timeline controller passes isGloballyFollowed + error query param - Tag timeline template adds global follow/unfollow buttons with globe indicator and inline error display - Wire GET /api/v1/followed_tags to return real data with globalFollow state - Add i18n keys: followGlobally, unfollowGlobally, globallyFollowing, globalFollowError
363 lines
15 KiB
JSON
363 lines
15 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.",
|
|
"pendingFollows": "Pending",
|
|
"noPendingFollows": "No pending follow requests.",
|
|
"approve": "Approve",
|
|
"reject": "Reject",
|
|
"followApproved": "Follow request approved.",
|
|
"followRejected": "Follow request rejected.",
|
|
"followRequest": "requested to follow you",
|
|
"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",
|
|
"placeholder": "Write your reply…",
|
|
"syndicateLabel": "Syndicate to",
|
|
"submitMicropub": "Post reply",
|
|
"cancel": "Cancel",
|
|
"errorEmpty": "Reply content cannot be empty",
|
|
"visibilityLabel": "Visibility",
|
|
"visibilityPublic": "Public",
|
|
"visibilityUnlisted": "Unlisted",
|
|
"visibilityFollowers": "Followers only",
|
|
"cwLabel": "Content warning",
|
|
"cwPlaceholder": "Write your warning here…"
|
|
},
|
|
"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",
|
|
"dms": "DMs",
|
|
"reports": "Reports"
|
|
},
|
|
"emptyTab": "No %s notifications yet."
|
|
},
|
|
"messages": {
|
|
"title": "Messages",
|
|
"empty": "No messages yet. Direct messages from other fediverse users will appear here.",
|
|
"allConversations": "All conversations",
|
|
"compose": "New message",
|
|
"send": "Send message",
|
|
"delete": "Delete",
|
|
"markAllRead": "Mark all read",
|
|
"clearAll": "Clear all",
|
|
"clearConfirm": "Delete all messages? This cannot be undone.",
|
|
"recipientLabel": "To",
|
|
"recipientPlaceholder": "@user@instance.social",
|
|
"placeholder": "Write your message...",
|
|
"sentTo": "To",
|
|
"replyingTo": "Replying to",
|
|
"sentYouDM": "sent you a direct message",
|
|
"viewMessage": "View message",
|
|
"errorEmpty": "Message content cannot be empty.",
|
|
"errorNoRecipient": "Please enter a recipient.",
|
|
"errorRecipientNotFound": "Could not find that user. Try a full @user@domain handle."
|
|
},
|
|
"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",
|
|
"hashtagLabel": "Hashtag (optional)",
|
|
"hashtagPlaceholder": "e.g. indieweb",
|
|
"hashtagHint": "Filter results to a specific hashtag",
|
|
"tabs": {
|
|
"label": "Explore tabs",
|
|
"search": "Search",
|
|
"pinAsTab": "Pin as tab",
|
|
"pinned": "Pinned",
|
|
"remove": "Remove tab",
|
|
"moveUp": "Move up",
|
|
"moveDown": "Move down",
|
|
"addHashtag": "Add hashtag tab",
|
|
"hashtagTabPlaceholder": "Enter hashtag",
|
|
"addTab": "Add",
|
|
"retry": "Retry",
|
|
"noInstances": "Pin some instances first to use hashtag tabs.",
|
|
"sources": "Searching #%s across %d instance",
|
|
"sources_plural": "Searching #%s across %d instances",
|
|
"sourcesPartial": "%d of %d instances responded"
|
|
}
|
|
},
|
|
"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",
|
|
"followGlobally": "Follow globally via tags.pub",
|
|
"unfollowGlobally": "Unfollow global",
|
|
"globallyFollowing": "Following globally",
|
|
"globalFollowError": "Failed to follow globally: %s"
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"poll": {
|
|
"voters": "voters",
|
|
"votes": "votes",
|
|
"closed": "Poll closed",
|
|
"endsAt": "Ends"
|
|
},
|
|
"federation": {
|
|
"deleteSuccess": "Delete activity sent to followers",
|
|
"deleteButton": "Delete from fediverse"
|
|
},
|
|
"federationMgmt": {
|
|
"title": "Federation",
|
|
"collections": "Collection health",
|
|
"quickActions": "Quick actions",
|
|
"broadcastActor": "Broadcast actor update",
|
|
"debugDashboard": "Debug dashboard",
|
|
"objectLookup": "Object lookup",
|
|
"lookupPlaceholder": "URL or @user@domain handle…",
|
|
"lookup": "Look up",
|
|
"lookupLoading": "Resolving…",
|
|
"postActions": "Post federation",
|
|
"viewJson": "JSON",
|
|
"rebroadcast": "Re-broadcast Create activity",
|
|
"rebroadcastShort": "Re-send",
|
|
"broadcastDelete": "Broadcast Delete activity",
|
|
"deleteShort": "Delete",
|
|
"noPosts": "No posts found.",
|
|
"apJsonTitle": "ActivityStreams JSON-LD",
|
|
"recentActivity": "Recent activity",
|
|
"viewAllActivities": "View all activities →"
|
|
},
|
|
"reports": {
|
|
"sentReport": "filed a report",
|
|
"title": "Reports"
|
|
}
|
|
}
|
|
}
|