Files
indiekit-endpoint-activitypub/locales/en.json
Ricardo 5ff3197493 feat: add internal AP link resolution and OpenGraph card unfurling (v1.1.14)
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.
2026-02-21 18:32:12 +01:00

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