export default { // Home page, basic
Pinafore is a web client for Mastodon, designed for speed and simplicity.
Read the introductory blog post, or get started by logging in to an instance:
`, logIn: 'Log in', footer: `Pinafore is open-source software created by Nolan Lawson and distributed under the AGPL License. Here is the privacy policy.
`, // Manifest longAppName: 'Pinafore for Mastodon', newStatus: 'New toot', // Generic UI loading: 'Loading', okay: 'OK', cancel: 'Cancel', alert: 'Alert', close: 'Close', error: 'Error: {error}', errorShort: 'Error:', // Relative timestamps justNow: 'just now', // Navigation, page titles navItemLabel: ` {label} {selected, select, true {(current page)} other {} } {name, select, notifications {{count, plural, =0 {} one {(1 notification)} other {({count} notifications)} }} community {{count, plural, =0 {} one {(1 follow request)} other {({count} follow requests)} }} other {} } `, blockedUsers: 'Blocked users', bookmarks: 'Bookmarks', directMessages: 'Direct messages', favorites: 'Favorites', federated: 'Federated', home: 'Home', local: 'Local', notifications: 'Notifications', mutedUsers: 'Muted users', pinnedStatuses: 'Pinned toots', followRequests: 'Follow requests', followRequestsLabel: `Follow requests {hasFollowRequests, select, true {({count})} other {} }`, list: 'List', search: 'Search', pageHeader: 'Page header', goBack: 'Go back', back: 'Back', profile: 'Profile', federatedTimeline: 'Federated timeline', localTimeline: 'Local timeline', // community page community: 'Community', pinnableTimelines: 'Pinnable timelines', timelines: 'Timelines', lists: 'Lists', instanceSettings: 'Instance settings', notificationMentions: 'Notification mentions', profileWithMedia: 'Profile with media', profileWithReplies: 'Profile with replies', hashtag: 'Hashtag', // not logged in profileNotLoggedIn: 'A user timeline will appear here when logged in.', bookmarksNotLoggedIn: 'Your bookmarks will appear here when logged in.', directMessagesNotLoggedIn: 'Your direct messages will appear here when logged in.', favoritesNotLoggedIn: 'Your favorites will appear here when logged in.', federatedTimelineNotLoggedIn: 'Your federated timeline will appear here when logged in.', localTimelineNotLoggedIn: 'Your local timeline will appear here when logged in.', searchNotLoggedIn: 'You can search once logged in to an instance.', communityNotLoggedIn: 'Community options appear here when logged in.', listNotLoggedIn: 'A list will appear here when logged in.', notificationsNotLoggedIn: 'Your notifications will appear here when logged in.', notificationMentionsNotLoggedIn: 'Your notification mentions will appear here when logged in.', statusNotLoggedIn: 'A toot thread will appear here when logged in.', tagNotLoggedIn: 'A hashtag timeline will appear here when logged in.', // Notification subpages filters: 'Filters', all: 'All', mentions: 'Mentions', // Follow requests approve: 'Approve', reject: 'Reject', // Hotkeys hotkeys: 'Hotkeys', global: 'Global', timeline: 'Timeline', media: 'Media', globalHotkeys: ` {leftRightChangesFocus, select, true {Pinafore is free and open-source software created by Nolan Lawson and distributed under the GNU Affero General Public License.
Pinafore does not store any personal information on its servers, including but not limited to names, email addresses, IP addresses, posts, and photos.
Pinafore is a static site. All data is stored locally in your browser and shared with the fediverse instance(s) you connect to.
Icons provided by Font Awesome.
Logo thanks to "sailboat" by Gregor Cresnar from the Noun Project.
`, // Settings settings: 'Settings', general: 'General', generalSettings: 'General settings', showSensitive: 'Show sensitive media by default', showPlain: 'Show a plain gray color for sensitive media', allSensitive: 'Treat all media as sensitive', largeMedia: 'Show large inline images and videos', autoplayGifs: 'Autoplay animated GIFs', hideCards: 'Hide link preview cards', underlineLinks: 'Underline links in toots and profiles', accessibility: 'Accessibility', reduceMotion: 'Reduce motion in UI animations', disableTappable: 'Disable tappable area on entire toot', removeEmoji: 'Remove emoji from user display names', shortAria: 'Use short article ARIA labels', theme: 'Theme', themeForInstance: 'Theme for {instance}', disableCustomScrollbars: 'Disable custom scrollbars', centerNav: 'Center the navigation header', preferences: 'Preferences', hotkeySettings: 'Hotkey settings', disableHotkeys: 'Disable all hotkeys', leftRightArrows: 'Left/right arrow keys change focus rather than columns/media', guide: 'Guide', reload: 'Reload', // Wellness settings wellness: 'Wellness', wellnessSettings: 'Wellness settings', wellnessDescription: `Wellness settings are designed to reduce the addictive or anxiety-inducing aspects of social media. Choose any options that work well for you.`, enableAll: 'Enable all', metrics: 'Metrics', hideFollowerCount: 'Hide follower counts (capped at 10)', hideReblogCount: 'Hide boost counts', hideFavoriteCount: 'Hide favorite counts', hideUnread: 'Hide unread notifications count (i.e. the red dot)', // The quality that makes something seem important or interesting because it seems to be happening now immediacy: 'Immediacy', showAbsoluteTimestamps: 'Show absolute timestamps (e.g. "March 3rd") instead of relative timestamps (e.g. "5 minutes ago")', ui: 'UI', grayscaleMode: 'Grayscale mode', wellnessFooter: `These settings are partly based on guidelines from the Center for Humane Technology.`, // This is a link: "You can filter or disable notifications in the _instance settings_" filterNotificationsPre: 'You can filter or disable notifications in the', filterNotificationsText: 'instance settings', filterNotificationsPost: '', // Custom tooltips, like "Disable _infinite scroll_", where you can click _infinite scroll_ // to see a description. It's hard to properly internationalize, so we just break up the strings. disableInfiniteScrollPre: 'Disable', disableInfiniteScrollText: 'infinite scroll', disableInfiniteScrollDescription: `When infinite scroll is disabled, new toots will not automatically appear at the bottom or top of the timeline. Instead, buttons will allow you to load more content on demand.`, disableInfiniteScrollPost: '', // Instance settings loggedInAs: 'Logged in as', homeTimelineFilters: 'Home timeline filters', notificationFilters: 'Notification filters', pushNotifications: 'Push notifications', // Add instance page storageError: `It seems Pinafore cannot store data locally. Is your browser in private mode or blocking cookies? Pinafore stores all data locally, and requires LocalStorage and IndexedDB to work correctly.`, javaScriptError: 'You must enable JavaScript to log in.', enterInstanceName: 'Enter instance name', instanceColon: 'Instance:', // Custom tooltip, concatenated together getAnInstancePre: "Don't have an", getAnInstanceText: 'instance', getAnInstanceDescription: 'An instance is your Mastodon home server, such as mastodon.social or cybre.space.', getAnInstancePost: '?', joinMastodon: 'Join Mastodon!', instancesYouveLoggedInTo: "Instances you've logged in to:", addAnotherInstance: 'Add another instance', youreNotLoggedIn: "You're not logged in to any instances.", currentInstanceLabel: `{instance} {current, select, true {(current instance)} other {} }`, // Link text logInToAnInstancePre: '', logInToAnInstanceText: 'Log in to an instance', logInToAnInstancePost: 'to start using Pinafore.', // Another custom tooltip showRingPre: 'Always show', showRingText: 'focus ring', showRingDescription: `The focus ring is the outline showing the currently focused element. By default, it's only shown when using the keyboard (not mouse or touch), but you may choose to always show it.`, showRingPost: '', instances: 'Instances', addInstance: 'Add instance', homeTimelineFilterSettings: 'Home timeline filter settings', showReblogs: 'Show boosts', showReplies: 'Show replies', switchOrLogOut: 'Switch to or log out of this instance', switchTo: 'Switch to this instance', switchToInstance: 'Switch to instance', switchToNameOfInstance: 'Switch to {instance}', logOut: 'Log out', logOutOfInstanceConfirm: 'Log out of {instance}?', notificationFilterSettings: 'Notification filter settings', // Push notifications browserDoesNotSupportPush: "Your browser doesn't support push notifications.", deniedPush: 'You have denied permission to show notifications.', pushNotificationsNote: 'Note that you can only have push notifications for one instance at a time.', pushSettings: 'Push notification settings', newFollowers: 'New followers', reblogs: 'Boosts', pollResults: 'Poll results', subscriptions: 'Subscribed toots', needToReauthenticate: 'You need to reauthenticate in order to enable push notification. Log out of {instance}?', failedToUpdatePush: 'Failed to update push notification settings: {error}', // Themes chooseTheme: 'Choose a theme', darkBackground: 'Dark background', lightBackground: 'Light background', themeLabel: `{label} {default, select, true {(default)} other {} }`, animatedImage: 'Animated image: {description}', showImage: `Show {animated, select, true {animated} other {} } image: {description}`, playVideoOrAudio: `Play {audio, select, true {audio} other {video} }: {description}`, accountFollowedYou: '{name} followed you, {account}', reblogCountsHidden: 'Boost counts hidden', favoriteCountsHidden: 'Favorite counts hidden', rebloggedTimes: `Boosted {count, plural, one {1 time} other {{count} times} }`, favoritedTimes: `Favorited {count, plural, one {1 time} other {{count} times} }`, pinnedStatus: 'Pinned toot', rebloggedYou: 'boosted your toot', favoritedYou: 'favorited your toot', followedYou: 'followed you', posted: 'posted', pollYouCreatedEnded: 'A poll you created has ended', pollYouVotedEnded: 'A poll you voted on has ended', reblogged: 'boosted', favorited: 'favorited', unreblogged: 'unboosted', unfavorited: 'unfavorited', showSensitiveMedia: 'Show sensitive media', hideSensitiveMedia: 'Hide sensitive media', clickToShowSensitive: 'Sensitive content. Click to show.', longPost: 'Long post', // Accessible status labels accountRebloggedYou: '{account} boosted your toot', accountFavoritedYou: '{account} favorited your toot', rebloggedByAccount: 'Boosted by {account}', contentWarningContent: 'Content warning: {spoiler}', hasMedia: 'has media', hasPoll: 'has poll', shortStatusLabel: '{privacy} toot by {account}', // Privacy types public: 'Public', unlisted: 'Unlisted', followersOnly: 'Followers-only', direct: 'Direct', // Themes themeRoyal: 'Royal', themeScarlet: 'Scarlet', themeSeafoam: 'Seafoam', themeHotpants: 'Hotpants', themeOaken: 'Oaken', themeMajesty: 'Majesty', themeGecko: 'Gecko', themeGrayscale: 'Grayscale', themeOzark: 'Ozark', themeCobalt: 'Cobalt', themeSorcery: 'Sorcery', themePunk: 'Punk', themeRiot: 'Riot', themeHacker: 'Hacker', themeMastodon: 'Mastodon', themePitchBlack: 'Pitch Black', themeDarkGrayscale: 'Dark Grayscale', // Polls voteOnPoll: 'Vote on poll', pollChoices: 'Poll choices', vote: 'Vote', pollDetails: 'Poll details', refresh: 'Refresh', expires: 'Ends', expired: 'Ended', voteCount: `{count, plural, one {1 vote} other {{count} votes} }`, // Status interactions clickToShowThread: '{time} - click to show thread', showMore: 'Show more', showLess: 'Show less', closeReply: 'Close reply', cannotReblogFollowersOnly: 'Cannot be boosted because this is followers-only', cannotReblogDirectMessage: 'Cannot be boosted because this is a direct message', reblog: 'Boost', reply: 'Reply', replyToThread: 'Reply to thread', favorite: 'Favorite', unfavorite: 'Unfavorite', // timeline loadingMore: 'Loading more…', loadMore: 'Load more', showCountMore: 'Show {count} more', nothingToShow: 'Nothing to show.', // status thread page statusThreadPage: 'Toot thread page', status: 'Toot', // toast messages blockedAccount: 'Blocked account', unblockedAccount: 'Unblocked account', unableToBlock: 'Unable to block account: {error}', unableToUnblock: 'Unable to unblock account: {error}', bookmarkedStatus: 'Bookmarked toot', unbookmarkedStatus: 'Unbookmarked toot', unableToBookmark: 'Unable to bookmark: {error}', unableToUnbookmark: 'Unable to unbookmark: {error}', cannotPostOffline: 'You cannot post while offline', unableToPost: 'Unable to post toot: {error}', statusDeleted: 'Toot deleted', unableToDelete: 'Unable to delete toot: {error}', cannotFavoriteOffline: 'You cannot favorite while offline', cannotUnfavoriteOffline: 'You cannot unfavorite while offline', unableToFavorite: 'Unable to favorite: {error}', unableToUnfavorite: 'Unable to unfavorite: {error}', followedAccount: 'Followed account', unfollowedAccount: 'Unfollowed account', unableToFollow: 'Unable to follow account: {error}', unableToUnfollow: 'Unable to unfollow account: {error}', accessTokenRevoked: 'The access token was revoked, logged out of {instance}', loggedOutOfInstance: 'Logged out of {instance}', failedToUploadMedia: 'Failed to upload media: {error}', mutedAccount: 'Muted account', unmutedAccount: 'Unmuted account', unableToMute: 'Unable to mute account: {error}', unableToUnmute: 'Unable to unmute account: {error}', mutedConversation: 'Muted conversation', unmutedConversation: 'Unmuted conversation', unableToMuteConversation: 'Unable to mute conversation: {error}', unableToUnmuteConversation: 'Unable to unmute conversation: {error}', unpinnedStatus: 'Unpinned toot', unableToPinStatus: 'Unable to pin toot: {error}', unableToUnpinStatus: 'Unable to unpin toot: {error}', unableToRefreshPoll: 'Unable to refresh poll: {error}', unableToVoteInPoll: 'Unable to vote in poll: {error}', cannotReblogOffline: 'You cannot boost while offline.', cannotUnreblogOffline: 'You cannot unboost while offline.', failedToReblog: 'Failed to boost: {error}', failedToUnreblog: 'Failed to unboost: {error}', submittedReport: 'Submitted report', failedToReport: 'Failed to report: {error}', approvedFollowRequest: 'Approved follow request', rejectedFollowRequest: 'Rejected follow request', unableToApproveFollowRequest: 'Unable to approve follow request: {error}', unableToRejectFollowRequest: 'Unable to reject follow request: {error}', searchError: 'Error during search: {error}', hidDomain: 'Hid domain', unhidDomain: 'Unhid domain', unableToHideDomain: 'Unable to hide domain: {error}', unableToUnhideDomain: 'Unable to unhide domain: {error}', showingReblogs: 'Showing boosts', hidingReblogs: 'Hiding boosts', unableToShowReblogs: 'Unable to show boosts: {error}', unableToHideReblogs: 'Unable to hide boosts: {error}', unableToShare: 'Unable to share: {error}', unableToSubscribe: 'Unable to subscribe: {error}', unableToUnsubscribe: 'Unable to unsubscribe: {error}', showingOfflineContent: 'Internet request failed. Showing offline content.', youAreOffline: 'You seem to be offline. You can still read toots while offline.', // Snackbar UI updateAvailable: 'App update available.', // Word/phrase filters wordFilters: 'Word filters', noFilters: 'You don\'t have any word filters.', wordOrPhrase: 'Word or phrase', contexts: 'Contexts', addFilter: 'Add filter', editFilter: 'Edit filter', filterHome: 'Home and lists', filterNotifications: 'Notifications', filterPublic: 'Public timelines', filterThread: 'Conversations', filterAccount: 'Profiles', filterUnknown: 'Unknown', expireAfter: 'Expire after', whereToFilter: 'Where to filter', irreversible: 'Irreversible', wholeWord: 'Whole word', save: 'Save', updatedFilter: 'Updated filter', createdFilter: 'Created filter', failedToModifyFilter: 'Failed to modify filter: {error}', deletedFilter: 'Deleted filter', required: 'Required', // Dialogs profileOptions: 'Profile options', copyLink: 'Copy link', emoji: 'Emoji', editMedia: 'Edit media', shortcutHelp: 'Shortcut help', statusOptions: 'Status options', confirm: 'Confirm', closeDialog: 'Close dialog', postPrivacy: 'Post privacy' }