mirror of
https://github.com/svemagie/indiekit-endpoint-activitypub.git
synced 2026-04-02 15:44:58 +02:00
Reader now resolves ActivityPub links internally instead of navigating to external instances. Actor links open the profile view, post links open a new post detail view with thread context (parent chain + replies). External links in post content get rich preview cards (title, description, image, favicon) fetched via unfurl.js at ingest time with fire-and-forget async processing and concurrency limiting. New files: post-detail controller, og-unfurl module, lookup-cache, link preview template/CSS, client-side link interception JS. Includes SSRF protection for OG fetching and GoToSocial URL support.
196 lines
8.8 KiB
JSON
196 lines
8.8 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.",
|
|
"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"
|
|
},
|
|
"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"
|
|
},
|
|
"reader": {
|
|
"title": "Reader",
|
|
"tabs": {
|
|
"all": "All",
|
|
"notes": "Notes",
|
|
"articles": "Articles",
|
|
"replies": "Replies",
|
|
"boosts": "Boosts",
|
|
"media": "Media"
|
|
},
|
|
"pagination": {
|
|
"newer": "← Newer",
|
|
"older": "Older →"
|
|
},
|
|
"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"
|
|
},
|
|
"linkPreview": {
|
|
"label": "Link preview"
|
|
}
|
|
}
|
|
}
|
|
}
|