diff --git a/.gitignore b/.gitignore index 51e47bb52..4047ad2dc 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ yarn-debug.log # Ignore Docker option files docker-compose.override.yml +public.tar.gz diff --git a/.node-version b/.node-version new file mode 100644 index 000000000..348076b95 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +10.15.3 diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index 019caf9c1..f35c7fad6 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -36,6 +36,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController resource.agreement = true resource.current_sign_in_ip = request.remote_ip + resource.current_sign_in_ip = request.remote_ip if resource.current_sign_in_ip.nil? resource.build_account if resource.account.nil? end diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index edf29947b..229a6af2c 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -57,6 +57,7 @@ class Settings::PreferencesController < Settings::BaseController :setting_use_blurhash, :setting_use_pending_items, :setting_trends, + :setting_strip_formatting, notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account trending_tag), interactions: %i(must_be_follower must_be_following must_be_following_dm) ) diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index aa0a4d467..bfb167a94 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -2,6 +2,9 @@ module SettingsHelper HUMAN_LOCALES = { + squeak: 'Squeak', + dog: 'Dog', + lion: 'Lion', ar: 'العربية', ast: 'Asturianu', bg: 'Български', diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb index 8380b3c42..bf7798218 100644 --- a/app/helpers/statuses_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -162,6 +162,17 @@ module StatusesHelper end end + def text_formatting_classes + case current_user&.setting_strip_formatting + when 'none', nil + 'rich-text rich-blocks' + when 'blocks' + 'rich-text' + when 'all' + nil + end + end + def style_classes(status, is_predecessor, is_successor, include_threads) classes = ['entry'] classes << 'entry-predecessor' if is_predecessor diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index 4ce9ec49f..521bb202a 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -8,6 +8,7 @@ import classnames from 'classnames'; import PollContainer from 'mastodon/containers/poll_container'; import Icon from 'mastodon/components/icon'; import { autoPlayGif } from 'mastodon/initial_state'; +import { stripFormatting } from 'mastodon/initial_state'; const MAX_HEIGHT = 642; // 20px * 32 (+ 2px padding at the top) @@ -186,6 +187,8 @@ export default class StatusContent extends React.PureComponent { 'status__content--with-action': this.props.onClick && this.context.router, 'status__content--with-spoiler': status.get('spoiler_text').length > 0, 'status__content--collapsed': this.state.collapsed === true, + 'rich-text': stripFormatting !== 'all', + 'rich-blocks': stripFormatting === 'none', }); if (isRtl(status.get('search_index'))) { diff --git a/app/javascript/mastodon/features/compose/components/search_results.js b/app/javascript/mastodon/features/compose/components/search_results.js index 4b4cdff74..c85031519 100644 --- a/app/javascript/mastodon/features/compose/components/search_results.js +++ b/app/javascript/mastodon/features/compose/components/search_results.js @@ -97,6 +97,16 @@ class SearchResults extends ImmutablePureComponent {
+
+ +
+
+ ); + } else if(results.get('statuses') && results.get('statuses').size === 0 && !searchEnabled && !(searchTerm.startsWith('@') || searchTerm.startsWith('#') || searchTerm.includes(' '))) { + statuses = ( +
+
+
diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 56fb58546..1eac1902c 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -24,5 +24,6 @@ export const useBlurhash = getMeta('use_blurhash'); export const usePendingItems = getMeta('use_pending_items'); export const showTrends = getMeta('trends'); export const title = getMeta('title'); +export const stripFormatting = getMeta('strip_formatting'); export default initialState; diff --git a/app/javascript/mastodon/locales/dog.json b/app/javascript/mastodon/locales/dog.json new file mode 100644 index 000000000..14d5d7d40 --- /dev/null +++ b/app/javascript/mastodon/locales/dog.json @@ -0,0 +1,425 @@ +{ + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.block": "Block @{name}", + "account.block_domain": "Hide everything from {domain}", + "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel pack request", + "account.direct": "Direct message @{name}", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "Edit profile", + "account.endorse": "Feature on profile", + "account.follow": "Join Pack", + "account.followers": "Pack Members", + "account.followers.empty": "No one has joined this dog's pack yet.", + "account.follows": "Joined Packs", + "account.follows.empty": "This dog hasn't joined any packs yet.", + "account.follows_you": "In your pack", + "account.hide_reblogs": "Hide awoos from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can join their pack.", + "account.media": "Media", + "account.mention": "Bark at @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots with barks", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval. Click to cancel pack request", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show awoos from @{name}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unhide {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Leave Pack", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked dogs", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse dogs", + "column.domain_blocks": "Hidden domains", + "column.favourites": "Boops", + "column.follow_requests": "Pack requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted dogs", + "column.notifications": "Notifications", + "column.pins": "Pinned toots", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media Only", + "compose_form.direct_message_warning": "This toot will only be sent to the mentioned dogs.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can join your pack to view your pack-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "Bark???", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this toot?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide toots from them and toots mentioning them, but it will still allow them to see your toots and join your pack.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this toot and re-draft it? Boops and awoos will be lost, and barks at the original post will be orphaned.", + "confirmations.reply.confirm": "Bark", + "confirmations.reply.message": "Barking now will overwrite the toot you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Leave Pack", + "confirmations.unfollow.message": "Are you sure you want to leave {name}'s pack?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this toot on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "Dogs", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any dogs yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any booped toots yet. When you boop one, it will show up here.", + "empty_column.favourites": "No one has booped this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any pack requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other dogs.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any dogs yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually join dogs' packs from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite dogs", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags for this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show awoos", + "home.column_settings.show_replies": "Show barks", + "home.column_settings.update_live": "Update in real-time", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public toots from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Toots from packs you join will appear in your home feed. You can join anyone's pack on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public toots from dogs on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish tutorial!", + "introduction.interactions.favourite.headline": "Boop", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Awoo", + "introduction.interactions.reblog.text": "You can share other dogs' toots with your pack members by awooing them.", + "introduction.interactions.reply.headline": "Bark", + "introduction.interactions.reply.text": "You can bark at other dogs' and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked dogs list", + "keyboard_shortcuts.boost": "to awoo", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to boop", + "keyboard_shortcuts.favourites": "to open boops list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted dogs list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to bark", + "keyboard_shortcuts.requests": "to open pack requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among dogs whose packs you've joined", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this dog?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked dogs", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Boops", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Pack requests", + "navigation_bar.follows_and_followers": "Packs and Pack Members", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted dogs", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.and_n_others": "and {count, plural, one {# other} other {# others}}", + "notification.favourite": "{name} booped your toot", + "notification.follow": "{name} joined your pack", + "notification.mention": "{name} barked at you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} awooed your toot", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Boops:", + "notifications.column_settings.follow": "New pack members:", + "notifications.column_settings.mention": "Barks:", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New pack members:", + "notifications.column_settings.mention": "Barks:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Awoos:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Awoos", + "notifications.filter.favourites": "Boops", + "notifications.filter.follows": "Joined Packs", + "notifications.filter.mentions": "Barks", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# dog} other {# dogs}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned dogs only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Toot to pack members only", + "privacy.private.short": "Pack Members-only", + "privacy.public.long": "Toot to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not toot to public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Reporting {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, booped, awooed, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "dog", + "search_results.accounts": "Dogs", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unawoo", + "status.cannot_reblog": "This toot cannot be awooed", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Boop", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Bark at @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this toot", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Awoo", + "status.reblog_private": "Awoo to original audience", + "status.reblogged_by": "{name} awooed", + "status.reblogs.empty": "No one has awooed this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Bark", + "status.replyAll": "Bark in thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading...", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/lion.json b/app/javascript/mastodon/locales/lion.json new file mode 100644 index 000000000..31763f4fa --- /dev/null +++ b/app/javascript/mastodon/locales/lion.json @@ -0,0 +1,425 @@ +{ + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.block": "Block @{name}", + "account.block_domain": "Hide everything from {domain}", + "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel pride request", + "account.direct": "Direct message @{name}", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "Edit profile", + "account.endorse": "Feature on profile", + "account.follow": "Join pride", + "account.followers": "Pride Members", + "account.followers.empty": "No one has joined this lion's pride yet.", + "account.follows": "Joined Prides", + "account.follows.empty": "This lion hasn't joined any prides yet.", + "account.follows_you": "In your pride", + "account.hide_reblogs": "Hide roars from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can join their pride.", + "account.media": "Media", + "account.mention": "Meow at @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots with meows", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval. Click to cancel pride request", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show roars from @{name}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unhide {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Leave Pride", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked lions", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse lions", + "column.domain_blocks": "Hidden domains", + "column.favourites": "Boops", + "column.follow_requests": "Pride requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted lions", + "column.notifications": "Notifications", + "column.pins": "Pinned toots", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media Only", + "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned lions.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can join your pride to view your pride-only toots.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "Meow???", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this toot?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide toots from them and toots mentioning them, but it will still allow them to see your toots and join your pride.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this toot and re-draft it? You will lose all meows, roars, and boops to it.", + "confirmations.reply.confirm": "Meow", + "confirmations.reply.message": "Meowing now will overwrite the toot you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Leave Pride", + "confirmations.unfollow.message": "Are you sure you want to leave {name}'s pride?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this toot on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "Lions", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any lions yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any booped toots yet. When you boop one, it will show up here.", + "empty_column.favourites": "No one has booped this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any pride requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other lions.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any lions yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually join lions' prides from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite lions", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags for this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show roars", + "home.column_settings.show_replies": "Show meows", + "home.column_settings.update_live": "Update in real-time", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public toots from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Toots from prides you join will appear in your home feed. You can join anyone's pride on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public toots from lions on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish tutorial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other lions' toots with your pride members by boosting them.", + "introduction.interactions.reply.headline": "Meow", + "introduction.interactions.reply.text": "You can meow at other lions' and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked dogs list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open boops list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted lions list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to meow", + "keyboard_shortcuts.requests": "to open pride requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among lions whose prides you've joined", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this lion?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked lions", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Boops", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Pride requests", + "navigation_bar.follows_and_followers": "Prides and Pride Members", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted lions", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.and_n_others": "and {count, plural, one {# other} other {# others}}", + "notification.favourite": "{name} booped your toot", + "notification.follow": "{name} joined your pride", + "notification.mention": "{name} meowed at you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} roared your toot", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Boops:", + "notifications.column_settings.follow": "New pride members:", + "notifications.column_settings.mention": "Meows:", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New Pride Members:", + "notifications.column_settings.mention": "Meows:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Roars:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Roars", + "notifications.filter.favourites": "Boops", + "notifications.filter.follows": "Pride Members", + "notifications.filter.mentions": "Meows", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# lion} other {# lions}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned lions only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Toot to pride members only", + "privacy.private.short": "Pride Members-only", + "privacy.public.long": "Toot to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not toot to public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Reporting {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, booped, roard, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "lion", + "search_results.accounts": "Lions", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unroar", + "status.cannot_reblog": "This toot cannot be roared", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Boop", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Meow at @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this toot", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Roar", + "status.reblog_private": "Roar to original audience", + "status.reblogged_by": "{name} roared", + "status.reblogs.empty": "No one has roared this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Meow", + "status.replyAll": "Meow in thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading...", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/locale-data/dog.js b/app/javascript/mastodon/locales/locale-data/dog.js new file mode 100644 index 000000000..614d3efad --- /dev/null +++ b/app/javascript/mastodon/locales/locale-data/dog.js @@ -0,0 +1,115 @@ +/*eslint eqeqeq: "off"*/ +/*eslint no-nested-ternary: "off"*/ +/*eslint quotes: "off"*/ + +export default [ + { + locale: "dog", + pluralRuleFunction: function(e, a) { + var n = String(e).split("."), + l = !n[1], + o = Number(n[0]) == e, + t = o && n[0].slice(-1), + r = o && n[0].slice(-2); + return a ? 1 == t && 11 != r ? "one" : 2 == t && 12 != r ? "two" : 3 == t && 13 != r ? "few" : "other" : 1 == e && l ? "one" : "other" + }, + fields: { + year: { + displayName: "year", + relative: { + 0: "this year", + 1: "next year", + "-1": "last year" + }, + relativeTime: { + future: { + one: "in {0} year", + other: "in {0} years" + }, + past: { + one: "{0} year ago", + other: "{0} years ago" + } + } + }, + month: { + displayName: "month", + relative: { + 0: "this month", + 1: "next month", + "-1": "last month" + }, + relativeTime: { + future: { + one: "in {0} month", + other: "in {0} months" + }, + past: { + one: "{0} month ago", + other: "{0} months ago" + } + } + }, + day: { + displayName: "day", + relative: { + 0: "today", + 1: "tomorrow", + "-1": "yesterday" + }, + relativeTime: { + future: { + one: "in {0} day", + other: "in {0} days" + }, + past: { + one: "{0} day ago", + other: "{0} days ago" + } + } + }, + hour: { + displayName: "hour", + relativeTime: { + future: { + one: "in {0} hour", + other: "in {0} hours" + }, + past: { + one: "{0} hour ago", + other: "{0} hours ago" + } + } + }, + minute: { + displayName: "minute", + relativeTime: { + future: { + one: "in {0} minute", + other: "in {0} minutes" + }, + past: { + one: "{0} minute ago", + other: "{0} minutes ago" + } + } + }, + second: { + displayName: "second", + relative: { + 0: "now" + }, + relativeTime: { + future: { + one: "in {0} second", + other: "in {0} seconds" + }, + past: { + one: "{0} second ago", + other: "{0} seconds ago" + } + } + } + } + } +]; diff --git a/app/javascript/mastodon/locales/locale-data/lion.js b/app/javascript/mastodon/locales/locale-data/lion.js new file mode 100644 index 000000000..728b5f824 --- /dev/null +++ b/app/javascript/mastodon/locales/locale-data/lion.js @@ -0,0 +1,115 @@ +/*eslint eqeqeq: "off"*/ +/*eslint no-nested-ternary: "off"*/ +/*eslint quotes: "off"*/ + +export default [ + { + locale: "lion", + pluralRuleFunction: function(e, a) { + var n = String(e).split("."), + l = !n[1], + o = Number(n[0]) == e, + t = o && n[0].slice(-1), + r = o && n[0].slice(-2); + return a ? 1 == t && 11 != r ? "one" : 2 == t && 12 != r ? "two" : 3 == t && 13 != r ? "few" : "other" : 1 == e && l ? "one" : "other" + }, + fields: { + year: { + displayName: "year", + relative: { + 0: "this year", + 1: "next year", + "-1": "last year" + }, + relativeTime: { + future: { + one: "in {0} year", + other: "in {0} years" + }, + past: { + one: "{0} year ago", + other: "{0} years ago" + } + } + }, + month: { + displayName: "month", + relative: { + 0: "this month", + 1: "next month", + "-1": "last month" + }, + relativeTime: { + future: { + one: "in {0} month", + other: "in {0} months" + }, + past: { + one: "{0} month ago", + other: "{0} months ago" + } + } + }, + day: { + displayName: "day", + relative: { + 0: "today", + 1: "tomorrow", + "-1": "yesterday" + }, + relativeTime: { + future: { + one: "in {0} day", + other: "in {0} days" + }, + past: { + one: "{0} day ago", + other: "{0} days ago" + } + } + }, + hour: { + displayName: "hour", + relativeTime: { + future: { + one: "in {0} hour", + other: "in {0} hours" + }, + past: { + one: "{0} hour ago", + other: "{0} hours ago" + } + } + }, + minute: { + displayName: "minute", + relativeTime: { + future: { + one: "in {0} minute", + other: "in {0} minutes" + }, + past: { + one: "{0} minute ago", + other: "{0} minutes ago" + } + } + }, + second: { + displayName: "second", + relative: { + 0: "now" + }, + relativeTime: { + future: { + one: "in {0} second", + other: "in {0} seconds" + }, + past: { + one: "{0} second ago", + other: "{0} seconds ago" + } + } + } + } + } +]; diff --git a/app/javascript/mastodon/locales/locale-data/squeak.js b/app/javascript/mastodon/locales/locale-data/squeak.js new file mode 100644 index 000000000..6a390908f --- /dev/null +++ b/app/javascript/mastodon/locales/locale-data/squeak.js @@ -0,0 +1,115 @@ +/*eslint eqeqeq: "off"*/ +/*eslint no-nested-ternary: "off"*/ +/*eslint quotes: "off"*/ + +export default [ + { + locale: "squeak", + pluralRuleFunction: function(e, a) { + var n = String(e).split("."), + l = !n[1], + o = Number(n[0]) == e, + t = o && n[0].slice(-1), + r = o && n[0].slice(-2); + return a ? 1 == t && 11 != r ? "one" : 2 == t && 12 != r ? "two" : 3 == t && 13 != r ? "few" : "other" : 1 == e && l ? "one" : "other" + }, + fields: { + year: { + displayName: "year", + relative: { + 0: "this year", + 1: "next year", + "-1": "last year" + }, + relativeTime: { + future: { + one: "in {0} year", + other: "in {0} years" + }, + past: { + one: "{0} year ago", + other: "{0} years ago" + } + } + }, + month: { + displayName: "month", + relative: { + 0: "this month", + 1: "next month", + "-1": "last month" + }, + relativeTime: { + future: { + one: "in {0} month", + other: "in {0} months" + }, + past: { + one: "{0} month ago", + other: "{0} months ago" + } + } + }, + day: { + displayName: "day", + relative: { + 0: "today", + 1: "tomorrow", + "-1": "yesterday" + }, + relativeTime: { + future: { + one: "in {0} day", + other: "in {0} days" + }, + past: { + one: "{0} day ago", + other: "{0} days ago" + } + } + }, + hour: { + displayName: "hour", + relativeTime: { + future: { + one: "in {0} hour", + other: "in {0} hours" + }, + past: { + one: "{0} hour ago", + other: "{0} hours ago" + } + } + }, + minute: { + displayName: "minute", + relativeTime: { + future: { + one: "in {0} minute", + other: "in {0} minutes" + }, + past: { + one: "{0} minute ago", + other: "{0} minutes ago" + } + } + }, + second: { + displayName: "second", + relative: { + 0: "now" + }, + relativeTime: { + future: { + one: "in {0} second", + other: "in {0} seconds" + }, + past: { + one: "{0} second ago", + other: "{0} seconds ago" + } + } + } + } + } +]; diff --git a/app/javascript/mastodon/locales/squeak.json b/app/javascript/mastodon/locales/squeak.json new file mode 100644 index 000000000..bc3d2dfd7 --- /dev/null +++ b/app/javascript/mastodon/locales/squeak.json @@ -0,0 +1,425 @@ +{ + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.block": "Block @{name}", + "account.block_domain": "Hide everything from {domain}", + "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "Edit profile", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.follows": "Follows", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide pumps from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval. Click to cancel follow request", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show pumps from @{name}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unhide {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Hidden domains", + "column.favourites": "Squeaks", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toots", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media Only", + "compose_form.direct_message_warning": "This toot will only be sent to the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What's on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Squeaks and pumps will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any squeaked toots yet. When you squeak one, it will show up here.", + "empty_column.favourites": "No one has squeaked this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags for this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show pumps", + "home.column_settings.show_replies": "Show replies", + "home.column_settings.update_live": "Update in real-time", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish tutorial!", + "introduction.interactions.favourite.headline": "Squeak", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by squeaking it.", + "introduction.interactions.reblog.headline": "Pump", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by pumping them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to pump", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to squeak", + "keyboard_shortcuts.favourites": "to open squeaks list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Squeaks", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.and_n_others": "and {count, plural, one {# other} other {# others}}", + "notification.favourite": "{name} squeaked your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} pumped your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Squeaks:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Pumps:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Pumps", + "notifications.filter.favourites": "Squeaks", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Post to followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Post to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not post to public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Reporting {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, squeaked, pumped, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unpump", + "status.cannot_reblog": "This post cannot be pumped", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Squeak", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Pump", + "status.reblog_private": "Pump to original audience", + "status.reblogged_by": "{name} pumped", + "status.reblogs.empty": "No one has pumped this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading...", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/whitelist_dog.json b/app/javascript/mastodon/locales/whitelist_dog.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_dog.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_lion.json b/app/javascript/mastodon/locales/whitelist_lion.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_lion.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_squeak.json b/app/javascript/mastodon/locales/whitelist_squeak.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_squeak.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/styles/contrast-wider.scss b/app/javascript/styles/contrast-wider.scss new file mode 100644 index 000000000..31df8e273 --- /dev/null +++ b/app/javascript/styles/contrast-wider.scss @@ -0,0 +1,2 @@ +@import 'wide'; +@import 'contrast'; diff --git a/app/javascript/styles/mastodon-light-wider.scss b/app/javascript/styles/mastodon-light-wider.scss new file mode 100644 index 000000000..71c09ff2e --- /dev/null +++ b/app/javascript/styles/mastodon-light-wider.scss @@ -0,0 +1,2 @@ +@import 'wide'; +@import 'mastodon-light'; diff --git a/app/javascript/styles/mastodon-wider.scss b/app/javascript/styles/mastodon-wider.scss new file mode 100644 index 000000000..d1cb0aee7 --- /dev/null +++ b/app/javascript/styles/mastodon-wider.scss @@ -0,0 +1,2 @@ +@import 'wide'; +@import 'application'; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 86425c47c..090196327 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -779,10 +779,6 @@ &.status__content--with-spoiler { white-space: normal; - - .status__content__text { - white-space: pre-wrap; - } } .emojione { @@ -791,7 +787,9 @@ margin: -3px 0 0; } - p { + p, + pre, + blockquote { margin-bottom: 20px; white-space: pre-wrap; @@ -800,6 +798,175 @@ } } + h1, + h2, + h3, + h4, + h5 { + margin-bottom: 20px; + } + + blockquote { + white-space: normal; + + p:last-child { + margin-bottom: 0; + } + } + + ul, + ol { + p { + margin-bottom: 0; + } + } + + &:not(.rich-text) { + del { + text-decoration: none; + + &::before, + &::after { + content: '~~'; + } + } + + code { + font-family: inherit; + } + + u { + text-decoration: none; + + &::before, + &::after { + content: '__'; + } + } + + h1::before { + content: '# '; + } + + h2::before { + content: '## '; + } + + h3::before { + content: '### '; + } + + h4::before { + content: '#### '; + } + + h5::before { + content: '##### '; + } + + b, + strong { + &::before, + &::after { + content: '**'; + } + } + + em, + i { + &::before, + &::after { + content: '*'; + } + } + } + + &:not(.rich-blocks) { + blockquote { + position: relative; + padding-left: 1em; + overflow: hidden; + } + + blockquote::before { + position: absolute; + content: '>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a'; + white-space: pre-wrap; + left: 0; + top: 0; + } + + li::before { + position: absolute; + content: '*'; + left: 0; + top: 0; + } + + li { + position: relative; + padding-left: 1em; + } + } + + &.rich-text { + h1, + h2 { + font-weight: 700; + } + + h3, + h4, + h5 { + font-weight: 500; + } + + b, + strong { + font-weight: 700; + } + + em, + i { + font-style: italic; + } + + sub { + font-size: smaller; + text-align: sub; + } + } + + &.rich-blocks { + h1, + h2 { + font-size: 18px; + } + + h2 { + font-size: 16px; + } + + blockquote { + padding-left: 10px; + border-left: 3px solid $darker-text-color; + color: $darker-text-color; + } + + ul, + ol { + margin-left: 1em; + } + + ul { + list-style-type: disc; + } + + ol { + list-style-type: decimal; + } + } + a { color: $secondary-text-color; text-decoration: none; diff --git a/app/javascript/styles/pop-light-wider.scss b/app/javascript/styles/pop-light-wider.scss new file mode 100644 index 000000000..dea903bd5 --- /dev/null +++ b/app/javascript/styles/pop-light-wider.scss @@ -0,0 +1,2 @@ +@import 'wide'; +@import 'pop-light'; diff --git a/app/javascript/styles/pop-light.scss b/app/javascript/styles/pop-light.scss new file mode 100644 index 000000000..1492540c0 --- /dev/null +++ b/app/javascript/styles/pop-light.scss @@ -0,0 +1,55 @@ +// Commonly used web colors +$black: #3b3633; // Black +$white: #fafafa; // White + +$classic-base-color: #49423e; // Midnight Express +$classic-primary-color: #c9c7c5; // Echo Blue +$classic-secondary-color: #ebe9e8; // Pattens Blue +$classic-highlight-color: #48b9c7; // Summer Sky + +// Differences +$success-green: #3e935b; // Padua + +$base-overlay-background: $white !default; +$valid-value-color: $success-green !default; + +$ui-base-color: $classic-secondary-color !default; // Midnight Express +$ui-base-lighter-color: #ababab; +$ui-primary-color: #9a938e; // Echo Blue +$ui-secondary-color: $classic-base-color !default; // Pattens Blue +$ui-highlight-color: #48b9c7; // Summer Sky + +$primary-text-color: $black !default; +$darker-text-color: $classic-base-color !default; +$dark-text-color: #0c0c0c; +$action-button-color: #635d58; + +$error-red: #a3360a; // Cerise +$warning-red: #f9dfb6; // Sunset Orange +$gold-star: #faa41a; // Dark Goldenrod + +$inverted-text-color: $black !default; +$lighter-text-color: $classic-base-color !default; +$light-text-color: #444b5d; + +$base-shadow-color: #3b3633; +$base-overlay-background: #3b3633; +$base-border-color: #fafafa; +$simple-background-color: #fafafa; +$valid-value-color: #3e935b; +$error-value-color: #a3360a; + +//Newly added colors +$account-background-color: $white !default; + +//Invert darkened and lightened colors +@function darken($color, $amount) { + @return hsl(hue($color), saturation($color), lightness($color) + $amount); +} + +@function lighten($color, $amount) { + @return hsl(hue($color), saturation($color), lightness($color) - $amount); +} + +@import 'application'; +@import 'mastodon-light/diff'; diff --git a/app/javascript/styles/pop-wider.scss b/app/javascript/styles/pop-wider.scss new file mode 100644 index 000000000..76fee9d1a --- /dev/null +++ b/app/javascript/styles/pop-wider.scss @@ -0,0 +1,2 @@ +@import 'wide'; +@import 'pop'; diff --git a/app/javascript/styles/pop.scss b/app/javascript/styles/pop.scss new file mode 100644 index 000000000..86e6c5294 --- /dev/null +++ b/app/javascript/styles/pop.scss @@ -0,0 +1,28 @@ +// Commonly used web colors +$black: #3b3633; // Black +$white: #fafafa; // White +$success-green: #3e935b; // Padua +$error-red: #a3360a; // Cerise +$warning-red: #f9dfb6; // Sunset Orange +$gold-star: #faa41a; // Dark Goldenrod + +$base-shadow-color: #3b3633; +$base-overlay-background: #3b3633; +$base-border-color: #fafafa; +$simple-background-color: #fafafa; +$primary-text-color: #fafafa; +$valid-value-color: #3e935b; +$error-value-color: #a3360a; + +// Values from the classic Mastodon UI +$classic-base-color: #49423e; // Midnight Express +$classic-primary-color: #c9c7c5; // Echo Blue +$classic-secondary-color: #ebe9e8; // Pattens Blue +$classic-highlight-color: #48b9c7; // Summer Sky + +$ui-base-color: #49423e; // Midnight Express +$ui-primary-color: #c9c7c5; // Echo Blue +$ui-secondary-color: #ebe9e8; // Pattens Blue +$ui-highlight-color: #48b9c7; // Summer Sky + +@import 'application'; diff --git a/app/javascript/styles/werefox-wider.scss b/app/javascript/styles/werefox-wider.scss new file mode 100644 index 000000000..d044a62fe --- /dev/null +++ b/app/javascript/styles/werefox-wider.scss @@ -0,0 +1,2 @@ +@import 'wide'; +@import 'werefox'; diff --git a/app/javascript/styles/werefox.scss b/app/javascript/styles/werefox.scss new file mode 100644 index 000000000..9aeca694d --- /dev/null +++ b/app/javascript/styles/werefox.scss @@ -0,0 +1,28 @@ +// Commonly used web colors +$black: #3b3633; // Black +$white: #fafafa; // White +$success-green: #3e935b; // Padua +$error-red: #a3360a; // Cerise +$warning-red: #f9dfb6; // Sunset Orange +$gold-star: #faa41a; // Dark Goldenrod + +$base-shadow-color: #999; +$base-overlay-background: #3b3633; +$base-border-color: #fafafa; +$simple-background-color: #fafafa; +$primary-text-color: #fafafa; +$valid-value-color: #3e935b; +$error-value-color: #a3360a; + +// Values from the classic Mastodon UI +$classic-base-color: #2a2a2a; // WS Black +$classic-primary-color: #aaaaaa; // WS Light Gray +$classic-secondary-color: #9e9e9e; // WS Gray +$classic-highlight-color: #1c70ce; // WS Blue + +$ui-base-color: #2a2a2a; // WS Black +$ui-primary-color: #aaaaaa; // WS Light Gray +$ui-secondary-color: #9e9e9e; // WS Gray +$ui-highlight-color: #1c70ce; // WS Blue + +@import 'application'; diff --git a/app/javascript/styles/wide.scss b/app/javascript/styles/wide.scss new file mode 100644 index 000000000..fd1b59cfd --- /dev/null +++ b/app/javascript/styles/wide.scss @@ -0,0 +1,4 @@ +.column { + flex-grow: 1 !important; + max-width: 580px; +} diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index 990b9f63e..0946ee530 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -262,13 +262,147 @@ class Formatter def link_to_mention(entity, linkable_accounts) acct = entity[:screen_name] + username, domain = acct.split('@') - return link_to_account(acct) unless linkable_accounts + case domain + when 'twitter.com' + return link_to_twitter(username) + when 'tumblr.com' + return link_to_tumblr(username) + when 'weasyl.com' + return link_to_weasyl(username) + when 'furaffinity.net' + return link_to_furaffinity(username) + when 'furrynetwork.com', 'beta.furrynetwork.com' + return link_to_furrynetwork(username) + when 'sofurry.com' + return link_to_sofurry(username) + when 'inkbunny.net' + return link_to_inkbunny(username) + when 'e621.net' + return link_to_e621(username) + when 'e926.net' + return link_to_e926(username) + when 'f-list.net' + return link_to_flist(username) + when 'deviantart.com' + return link_to_deviantart(username) + when 'artstation.com' + return link_to_artstation(username) + when 'github.com' + return link_to_github(username) + when 'gitlab.com' + return link_to_gitlab(username) + when 'bitbucket.org' + return link_to_bitbucket(username) + when 'telegram.org' + return link_to_telegram(username) + when 'picarto.tv' + return link_to_picarto(username) + when 'twitch.tv' + return link_to_twitch(username) + when 'reddit.com' + return link_to_reddit(username) + when 'poizen.me' + return link_to_poizen(username) + when 'patreon.com' + return link_to_patreon(username) + else + return link_to_account(acct) unless linkable_accounts + end account = linkable_accounts.find { |item| TagManager.instance.same_acct?(item.acct, acct) } account ? mention_html(account) : "@#{encode(acct)}" end + def link_to_twitter(username) + link_to(username, "https://twitter.com/#{username}", "twitter.com") + end + + def link_to_tumblr(username) + link_to(username, "https://#{username}.tumblr.com", "tumblr.com") + end + + def link_to_weasyl(username) + link_to username "https://weasyl.com/~#{username}" "weasyl.com" + end + + def link_to_furaffinity(username) + link_to(username, "https://furaffinity.net/user/#{username}", "furaffinity.net") + end + + def link_to_furrynetwork(username) + link_to(username, "https://furrynetwork.com/#{username}", "furrynetwork.com") + end + + def link_to_inkbunny(username) + link_to(username, "https://inkbunny.net/#{username}", "inkbunny.net") + end + + def link_to_sofurry(username) + link_to(username, "https://#{username}.sofurry.com", "sofurry.com") + end + + def link_to_e621(username) + link_to username "https://e621.net/user/show/#{username}" "e621.net" + end + + def link_to_e926(username) + link_to username "https://e926.net/user/show/#{username}" "e926.net" + end + + def link_to_flist(username) + link_to username "https://f-list.net/c/#{username}" "f-list.net" + end + + def link_to_deviantart(username) + link_to(username, "https://#{username}.deviantart.com", "deviantart.com") + end + + def link_to_artstation(username) + link_to(username, "https://www.artstation.com/#{username}", "artstation.com") + end + + def link_to_github(username) + link_to(username, "https://github.com/#{username}", "github.com") + end + + def link_to_gitlab(username) + link_to(username, "https://gitlab.com/#{username}", "gitlab.com") + end + + def link_to_bitbucket(username) + link_to(username, "https://bitbucket.org/#{username}", "bitbucket.org") + end + + def link_to_telegram(username) + link_to(username, "https://t.me/#{username}", "telegram.org") + end + + def link_to_picarto(username) + link_to(username, "https://picarto.tv/#{username}", "picarto.tv") + end + + def link_to_twitch(username) + link_to(username, "https://twitch.tv/#{username}", "twitch.tv") + end + + def link_to_reddit(username) + link_to(username, "https://reddit.com/u/#{username}", "reddit.com") + end + + def link_to_poizen(username) + link_to(username, "https://poizen.me/#{username}", "poizen.me") + end + + def link_to_patreon(username) + link_to(username, "https://www.patreon.com/#{username}", "patreon.com") + end + + def link_to(username, url, domain) + "@#{username}@#{domain}" + end + def link_to_account(acct) username, domain = acct.split('@') diff --git a/app/lib/sanitize_config.rb b/app/lib/sanitize_config.rb index aba8ce9f6..0d7f2278f 100644 --- a/app/lib/sanitize_config.rb +++ b/app/lib/sanitize_config.rb @@ -36,11 +36,13 @@ class Sanitize end MASTODON_STRICT ||= freeze_config( - elements: %w(p br span a), + elements: %w(p br span a abbr del pre blockquote code b strong u sub i em h1 h2 h3 h4 h5 ul ol li), attributes: { - 'a' => %w(href rel class), - 'span' => %w(class), + 'a' => %w(href rel class title), + 'span' => %w(class), + 'abbr' => %w(title), + 'blockquote' => %w(cite), }, add_attributes: { @@ -51,7 +53,8 @@ class Sanitize }, protocols: { - 'a' => { 'href' => HTTP_PROTOCOLS }, + 'a' => { 'href' => HTTP_PROTOCOLS }, + 'blockquote' => { 'cite' => HTTP_PROTOCOLS }, }, transformers: [ diff --git a/app/lib/user_settings_decorator.rb b/app/lib/user_settings_decorator.rb index 3568a3e11..a88016189 100644 --- a/app/lib/user_settings_decorator.rb +++ b/app/lib/user_settings_decorator.rb @@ -37,6 +37,7 @@ class UserSettingsDecorator user.settings['use_blurhash'] = use_blurhash_preference if change?('setting_use_blurhash') user.settings['use_pending_items'] = use_pending_items_preference if change?('setting_use_pending_items') user.settings['trends'] = trends_preference if change?('setting_trends') + user.settings['strip_formatting'] = strip_formatting_preference if change?('setting_strip_formatting') end def merged_notification_emails @@ -127,6 +128,10 @@ class UserSettingsDecorator boolean_cast_setting 'setting_trends' end + def strip_formatting_preference + settings['setting_strip_formatting'] + end + def boolean_cast_setting(key) ActiveModel::Type::Boolean.new.cast(settings[key]) end diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index 0dacaf654..855d7ad39 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -28,7 +28,7 @@ class CustomEmoji < ApplicationRecord :(#{SHORTCODE_RE_FRAGMENT}): (?=[^[:alnum:]:]|$)/x - IMAGE_MIME_TYPES = %w(image/png image/gif).freeze + IMAGE_MIME_TYPES = %w(image/png image/gif image/webp).freeze belongs_to :category, class_name: 'CustomEmojiCategory', optional: true has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode diff --git a/app/models/user.rb b/app/models/user.rb index 9a19a53b3..0ab07dbb6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -108,7 +108,7 @@ class User < ApplicationRecord delegate :auto_play_gif, :default_sensitive, :unfollow_modal, :boost_modal, :delete_modal, :reduce_motion, :system_font_ui, :noindex, :theme, :display_media, :hide_network, :expand_spoilers, :default_language, :aggregate_reblogs, :show_application, - :advanced_layout, :use_blurhash, :use_pending_items, :trends, + :advanced_layout, :use_blurhash, :use_pending_items, :trends, :strip_formatting, to: :settings, prefix: :setting, allow_nil: false attr_reader :invite_code diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index fb53ea314..bb2b7efba 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -38,11 +38,13 @@ class InitialStateSerializer < ActiveModel::Serializer store[:use_pending_items] = object.current_account.user.setting_use_pending_items store[:is_staff] = object.current_account.user.staff? store[:trends] = Setting.trends && object.current_account.user.setting_trends + store[:strip_formatting] = object.current_account.user.setting_strip_formatting else - store[:auto_play_gif] = Setting.auto_play_gif - store[:display_media] = Setting.display_media - store[:reduce_motion] = Setting.reduce_motion - store[:use_blurhash] = Setting.use_blurhash + store[:auto_play_gif] = Setting.auto_play_gif + store[:display_media] = Setting.display_media + store[:reduce_motion] = Setting.reduce_motion + store[:use_blurhash] = Setting.use_blurhash + store[:strip_formatting] = Setting.strip_formatting end store diff --git a/app/serializers/rest/preferences_serializer.rb b/app/serializers/rest/preferences_serializer.rb index 119f0e06d..52daf37ca 100644 --- a/app/serializers/rest/preferences_serializer.rb +++ b/app/serializers/rest/preferences_serializer.rb @@ -7,6 +7,7 @@ class REST::PreferencesSerializer < ActiveModel::Serializer attribute :reading_default_sensitive_media, key: 'reading:expand:media' attribute :reading_default_sensitive_text, key: 'reading:expand:spoilers' + attribute :reading_strip_formatting, key: 'reading:formatting:strip' def posting_default_privacy object.user.setting_default_privacy @@ -27,4 +28,8 @@ class REST::PreferencesSerializer < ActiveModel::Serializer def reading_default_sensitive_text object.user.setting_expand_spoilers end + + def reading_strip_formatting + object.user.setting_strip_formatting + end end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index cef658e19..9c649d35c 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -16,6 +16,8 @@ class ActivityPub::ProcessAccountService < BaseService @domain = domain @collections = {} + return if auto_suspend? + RedisLock.acquire(lock_options) do |lock| if lock.acquired? @account = Account.find_remote(@username, @domain) diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index d6ee1933f..98fe9060e 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -24,6 +24,7 @@ = f.input :setting_auto_play_gif, as: :boolean, wrapper: :with_label, recommended: true = f.input :setting_reduce_motion, as: :boolean, wrapper: :with_label = f.input :setting_system_font_ui, as: :boolean, wrapper: :with_label + = f.input :setting_strip_formatting, collection: ['none', 'blocks', 'all'], wrapper: :with_floating_label, include_blank: false, label_method: lambda { |value| safe_join([I18n.t("statuses.strip_formatting.#{value}"), content_tag(:span, I18n.t("statuses.strip_formatting.#{value}_long"), class: 'hint')]) }, required: false, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', hint: false %h4= t 'appearance.discovery' diff --git a/app/views/statuses/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml index 5cee84ada..bc5bf64f7 100644 --- a/app/views/statuses/_detailed_status.html.haml +++ b/app/views/statuses/_detailed_status.html.haml @@ -15,7 +15,7 @@ = account_action_button(status.account) - .status__content.emojify< + .status__content.emojify{ class: text_formatting_classes }< - if status.spoiler_text? %p{ :style => ('margin-bottom: 0' unless current_account&.user&.setting_expand_spoilers) }< %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}  diff --git a/app/views/statuses/_simple_status.html.haml b/app/views/statuses/_simple_status.html.haml index a68fe1022..46603cb03 100644 --- a/app/views/statuses/_simple_status.html.haml +++ b/app/views/statuses/_simple_status.html.haml @@ -19,7 +19,7 @@ %span.display-name__account = acct(status.account) = fa_icon('lock') if status.account.locked? - .status__content.emojify< + .status__content.emojify{ class: text_formatting_classes }< - if status.spoiler_text? %p{ :style => ('margin-bottom: 0' unless current_account&.user&.setting_expand_spoilers) }< %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}  diff --git a/config/application.rb b/config/application.rb index 9be41b1a7..3d023dc77 100644 --- a/config/application.rb +++ b/config/application.rb @@ -39,6 +39,10 @@ module Mastodon # All translations from config/locales/*.rb,yml are auto loaded. # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] config.i18n.available_locales = [ + :dog, + :lion, + :squeak, + :en, :ar, :ast, :bg, diff --git a/config/initializers/source.rb b/config/initializers/source.rb new file mode 100644 index 000000000..3b77c80c9 --- /dev/null +++ b/config/initializers/source.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true +module Mastodon + module Version + module_function + def source_base_url + 'https://git.asonix.dog/asonix/mastodon' + end + end +end diff --git a/config/locales/activerecord.dog.yml b/config/locales/activerecord.dog.yml new file mode 100644 index 000000000..230a29cd5 --- /dev/null +++ b/config/locales/activerecord.dog.yml @@ -0,0 +1,17 @@ +--- +dog: + activerecord: + attributes: + poll: + expires_at: Deadline + options: Choices + errors: + models: + account: + attributes: + username: + invalid: only letters, numbers and underscores + status: + attributes: + reblog: + taken: of status already exists diff --git a/config/locales/activerecord.lion.yml b/config/locales/activerecord.lion.yml new file mode 100644 index 000000000..2b6d56adc --- /dev/null +++ b/config/locales/activerecord.lion.yml @@ -0,0 +1,17 @@ +--- +lion: + activerecord: + attributes: + poll: + expires_at: Deadline + options: Choices + errors: + models: + account: + attributes: + username: + invalid: only letters, numbers and underscores + status: + attributes: + reblog: + taken: of status already exists diff --git a/config/locales/activerecord.squeak.yml b/config/locales/activerecord.squeak.yml new file mode 100644 index 000000000..d6580d0ca --- /dev/null +++ b/config/locales/activerecord.squeak.yml @@ -0,0 +1,17 @@ +--- +squeak: + activerecord: + attributes: + poll: + expires_at: Deadline + options: Choices + errors: + models: + account: + attributes: + username: + invalid: only letters, numbers and underscores + status: + attributes: + reblog: + taken: of status already exists diff --git a/config/locales/devise.dog.yml b/config/locales/devise.dog.yml new file mode 100644 index 000000000..11547a390 --- /dev/null +++ b/config/locales/devise.dog.yml @@ -0,0 +1,98 @@ +--- +dog: + devise: + confirmations: + confirmed: Your email address has been successfully confirmed. + send_instructions: You will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. + send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. + failure: + already_authenticated: You are already signed in. + inactive: Your account is not activated yet. + invalid: Invalid %{authentication_keys} or password. + last_attempt: You have one more attempt before your account is locked. + locked: Your account is locked. + not_found_in_database: Invalid %{authentication_keys} or password. + pending: Your account is still under review. + timeout: Your session expired. Please sign in again to continue. + unauthenticated: You need to sign in or sign up before continuing. + unconfirmed: You have to confirm your email address before continuing. + mailer: + confirmation_instructions: + action: Verify email address + action_with_app: Confirm and return to %{app} + explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email. + explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can't login until then. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. + extra_html: Please also check out the rules of the server and our terms of service. + subject: 'Mastodon: Confirmation instructions for %{instance}' + title: Verify email address + email_changed: + explanation: 'The email address for your account is being changed to:' + extra: If you did not change your email, it is likely that someone has gained access to your account. Please change your password immediately or contact the server admin if you're locked out of your account. + subject: 'Mastodon: Email changed' + title: New email address + password_change: + explanation: The password for your account has been changed. + extra: If you did not change your password, it is likely that someone has gained access to your account. Please change your password immediately or contact the server admin if you're locked out of your account. + subject: 'Mastodon: Password changed' + title: Password changed + reconfirmation_instructions: + explanation: Confirm the new address to change your email. + extra: If this change wasn't initiated by you, please ignore this email. The email address for the Mastodon account won't change until you access the link above. + subject: 'Mastodon: Confirm email for %{instance}' + title: Verify email address + reset_password_instructions: + action: Change password + explanation: You requested a new password for your account. + extra: If you didn't request this, please ignore this email. Your password won't change until you access the link above and create a new one. + subject: 'Mastodon: Reset password instructions' + title: Password reset + two_factor_disabled: + explanation: Two-factor authentication for your account has been disabled. Login is now possible using only e-mail address and password. + subject: 'Mastodon: Two-factor authentication disabled' + title: 2FA disabled + two_factor_enabled: + explanation: Two-factor authentication has been enabled for your account. A token generated by the paired TOTP app will be required for login. + subject: 'Mastodon: Two-factor authentication enabled' + title: 2FA enabled + two_factor_recovery_codes_changed: + explanation: The previous recovery codes have been invalidated and new ones generated. + subject: 'Mastodon: Two-factor recovery codes re-generated' + title: 2FA recovery codes changed + unlock_instructions: + subject: 'Mastodon: Unlock instructions' + omniauth_callbacks: + failure: Could not authenticate you from %{kind} because "%{reason}". + success: Successfully authenticated from %{kind} account. + passwords: + no_token: You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided. + send_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. + send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. + updated: Your password has been changed successfully. You are now signed in. + updated_not_active: Your password has been changed successfully. + registrations: + destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon. + signed_up: Welcome! You have signed up successfully. + signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated. + signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked. + signed_up_but_pending: A message with a confirmation link has been sent to your email address. After you click the link, we will review your application. You will be notified if it is approved. + signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. Please check your spam folder if you didn't receive this email. + update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. Please check your spam folder if you didn't receive this email. + updated: Your account has been updated successfully. + sessions: + already_signed_out: Signed out successfully. + signed_in: Signed in successfully. + signed_out: Signed out successfully. + unlocks: + send_instructions: You will receive an email with instructions for how to unlock your account in a few minutes. Please check your spam folder if you didn't receive this email. + send_paranoid_instructions: If your account exists, you will receive an email with instructions for how to unlock it in a few minutes. Please check your spam folder if you didn't receive this email. + unlocked: Your account has been unlocked successfully. Please sign in to continue. + errors: + messages: + already_confirmed: was already confirmed, please try signing in + confirmation_period_expired: needs to be confirmed within %{period}, please request a new one + expired: has expired, please request a new one + not_found: not found + not_locked: was not locked + not_saved: + one: '1 error prohibited this %{resource} from being saved:' + other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/config/locales/devise.lion.yml b/config/locales/devise.lion.yml new file mode 100644 index 000000000..2bacc994a --- /dev/null +++ b/config/locales/devise.lion.yml @@ -0,0 +1,98 @@ +--- +lion: + devise: + confirmations: + confirmed: Your email address has been successfully confirmed. + send_instructions: You will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. + send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. + failure: + already_authenticated: You are already signed in. + inactive: Your account is not activated yet. + invalid: Invalid %{authentication_keys} or password. + last_attempt: You have one more attempt before your account is locked. + locked: Your account is locked. + not_found_in_database: Invalid %{authentication_keys} or password. + pending: Your account is still under review. + timeout: Your session expired. Please sign in again to continue. + unauthenticated: You need to sign in or sign up before continuing. + unconfirmed: You have to confirm your email address before continuing. + mailer: + confirmation_instructions: + action: Verify email address + action_with_app: Confirm and return to %{app} + explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email. + explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can't login until then. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. + extra_html: Please also check out the rules of the server and our terms of service. + subject: 'Mastodon: Confirmation instructions for %{instance}' + title: Verify email address + email_changed: + explanation: 'The email address for your account is being changed to:' + extra: If you did not change your email, it is likely that someone has gained access to your account. Please change your password immediately or contact the server admin if you're locked out of your account. + subject: 'Mastodon: Email changed' + title: New email address + password_change: + explanation: The password for your account has been changed. + extra: If you did not change your password, it is likely that someone has gained access to your account. Please change your password immediately or contact the server admin if you're locked out of your account. + subject: 'Mastodon: Password changed' + title: Password changed + reconfirmation_instructions: + explanation: Confirm the new address to change your email. + extra: If this change wasn't initiated by you, please ignore this email. The email address for the Mastodon account won't change until you access the link above. + subject: 'Mastodon: Confirm email for %{instance}' + title: Verify email address + reset_password_instructions: + action: Change password + explanation: You requested a new password for your account. + extra: If you didn't request this, please ignore this email. Your password won't change until you access the link above and create a new one. + subject: 'Mastodon: Reset password instructions' + title: Password reset + two_factor_disabled: + explanation: Two-factor authentication for your account has been disabled. Login is now possible using only e-mail address and password. + subject: 'Mastodon: Two-factor authentication disabled' + title: 2FA disabled + two_factor_enabled: + explanation: Two-factor authentication has been enabled for your account. A token generated by the paired TOTP app will be required for login. + subject: 'Mastodon: Two-factor authentication enabled' + title: 2FA enabled + two_factor_recovery_codes_changed: + explanation: The previous recovery codes have been invalidated and new ones generated. + subject: 'Mastodon: Two-factor recovery codes re-generated' + title: 2FA recovery codes changed + unlock_instructions: + subject: 'Mastodon: Unlock instructions' + omniauth_callbacks: + failure: Could not authenticate you from %{kind} because "%{reason}". + success: Successfully authenticated from %{kind} account. + passwords: + no_token: You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided. + send_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. + send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. + updated: Your password has been changed successfully. You are now signed in. + updated_not_active: Your password has been changed successfully. + registrations: + destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon. + signed_up: Welcome! You have signed up successfully. + signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated. + signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked. + signed_up_but_pending: A message with a confirmation link has been sent to your email address. After you click the link, we will review your application. You will be notified if it is approved. + signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. Please check your spam folder if you didn't receive this email. + update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. Please check your spam folder if you didn't receive this email. + updated: Your account has been updated successfully. + sessions: + already_signed_out: Signed out successfully. + signed_in: Signed in successfully. + signed_out: Signed out successfully. + unlocks: + send_instructions: You will receive an email with instructions for how to unlock your account in a few minutes. Please check your spam folder if you didn't receive this email. + send_paranoid_instructions: If your account exists, you will receive an email with instructions for how to unlock it in a few minutes. Please check your spam folder if you didn't receive this email. + unlocked: Your account has been unlocked successfully. Please sign in to continue. + errors: + messages: + already_confirmed: was already confirmed, please try signing in + confirmation_period_expired: needs to be confirmed within %{period}, please request a new one + expired: has expired, please request a new one + not_found: not found + not_locked: was not locked + not_saved: + one: '1 error prohibited this %{resource} from being saved:' + other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/config/locales/devise.squeak.yml b/config/locales/devise.squeak.yml new file mode 100644 index 000000000..d3c603bc2 --- /dev/null +++ b/config/locales/devise.squeak.yml @@ -0,0 +1,98 @@ +--- +squeak: + devise: + confirmations: + confirmed: Your email address has been successfully confirmed. + send_instructions: You will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. + send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. + failure: + already_authenticated: You are already signed in. + inactive: Your account is not activated yet. + invalid: Invalid %{authentication_keys} or password. + last_attempt: You have one more attempt before your account is locked. + locked: Your account is locked. + not_found_in_database: Invalid %{authentication_keys} or password. + pending: Your account is still under review. + timeout: Your session expired. Please sign in again to continue. + unauthenticated: You need to sign in or sign up before continuing. + unconfirmed: You have to confirm your email address before continuing. + mailer: + confirmation_instructions: + action: Verify email address + action_with_app: Confirm and return to %{app} + explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email. + explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can't login until then. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. + extra_html: Please also check out the rules of the server and our terms of service. + subject: 'Mastodon: Confirmation instructions for %{instance}' + title: Verify email address + email_changed: + explanation: 'The email address for your account is being changed to:' + extra: If you did not change your email, it is likely that someone has gained access to your account. Please change your password immediately or contact the server admin if you're locked out of your account. + subject: 'Mastodon: Email changed' + title: New email address + password_change: + explanation: The password for your account has been changed. + extra: If you did not change your password, it is likely that someone has gained access to your account. Please change your password immediately or contact the server admin if you're locked out of your account. + subject: 'Mastodon: Password changed' + title: Password changed + reconfirmation_instructions: + explanation: Confirm the new address to change your email. + extra: If this change wasn't initiated by you, please ignore this email. The email address for the Mastodon account won't change until you access the link above. + subject: 'Mastodon: Confirm email for %{instance}' + title: Verify email address + reset_password_instructions: + action: Change password + explanation: You requested a new password for your account. + extra: If you didn't request this, please ignore this email. Your password won't change until you access the link above and create a new one. + subject: 'Mastodon: Reset password instructions' + title: Password reset + two_factor_disabled: + explanation: Two-factor authentication for your account has been disabled. Login is now possible using only e-mail address and password. + subject: 'Mastodon: Two-factor authentication disabled' + title: 2FA disabled + two_factor_enabled: + explanation: Two-factor authentication has been enabled for your account. A token generated by the paired TOTP app will be required for login. + subject: 'Mastodon: Two-factor authentication enabled' + title: 2FA enabled + two_factor_recovery_codes_changed: + explanation: The previous recovery codes have been invalidated and new ones generated. + subject: 'Mastodon: Two-factor recovery codes re-generated' + title: 2FA recovery codes changed + unlock_instructions: + subject: 'Mastodon: Unlock instructions' + omniauth_callbacks: + failure: Could not authenticate you from %{kind} because "%{reason}". + success: Successfully authenticated from %{kind} account. + passwords: + no_token: You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided. + send_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. + send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. + updated: Your password has been changed successfully. You are now signed in. + updated_not_active: Your password has been changed successfully. + registrations: + destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon. + signed_up: Welcome! You have signed up successfully. + signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated. + signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked. + signed_up_but_pending: A message with a confirmation link has been sent to your email address. After you click the link, we will review your application. You will be notified if it is approved. + signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. Please check your spam folder if you didn't receive this email. + update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. Please check your spam folder if you didn't receive this email. + updated: Your account has been updated successfully. + sessions: + already_signed_out: Signed out successfully. + signed_in: Signed in successfully. + signed_out: Signed out successfully. + unlocks: + send_instructions: You will receive an email with instructions for how to unlock your account in a few minutes. Please check your spam folder if you didn't receive this email. + send_paranoid_instructions: If your account exists, you will receive an email with instructions for how to unlock it in a few minutes. Please check your spam folder if you didn't receive this email. + unlocked: Your account has been unlocked successfully. Please sign in to continue. + errors: + messages: + already_confirmed: was already confirmed, please try signing in + confirmation_period_expired: needs to be confirmed within %{period}, please request a new one + expired: has expired, please request a new one + not_found: not found + not_locked: was not locked + not_saved: + one: '1 error prohibited this %{resource} from being saved:' + other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/config/locales/dog.yml b/config/locales/dog.yml new file mode 100644 index 000000000..036cc162e --- /dev/null +++ b/config/locales/dog.yml @@ -0,0 +1,1231 @@ +--- +dog: + about: + about_hashtag_html: These are public toots tagged with #%{hashtag}. You can interact with them if you have an account anywhere in the fediverse. + about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!' + about_this: About + active_count_after: active + active_footnote: Monthly Active Dogs (MAD) + administered_by: 'Administered by:' + api: API + apps: Mobile apps + apps_platforms: Use Mastodon from iOS, Android and other platforms + browse_directory: Browse a profile directory and filter by interests + browse_public_posts: Browse a live stream of public posts on Mastodon + contact: Contact + contact_missing: Not set + contact_unavailable: N/A + discover_users: Discover dogs + documentation: Documentation + federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond. + get_apps: Try a mobile app + hosted_on: Mastodon hosted on %{domain} + instance_actor_flash: | + This dog is a virtual actor used to represent the server itself and not any individual dog. + It is used for federation purposes and should not be blocked unless you want to block the whole instance, in which case you should use a domain block. + learn_more: Learn more + privacy_policy: Privacy policy + see_whats_happening: See what's happening + server_stats: 'Server stats:' + source_code: Source code + status_count_after: + one: toot + other: toots + status_count_before: Who authored + tagline: Join friends' packs and discover new ones + terms: Terms of service + unavailable_content: Unavailable content + unavailable_content_description: + domain: Server + reason: Reason + rejecting_media: 'Media files from these servers will not be processed or stored, and and no thumbnails will be displayed, requiring manual click-through to the original file:' + silenced: 'Posts from these servers will be hidden in public timelines and conversations, and no notifications will be generated from their users'' interactions, unless you are following them:' + suspended: 'No data from these servers will be processed, stored or exchanged, making any interaction or communication with users from these servers impossible:' + unavailable_content_html: Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server. + user_count_after: + one: dog + other: dogs + user_count_before: Home to + what_is_mastodon: What is Mastodon? + accounts: + choices_html: "%{name}'s choices:" + endorsements_hint: You can endorse dogs you follow from the web interface, and they will show up here. + featured_tags_hint: You can feature specific hashtags that will be displayed here. + follow: Join Pack + followers: + one: Pack Member + other: Pack Members + following: Joined Packs + joined: Joined %{date} + last_active: last active + link_verified_on: Ownership of this link was checked on %{date} + media: Media + moved_html: "%{name} has moved to %{new_profile_link}:" + network_hidden: This information is not available + never_active: Never + nothing_here: There is nothing here! + people_followed_by: Packs whom %{name} has joined + people_who_follow: "Dogs who joined %{name}'s pack" + pin_errors: + following: You must join the pack of the dog you want to endorse + posts: + one: Toot + other: Toots + posts_tab_heading: Toots + posts_with_replies: Toots and replies + reserved_username: The username is reserved + roles: + admin: Admin + bot: Bot + moderator: Mod + unavailable: Profile unavailable + unfollow: Leave pack + admin: + account_actions: + action: Perform action + title: Perform moderation action on %{acct} + account_moderation_notes: + create: Leave note + created_msg: Moderation note successfully created! + delete: Delete + destroyed_msg: Moderation note successfully destroyed! + accounts: + approve: Approve + approve_all: Approve all + are_you_sure: Are you sure? + avatar: Avatar + by_domain: Domain + change_email: + changed_msg: Account email successfully changed! + current_email: Current email + label: Change email + new_email: New email + submit: Change email + title: Change email for %{username} + confirm: Confirm + confirmed: Confirmed + confirming: Confirming + deleted: Deleted + demote: Demote + disable: Disable + disable_two_factor_authentication: Disable 2FA + disabled: Disabled + display_name: Display name + domain: Domain + edit: Edit + email: Email + email_status: Email status + enable: Enable + enabled: Enabled + feed_url: Feed URL + followers: Pack Members + followers_url: Pack Members URL + follows: Joined Packs + header: Header + inbox_url: Inbox URL + invited_by: Invited by + ip: IP + joined: Joined + location: + all: All + local: Local + remote: Remote + title: Location + login_status: Login status + media_attachments: Media attachments + memorialize: Turn into memoriam + moderation: + active: Active + all: All + pending: Pending + silenced: Silenced + suspended: Suspended + title: Moderation + moderation_notes: Moderation notes + most_recent_activity: Most recent activity + most_recent_ip: Most recent IP + no_account_selected: No accounts were changed as none were selected + no_limits_imposed: No limits imposed + not_subscribed: Not subscribed + outbox_url: Outbox URL + pending: Pending review + perform_full_suspension: Suspend + profile_url: Profile URL + promote: Promote + protocol: Protocol + public: Public + push_subscription_expires: PuSH subscription expires + redownload: Refresh profile + reject: Reject + reject_all: Reject all + remove_avatar: Remove avatar + remove_header: Remove header + resend_confirmation: + already_confirmed: This dog is already confirmed + send: Resend confirmation email + success: Confirmation email successfully sent! + reset: Reset + reset_password: Reset password + resubscribe: Resubscribe + role: Permissions + roles: + admin: Administrator + moderator: Moderator + staff: Staff + user: Dog + salmon_url: Salmon URL + search: Search + shared_inbox_url: Shared inbox URL + show: + created_reports: Made reports + targeted_reports: Reported by others + silence: Silence + silenced: Silenced + statuses: Toots + subscribe: Subscribe + suspended: Suspended + time_in_queue: Waiting in queue %{time} + title: Accounts + unconfirmed_email: Unconfirmed email + undo_silenced: Undo silence + undo_suspension: Undo suspension + unsubscribe: Unsubscribe + username: Username + warn: Warn + web: Web + whitelisted: Whitelisted + action_logs: + actions: + assigned_to_self_report: "%{name} assigned report %{target} to themselves" + change_email_user: "%{name} changed the e-mail address of dog %{target}" + confirm_user: "%{name} confirmed e-mail address of dog %{target}" + create_account_warning: "%{name} sent a warning to %{target}" + create_custom_emoji: "%{name} uploaded new emoji %{target}" + create_domain_block: "%{name} blocked domain %{target}" + create_email_domain_block: "%{name} blacklisted e-mail domain %{target}" + demote_user: "%{name} demoted dog %{target}" + destroy_custom_emoji: "%{name} destroyed emoji %{target}" + destroy_domain_block: "%{name} unblocked domain %{target}" + destroy_email_domain_block: "%{name} whitelisted e-mail domain %{target}" + destroy_status: "%{name} removed toot by %{target}" + disable_2fa_user: "%{name} disabled two factor requirement for dog %{target}" + disable_custom_emoji: "%{name} disabled emoji %{target}" + disable_user: "%{name} disabled login for dog %{target}" + enable_custom_emoji: "%{name} enabled emoji %{target}" + enable_user: "%{name} enabled login for dog %{target}" + memorialize_account: "%{name} turned %{target}'s account into a memoriam page" + promote_user: "%{name} promoted dog %{target}" + remove_avatar_user: "%{name} removed %{target}'s avatar" + reopen_report: "%{name} reopened report %{target}" + reset_password_user: "%{name} reset password of dog %{target}" + resolve_report: "%{name} resolved report %{target}" + silence_account: "%{name} silenced %{target}'s account" + suspend_account: "%{name} suspended %{target}'s account" + unassigned_report: "%{name} unassigned report %{target}" + unsilence_account: "%{name} unsilenced %{target}'s account" + unsuspend_account: "%{name} unsuspended %{target}'s account" + update_custom_emoji: "%{name} updated emoji %{target}" + update_status: "%{name} updated toot by %{target}" + deleted_status: "(deleted toot)" + title: Audit log + custom_emojis: + assign_category: Assign category + by_domain: Domain + copied_msg: Successfully created local copy of the emoji + copy: Copy + copy_failed_msg: Could not make a local copy of that emoji + create_new_category: Create new category + created_msg: Emoji successfully created! + delete: Delete + destroyed_msg: Emojo successfully destroyed! + disable: Disable + disabled: Disabled + disabled_msg: Successfully disabled that emoji + emoji: Emoji + enable: Enable + enabled: Enabled + enabled_msg: Successfully enabled that emoji + image_hint: PNG up to 50KB + list: List + listed: Listed + new: + title: Add new custom emoji + overwrite: Overwrite + shortcode: Shortcode + shortcode_hint: At least 2 characters, only alphanumeric characters and underscores + title: Custom emojis + uncategorized: Uncategorized + unlist: Unlist + unlisted: Unlisted + update_failed_msg: Could not update that emoji + updated_msg: Emoji successfully updated! + upload: Upload + dashboard: + authorized_fetch_mode: Secure mode + backlog: backlogged jobs + config: Configuration + feature_deletions: Account deletions + feature_invites: Invite links + feature_profile_directory: Profile directory + feature_registrations: Registrations + feature_relay: Federation relay + feature_spam_check: Anti-spam + feature_timeline_preview: Timeline preview + features: Features + hidden_service: Federation with hidden services + open_reports: open reports + pending_tags: hashtags waiting for review + pending_users: dogs waiting for review + recent_users: Recent dogs + search: Full-text search + single_user_mode: Single dog mode + software: Software + space: Space usage + title: Dashboard + total_users: dogs in total + trends: Trends + week_interactions: interactions this week + week_users_active: active this week + week_users_new: dogs this week + whitelist_mode: Whitelist mode + domain_allows: + add_new: Whitelist domain + created_msg: Domain has been successfully whitelisted + destroyed_msg: Domain has been removed from the whitelist + undo: Remove from whitelist + domain_blocks: + add_new: Add new + created_msg: Domain block is now being processed + destroyed_msg: Domain block has been undone + domain: Domain + edit: Edit domain block + existing_domain_block_html: You have already imposed stricter limits on %{name}, you need to unblock it first. + new: + create: Create block + hint: The domain block will not prevent creation of account entries in the database, but will retroactively and automatically apply specific moderation methods on those accounts. + severity: + desc_html: "Silence will make the account's posts invisible to anyone who hasn't joined their pack. Suspend will remove all of the account's content, media, and profile data. Use None if you just want to reject media files." + noop: None + silence: Silence + suspend: Suspend + title: New domain block + private_comment: Private bark + private_comment_hint: Bark about this domain limitation for internal use by the moderators. + public_comment: Public bark + public_comment_hint: Bark about this domain limitation for the general public, if advertising the list of domain limitations is enabled. + reject_media: Reject media files + reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions + reject_reports: Reject reports + reject_reports_hint: Ignore all reports coming from this domain. Irrelevant for suspensions + rejecting_media: rejecting media files + rejecting_reports: rejecting reports + severity: + silence: silenced + suspend: suspended + show: + affected_accounts: + one: One account in the database affected + other: "%{count} accounts in the database affected" + retroactive: + silence: Unsilence existing affected accounts from this domain + suspend: Unsuspend existing affected accounts from this domain + title: Undo domain block for %{domain} + undo: Undo + undo: Undo domain block + view: View domain block + email_domain_blocks: + add_new: Add new + created_msg: Successfully added e-mail domain to blacklist + delete: Delete + destroyed_msg: Successfully deleted e-mail domain from blacklist + domain: Domain + new: + create: Add domain + title: New e-mail blacklist entry + title: E-mail blacklist + followers: + back_to_account: Back To Account + title: "%{acct}'s Pack Members" + instances: + by_domain: Domain + delivery_available: Delivery is available + known_accounts: + one: "%{count} known account" + other: "%{count} known accounts" + moderation: + all: All + limited: Limited + title: Moderation + private_comment: Private bark + public_comment: Public bark + title: Federation + total_blocked_by_us: Blocked by us + total_followed_by_them: Packs joined by them + total_followed_by_us: Packs joined by us + total_reported: Reports about them + total_storage: Media attachments + invites: + deactivate_all: Deactivate all + filter: + all: All + available: Available + expired: Expired + title: Filter + title: Invites + pending_accounts: + title: Pending accounts (%{count}) + relays: + add_new: Add new relay + delete: Delete + description_html: A federation relay is an intermediary server that exchanges large volumes of public toots between servers that subscribe and publish to it. It can help small and medium servers discover content from the fediverse, which would otherwise require local dogs manually joining packs of other dogs on remote servers. + disable: Disable + disabled: Disabled + enable: Enable + enable_hint: Once enabled, your server will subscribe to all public toots from this relay, and will begin sending this server's public toots to it. + enabled: Enabled + inbox_url: Relay URL + pending: Waiting for relay's approval + save_and_enable: Save and enable + setup: Setup a relay connection + signatures_not_enabled: Relays will not work correctly while secure mode or whitelist mode is enabled + status: Status + title: Relays + report_notes: + created_msg: Report note successfully created! + destroyed_msg: Report note successfully deleted! + reports: + account: + note: note + report: report + action_taken_by: Action taken by + are_you_sure: Are you sure? + assign_to_self: Assign to me + assigned: Assigned moderator + comment: + none: None + created_at: Reported + mark_as_resolved: Mark as resolved + mark_as_unresolved: Mark as unresolved + notes: + create: Add note + create_and_resolve: Resolve with note + create_and_unresolve: Reopen with note + delete: Delete + placeholder: Describe what actions have been taken, or any other related updates... + reopen: Reopen report + report: 'Report #%{id}' + reported_account: Reported account + reported_by: Reported by + resolved: Resolved + resolved_msg: Report successfully resolved! + status: Status + title: Reports + unassign: Unassign + unresolved: Unresolved + updated_at: Updated + settings: + activity_api_enabled: + desc_html: Counts of locally posted toots, active dogs, and new registrations in weekly buckets + title: Publish aggregate statistics about dog activity + bootstrap_timeline_accounts: + desc_html: Separate multiple usernames by comma. Only local and unlocked accounts will work. Default when empty is all local admins. + title: Default packs for new dogs + contact_information: + email: Business e-mail + username: Contact username + custom_css: + desc_html: Modify the look with CSS loaded on every page + title: Custom CSS + default_noindex: + desc_html: Affects all dogs who have not changed this setting themselves + title: Opt dogs out of search engine indexing by default + domain_blocks: + all: To everyone + disabled: To no one + title: Show domain blocks + users: To logged-in local dogs + domain_blocks_rationale: + title: Show rationale + hero: + desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to server thumbnail + title: Hero image + mascot: + desc_html: Displayed on multiple pages. At least 293×205px recommended. When not set, falls back to default mascot + title: Mascot image + peers_api_enabled: + desc_html: Domain names this server has encountered in the fediverse + title: Publish list of discovered servers + preview_sensitive_media: + desc_html: Link previews on other websites will display a thumbnail even if the media is marked as sensitive + title: Show sensitive media in OpenGraph previews + profile_directory: + desc_html: Allow dogs to be discoverable + title: Enable profile directory + registrations: + closed_message: + desc_html: Displayed on frontpage when registrations are closed. You can use HTML tags + title: Closed registration message + deletion: + desc_html: Allow anyone to delete their account + title: Open account deletion + min_invite_role: + disabled: No one + title: Allow invitations by + registrations_mode: + modes: + approved: Approval required for sign up + none: Nobody can sign up + open: Anyone can sign up + title: Registrations mode + show_known_fediverse_at_about_page: + desc_html: When disabled, restricts the public timeline linked from the landing page to showing only local content + title: Include federated content on unauthenticated public timeline page + show_staff_badge: + desc_html: Show a staff badge on a dog page + title: Show staff badge + site_description: + desc_html: Introductory paragraph on the API. Describe what makes this Mastodon server special and anything else important. You can use HTML tags, in particular <a> and <em>. + title: Server description + site_description_extended: + desc_html: A good place for your code of conduct, rules, guidelines and other things that set your server apart. You can use HTML tags + title: Custom extended information + site_short_description: + desc_html: Displayed in sidebar and meta tags. Describe what Mastodon is and what makes this server special in a single paragraph. + title: Short server description + site_terms: + desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML tags + title: Custom terms of service + site_title: Server name + spam_check_enabled: + desc_html: Mastodon can auto-silence and auto-report dogs that send repeated unsolicited messages. There may be false positives. + title: Anti-spam automation + thumbnail: + desc_html: Used for previews via OpenGraph and API. 1200x630px recommended + title: Server thumbnail + timeline_preview: + desc_html: Display public timeline on landing page + title: Timeline preview + title: Site settings + trendable_by_default: + desc_html: Affects hashtags that have not been previously disallowed + title: Allow hashtags to trend without prior review + trends: + desc_html: Publicly display previously reviewed hashtags that are currently trending + title: Trending hashtags + statuses: + back_to_account: Back to account page + batch: + delete: Delete + nsfw_off: Mark as not sensitive + nsfw_on: Mark as sensitive + deleted: Deleted + failed_to_execute: Failed to execute + media: + title: Media + no_media: No media + no_status_selected: No toots were changed as none were selected + title: Account Toots + with_media: With media + tags: + accounts_today: Unique uses today + accounts_week: Unique uses this week + breakdown: Breakdown of today's usage by source + context: Context + directory: In directory + in_directory: "%{count} in directory" + last_active: Last active + most_popular: Most popular + most_recent: Most recent + name: Hashtag + review: Review status + reviewed: Reviewed + title: Hashtags + trending_right_now: Trending right now + unique_uses_today: "%{count} posting today" + unreviewed: Not reviewed + updated_msg: Hashtag settings updated successfully + title: Administration + warning_presets: + add_new: Add new + delete: Delete + edit: Edit + edit_preset: Edit warning preset + title: Manage warning presets + admin_mailer: + new_pending_account: + body: The details of the new account are below. You can approve or reject this application. + subject: New account up for review on %{instance} (%{username}) + new_report: + body: "%{reporter} has reported %{target}" + body_remote: Someone from %{domain} has reported %{target} + subject: New report for %{instance} (#%{id}) + new_trending_tag: + body: 'The hashtag #%{name} is trending today, but has not been previously reviewed. It will not be displayed publicly unless you allow it to, or just save the form as it is to never hear about it again.' + subject: New hashtag up for review on %{instance} (#%{name}) + aliases: + add_new: Create alias + created_msg: Successfully created a new alias. You can now initiate the move from the old account. + deleted_msg: Successfully remove the alias. Moving from that account to this one will no longer be possible. + hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is harmless and reversible. The account migration is initiated from the old account. + remove: Unlink alias + appearance: + advanced_web_interface: Advanced web interface + advanced_web_interface_hint: 'If you want to make use of your entire screen width, the advanced web interface allows you to configure many different columns to see as much information at the same time as you want: Home, notifications, federated timeline, any number of lists and hashtags.' + animations_and_accessibility: Animations and accessibility + confirmation_dialogs: Confirmation dialogs + discovery: Discovery + sensitive_content: Sensitive content + application_mailer: + notification_preferences: Change e-mail preferences + salutation: "%{name}," + settings: 'Change e-mail preferences: %{link}' + view: 'View:' + view_profile: View profile + view_status: View toot + applications: + created: Application successfully created + destroyed: Application successfully deleted + invalid_url: The provided URL is invalid + regenerate_token: Regenerate access token + token_regenerated: Access token successfully regenerated + warning: Be very careful with this data. Never share it with anyone! + your_token: Your access token + auth: + apply_for_account: Request an invite + change_password: Password + checkbox_agreement_html: I agree to the server rules and terms of service + confirm_email: Confirm email + delete_account: Delete account + delete_account_html: If you wish to delete your account, you can proceed here. You will be asked for confirmation. + description: + prefix_invited_by_user: "@%{name} invites you to join this server of Mastodon!" + prefix_sign_up: Sign up on Mastodon today! + suffix: With an account, you will be able to follow people, post updates and exchange messages with users from any Mastodon server and more! + didnt_get_confirmation: Didn't receive confirmation instructions? + forgot_password: Forgot your password? + invalid_reset_password_token: Password reset token is invalid or expired. Please request a new one. + login: Log in + logout: Logout + migrate_account: Move to a different account + migrate_account_html: If you wish to redirect this account to a different one, you can configure it here. + or_log_in_with: Or log in with + providers: + cas: CAS + saml: SAML + register: Sign up + registration_closed: "%{instance} is not accepting new members" + resend_confirmation: Resend confirmation instructions + reset_password: Reset password + security: Security + set_new_password: Set new password + setup: + email_below_hint_html: If the below e-mail address is incorrect, you can change it here and receive a new confirmation e-mail. + email_settings_hint_html: The confirmation e-mail was sent to %{email}. If that e-mail address is not correct, you can change it in account settings. + title: Setup + status: + account_status: Account status + confirming: Waiting for e-mail confirmation to be completed. + functional: Your account is fully operational. + pending: Your application is pending review by our staff. This may take some time. You will receive an e-mail if your application is approved. + redirecting_to: Your account is inactive because it is currently redirecting to %{acct}. + trouble_logging_in: Trouble logging in? + authorize_follow: + already_following: You already joined this pack + error: Unfortunately, there was an error looking up the remote account + follow: Join Pack + follow_request: 'You have sent a pack request to:' + following: 'Success! You are now a pack member of:' + post_follow: + close: Or, you can just close this window. + return: Show the dog's profile + web: Go to web + title: "Join %{acct}'s pack" + challenge: + confirm: Continue + hint_html: "Tip: We won't ask you for your password again for the next hour." + invalid_password: Invalid password + prompt: Confirm password to continue + datetime: + distance_in_words: + about_x_hours: "%{count}h" + about_x_months: "%{count}mo" + about_x_years: "%{count}y" + almost_x_years: "%{count}y" + half_a_minute: Just now + less_than_x_minutes: "%{count}m" + less_than_x_seconds: Just now + over_x_years: "%{count}y" + x_days: "%{count}d" + x_minutes: "%{count}m" + x_months: "%{count}mo" + x_seconds: "%{count}s" + deletes: + challenge_not_passed: The information you entered was not correct + confirm_password: Enter your current password to verify your identity + confirm_username: Enter your username to confirm the procedure + proceed: Delete account + success_msg: Your account was successfully deleted + warning: + before: 'Before proceeding, please read these notes carefully:' + caches: Content that has been cached by other servers may persist + data_removal: Your posts and other data will be permanently removed + email_change_html: You can change your e-mail address without deleting your account + email_contact_html: If it still doesn't arrive, you can e-mail %{email} for help + email_reconfirmation_html: If you are not receiving the confirmation e-mail, you can request it again + irreversible: You will not be able to restore or reactivate your account + more_details_html: For more details, see the privacy policy. + username_available: Your username will become available again + username_unavailable: Your username will remain unavailable + directories: + directory: Profile directory + explanation: Discover dogs based on their interests + explore_mastodon: Explore %{title} + domain_validator: + invalid_domain: is not a valid domain name + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + content: Security verification failed. Are you blocking cookies? + title: Security verification failed + '429': Throttled + '500': + content: We're sorry, but something went wrong on our end. + title: This page is not correct + '503': The page could not be served due to a temporary server failure. + noscript_html: To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform. + existing_username_validator: + not_found: could not find a local dog with that username + not_found_multiple: could not find %{usernames} + exports: + archive_takeout: + date: Date + download: Download your archive + hint_html: You can request an archive of your toots and uploaded media. The exported data will be in ActivityPub format, readable by any compliant software. + in_progress: Compiling your archive... + request: Request your archive + size: Size + blocks: You block + csv: CSV + domain_blocks: Domain blocks + follows: You have joined + lists: Lists + mutes: You mute + storage: Media storage + featured_tags: + add_new: Add new + errors: + limit: You have already featured the maximum amount of hashtags + hint_html: "What are featured hashtags? They are displayed prominently on your public profile and allow people to browse your public posts specifically under those hashtags. They are a great tool for keeping track of creative works or long-term projects." + filters: + contexts: + home: Home timeline + notifications: Notifications + public: Public timelines + thread: Conversations + edit: + title: Edit filter + errors: + invalid_context: None or invalid context supplied + invalid_irreversible: Irreversible filtering only works with home or notifications context + index: + delete: Delete + title: Filters + new: + title: Add new filter + footer: + developers: Developers + more: More… + resources: Resources + trending_now: Trending now + generic: + all: All + changes_saved_msg: Changes successfully saved! + copy: Copy + no_batch_actions_available: No batch actions available on this page + order_by: Order by + save_changes: Save changes + validation_errors: + one: Something isn't quite right yet! Please review the error below + other: Something isn't quite right yet! Please review %{count} errors below + html_validator: + invalid_markup: 'contains invalid HTML markup: %{error}' + identity_proofs: + active: Active + authorize: Yes, authorize + authorize_connection_prompt: Authorize this cryptographic connection? + errors: + failed: The cryptographic connection failed. Please try again from %{provider}. + keybase: + invalid_token: Keybase tokens are hashes of signatures and must be 66 hex characters + verification_failed: Keybase does not recognize this token as a signature of Keybase user %{kb_username}. Please retry from Keybase. + wrong_user: Cannot create a proof for %{proving} while logged in as %{current}. Log in as %{proving} and try again. + explanation_html: Here you can cryptographically connect your other identities, such as a Keybase profile. This lets other people send you encrypted messages and trust content you send them. + i_am_html: I am %{username} on %{service}. + identity: Identity + inactive: Inactive + publicize_checkbox: 'And toot this:' + publicize_toot: 'It is proven! I am %{username} on %{service}: %{url}' + status: Verification status + view_proof: View proof + imports: + modes: + merge: Merge + merge_long: Keep existing records and add new ones + overwrite: Overwrite + overwrite_long: Replace current records with the new ones + preface: You can import data that you have exported from another server, such as a list of the packs you have joined or dogs you are blocking. + success: Your data was successfully uploaded and will now be processed in due time + types: + blocking: Blocking list + domain_blocking: Domain blocking list + following: Pack list + muting: Muting list + upload: Upload + in_memoriam_html: In Memoriam. + invites: + delete: Deactivate + expired: Expired + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day + expires_in_prompt: Never + generate: Generate invite link + invited_by: 'You were invited by:' + max_uses: + one: 1 use + other: "%{count} uses" + max_uses_prompt: No limit + prompt: Generate and share links with others to grant access to this server + table: + expires_at: Expires + uses: Uses + title: Invite dogs + lists: + errors: + limit: You have reached the maximum amount of lists + media_attachments: + validations: + images_and_video: Cannot attach a video to a toot that already contains images + too_many: Cannot attach more than 4 files + migrations: + acct: Moved to + cancel: Cancel redirect + cancel_explanation: Cancelling the redirect will re-activate your current account, but will not bring back followers that have been moved to that account. + cancelled_msg: Successfully cancelled the redirect. + errors: + already_moved: is the same account you have already moved to + missing_also_known_as: is not back-referencing this account + move_to_self: cannot be current account + not_found: could not be found + on_cooldown: You are on cooldown + followers_count: Pack Members at time of move + incoming_migrations: Moving from a different account + incoming_migrations_html: To move from another account to this one, first you need to create an account alias. + moved_msg: Your account is now redirecting to %{acct} and your followers are being moved over. + not_redirecting: Your account is not redirecting to any other account currently. + on_cooldown: You have recently migrated your account. This function will become available again in %{count} days. + past_migrations: Past migrations + proceed_with_move: Move followers + redirecting_to: Your account is redirecting to %{acct}. + set_redirect: Set redirect + warning: + backreference_required: The new account must first be configured to back-reference this one + before: 'Before proceeding, please read these notes carefully:' + cooldown: After moving there is a cooldown period during which you will not be able to move again + disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation. + followers: This action will move all followers from the current account to the new account + only_redirect_html: Alternatively, you can only put up a redirect on your profile. + other_data: No other data will be moved automatically + redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches + moderation: + title: Moderation + notification_mailer: + digest: + action: View all notifications + body: Here is a brief summary of the messages you missed since your last visit on %{since} + mention: "%{name} barked at you in:" + new_followers_summary: + one: Also, you have acquired one new pack member while being away! Yay! + other: Also, you have acquired %{count} new pack members while being away! Amazing! + subject: + one: "1 new notification since your last visit \U0001F418" + other: "%{count} new notifications since your last visit \U0001F418" + title: In your absence… + favourite: + body: 'Your toot was booped by %{name}:' + subject: "%{name} booped your toot" + title: New boop + follow: + body: "%{name} joined your pack!" + subject: "%{name} joined your pack" + title: New pack member + follow_request: + action: Manage pack requests + body: "%{name} has requested to join your pack" + subject: 'Pending pack member: %{name}' + title: New pack request + mention: + action: Bark + body: '%{name} barked at you in:' + subject: "%{name} barked at you" + title: New bark + reblog: + body: 'Your toot was awooed by %{name}:' + subject: "%{name} awooed your toot" + title: New awoo + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' + pagination: + newer: Newer + next: Next + older: Older + prev: Prev + truncate: "…" + polls: + errors: + already_voted: You have already voted on this poll + duplicate_options: contain duplicate items + duration_too_long: is too far into the future + duration_too_short: is too soon + expired: The poll has already ended + over_character_limit: cannot be longer than %{max} characters each + too_few_options: must have more than one item + too_many_options: can't contain more than %{max} items + preferences: + other: Other + posting_defaults: Posting defaults + public_timelines: Public timelines + relationships: + activity: Account activity + dormant: Dormant + last_active: Last active + most_recent: Most recent + moved: Moved + mutual: Mutual + primary: Primary + relationship: Relationship + remove_selected_domains: Remove all pack members from the selected domains + remove_selected_followers: Remove selected pack members + remove_selected_follows: Leave selected dogs' packs + status: Account status + remote_follow: + acct: Enter your username@domain you want to act from + missing_resource: Could not find the required redirect URL for your account + no_account_html: Don't have an account? You can sign up here + proceed: Proceed to join pack + prompt: 'You are going to join the pack of:' + reason_html: "Why is this step necessary? %{instance} might not be the server where you are registered, so we need to redirect you to your home server first." + remote_interaction: + favourite: + proceed: Proceed to boop + prompt: 'You want to boop this toot:' + reblog: + proceed: Proceed to awoo + prompt: 'You want to awoo this toot:' + reply: + proceed: Proceed to bark + prompt: 'You want to bark at this toot:' + scheduled_statuses: + over_daily_limit: You have exceeded the limit of %{limit} scheduled toots for that day + over_total_limit: You have exceeded the limit of %{limit} scheduled toots + too_soon: The scheduled date must be in the future + sessions: + activity: Last activity + browser: Browser + browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Unknown browser + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo + current_session: Current session + description: "%{browser} on %{platform}" + explanation: These are the web browsers currently logged in to your Mastodon account. + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac + other: unknown platform + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Revoke + revoke_success: Session successfully revoked + title: Sessions + settings: + account: Account + account_settings: Account settings + aliases: Account aliases + appearance: Appearance + authorized_apps: Authorized apps + back: Back to Mastodon + delete: Account deletion + development: Development + edit_profile: Edit profile + export: Data export + featured_tags: Featured hashtags + identity_proofs: Identity proofs + import: Import + import_and_export: Import and export + migrate: Account migration + notifications: Notifications + preferences: Preferences + profile: Profile + relationships: Packs and Pack Members + two_factor_authentication: Two-factor Auth + spam_check: + spam_detected_and_silenced: This is an automated report. Spam has been detected and the sender has been silenced automatically. If this is a mistake, please unsilence the account. + statuses: + attached: + description: 'Attached: %{attached}' + image: + one: "%{count} image" + other: "%{count} images" + video: + one: "%{count} video" + other: "%{count} videos" + boosted_from_html: Awooed from %{acct_link} + content_warning: 'Content warning: %{warning}' + disallowed_hashtags: + one: 'contained a disallowed hashtag: %{tags}' + other: 'contained the disallowed hashtags: %{tags}' + language_detection: Automatically detect language + open_in_web: Open in web + over_character_limit: character limit of %{max} exceeded + pin_errors: + limit: You have already pinned the maximum number of toots + ownership: Someone else's toot cannot be pinned + private: Non-public toot cannot be pinned + reblog: An awoo cannot be pinned + poll: + total_people: + one: "%{count} dog" + other: "%{count} dogs" + total_votes: + one: "%{count} vote" + other: "%{count} votes" + vote: Vote + show_more: Show more + sign_in_to_participate: Sign in to participate in the conversation + strip_formatting: + all: All + all_long: Strip all advanced formatting + blocks: Block elements + blocks_long: Strip formatting for title headers and block quotes + none: None + none_long: Do not strip any formatting supported by Mastodon + title: '%{name}: "%{quote}"' + visibilities: + private: Pack Members only + private_long: Only show to pack members + public: Public + public_long: Everyone can see + unlisted: Unlisted + unlisted_long: Everyone can see, but not listed on public timelines + stream_entries: + pinned: Pinned toot + reblogged: awooed + sensitive_content: Sensitive content + tags: + does_not_match_previous_name: does not match the previous name + terms: + body_html: | +

Privacy Policy

+

What information do we collect?

+ + + +
+ +

What do we use your information for?

+ +

Any of the information we collect from you may be used in the following ways:

+ + + +
+ +

How do we protect your information?

+ +

We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.

+ +
+ +

What is our data retention policy?

+ +

We will make a good faith effort to:

+ + + +

You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.

+ +

You may irreversibly delete your account at any time.

+ +
+ +

Do we use cookies?

+ +

Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.

+ +

We use cookies to understand and save your preferences for future visits.

+ +
+ +

Do we disclose any information to outside parties?

+ +

We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.

+ +

Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.

+ +

When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your boops. Applications can never access your e-mail address or password.

+ +
+ +

Site usage by children

+ +

If this server is in the EU or the EEA: Our site, products and services are all directed to dogs who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site.

+ +

If this server is in the USA: Our site, products and services are all directed to dogs who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site.

+ +

Law requirements can be different if this server is in another jurisdiction.

+ +
+ +

Changes to our Privacy Policy

+ +

If we decide to change our privacy policy, we will post those changes on this page.

+ +

This document is CC-BY-SA. It was last updated March 7, 2018.

+ +

Originally adapted from the Discourse privacy policy.

+ title: "%{instance} Terms of Service and Privacy Policy" + themes: + contrast: High contrast + contrast-wider: High contrast (wider) + pop: Pop + pop-wider: Pop (wider) + pop-light: Pop (light) + pop-light-wider: Pop (light, wider) + mastodon: Mastodon + mastodon-wider: Mastodon (wider) + mastodon-light: Mastodon (light) + mastodon-light-wider: Mastodon (light, wider) + werefox: Werefox Software Theme + werefox-wider: Werefox Software Theme but W I D E + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" + two_factor_authentication: + code_hint: Enter the code generated by your authenticator app to confirm + description_html: If you enable two-factor authentication, logging in will require you to be in possession of your phone, which will generate tokens for you to enter. + disable: Disable + enable: Enable + enabled: Two-factor authentication is enabled + enabled_success: Two-factor authentication successfully enabled + generate_recovery_codes: Generate recovery codes + instructions_html: "Scan this QR code into Google Authenticator or a similiar TOTP app on your phone. From now on, that app will generate tokens that you will have to enter when logging in." + lost_recovery_codes: Recovery codes allow you to regain access to your account if you lose your phone. If you've lost your recovery codes, you can regenerate them here. Your old recovery codes will be invalidated. + manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:' + recovery_codes: Backup recovery codes + recovery_codes_regenerated: Recovery codes successfully regenerated + recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. Keep the recovery codes safe. For example, you may print them and store them with other important documents. + setup: Set up + wrong_code: The entered code was invalid! Are server time and device time correct? + user_mailer: + backup_ready: + explanation: You requested a full backup of your Mastodon account. It's now ready for download! + subject: Your archive is ready for download + title: Archive takeout + warning: + explanation: + disable: While your account is frozen, your account data remains intact, but you cannot perform any actions until it is unlocked. + silence: While your account is limited, only dogs who have already joined your pack will see your toots on this server, and you may be excluded from various public listings. However, others may still manually join your pack. + suspend: Your account has been suspended, and all of your toots and your uploaded media files have been irreversibly removed from this server, and servers where you had pack members. + get_in_touch: You can reply to this e-mail to get in touch with the staff of %{instance}. + review_server_policies: Review server policies + statuses: 'Specifically, for:' + subject: + disable: Your account %{acct} has been frozen + none: Warning for %{acct} + silence: Your account %{acct} has been limited + suspend: Your account %{acct} has been suspended + title: + disable: Account frozen + none: Warning + silence: Account limited + suspend: Account suspended + welcome: + edit_profile_action: Setup profile + edit_profile_step: You can customize your profile by uploading an avatar, header, changing your display name and more. If you’d like to review new pack members before they’re allowed to join your pack, you can lock your account. + explanation: Here are some tips to get you started + final_action: Start posting + final_step: 'Start posting! Even without pack members your public messages may be seen by others, for example on the local timeline and in hashtags. You may want to introduce yourself on the #introductions hashtag.' + full_handle: Your full handle + full_handle_hint: This is what you would tell your friends so they can bark at or join your pack from another server. + review_preferences_action: Change preferences + review_preferences_step: Make sure to set your preferences, such as which emails you'd like to receive, or what privacy level you’d like your posts to default to. If you don’t have motion sickness, you could choose to enable GIF autoplay. + subject: Welcome to Mastodon + tip_federated_timeline: The federated timeline is a firehose view of the Mastodon network. But it only includes dogs your neighbours are subscribed to, so it's not complete. + tip_following: You join the pack of your server's admin(s) by default. To find more interesting dogs, check the local and federated timelines. + tip_local_timeline: The local timeline is a firehose view of dogs on %{instance}. These are your immediate neighbours! + tip_mobile_webapp: If your mobile browser offers you to add Mastodon to your homescreen, you can receive push notifications. It acts like a native app in many ways! + tips: Tips + title: Welcome aboard, %{name}! + users: + follow_limit_reached: You cannot join more than %{limit} packs + invalid_email: The e-mail address is invalid + invalid_otp_token: Invalid two-factor code + otp_lost_help_html: If you lost access to both, you may get in touch with %{email} + seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available. + signed_in_as: 'Signed in as:' + verification: + explanation_html: 'You can verify yourself as the owner of the links in your profile metadata. For that, the linked website must contain a link back to your Mastodon profile. The link back must have a rel="me" attribute. The text content of the link does not matter. Here is an example:' + verification: Verification diff --git a/config/locales/doorkeeper.dog.yml b/config/locales/doorkeeper.dog.yml new file mode 100644 index 000000000..a660fdd14 --- /dev/null +++ b/config/locales/doorkeeper.dog.yml @@ -0,0 +1,148 @@ +--- +dog: + activerecord: + attributes: + doorkeeper/application: + name: Application name + redirect_uri: Redirect URI + scopes: Scopes + website: Application website + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: cannot contain a fragment. + invalid_uri: must be a valid URI. + relative_uri: must be an absolute URI. + secured_uri: must be an HTTPS/SSL URI. + doorkeeper: + applications: + buttons: + authorize: Authorize + cancel: Cancel + destroy: Destroy + edit: Edit + submit: Submit + confirmations: + destroy: Are you sure? + edit: + title: Edit application + form: + error: Whoops! Check your form for possible errors + help: + native_redirect_uri: Use %{native_redirect_uri} for local tests + redirect_uri: Use one line per URI + scopes: Separate scopes with spaces. Leave blank to use the default scopes. + index: + application: Application + callback_url: Callback URL + delete: Delete + name: Name + new: New application + scopes: Scopes + show: Show + title: Your applications + new: + title: New application + show: + actions: Actions + application_id: Client key + callback_urls: Callback URLs + scopes: Scopes + secret: Client secret + title: 'Application: %{name}' + authorizations: + buttons: + authorize: Authorize + deny: Deny + error: + title: An error has occurred + new: + able_to: It will be able to + prompt: Application %{client_name} requests access to your account + title: Authorization required + show: + title: Copy this authorization code and paste it to the application. + authorized_applications: + buttons: + revoke: Revoke + confirmations: + revoke: Are you sure? + index: + application: Application + created_at: Authorized + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Scopes + title: Your authorized applications + errors: + messages: + access_denied: The resource owner or authorization server denied the request. + credential_flow_not_configured: Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured. + invalid_client: Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method. + invalid_grant: The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client. + invalid_redirect_uri: The redirect uri included is not valid. + invalid_request: The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed. + invalid_resource_owner: The provided resource owner credentials are not valid, or resource owner cannot be found + invalid_scope: The requested scope is invalid, unknown, or malformed. + invalid_token: + expired: The access token expired + revoked: The access token was revoked + unknown: The access token is invalid + resource_owner_authenticator_not_configured: Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged. + server_error: The authorization server encountered an unexpected condition which prevented it from fulfilling the request. + temporarily_unavailable: The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server. + unauthorized_client: The client is not authorized to perform this request using this method. + unsupported_grant_type: The authorization grant type is not supported by the authorization server. + unsupported_response_type: The authorization server does not support this response type. + flash: + applications: + create: + notice: Application created. + destroy: + notice: Application deleted. + update: + notice: Application updated. + authorized_applications: + destroy: + notice: Application revoked. + layouts: + admin: + nav: + applications: Applications + oauth2_provider: OAuth2 Provider + application: + title: OAuth authorization required + scopes: + admin:read: read all data on the server + admin:read:accounts: read sensitive information of all accounts + admin:read:reports: read sensitive information of all reports and reported accounts + admin:write: modify all data on the server + admin:write:accounts: perform moderation actions on accounts + admin:write:reports: perform moderation actions on reports + follow: modify account relationships + push: receive your push notifications + read: read all your account's data + read:accounts: see accounts information + read:blocks: see your blocks + read:favourites: see your favourites + read:filters: see your filters + read:follows: see your joined packs + read:lists: see your lists + read:mutes: see your mutes + read:notifications: see your notifications + read:reports: see your reports + read:search: search on your behalf + read:statuses: see all toots + write: modify all your account's data + write:accounts: modify your profile + write:blocks: block accounts and domains + write:favourites: favourite toots + write:filters: create filters + write:follows: join packs + write:lists: create lists + write:media: upload media files + write:mutes: mute dogs and conversations + write:notifications: clear your notifications + write:reports: report other dogs + write:statuses: publish toots diff --git a/config/locales/doorkeeper.lion.yml b/config/locales/doorkeeper.lion.yml new file mode 100644 index 000000000..667342c5f --- /dev/null +++ b/config/locales/doorkeeper.lion.yml @@ -0,0 +1,148 @@ +--- +lion: + activerecord: + attributes: + doorkeeper/application: + name: Application name + redirect_uri: Redirect URI + scopes: Scopes + website: Application website + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: cannot contain a fragment. + invalid_uri: must be a valid URI. + relative_uri: must be an absolute URI. + secured_uri: must be an HTTPS/SSL URI. + doorkeeper: + applications: + buttons: + authorize: Authorize + cancel: Cancel + destroy: Destroy + edit: Edit + submit: Submit + confirmations: + destroy: Are you sure? + edit: + title: Edit application + form: + error: Whoops! Check your form for possible errors + help: + native_redirect_uri: Use %{native_redirect_uri} for local tests + redirect_uri: Use one line per URI + scopes: Separate scopes with spaces. Leave blank to use the default scopes. + index: + application: Application + callback_url: Callback URL + delete: Delete + name: Name + new: New application + scopes: Scopes + show: Show + title: Your applications + new: + title: New application + show: + actions: Actions + application_id: Client key + callback_urls: Callback URLs + scopes: Scopes + secret: Client secret + title: 'Application: %{name}' + authorizations: + buttons: + authorize: Authorize + deny: Deny + error: + title: An error has occurred + new: + able_to: It will be able to + prompt: Application %{client_name} requests access to your account + title: Authorization required + show: + title: Copy this authorization code and paste it to the application. + authorized_applications: + buttons: + revoke: Revoke + confirmations: + revoke: Are you sure? + index: + application: Application + created_at: Authorized + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Scopes + title: Your authorized applications + errors: + messages: + access_denied: The resource owner or authorization server denied the request. + credential_flow_not_configured: Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured. + invalid_client: Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method. + invalid_grant: The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client. + invalid_redirect_uri: The redirect uri included is not valid. + invalid_request: The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed. + invalid_resource_owner: The provided resource owner credentials are not valid, or resource owner cannot be found + invalid_scope: The requested scope is invalid, unknown, or malformed. + invalid_token: + expired: The access token expired + revoked: The access token was revoked + unknown: The access token is invalid + resource_owner_authenticator_not_configured: Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged. + server_error: The authorization server encountered an unexpected condition which prevented it from fulfilling the request. + temporarily_unavailable: The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server. + unauthorized_client: The client is not authorized to perform this request using this method. + unsupported_grant_type: The authorization grant type is not supported by the authorization server. + unsupported_response_type: The authorization server does not support this response type. + flash: + applications: + create: + notice: Application created. + destroy: + notice: Application deleted. + update: + notice: Application updated. + authorized_applications: + destroy: + notice: Application revoked. + layouts: + admin: + nav: + applications: Applications + oauth2_provider: OAuth2 Provider + application: + title: OAuth authorization required + scopes: + admin:read: read all data on the server + admin:read:accounts: read sensitive information of all accounts + admin:read:reports: read sensitive information of all reports and reported accounts + admin:write: modify all data on the server + admin:write:accounts: perform moderation actions on accounts + admin:write:reports: perform moderation actions on reports + follow: modify account relationships + push: receive your push notifications + read: read all your account's data + read:accounts: see accounts information + read:blocks: see your blocks + read:favourites: see your favourites + read:filters: see your filters + read:follows: see your joined prides + read:lists: see your lists + read:mutes: see your mutes + read:notifications: see your notifications + read:reports: see your reports + read:search: search on your behalf + read:statuses: see all toots + write: modify all your account's data + write:accounts: modify your profile + write:blocks: block accounts and domains + write:favourites: favourite toots + write:filters: create filters + write:follows: join prides + write:lists: create lists + write:media: upload media files + write:mutes: mute lions and conversations + write:notifications: clear your notifications + write:reports: report other lions + write:statuses: publish toots diff --git a/config/locales/doorkeeper.squeak.yml b/config/locales/doorkeeper.squeak.yml new file mode 100644 index 000000000..b410226cb --- /dev/null +++ b/config/locales/doorkeeper.squeak.yml @@ -0,0 +1,148 @@ +--- +squeak: + activerecord: + attributes: + doorkeeper/application: + name: Application name + redirect_uri: Redirect URI + scopes: Scopes + website: Application website + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: cannot contain a fragment. + invalid_uri: must be a valid URI. + relative_uri: must be an absolute URI. + secured_uri: must be an HTTPS/SSL URI. + doorkeeper: + applications: + buttons: + authorize: Authorize + cancel: Cancel + destroy: Destroy + edit: Edit + submit: Submit + confirmations: + destroy: Are you sure? + edit: + title: Edit application + form: + error: Whoops! Check your form for possible errors + help: + native_redirect_uri: Use %{native_redirect_uri} for local tests + redirect_uri: Use one line per URI + scopes: Separate scopes with spaces. Leave blank to use the default scopes. + index: + application: Application + callback_url: Callback URL + delete: Delete + name: Name + new: New application + scopes: Scopes + show: Show + title: Your applications + new: + title: New application + show: + actions: Actions + application_id: Client key + callback_urls: Callback URLs + scopes: Scopes + secret: Client secret + title: 'Application: %{name}' + authorizations: + buttons: + authorize: Authorize + deny: Deny + error: + title: An error has occurred + new: + able_to: It will be able to + prompt: Application %{client_name} requests access to your account + title: Authorization required + show: + title: Copy this authorization code and paste it to the application. + authorized_applications: + buttons: + revoke: Revoke + confirmations: + revoke: Are you sure? + index: + application: Application + created_at: Authorized + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Scopes + title: Your authorized applications + errors: + messages: + access_denied: The resource owner or authorization server denied the request. + credential_flow_not_configured: Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured. + invalid_client: Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method. + invalid_grant: The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client. + invalid_redirect_uri: The redirect uri included is not valid. + invalid_request: The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed. + invalid_resource_owner: The provided resource owner credentials are not valid, or resource owner cannot be found + invalid_scope: The requested scope is invalid, unknown, or malformed. + invalid_token: + expired: The access token expired + revoked: The access token was revoked + unknown: The access token is invalid + resource_owner_authenticator_not_configured: Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged. + server_error: The authorization server encountered an unexpected condition which prevented it from fulfilling the request. + temporarily_unavailable: The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server. + unauthorized_client: The client is not authorized to perform this request using this method. + unsupported_grant_type: The authorization grant type is not supported by the authorization server. + unsupported_response_type: The authorization server does not support this response type. + flash: + applications: + create: + notice: Application created. + destroy: + notice: Application deleted. + update: + notice: Application updated. + authorized_applications: + destroy: + notice: Application revoked. + layouts: + admin: + nav: + applications: Applications + oauth2_provider: OAuth2 Provider + application: + title: OAuth authorization required + scopes: + admin:read: read all data on the server + admin:read:accounts: read sensitive information of all accounts + admin:read:reports: read sensitive information of all reports and reported accounts + admin:write: modify all data on the server + admin:write:accounts: perform moderation actions on accounts + admin:write:reports: perform moderation actions on reports + follow: modify account relationships + push: receive your push notifications + read: read all your account's data + read:accounts: see accounts information + read:blocks: see your blocks + read:favourites: see your squeaks + read:filters: see your filters + read:follows: see your followed blimps + read:lists: see your lists + read:mutes: see your mutes + read:notifications: see your notifications + read:reports: see your reports + read:search: search on your behalf + read:statuses: see all toots + write: modify all your account's data + write:accounts: modify your profile + write:blocks: block accounts and domains + write:favourites: squeaked toots + write:filters: create filters + write:follows: follow blimps + write:lists: create lists + write:media: upload media files + write:mutes: mute blimps and conversations + write:notifications: clear your notifications + write:reports: report other blimps + write:statuses: publish toots diff --git a/config/locales/en.yml b/config/locales/en.yml index be66b6c6c..575157649 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1042,6 +1042,13 @@ en: vote: Vote show_more: Show more sign_in_to_participate: Sign in to participate in the conversation + strip_formatting: + all: All + all_long: Strip all advanced formatting + blocks: Block elements + blocks_long: Strip formatting for title headers and block quotes + none: None + none_long: Do not strip any formatting supported by Mastodon title: '%{name}: "%{quote}"' visibilities: private: Followers-only diff --git a/config/locales/lion.yml b/config/locales/lion.yml new file mode 100644 index 000000000..fc240534f --- /dev/null +++ b/config/locales/lion.yml @@ -0,0 +1,1231 @@ +--- +lion: + about: + about_hashtag_html: These are public toots tagged with #%{hashtag}. You can interact with them if you have an account anywhere in the fediverse. + about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!' + about_this: About + active_count_after: active + active_footnote: Monthly Active Lions (MAL) + administered_by: 'Administered by:' + api: API + apps: Mobile apps + apps_platforms: Use Mastodon from iOS, Android and other platforms + browse_directory: Browse a profile directory and filter by interests + browse_public_posts: Browse a live stream of public posts on Mastodon + contact: Contact + contact_missing: Not set + contact_unavailable: N/A + discover_users: Discover lions + documentation: Documentation + federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond. + get_apps: Try a mobile app + hosted_on: Mastodon hosted on %{domain} + instance_actor_flash: | + This lion is a virtual actor used to represent the server itself and not any individual lion. + It is used for federation purposes and should not be blocked unless you want to block the whole instance, in which case you should use a domain block. + learn_more: Learn more + privacy_policy: Privacy policy + see_whats_happening: See what's happening + server_stats: 'Server stats:' + source_code: Source code + status_count_after: + one: toot + other: toots + status_count_before: Who authored + tagline: Join friends' prides and discover new ones + terms: Terms of service + unavailable_content: Unavailable content + unavailable_content_description: + domain: Server + reason: Reason + rejecting_media: 'Media files from these servers will not be processed or stored, and and no thumbnails will be displayed, requiring manual click-through to the original file:' + silenced: 'Posts from these servers will be hidden in public timelines and conversations, and no notifications will be generated from their users'' interactions, unless you are following them:' + suspended: 'No data from these servers will be processed, stored or exchanged, making any interaction or communication with users from these servers impossible:' + unavailable_content_html: Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server. + user_count_after: + one: lion + other: lions + user_count_before: Home to + what_is_mastodon: What is Mastodon? + accounts: + choices_html: "%{name}'s choices:" + endorsements_hint: You can endorse lions you follow from the web interface, and they will show up here. + featured_tags_hint: You can feature specific hashtags that will be displayed here. + follow: Join Pride + followers: + one: Pride Member + other: Pride Members + following: Joined Prides + joined: Joined %{date} + last_active: last active + link_verified_on: Ownership of this link was checked on %{date} + media: Media + moved_html: "%{name} has moved to %{new_profile_link}:" + network_hidden: This information is not available + never_active: Never + nothing_here: There is nothing here! + people_followed_by: Prides whom %{name} has joined + people_who_follow: "Lions who joined %{name}'s pride" + pin_errors: + following: You must join the pride of the lion you want to endorse + posts: + one: Toot + other: Toots + posts_tab_heading: Toots + posts_with_replies: Toots and replies + reserved_username: The username is reserved + roles: + admin: Admin + bot: Bot + moderator: Mod + unavailable: Profile unavailable + unfollow: Leave Pride + admin: + account_actions: + action: Perform action + title: Perform moderation action on %{acct} + account_moderation_notes: + create: Leave note + created_msg: Moderation note successfully created! + delete: Delete + destroyed_msg: Moderation note successfully destroyed! + accounts: + approve: Approve + approve_all: Approve all + are_you_sure: Are you sure? + avatar: Avatar + by_domain: Domain + change_email: + changed_msg: Account email successfully changed! + current_email: Current email + label: Change email + new_email: New email + submit: Change email + title: Change email for %{username} + confirm: Confirm + confirmed: Confirmed + confirming: Confirming + deleted: Deleted + demote: Demote + disable: Disable + disable_two_factor_authentication: Disable 2FA + disabled: Disabled + display_name: Display name + domain: Domain + edit: Edit + email: Email + email_status: Email status + enable: Enable + enabled: Enabled + feed_url: Feed URL + followers: Pride Members + followers_url: Pride Members URL + follows: Joined Prides + header: Header + inbox_url: Inbox URL + invited_by: Invited by + ip: IP + joined: Joined + location: + all: All + local: Local + remote: Remote + title: Location + login_status: Login status + media_attachments: Media attachments + memorialize: Turn into memoriam + moderation: + active: Active + all: All + pending: Pending + silenced: Silenced + suspended: Suspended + title: Moderation + moderation_notes: Moderation notes + most_recent_activity: Most recent activity + most_recent_ip: Most recent IP + no_account_selected: No accounts were changed as none were selected + no_limits_imposed: No limits imposed + not_subscribed: Not subscribed + outbox_url: Outbox URL + pending: Pending review + perform_full_suspension: Suspend + profile_url: Profile URL + promote: Promote + protocol: Protocol + public: Public + push_subscription_expires: PuSH subscription expires + redownload: Refresh profile + reject: Reject + reject_all: Reject all + remove_avatar: Remove avatar + remove_header: Remove header + resend_confirmation: + already_confirmed: This lion is already confirmed + send: Resend confirmation email + success: Confirmation email successfully sent! + reset: Reset + reset_password: Reset password + resubscribe: Resubscribe + role: Permissions + roles: + admin: Administrator + moderator: Moderator + staff: Staff + user: Lion + salmon_url: Salmon URL + search: Search + shared_inbox_url: Shared inbox URL + show: + created_reports: Made reports + targeted_reports: Reported by others + silence: Silence + silenced: Silenced + statuses: Toots + subscribe: Subscribe + suspended: Suspended + time_in_queue: Waiting in queue %{time} + title: Accounts + unconfirmed_email: Unconfirmed email + undo_silenced: Undo silence + undo_suspension: Undo suspension + unsubscribe: Unsubscribe + username: Username + warn: Warn + web: Web + whitelisted: Whitelisted + action_logs: + actions: + assigned_to_self_report: "%{name} assigned report %{target} to themselves" + change_email_user: "%{name} changed the e-mail address of lion %{target}" + confirm_user: "%{name} confirmed e-mail address of lion %{target}" + create_account_warning: "%{name} sent a warning to %{target}" + create_custom_emoji: "%{name} uploaded new emoji %{target}" + create_domain_block: "%{name} blocked domain %{target}" + create_email_domain_block: "%{name} blacklisted e-mail domain %{target}" + demote_user: "%{name} demoted lion %{target}" + destroy_custom_emoji: "%{name} destroyed emoji %{target}" + destroy_domain_block: "%{name} unblocked domain %{target}" + destroy_email_domain_block: "%{name} whitelisted e-mail domain %{target}" + destroy_status: "%{name} removed toot by %{target}" + disable_2fa_user: "%{name} disabled two factor requirement for lion %{target}" + disable_custom_emoji: "%{name} disabled emoji %{target}" + disable_user: "%{name} disabled login for lion %{target}" + enable_custom_emoji: "%{name} enabled emoji %{target}" + enable_user: "%{name} enabled login for lion %{target}" + memorialize_account: "%{name} turned %{target}'s account into a memoriam page" + promote_user: "%{name} promoted lion %{target}" + remove_avatar_user: "%{name} removed %{target}'s avatar" + reopen_report: "%{name} reopened report %{target}" + reset_password_user: "%{name} reset password of lion %{target}" + resolve_report: "%{name} resolved report %{target}" + silence_account: "%{name} silenced %{target}'s account" + suspend_account: "%{name} suspended %{target}'s account" + unassigned_report: "%{name} unassigned report %{target}" + unsilence_account: "%{name} unsilenced %{target}'s account" + unsuspend_account: "%{name} unsuspended %{target}'s account" + update_custom_emoji: "%{name} updated emoji %{target}" + update_status: "%{name} updated toot by %{target}" + deleted_status: "(deleted toot)" + title: Audit log + custom_emojis: + assign_category: Assign category + by_domain: Domain + copied_msg: Successfully created local copy of the emoji + copy: Copy + copy_failed_msg: Could not make a local copy of that emoji + create_new_category: Create new category + created_msg: Emoji successfully created! + delete: Delete + destroyed_msg: Emojo successfully destroyed! + disable: Disable + disabled: Disabled + disabled_msg: Successfully disabled that emoji + emoji: Emoji + enable: Enable + enabled: Enabled + enabled_msg: Successfully enabled that emoji + image_hint: PNG up to 50KB + list: List + listed: Listed + new: + title: Add new custom emoji + overwrite: Overwrite + shortcode: Shortcode + shortcode_hint: At least 2 characters, only alphanumeric characters and underscores + title: Custom emojis + uncategorized: Uncategorized + unlist: Unlist + unlisted: Unlisted + update_failed_msg: Could not update that emoji + updated_msg: Emoji successfully updated! + upload: Upload + dashboard: + authorized_fetch_mode: Secure mode + backlog: backlogged jobs + config: Configuration + feature_deletions: Account deletions + feature_invites: Invite links + feature_profile_directory: Profile directory + feature_registrations: Registrations + feature_relay: Federation relay + feature_spam_check: Anti-spam + feature_timeline_preview: Timeline preview + features: Features + hidden_service: Federation with hidden services + open_reports: open reports + pending_tags: hashtags waiting for review + pending_users: lions waiting for review + recent_users: Recent lions + search: Full-text search + single_user_mode: Single lion mode + software: Software + space: Space usage + title: Dashboard + total_users: lions in total + trends: Trends + week_interactions: interactions this week + week_users_active: active this week + week_users_new: lions this week + whitelist_mode: Whitelist mode + domain_allows: + add_new: Whitelist domain + created_msg: Domain has been successfully whitelisted + destroyed_msg: Domain has been removed from the whitelist + undo: Remove from whitelist + domain_blocks: + add_new: Add new + created_msg: Domain block is now being processed + destroyed_msg: Domain block has been undone + domain: Domain + edit: Edit domain block + existing_domain_block_html: You have already imposed stricter limits on %{name}, you need to unblock it first. + new: + create: Create block + hint: The domain block will not prevent creation of account entries in the database, but will retroactively and automatically apply specific moderation methods on those accounts. + severity: + desc_html: "Silence will make the account's posts invisible to anyone who hasn't joined thier pride. Suspend will remove all of the account's content, media, and profile data. Use None if you just want to reject media files." + noop: None + silence: Silence + suspend: Suspend + title: New domain block + private_comment: Private meow + private_comment_hint: Meow about this domain limitation for internal use by the moderators. + public_comment: Public meow + public_comment_hint: Meow about this domain limitation for the general public, if advertising the list of domain limitations is enabled. + reject_media: Reject media files + reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions + reject_reports: Reject reports + reject_reports_hint: Ignore all reports coming from this domain. Irrelevant for suspensions + rejecting_media: rejecting media files + rejecting_reports: rejecting reports + severity: + silence: silenced + suspend: suspended + show: + affected_accounts: + one: One account in the database affected + other: "%{count} accounts in the database affected" + retroactive: + silence: Unsilence existing affected accounts from this domain + suspend: Unsuspend existing affected accounts from this domain + title: Undo domain block for %{domain} + undo: Undo + undo: Undo domain block + view: View domain block + email_domain_blocks: + add_new: Add new + created_msg: Successfully added e-mail domain to blacklist + delete: Delete + destroyed_msg: Successfully deleted e-mail domain from blacklist + domain: Domain + new: + create: Add domain + title: New e-mail blacklist entry + title: E-mail blacklist + followers: + back_to_account: Back To Account + title: "%{acct}'s Pride members" + instances: + by_domain: Domain + delivery_available: Delivery is available + known_accounts: + one: "%{count} known account" + other: "%{count} known accounts" + moderation: + all: All + limited: Limited + title: Moderation + private_comment: Private meow + public_comment: Public meow + title: Federation + total_blocked_by_us: Blocked by us + total_followed_by_them: Prides joined by them + total_followed_by_us: Prides joiend by us + total_reported: Reports about them + total_storage: Media attachments + invites: + deactivate_all: Deactivate all + filter: + all: All + available: Available + expired: Expired + title: Filter + title: Invites + pending_accounts: + title: Pending accounts (%{count}) + relays: + add_new: Add new relay + delete: Delete + description_html: A federation relay is an intermediary server that exchanges large volumes of public toots between servers that subscribe and publish to it. It can help small and medium servers discover content from the fediverse, which would otherwise require local lions manually joining other lions' prides on remote servers. + disable: Disable + disabled: Disabled + enable: Enable + enable_hint: Once enabled, your server will subscribe to all public toots from this relay, and will begin sending this server's public toots to it. + enabled: Enabled + inbox_url: Relay URL + pending: Waiting for relay's approval + save_and_enable: Save and enable + setup: Setup a relay connection + signatures_not_enabled: Relays will not work correctly while secure mode or whitelist mode is enabled + status: Status + title: Relays + report_notes: + created_msg: Report note successfully created! + destroyed_msg: Report note successfully deleted! + reports: + account: + note: note + report: report + action_taken_by: Action taken by + are_you_sure: Are you sure? + assign_to_self: Assign to me + assigned: Assigned moderator + comment: + none: None + created_at: Reported + mark_as_resolved: Mark as resolved + mark_as_unresolved: Mark as unresolved + notes: + create: Add note + create_and_resolve: Resolve with note + create_and_unresolve: Reopen with note + delete: Delete + placeholder: Describe what actions have been taken, or any other related updates... + reopen: Reopen report + report: 'Report #%{id}' + reported_account: Reported account + reported_by: Reported by + resolved: Resolved + resolved_msg: Report successfully resolved! + status: Status + title: Reports + unassign: Unassign + unresolved: Unresolved + updated_at: Updated + settings: + activity_api_enabled: + desc_html: Counts of locally posted toots, active lions, and new registrations in weekly buckets + title: Publish aggregate statistics about lion activity + bootstrap_timeline_accounts: + desc_html: Separate multiple usernames by comma. Only local and unlocked accounts will work. Default when empty is all local admins. + title: Default prides for new lions + contact_information: + email: Business e-mail + username: Contact username + custom_css: + desc_html: Modify the look with CSS loaded on every page + title: Custom CSS + default_noindex: + desc_html: Affects all lions who have not changed this setting themselves + title: Opt lions out of search engine indexing by default + domain_blocks: + all: To everyone + disabled: To no one + title: Show domain blocks + users: To logged-in local lions + domain_blocks_rationale: + title: Show rationale + hero: + desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to server thumbnail + title: Hero image + mascot: + desc_html: Displayed on multiple pages. At least 293×205px recommended. When not set, falls back to default mascot + title: Mascot image + peers_api_enabled: + desc_html: Domain names this server has encountered in the fediverse + title: Publish list of discovered servers + preview_sensitive_media: + desc_html: Link previews on other websites will display a thumbnail even if the media is marked as sensitive + title: Show sensitive media in OpenGraph previews + profile_directory: + desc_html: Allow lions to be discoverable + title: Enable profile directory + registrations: + closed_message: + desc_html: Displayed on frontpage when registrations are closed. You can use HTML tags + title: Closed registration message + deletion: + desc_html: Allow anyone to delete their account + title: Open account deletion + min_invite_role: + disabled: No one + title: Allow invitations by + registrations_mode: + modes: + approved: Approval required for sign up + none: Nobody can sign up + open: Anyone can sign up + title: Registrations mode + show_known_fediverse_at_about_page: + desc_html: When disabled, restricts the public timeline linked from the landing page to showing only local content + title: Include federated content on unauthenticated public timeline page + show_staff_badge: + desc_html: Show a staff badge on a lion page + title: Show staff badge + site_description: + desc_html: Introductory paragraph on the API. Describe what makes this Mastodon server special and anything else important. You can use HTML tags, in particular <a> and <em>. + title: Server description + site_description_extended: + desc_html: A good place for your code of conduct, rules, guidelines and other things that set your server apart. You can use HTML tags + title: Custom extended information + site_short_description: + desc_html: Displayed in sidebar and meta tags. Describe what Mastodon is and what makes this server special in a single paragraph. + title: Short server description + site_terms: + desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML tags + title: Custom terms of service + site_title: Server name + spam_check_enabled: + desc_html: Mastodon can auto-silence and auto-report lions that send repeated unsolicited messages. There may be false positives. + title: Anti-spam automation + thumbnail: + desc_html: Used for previews via OpenGraph and API. 1200x630px recommended + title: Server thumbnail + timeline_preview: + desc_html: Display public timeline on landing page + title: Timeline preview + title: Site settings + trendable_by_default: + desc_html: Affects hashtags that have not been previously disallowed + title: Allow hashtags to trend without prior review + trends: + desc_html: Publicly display previously reviewed hashtags that are currently trending + title: Trending hashtags + statuses: + back_to_account: Back to account page + batch: + delete: Delete + nsfw_off: Mark as not sensitive + nsfw_on: Mark as sensitive + deleted: Deleted + failed_to_execute: Failed to execute + media: + title: Media + no_media: No media + no_status_selected: No toots were changed as none were selected + title: Account Toots + with_media: With media + tags: + accounts_today: Unique uses today + accounts_week: Unique uses this week + breakdown: Breakdown of today's usage by source + context: Context + directory: In directory + in_directory: "%{count} in directory" + last_active: Last active + most_popular: Most popular + most_recent: Most recent + name: Hashtag + review: Review status + reviewed: Reviewed + title: Hashtags + trending_right_now: Trending right now + unique_uses_today: "%{count} posting today" + unreviewed: Not reviewed + updated_msg: Hashtag settings updated successfully + title: Administration + warning_presets: + add_new: Add new + delete: Delete + edit: Edit + edit_preset: Edit warning preset + title: Manage warning presets + admin_mailer: + new_pending_account: + body: The details of the new account are below. You can approve or reject this application. + subject: New account up for review on %{instance} (%{username}) + new_report: + body: "%{reporter} has reported %{target}" + body_remote: Someone from %{domain} has reported %{target} + subject: New report for %{instance} (#%{id}) + new_trending_tag: + body: 'The hashtag #%{name} is trending today, but has not been previously reviewed. It will not be displayed publicly unless you allow it to, or just save the form as it is to never hear about it again.' + subject: New hashtag up for review on %{instance} (#%{name}) + aliases: + add_new: Create alias + created_msg: Successfully created a new alias. You can now initiate the move from the old account. + deleted_msg: Successfully remove the alias. Moving from that account to this one will no longer be possible. + hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is harmless and reversible. The account migration is initiated from the old account. + remove: Unlink alias + appearance: + advanced_web_interface: Advanced web interface + advanced_web_interface_hint: 'If you want to make use of your entire screen width, the advanced web interface allows you to configure many different columns to see as much information at the same time as you want: Home, notifications, federated timeline, any number of lists and hashtags.' + animations_and_accessibility: Animations and accessibility + confirmation_dialogs: Confirmation dialogs + discovery: Discovery + sensitive_content: Sensitive content + application_mailer: + notification_preferences: Change e-mail preferences + salutation: "%{name}," + settings: 'Change e-mail preferences: %{link}' + view: 'View:' + view_profile: View profile + view_status: View toot + applications: + created: Application successfully created + destroyed: Application successfully deleted + invalid_url: The provided URL is invalid + regenerate_token: Regenerate access token + token_regenerated: Access token successfully regenerated + warning: Be very careful with this data. Never share it with anyone! + your_token: Your access token + auth: + apply_for_account: Request an invite + change_password: Password + checkbox_agreement_html: I agree to the server rules and terms of service + confirm_email: Confirm email + delete_account: Delete account + delete_account_html: If you wish to delete your account, you can proceed here. You will be asked for confirmation. + description: + prefix_invited_by_user: "@%{name} invites you to join this server of Mastodon!" + prefix_sign_up: Sign up on Mastodon today! + suffix: With an account, you will be able to follow people, post updates and exchange messages with users from any Mastodon server and more! + didnt_get_confirmation: Didn't receive confirmation instructions? + forgot_password: Forgot your password? + invalid_reset_password_token: Password reset token is invalid or expired. Please request a new one. + login: Log in + logout: Logout + migrate_account: Move to a different account + migrate_account_html: If you wish to redirect this account to a different one, you can configure it here. + or_log_in_with: Or log in with + providers: + cas: CAS + saml: SAML + register: Sign up + registration_closed: "%{instance} is not accepting new lions" + resend_confirmation: Resend confirmation instructions + reset_password: Reset password + security: Security + set_new_password: Set new password + setup: + email_below_hint_html: If the below e-mail address is incorrect, you can change it here and receive a new confirmation e-mail. + email_settings_hint_html: The confirmation e-mail was sent to %{email}. If that e-mail address is not correct, you can change it in account settings. + title: Setup + status: + account_status: Account status + confirming: Waiting for e-mail confirmation to be completed. + functional: Your account is fully operational. + pending: Your application is pending review by our staff. This may take some time. You will receive an e-mail if your application is approved. + redirecting_to: Your account is inactive because it is currently redirecting to %{acct}. + trouble_logging_in: Trouble logging in? + authorize_follow: + already_following: You already joined this pride + error: Unfortunately, there was an error looking up the remote account + follow: Join Pride + follow_request: 'You have sent a pride request to:' + following: 'Success! You are now a pride member of:' + post_follow: + close: Or, you can just close this window. + return: Show the lion's profile + web: Go to web + title: "Join %{acct}'s pride" + challenge: + confirm: Continue + hint_html: "Tip: We won't ask you for your password again for the next hour." + invalid_password: Invalid password + prompt: Confirm password to continue + datetime: + distance_in_words: + about_x_hours: "%{count}h" + about_x_months: "%{count}mo" + about_x_years: "%{count}y" + almost_x_years: "%{count}y" + half_a_minute: Just now + less_than_x_minutes: "%{count}m" + less_than_x_seconds: Just now + over_x_years: "%{count}y" + x_days: "%{count}d" + x_minutes: "%{count}m" + x_months: "%{count}mo" + x_seconds: "%{count}s" + deletes: + challenge_not_passed: The information you entered was not correct + confirm_password: Enter your current password to verify your identity + confirm_username: Enter your username to confirm the procedure + proceed: Delete account + success_msg: Your account was successfully deleted + warning: + before: 'Before proceeding, please read these notes carefully:' + caches: Content that has been cached by other servers may persist + data_removal: Your posts and other data will be permanently removed + email_change_html: You can change your e-mail address without deleting your account + email_contact_html: If it still doesn't arrive, you can e-mail %{email} for help + email_reconfirmation_html: If you are not receiving the confirmation e-mail, you can request it again + irreversible: You will not be able to restore or reactivate your account + more_details_html: For more details, see the privacy policy. + username_available: Your username will become available again + username_unavailable: Your username will remain unavailable + directories: + directory: Profile directory + explanation: Discover lions based on their interests + explore_mastodon: Explore %{title} + domain_validator: + invalid_domain: is not a valid domain name + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + content: Security verification failed. Are you blocking cookies? + title: Security verification failed + '429': Throttled + '500': + content: We're sorry, but something went wrong on our end. + title: This page is not correct + '503': The page could not be served due to a temporary server failure. + noscript_html: To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform. + existing_username_validator: + not_found: could not find a local lion with that username + not_found_multiple: could not find %{usernames} + exports: + archive_takeout: + date: Date + download: Download your archive + hint_html: You can request an archive of your toots and uploaded media. The exported data will be in ActivityPub format, readable by any compliant software. You can request an archive every 7 days. + in_progress: Compiling your archive... + request: Request your archive + size: Size + blocks: You block + csv: CSV + domain_blocks: Domain blocks + follows: You have joined + lists: Lists + mutes: You mute + storage: Media storage + featured_tags: + add_new: Add new + errors: + limit: You have already featured the maximum amount of hashtags + hint_html: "What are featured hashtags? They are displayed prominently on your public profile and allow people to browse your public posts specifically under those hashtags. They are a great tool for keeping track of creative works or long-term projects." + filters: + contexts: + home: Home timeline + notifications: Notifications + public: Public timelines + thread: Conversations + edit: + title: Edit filter + errors: + invalid_context: None or invalid context supplied + invalid_irreversible: Irreversible filtering only works with home or notifications context + index: + delete: Delete + title: Filters + new: + title: Add new filter + footer: + developers: Developers + more: More… + resources: Resources + trending_now: Trending now + generic: + all: All + changes_saved_msg: Changes successfully saved! + copy: Copy + no_batch_actions_available: No batch actions available on this page + order_by: Order by + save_changes: Save changes + validation_errors: + one: Something isn't quite right yet! Please review the error below + other: Something isn't quite right yet! Please review %{count} errors below + html_validator: + invalid_markup: 'contains invalid HTML markup: %{error}' + identity_proofs: + active: Active + authorize: Yes, authorize + authorize_connection_prompt: Authorize this cryptographic connection? + errors: + failed: The cryptographic connection failed. Please try again from %{provider}. + keybase: + invalid_token: Keybase tokens are hashes of signatures and must be 66 hex characters + verification_failed: Keybase does not recognize this token as a signature of Keybase user %{kb_username}. Please retry from Keybase. + wrong_user: Cannot create a proof for %{proving} while logged in as %{current}. Log in as %{proving} and try again. + explanation_html: Here you can cryptographically connect your other identities, such as a Keybase profile. This lets other people send you encrypted messages and trust content you send them. + i_am_html: I am %{username} on %{service}. + identity: Identity + inactive: Inactive + publicize_checkbox: 'And toot this:' + publicize_toot: 'It is proven! I am %{username} on %{service}: %{url}' + status: Verification status + view_proof: View proof + imports: + modes: + merge: Merge + merge_long: Keep existing records and add new ones + overwrite: Overwrite + overwrite_long: Replace current records with the new ones + preface: You can import data that you have exported from another server, such as a list of the prides you have joiend or lions you are blocking. + success: Your data was successfully uploaded and will now be processed in due time + types: + blocking: Blocking list + domain_blocking: Domain blocking list + following: Pride list + muting: Muting list + upload: Upload + in_memoriam_html: In Memoriam. + invites: + delete: Deactivate + expired: Expired + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day + expires_in_prompt: Never + generate: Generate invite link + invited_by: 'You were invited by:' + max_uses: + one: 1 use + other: "%{count} uses" + max_uses_prompt: No limit + prompt: Generate and share links with others to grant access to this server + table: + expires_at: Expires + uses: Uses + title: Invite lions + lists: + errors: + limit: You have reached the maximum amount of lists + media_attachments: + validations: + images_and_video: Cannot attach a video to a toot that already contains images + too_many: Cannot attach more than 4 files + migrations: + acct: Moved to + cancel: Cancel redirect + cancel_explanation: Cancelling the redirect will re-activate your current account, but will not bring back followers that have been moved to that account. + cancelled_msg: Successfully cancelled the redirect. + errors: + already_moved: is the same account you have already moved to + missing_also_known_as: is not back-referencing this account + move_to_self: cannot be current account + not_found: could not be found + on_cooldown: You are on cooldown + followers_count: Pride Members at time of move + incoming_migrations: Moving from a different account + incoming_migrations_html: To move from another account to this one, first you need to create an account alias. + moved_msg: Your account is now redirecting to %{acct} and your followers are being moved over. + not_redirecting: Your account is not redirecting to any other account currently. + on_cooldown: You have recently migrated your account. This function will become available again in %{count} days. + past_migrations: Past migrations + proceed_with_move: Move followers + redirecting_to: Your account is redirecting to %{acct}. + set_redirect: Set redirect + warning: + backreference_required: The new account must first be configured to back-reference this one + before: 'Before proceeding, please read these notes carefully:' + cooldown: After moving there is a cooldown period during which you will not be able to move again + disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation. + followers: This action will move all followers from the current account to the new account + only_redirect_html: Alternatively, you can only put up a redirect on your profile. + other_data: No other data will be moved automatically + redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches + moderation: + title: Moderation + notification_mailer: + digest: + action: View all notifications + body: Here is a brief summary of the messages you missed since your last visit on %{since} + mention: "%{name} meowed at you in:" + new_followers_summary: + one: Also, you have acquired one new pride member while being away! Yay! + other: Also, you have acquired %{count} new pride members while being away! Amazing! + subject: + one: "1 new notification since your last visit \U0001F418" + other: "%{count} new notifications since your last visit \U0001F418" + title: In your absence… + favourite: + body: 'Your toot was booped by %{name}:' + subject: "%{name} booped your toot" + title: New boop + follow: + body: "%{name} joined your pride!" + subject: "%{name} joined your pride" + title: New pride member + follow_request: + action: Manage pride requests + body: "%{name} has requested to join your pride" + subject: 'Pending pride member: %{name}' + title: New pride request + mention: + action: Meow + body: '%{name} meowed at you in:' + subject: "%{name} meowed at you" + title: New meow + reblog: + body: 'Your toot was roared by %{name}:' + subject: "%{name} roared your toot" + title: New roar + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' + pagination: + newer: Newer + next: Next + older: Older + prev: Prev + truncate: "…" + polls: + errors: + already_voted: You have already voted on this poll + duplicate_options: contain duplicate items + duration_too_long: is too far into the future + duration_too_short: is too soon + expired: The poll has already ended + over_character_limit: cannot be longer than %{max} characters each + too_few_options: must have more than one item + too_many_options: can't contain more than %{max} items + preferences: + other: Other + posting_defaults: Posting defaults + public_timelines: Public timelines + relationships: + activity: Account activity + dormant: Dormant + last_active: Last active + most_recent: Most recent + moved: Moved + mutual: Mutual + primary: Primary + relationship: Relationship + remove_selected_domains: Remove all pride members from the selected domains + remove_selected_followers: Remove selected pride members + remove_selected_follows: Leave prides of selected lions + status: Account status + remote_follow: + acct: Enter your username@domain you want to join the pride from + missing_resource: Could not find the required redirect URL for your account + no_account_html: Don't have an account? You can sign up here + proceed: Proceed to join pride + prompt: 'You are going to join the pride of:' + reason_html: "Why is this step necessary? %{instance} might not be the server where you are registered, so we need to redirect you to your home server first." + remote_interaction: + favourite: + proceed: Proceed to boop + prompt: 'You want to boop this toot:' + reblog: + proceed: Proceed to roar + prompt: 'You want to roar this toot:' + reply: + proceed: Proceed to meow + prompt: 'You want to meow at this toot:' + scheduled_statuses: + over_daily_limit: You have exceeded the limit of %{limit} scheduled toots for that day + over_total_limit: You have exceeded the limit of %{limit} scheduled toots + too_soon: The scheduled date must be in the future + sessions: + activity: Last activity + browser: Browser + browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Unknown browser + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo + current_session: Current session + description: "%{browser} on %{platform}" + explanation: These are the web browsers currently logged in to your Mastodon account. + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac + other: unknown platform + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Revoke + revoke_success: Session successfully revoked + title: Sessions + settings: + account: Account + account_settings: Account settings + aliases: Account aliases + appearance: Appearance + authorized_apps: Authorized apps + back: Back to Mastodon + delete: Account deletion + development: Development + edit_profile: Edit profile + export: Data export + featured_tags: Featured hashtags + identity_proofs: Identity proofs + import: Import + import_and_export: Import and export + migrate: Account migration + notifications: Notifications + preferences: Preferences + profile: Profile + relationships: Prides and Pride Members + two_factor_authentication: Two-factor Auth + spam_check: + spam_detected_and_silenced: This is an automated report. Spam has been detected and the sender has been silenced automatically. If this is a mistake, please unsilence the account. + statuses: + attached: + description: 'Attached: %{attached}' + image: + one: "%{count} image" + other: "%{count} images" + video: + one: "%{count} video" + other: "%{count} videos" + boosted_from_html: Roared from %{acct_link} + content_warning: 'Content warning: %{warning}' + disallowed_hashtags: + one: 'contained a disallowed hashtag: %{tags}' + other: 'contained the disallowed hashtags: %{tags}' + language_detection: Automatically detect language + open_in_web: Open in web + over_character_limit: character limit of %{max} exceeded + pin_errors: + limit: You have already pinned the maximum number of toots + ownership: Someone else's toot cannot be pinned + private: Non-public toot cannot be pinned + reblog: A roar cannot be pinned + poll: + total_people: + one: "%{count} lion" + other: "%{count} lions" + total_votes: + one: "%{count} vote" + other: "%{count} votes" + vote: Vote + show_more: Show more + sign_in_to_participate: Sign in to participate in the conversation + strip_formatting: + all: All + all_long: Strip all advanced formatting + blocks: Block elements + blocks_long: Strip formatting for title headers and block quotes + none: None + none_long: Do not strip any formatting supported by Mastodon + title: '%{name}: "%{quote}"' + visibilities: + private: Pride members only + private_long: Only show to pride members + public: Public + public_long: Everyone can see + unlisted: Unlisted + unlisted_long: Everyone can see, but not listed on public timelines + stream_entries: + pinned: Pinned toot + reblogged: roared + sensitive_content: Sensitive content + tags: + does_not_match_previous_name: does not match the previous name + terms: + body_html: | +

Privacy Policy

+

What information do we collect?

+ + + +
+ +

What do we use your information for?

+ +

Any of the information we collect from you may be used in the following ways:

+ + + +
+ +

How do we protect your information?

+ +

We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.

+ +
+ +

What is our data retention policy?

+ +

We will make a good faith effort to:

+ + + +

You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.

+ +

You may irreversibly delete your account at any time.

+ +
+ +

Do we use cookies?

+ +

Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.

+ +

We use cookies to understand and save your preferences for future visits.

+ +
+ +

Do we disclose any information to outside parties?

+ +

We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.

+ +

Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.

+ +

When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password.

+ +
+ +

Site usage by children

+ +

If this server is in the EU or the EEA: Our site, products and services are all directed to lions who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site.

+ +

If this server is in the USA: Our site, products and services are all directed to lions who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site.

+ +

Law requirements can be different if this server is in another jurisdiction.

+ +
+ +

Changes to our Privacy Policy

+ +

If we decide to change our privacy policy, we will post those changes on this page.

+ +

This document is CC-BY-SA. It was last updated March 7, 2018.

+ +

Originally adapted from the Discourse privacy policy.

+ title: "%{instance} Terms of Service and Privacy Policy" + themes: + contrast: High contrast + contrast-wider: High contrast (wider) + pop: Pop + pop-wider: Pop (wider) + pop-light: Pop (light) + pop-light-wider: Pop (light, wider) + mastodon: Mastodon + mastodon-wider: Mastodon (wider) + mastodon-light: Mastodon (light) + mastodon-light-wider: Mastodon (light, wider) + werefox: Werefox Software Theme + werefox-wider: Werefox Software Theme but W I D E + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" + two_factor_authentication: + code_hint: Enter the code generated by your authenticator app to confirm + description_html: If you enable two-factor authentication, logging in will require you to be in possession of your phone, which will generate tokens for you to enter. + disable: Disable + enable: Enable + enabled: Two-factor authentication is enabled + enabled_success: Two-factor authentication successfully enabled + generate_recovery_codes: Generate recovery codes + instructions_html: "Scan this QR code into Google Authenticator or a similiar TOTP app on your phone. From now on, that app will generate tokens that you will have to enter when logging in." + lost_recovery_codes: Recovery codes allow you to regain access to your account if you lose your phone. If you've lost your recovery codes, you can regenerate them here. Your old recovery codes will be invalidated. + manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:' + recovery_codes: Backup recovery codes + recovery_codes_regenerated: Recovery codes successfully regenerated + recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. Keep the recovery codes safe. For example, you may print them and store them with other important documents. + setup: Set up + wrong_code: The entered code was invalid! Are server time and device time correct? + user_mailer: + backup_ready: + explanation: You requested a full backup of your Mastodon account. It's now ready for download! + subject: Your archive is ready for download + title: Archive takeout + warning: + explanation: + disable: While your account is frozen, your account data remains intact, but you cannot perform any actions until it is unlocked. + silence: While your account is limited, only lions who have already joined your pride you will see your toots on this server, and you may be excluded from various public listings. However, others may still manually join your pride. + suspend: Your account has been suspended, and all of your toots and your uploaded media files have been irreversibly removed from this server, and servers where you had pride members. + get_in_touch: You can reply to this e-mail to get in touch with the staff of %{instance}. + review_server_policies: Review server policies + statuses: 'Specifically, for:' + subject: + disable: Your account %{acct} has been frozen + none: Warning for %{acct} + silence: Your account %{acct} has been limited + suspend: Your account %{acct} has been suspended + title: + disable: Account frozen + none: Warning + silence: Account limited + suspend: Account suspended + welcome: + edit_profile_action: Setup profile + edit_profile_step: You can customize your profile by uploading an avatar, header, changing your display name and more. If you’d like to review new pride members before they’re allowed to join your pride, you can lock your account. + explanation: Here are some tips to get you started + final_action: Start posting + final_step: 'Start posting! Even without pride members your public messages may be seen by others, for example on the local timeline and in hashtags. You may want to introduce yourself on the #introductions hashtag.' + full_handle: Your full handle + full_handle_hint: This is what you would tell your friends so they can message or join your pride from another server. + review_preferences_action: Change preferences + review_preferences_step: Make sure to set your preferences, such as which emails you'd like to receive, or what privacy level you’d like your posts to default to. If you don’t have motion sickness, you could choose to enable GIF autoplay. + subject: Welcome to Mastodon + tip_federated_timeline: The federated timeline is a firehose view of the Mastodon network. But it only includes lions your neighbours are subscribed to, so it's not complete. + tip_following: You join the pride of your server's admin(s) by default. To find more interesting lions, check the local and federated timelines. + tip_local_timeline: The local timeline is a firehose view of lions on %{instance}. These are your immediate neighbours! + tip_mobile_webapp: If your mobile browser offers you to add Mastodon to your homescreen, you can receive push notifications. It acts like a native app in many ways! + tips: Tips + title: Welcome aboard, %{name}! + users: + follow_limit_reached: You cannot join more than %{limit} prides + invalid_email: The e-mail address is invalid + invalid_otp_token: Invalid two-factor code + otp_lost_help_html: If you lost access to both, you may get in touch with %{email} + seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available. + signed_in_as: 'Signed in as:' + verification: + explanation_html: 'You can verify yourself as the owner of the links in your profile metadata. For that, the linked website must contain a link back to your Mastodon profile. The link back must have a rel="me" attribute. The text content of the link does not matter. Here is an example:' + verification: Verification diff --git a/config/locales/simple_form.dog.yml b/config/locales/simple_form.dog.yml new file mode 100644 index 000000000..a6dac84c0 --- /dev/null +++ b/config/locales/simple_form.dog.yml @@ -0,0 +1,162 @@ +--- +dog: + simple_form: + hints: + account_alias: + acct: Specify the username@domain of the account you want to move from + account_migration: + acct: Specify the username@domain of the account you want to move to + account_warning_preset: + text: You can use toot syntax, such as URLs, hashtags and mentions + admin_account_action: + include_statuses: The dog will see which toots have caused the moderation action or warning + send_email_notification: The user will receive an explanation of what happened with their account + text_html: Optional. You can use toot syntax. You can add warning presets to save time + type_html: Choose what to do with %{acct} + warning_preset_id: Optional. You can still add custom text to end of the preset + defaults: + autofollow: People who sign up through the invite will automatically follow you + avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + bot: This account mainly performs automated actions and might not be monitored + context: One or multiple contexts where the filter should apply + current_password: For security purposes please enter the password of the current account + current_username: To confirm, please enter the username of the current account + digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence + discoverable: The profile directory is another way by which your account can reach a wider audience + email: You will be sent a confirmation e-mail + fields: You can have up to 4 items displayed as a table on your profile + header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + inbox_url: Copy the URL from the frontpage of the relay you want to use + irreversible: Filtered toots will disappear irreversibly, even if filter is later removed + locale: The language of the user interface, e-mails and push notifications + locked: Requires you to manually approve followers + password: Use at least 8 characters + phrase: Will be matched regardless of casing in text or content warning of a toot + scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones. + setting_aggregate_reblogs: Do not show new awoos for toots that have been recently awooed (only affects newly-received awoos) + setting_default_sensitive: Sensitive media is hidden by default and can be revealed with a click + setting_display_media_default: Hide media marked as sensitive + setting_display_media_hide_all: Always hide all media + setting_display_media_show_all: Always show media marked as sensitive + setting_hide_network: Who you follow and who follows you will not be shown on your profile + setting_noindex: Affects your public profile and toot pages + setting_show_application: The application you use to toot will be displayed in the detailed view of your toots + setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details + setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed + username: Your username will be unique on %{domain} + whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word + domain_allow: + domain: This domain will be able to fetch data from this server and incoming data from it will be processed and stored + featured_tag: + name: 'You might want to use one of these:' + imports: + data: CSV file exported from another Mastodon server + invite_request: + text: This will help us review your application + sessions: + otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' + user: + chosen_languages: When checked, only toots in selected languages will be displayed in public timelines + labels: + account: + fields: + name: Label + value: Content + account_warning_preset: + text: Preset text + admin_account_action: + send_email_notification: Notify the user per e-mail + text: Custom warning + type: Action + types: + disable: Disable + none: Do nothing + silence: Silence + suspend: Suspend and irreversibly delete account data + warning_preset_id: Use a warning preset + defaults: + autofollow: Invite to follow your account + avatar: Avatar + bot: This is a bot account + chosen_languages: Filter languages + confirm_new_password: Confirm new password + confirm_password: Confirm password + context: Filter contexts + current_password: Current password + data: Data + discoverable: List this account on the directory + display_name: Display name + email: E-mail address + expires_in: Expire after + fields: Profile metadata + header: Header + inbox_url: URL of the relay inbox + irreversible: Drop instead of hide + locale: Interface language + locked: Lock account + max_uses: Max number of uses + new_password: New password + note: Bio + otp_attempt: Two-factor code + password: Password + phrase: Keyword or phrase + setting_advanced_layout: Enable advanced web interface + setting_aggregate_reblogs: Group awoos in timelines + setting_auto_play_gif: Auto-play animated GIFs + setting_boost_modal: Show confirmation dialog before awooing + setting_default_language: Posting language + setting_default_privacy: Posting privacy + setting_default_sensitive: Always mark media as sensitive + setting_delete_modal: Show confirmation dialog before deleting a toot + setting_display_media: Media display + setting_display_media_default: Default + setting_display_media_hide_all: Hide all + setting_display_media_show_all: Show all + setting_expand_spoilers: Always expand toots marked with content warnings + setting_hide_network: Hide your network + setting_noindex: Opt-out of search engine indexing + setting_reduce_motion: Reduce motion in animations + setting_show_application: Disclose application used to send toots + setting_strip_formatting: Strip formatting + setting_system_font_ui: Use system's default font + setting_theme: Site theme + setting_trends: Show today's trends + setting_unfollow_modal: Show confirmation dialog before unfollowing someone + setting_use_blurhash: Show colorful gradients for hidden media + setting_use_pending_items: Slow mode + severity: Severity + type: Import type + username: Username + username_or_email: Username or Email + whole_word: Whole word + featured_tag: + name: Hashtag + interactions: + must_be_follower: Block notifications from non-followers + must_be_following: Block notifications from people you don't follow + must_be_following_dm: Block direct messages from people you don't follow + invite: + comment: Bark + invite_request: + text: Why do you want to join? + notification_emails: + digest: Send digest e-mails + favourite: Send e-mail when someone boops your toot + follow: Send e-mail when someone follows you + follow_request: Send e-mail when someone requests to follow you + mention: Send e-mail when someone mentions you + pending_account: Send e-mail when a new account needs review + reblog: Send e-mail when someone awoos your toot + report: Send e-mail when a new report is submitted + trending_tag: Send e-mail when an unreviewed hashtag is trending + tag: + listable: Allow this hashtag to appear in searches and on the profile directory + name: Hashtag + trendable: Allow this hashtag to appear under trends + usable: Allow toots to use this hashtag + 'no': 'No' + recommended: Recommended + required: + mark: "*" + text: required + 'yes': 'Yes' diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 3d909e999..486aa3cf4 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -126,6 +126,7 @@ en: setting_noindex: Opt-out of search engine indexing setting_reduce_motion: Reduce motion in animations setting_show_application: Disclose application used to send toots + setting_strip_formatting: Strip formatting setting_system_font_ui: Use system's default font setting_theme: Site theme setting_trends: Show today's trends diff --git a/config/locales/simple_form.lion.yml b/config/locales/simple_form.lion.yml new file mode 100644 index 000000000..e239e708f --- /dev/null +++ b/config/locales/simple_form.lion.yml @@ -0,0 +1,162 @@ +--- +lion: + simple_form: + hints: + account_alias: + acct: Specify the username@domain of the account you want to move from + account_migration: + acct: Specify the username@domain of the account you want to move to + account_warning_preset: + text: You can use toot syntax, such as URLs, hashtags and mentions + admin_account_action: + include_statuses: The lion will see which toots have caused the moderation action or warning + send_email_notification: The user will receive an explanation of what happened with their account + text_html: Optional. You can use toot syntax. You can add warning presets to save time + type_html: Choose what to do with %{acct} + warning_preset_id: Optional. You can still add custom text to end of the preset + defaults: + autofollow: People who sign up through the invite will automatically follow you + avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + bot: This account mainly performs automated actions and might not be monitored + context: One or multiple contexts where the filter should apply + current_password: For security purposes please enter the password of the current account + current_username: To confirm, please enter the username of the current account + digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence + discoverable: The profile directory is another way by which your account can reach a wider audience + email: You will be sent a confirmation e-mail + fields: You can have up to 4 items displayed as a table on your profile + header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + inbox_url: Copy the URL from the frontpage of the relay you want to use + irreversible: Filtered toots will disappear irreversibly, even if filter is later removed + locale: The language of the user interface, e-mails and push notifications + locked: Requires you to manually approve followers + password: Use at least 8 characters + phrase: Will be matched regardless of casing in text or content warning of a toot + scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones. + setting_aggregate_reblogs: Do not show new roars for toots that have been recently roared (only affects newly-received roars) + setting_default_sensitive: Sensitive media is hidden by default and can be revealed with a click + setting_display_media_default: Hide media marked as sensitive + setting_display_media_hide_all: Always hide all media + setting_display_media_show_all: Always show media marked as sensitive + setting_hide_network: Who you follow and who follows you will not be shown on your profile + setting_noindex: Affects your public profile and toot pages + setting_show_application: The application you use to toot will be displayed in the detailed view of your toots + setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details + setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed + username: Your username will be unique on %{domain} + whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word + domain_allow: + domain: This domain will be able to fetch data from this server and incoming data from it will be processed and stored + featured_tag: + name: 'You might want to use one of these:' + imports: + data: CSV file exported from another Mastodon server + invite_request: + text: This will help us review your application + sessions: + otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' + user: + chosen_languages: When checked, only toots in selected languages will be displayed in public timelines + labels: + account: + fields: + name: Label + value: Content + account_warning_preset: + text: Preset text + admin_account_action: + send_email_notification: Notify the user per e-mail + text: Custom warning + type: Action + types: + disable: Disable + none: Do nothing + silence: Silence + suspend: Suspend and irreversibly delete account data + warning_preset_id: Use a warning preset + defaults: + autofollow: Invite to follow your account + avatar: Avatar + bot: This is a bot account + chosen_languages: Filter languages + confirm_new_password: Confirm new password + confirm_password: Confirm password + context: Filter contexts + current_password: Current password + data: Data + discoverable: List this account on the directory + display_name: Display name + email: E-mail address + expires_in: Expire after + fields: Profile metadata + header: Header + inbox_url: URL of the relay inbox + irreversible: Drop instead of hide + locale: Interface language + locked: Lock account + max_uses: Max number of uses + new_password: New password + note: Bio + otp_attempt: Two-factor code + password: Password + phrase: Keyword or phrase + setting_advanced_layout: Enable advanced web interface + setting_aggregate_reblogs: Group roars in timelines + setting_auto_play_gif: Auto-play animated GIFs + setting_boost_modal: Show confirmation dialog before roaring + setting_default_language: Posting language + setting_default_privacy: Posting privacy + setting_default_sensitive: Always mark media as sensitive + setting_delete_modal: Show confirmation dialog before deleting a toot + setting_display_media: Media display + setting_display_media_default: Default + setting_display_media_hide_all: Hide all + setting_display_media_show_all: Show all + setting_expand_spoilers: Always expand toots marked with content warnings + setting_hide_network: Hide your network + setting_noindex: Opt-out of search engine indexing + setting_reduce_motion: Reduce motion in animations + setting_show_application: Disclose application used to send toots + setting_strip_formatting: Strip formatting + setting_system_font_ui: Use system's default font + setting_theme: Site theme + setting_trends: Show today's trends + setting_unfollow_modal: Show confirmation dialog before unfollowing someone + setting_use_blurhash: Show colorful gradients for hidden media + setting_use_pending_items: Slow mode + severity: Severity + type: Import type + username: Username + username_or_email: Username or Email + whole_word: Whole word + featured_tag: + name: Hashtag + interactions: + must_be_follower: Block notifications from non-followers + must_be_following: Block notifications from people you don't follow + must_be_following_dm: Block direct messages from people you don't follow + invite: + comment: Meow + invite_request: + text: Why do you want to join? + notification_emails: + digest: Send digest e-mails + favourite: Send e-mail when someone boops your toot + follow: Send e-mail when someone follows you + follow_request: Send e-mail when someone requests to follow you + mention: Send e-mail when someone mentions you + pending_account: Send e-mail when a new account needs review + reblog: Send e-mail when someone roars your toot + report: Send e-mail when a new report is submitted + trending_tag: Send e-mail when an unreviewed hashtag is trending + tag: + listable: Allow this hashtag to appear in searches and on the profile directory + name: Hashtag + trendable: Allow this hashtag to appear under trends + usable: Allow toots to use this hashtag + 'no': 'No' + recommended: Recommended + required: + mark: "*" + text: required + 'yes': 'Yes' diff --git a/config/locales/simple_form.squeak.yml b/config/locales/simple_form.squeak.yml new file mode 100644 index 000000000..ab88751f4 --- /dev/null +++ b/config/locales/simple_form.squeak.yml @@ -0,0 +1,162 @@ +--- +squeak: + simple_form: + hints: + account_alias: + acct: Specify the username@domain of the account you want to move from + account_migration: + acct: Specify the username@domain of the account you want to move to + account_warning_preset: + text: You can use toot syntax, such as URLs, hashtags and mentions + admin_account_action: + include_statuses: The user will see which toots have caused the moderation action or warning + send_email_notification: The user will receive an explanation of what happened with their account + text_html: Optional. You can use toot syntax. You can add warning presets to save time + type_html: Choose what to do with %{acct} + warning_preset_id: Optional. You can still add custom text to end of the preset + defaults: + autofollow: People who sign up through the invite will automatically follow you + avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + bot: This account mainly performs automated actions and might not be monitored + context: One or multiple contexts where the filter should apply + current_password: For security purposes please enter the password of the current account + current_username: To confirm, please enter the username of the current account + digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence + discoverable: The profile directory is another way by which your account can reach a wider audience + email: You will be sent a confirmation e-mail + fields: You can have up to 4 items displayed as a table on your profile + header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + inbox_url: Copy the URL from the frontpage of the relay you want to use + irreversible: Filtered toots will disappear irreversibly, even if filter is later removed + locale: The language of the user interface, e-mails and push notifications + locked: Requires you to manually approve followers + password: Use at least 8 characters + phrase: Will be matched regardless of casing in text or content warning of a toot + scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones. + setting_aggregate_reblogs: Do not show new pumps for toots that have been recently pumped (only affects newly-received pumps) + setting_default_sensitive: Sensitive media is hidden by default and can be revealed with a click + setting_display_media_default: Hide media marked as sensitive + setting_display_media_hide_all: Always hide all media + setting_display_media_show_all: Always show media marked as sensitive + setting_hide_network: Who you follow and who follows you will not be shown on your profile + setting_noindex: Affects your public profile and status pages + setting_show_application: The application you use to toot will be displayed in the detailed view of your toots + setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details + setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed + username: Your username will be unique on %{domain} + whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word + domain_allow: + domain: This domain will be able to fetch data from this server and incoming data from it will be processed and stored + featured_tag: + name: 'You might want to use one of these:' + imports: + data: CSV file exported from another Mastodon server + invite_request: + text: This will help us review your application + sessions: + otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' + user: + chosen_languages: When checked, only toots in selected languages will be displayed in public timelines + labels: + account: + fields: + name: Label + value: Content + account_warning_preset: + text: Preset text + admin_account_action: + send_email_notification: Notify the user per e-mail + text: Custom warning + type: Action + types: + disable: Disable + none: Do nothing + silence: Silence + suspend: Suspend and irreversibly delete account data + warning_preset_id: Use a warning preset + defaults: + autofollow: Invite to follow your account + avatar: Avatar + bot: This is a bot account + chosen_languages: Filter languages + confirm_new_password: Confirm new password + confirm_password: Confirm password + context: Filter contexts + current_password: Current password + data: Data + discoverable: List this account on the directory + display_name: Display name + email: E-mail address + expires_in: Expire after + fields: Profile metadata + header: Header + inbox_url: URL of the relay inbox + irreversible: Drop instead of hide + locale: Interface language + locked: Lock account + max_uses: Max number of uses + new_password: New password + note: Bio + otp_attempt: Two-factor code + password: Password + phrase: Keyword or phrase + setting_advanced_layout: Enable advanced web interface + setting_aggregate_reblogs: Group pumps in timelines + setting_auto_play_gif: Auto-play animated GIFs + setting_boost_modal: Show confirmation dialog before pumping + setting_default_language: Posting language + setting_default_privacy: Posting privacy + setting_default_sensitive: Always mark media as sensitive + setting_delete_modal: Show confirmation dialog before deleting a toot + setting_display_media: Media display + setting_display_media_default: Default + setting_display_media_hide_all: Hide all + setting_display_media_show_all: Show all + setting_expand_spoilers: Always expand toots marked with content warnings + setting_hide_network: Hide your network + setting_noindex: Opt-out of search engine indexing + setting_reduce_motion: Reduce motion in animations + setting_show_application: Disclose application used to send toots + setting_strip_formatting: Strip formatting + setting_system_font_ui: Use system's default font + setting_theme: Site theme + setting_trends: Show today's trends + setting_unfollow_modal: Show confirmation dialog before unfollowing someone + setting_use_blurhash: Show colorful gradients for hidden media + setting_use_pending_items: Slow mode + severity: Severity + type: Import type + username: Username + username_or_email: Username or Email + whole_word: Whole word + featured_tag: + name: Hashtag + interactions: + must_be_follower: Block notifications from non-followers + must_be_following: Block notifications from people you don't follow + must_be_following_dm: Block direct messages from people you don't follow + invite: + comment: Comment + invite_request: + text: Why do you want to join? + notification_emails: + digest: Send digest e-mails + favourite: Send e-mail when someone squeaks your status + follow: Send e-mail when someone follows you + follow_request: Send e-mail when someone requests to follow you + mention: Send e-mail when someone mentions you + pending_account: Send e-mail when a new account needs review + reblog: Send e-mail when someone pumps your status + report: Send e-mail when a new report is submitted + trending_tag: Send e-mail when an unreviewed hashtag is trending + tag: + listable: Allow this hashtag to appear in searches and on the profile directory + name: Hashtag + trendable: Allow this hashtag to appear under trends + usable: Allow toots to use this hashtag + 'no': 'No' + recommended: Recommended + required: + mark: "*" + text: required + 'yes': 'Yes' diff --git a/config/locales/squeak.yml b/config/locales/squeak.yml new file mode 100644 index 000000000..dd5952415 --- /dev/null +++ b/config/locales/squeak.yml @@ -0,0 +1,1231 @@ +--- +squeak: + about: + about_hashtag_html: These are public toots tagged with #%{hashtag}. You can interact with them if you have an account anywhere in the fediverse. + about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!' + about_this: About + active_count_after: active + active_footnote: Monthly Active Users (MAU) + administered_by: 'Administered by:' + api: API + apps: Mobile apps + apps_platforms: Use Mastodon from iOS, Android and other platforms + browse_directory: Browse a profile directory and filter by interests + browse_public_posts: Browse a live stream of public posts on Mastodon + contact: Contact + contact_missing: Not set + contact_unavailable: N/A + discover_users: Discover users + documentation: Documentation + federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond. + get_apps: Try a mobile app + hosted_on: Mastodon hosted on %{domain} + instance_actor_flash: | + This account is a virtual actor used to represent the server itself and not any individual user. + It is used for federation purposes and should not be blocked unless you want to block the whole instance, in which case you should use a domain block. + learn_more: Learn more + privacy_policy: Privacy policy + see_whats_happening: See what's happening + server_stats: 'Server stats:' + source_code: Source code + status_count_after: + one: status + other: statuses + status_count_before: Who authored + tagline: Follow friends and discover new ones + terms: Terms of service + unavailable_content: Unavailable content + unavailable_content_description: + domain: Server + reason: Reason + rejecting_media: 'Media files from these servers will not be processed or stored, and and no thumbnails will be displayed, requiring manual click-through to the original file:' + silenced: 'Posts from these servers will be hidden in public timelines and conversations, and no notifications will be generated from their users'' interactions, unless you are following them:' + suspended: 'No data from these servers will be processed, stored or exchanged, making any interaction or communication with users from these servers impossible:' + unavailable_content_html: Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server. + user_count_after: + one: user + other: users + user_count_before: Home to + what_is_mastodon: What is Mastodon? + accounts: + choices_html: "%{name}'s choices:" + endorsements_hint: You can endorse people you follow from the web interface, and they will show up here. + featured_tags_hint: You can feature specific hashtags that will be displayed here. + follow: Follow + followers: + one: Follower + other: Followers + following: Following + joined: Joined %{date} + last_active: last active + link_verified_on: Ownership of this link was checked on %{date} + media: Media + moved_html: "%{name} has moved to %{new_profile_link}:" + network_hidden: This information is not available + never_active: Never + nothing_here: There is nothing here! + people_followed_by: People whom %{name} follows + people_who_follow: People who follow %{name} + pin_errors: + following: You must be already following the person you want to endorse + posts: + one: Toot + other: Toots + posts_tab_heading: Toots + posts_with_replies: Toots and replies + reserved_username: The username is reserved + roles: + admin: Admin + bot: Bot + moderator: Mod + unavailable: Profile unavailable + unfollow: Unfollow + admin: + account_actions: + action: Perform action + title: Perform moderation action on %{acct} + account_moderation_notes: + create: Leave note + created_msg: Moderation note successfully created! + delete: Delete + destroyed_msg: Moderation note successfully destroyed! + accounts: + approve: Approve + approve_all: Approve all + are_you_sure: Are you sure? + avatar: Avatar + by_domain: Domain + change_email: + changed_msg: Account email successfully changed! + current_email: Current email + label: Change email + new_email: New email + submit: Change email + title: Change email for %{username} + confirm: Confirm + confirmed: Confirmed + confirming: Confirming + deleted: Deleted + demote: Demote + disable: Disable + disable_two_factor_authentication: Disable 2FA + disabled: Disabled + display_name: Display name + domain: Domain + edit: Edit + email: Email + email_status: Email status + enable: Enable + enabled: Enabled + feed_url: Feed URL + followers: Followers + followers_url: Followers URL + follows: Follows + header: Header + inbox_url: Inbox URL + invited_by: Invited by + ip: IP + joined: Joined + location: + all: All + local: Local + remote: Remote + title: Location + login_status: Login status + media_attachments: Media attachments + memorialize: Turn into memoriam + moderation: + active: Active + all: All + pending: Pending + silenced: Silenced + suspended: Suspended + title: Moderation + moderation_notes: Moderation notes + most_recent_activity: Most recent activity + most_recent_ip: Most recent IP + no_account_selected: No accounts were changed as none were selected + no_limits_imposed: No limits imposed + not_subscribed: Not subscribed + outbox_url: Outbox URL + pending: Pending review + perform_full_suspension: Suspend + profile_url: Profile URL + promote: Promote + protocol: Protocol + public: Public + push_subscription_expires: PuSH subscription expires + redownload: Refresh profile + reject: Reject + reject_all: Reject all + remove_avatar: Remove avatar + remove_header: Remove header + resend_confirmation: + already_confirmed: This user is already confirmed + send: Resend confirmation email + success: Confirmation email successfully sent! + reset: Reset + reset_password: Reset password + resubscribe: Resubscribe + role: Permissions + roles: + admin: Administrator + moderator: Moderator + staff: Staff + user: User + salmon_url: Salmon URL + search: Search + shared_inbox_url: Shared inbox URL + show: + created_reports: Made reports + targeted_reports: Reported by others + silence: Silence + silenced: Silenced + statuses: Statuses + subscribe: Subscribe + suspended: Suspended + time_in_queue: Waiting in queue %{time} + title: Accounts + unconfirmed_email: Unconfirmed email + undo_silenced: Undo silence + undo_suspension: Undo suspension + unsubscribe: Unsubscribe + username: Username + warn: Warn + web: Web + whitelisted: Whitelisted + action_logs: + actions: + assigned_to_self_report: "%{name} assigned report %{target} to themselves" + change_email_user: "%{name} changed the e-mail address of user %{target}" + confirm_user: "%{name} confirmed e-mail address of user %{target}" + create_account_warning: "%{name} sent a warning to %{target}" + create_custom_emoji: "%{name} uploaded new emoji %{target}" + create_domain_block: "%{name} blocked domain %{target}" + create_email_domain_block: "%{name} blacklisted e-mail domain %{target}" + demote_user: "%{name} demoted user %{target}" + destroy_custom_emoji: "%{name} destroyed emoji %{target}" + destroy_domain_block: "%{name} unblocked domain %{target}" + destroy_email_domain_block: "%{name} whitelisted e-mail domain %{target}" + destroy_status: "%{name} removed status by %{target}" + disable_2fa_user: "%{name} disabled two factor requirement for user %{target}" + disable_custom_emoji: "%{name} disabled emoji %{target}" + disable_user: "%{name} disabled login for user %{target}" + enable_custom_emoji: "%{name} enabled emoji %{target}" + enable_user: "%{name} enabled login for user %{target}" + memorialize_account: "%{name} turned %{target}'s account into a memoriam page" + promote_user: "%{name} promoted user %{target}" + remove_avatar_user: "%{name} removed %{target}'s avatar" + reopen_report: "%{name} reopened report %{target}" + reset_password_user: "%{name} reset password of user %{target}" + resolve_report: "%{name} resolved report %{target}" + silence_account: "%{name} silenced %{target}'s account" + suspend_account: "%{name} suspended %{target}'s account" + unassigned_report: "%{name} unassigned report %{target}" + unsilence_account: "%{name} unsilenced %{target}'s account" + unsuspend_account: "%{name} unsuspended %{target}'s account" + update_custom_emoji: "%{name} updated emoji %{target}" + update_status: "%{name} updated status by %{target}" + deleted_status: "(deleted status)" + title: Audit log + custom_emojis: + assign_category: Assign category + by_domain: Domain + copied_msg: Successfully created local copy of the emoji + copy: Copy + copy_failed_msg: Could not make a local copy of that emoji + create_new_category: Create new category + created_msg: Emoji successfully created! + delete: Delete + destroyed_msg: Emojo successfully destroyed! + disable: Disable + disabled: Disabled + disabled_msg: Successfully disabled that emoji + emoji: Emoji + enable: Enable + enabled: Enabled + enabled_msg: Successfully enabled that emoji + image_hint: PNG up to 50KB + list: List + listed: Listed + new: + title: Add new custom emoji + overwrite: Overwrite + shortcode: Shortcode + shortcode_hint: At least 2 characters, only alphanumeric characters and underscores + title: Custom emojis + uncategorized: Uncategorized + unlist: Unlist + unlisted: Unlisted + update_failed_msg: Could not update that emoji + updated_msg: Emoji successfully updated! + upload: Upload + dashboard: + authorized_fetch_mode: Secure mode + backlog: backlogged jobs + config: Configuration + feature_deletions: Account deletions + feature_invites: Invite links + feature_profile_directory: Profile directory + feature_registrations: Registrations + feature_relay: Federation relay + feature_spam_check: Anti-spam + feature_timeline_preview: Timeline preview + features: Features + hidden_service: Federation with hidden services + open_reports: open reports + pending_tags: hashtags waiting for review + pending_users: users waiting for review + recent_users: Recent users + search: Full-text search + single_user_mode: Single user mode + software: Software + space: Space usage + title: Dashboard + total_users: users in total + trends: Trends + week_interactions: interactions this week + week_users_active: active this week + week_users_new: users this week + whitelist_mode: Whitelist mode + domain_allows: + add_new: Whitelist domain + created_msg: Domain has been successfully whitelisted + destroyed_msg: Domain has been removed from the whitelist + undo: Remove from whitelist + domain_blocks: + add_new: Add new domain block + created_msg: Domain block is now being processed + destroyed_msg: Domain block has been undone + domain: Domain + edit: Edit domain block + existing_domain_block_html: You have already imposed stricter limits on %{name}, you need to unblock it first. + new: + create: Create block + hint: The domain block will not prevent creation of account entries in the database, but will retroactively and automatically apply specific moderation methods on those accounts. + severity: + desc_html: "Silence will make the account's posts invisible to anyone who isn't following them. Suspend will remove all of the account's content, media, and profile data. Use None if you just want to reject media files." + noop: None + silence: Silence + suspend: Suspend + title: New domain block + private_comment: Private comment + private_comment_hint: Comment about this domain limitation for internal use by the moderators. + public_comment: Public comment + public_comment_hint: Comment about this domain limitation for the general public, if advertising the list of domain limitations is enabled. + reject_media: Reject media files + reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions + reject_reports: Reject reports + reject_reports_hint: Ignore all reports coming from this domain. Irrelevant for suspensions + rejecting_media: rejecting media files + rejecting_reports: rejecting reports + severity: + silence: silenced + suspend: suspended + show: + affected_accounts: + one: One account in the database affected + other: "%{count} accounts in the database affected" + retroactive: + silence: Unsilence existing affected accounts from this domain + suspend: Unsuspend existing affected accounts from this domain + title: Undo domain block for %{domain} + undo: Undo + undo: Undo domain block + view: View domain block + email_domain_blocks: + add_new: Add new + created_msg: Successfully added e-mail domain to blacklist + delete: Delete + destroyed_msg: Successfully deleted e-mail domain from blacklist + domain: Domain + new: + create: Add domain + title: New e-mail blacklist entry + title: E-mail blacklist + followers: + back_to_account: Back To Account + title: "%{acct}'s Followers" + instances: + by_domain: Domain + delivery_available: Delivery is available + known_accounts: + one: "%{count} known account" + other: "%{count} known accounts" + moderation: + all: All + limited: Limited + title: Moderation + private_comment: Private comment + public_comment: Public comment + title: Federation + total_blocked_by_us: Blocked by us + total_followed_by_them: Followed by them + total_followed_by_us: Followed by us + total_reported: Reports about them + total_storage: Media attachments + invites: + deactivate_all: Deactivate all + filter: + all: All + available: Available + expired: Expired + title: Filter + title: Invites + pending_accounts: + title: Pending accounts (%{count}) + relays: + add_new: Add new relay + delete: Delete + description_html: A federation relay is an intermediary server that exchanges large volumes of public toots between servers that subscribe and publish to it. It can help small and medium servers discover content from the fediverse, which would otherwise require local users manually following other people on remote servers. + disable: Disable + disabled: Disabled + enable: Enable + enable_hint: Once enabled, your server will subscribe to all public toots from this relay, and will begin sending this server's public toots to it. + enabled: Enabled + inbox_url: Relay URL + pending: Waiting for relay's approval + save_and_enable: Save and enable + setup: Setup a relay connection + signatures_not_enabled: Relays will not work correctly while secure mode or whitelist mode is enabled + status: Status + title: Relays + report_notes: + created_msg: Report note successfully created! + destroyed_msg: Report note successfully deleted! + reports: + account: + note: note + report: report + action_taken_by: Action taken by + are_you_sure: Are you sure? + assign_to_self: Assign to me + assigned: Assigned moderator + comment: + none: None + created_at: Reported + mark_as_resolved: Mark as resolved + mark_as_unresolved: Mark as unresolved + notes: + create: Add note + create_and_resolve: Resolve with note + create_and_unresolve: Reopen with note + delete: Delete + placeholder: Describe what actions have been taken, or any other related updates... + reopen: Reopen report + report: 'Report #%{id}' + reported_account: Reported account + reported_by: Reported by + resolved: Resolved + resolved_msg: Report successfully resolved! + status: Status + title: Reports + unassign: Unassign + unresolved: Unresolved + updated_at: Updated + settings: + activity_api_enabled: + desc_html: Counts of locally posted statuses, active users, and new registrations in weekly buckets + title: Publish aggregate statistics about user activity + bootstrap_timeline_accounts: + desc_html: Separate multiple usernames by comma. Only local and unlocked accounts will work. Default when empty is all local admins. + title: Default follows for new users + contact_information: + email: Business e-mail + username: Contact username + custom_css: + desc_html: Modify the look with CSS loaded on every page + title: Custom CSS + default_noindex: + desc_html: Affects all users who have not changed this setting themselves + title: Opt users out of search engine indexing by default + domain_blocks: + all: To everyone + disabled: To no one + title: Show domain blocks + users: To logged-in local users + domain_blocks_rationale: + title: Show rationale + hero: + desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to server thumbnail + title: Hero image + mascot: + desc_html: Displayed on multiple pages. At least 293×205px recommended. When not set, falls back to default mascot + title: Mascot image + peers_api_enabled: + desc_html: Domain names this server has encountered in the fediverse + title: Publish list of discovered servers + preview_sensitive_media: + desc_html: Link previews on other websites will display a thumbnail even if the media is marked as sensitive + title: Show sensitive media in OpenGraph previews + profile_directory: + desc_html: Allow users to be discoverable + title: Enable profile directory + registrations: + closed_message: + desc_html: Displayed on frontpage when registrations are closed. You can use HTML tags + title: Closed registration message + deletion: + desc_html: Allow anyone to delete their account + title: Open account deletion + min_invite_role: + disabled: No one + title: Allow invitations by + registrations_mode: + modes: + approved: Approval required for sign up + none: Nobody can sign up + open: Anyone can sign up + title: Registrations mode + show_known_fediverse_at_about_page: + desc_html: When disabled, restricts the public timeline linked from the landing page to showing only local content + title: Include federated content on unauthenticated public timeline page + show_staff_badge: + desc_html: Show a staff badge on a user page + title: Show staff badge + site_description: + desc_html: Introductory paragraph on the API. Describe what makes this Mastodon server special and anything else important. You can use HTML tags, in particular <a> and <em>. + title: Server description + site_description_extended: + desc_html: A good place for your code of conduct, rules, guidelines and other things that set your server apart. You can use HTML tags + title: Custom extended information + site_short_description: + desc_html: Displayed in sidebar and meta tags. Describe what Mastodon is and what makes this server special in a single paragraph. + title: Short server description + site_terms: + desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML tags + title: Custom terms of service + site_title: Server name + spam_check_enabled: + desc_html: Mastodon can auto-report accounts that send repeated unsolicited messages. There may be false positives. + title: Anti-spam automation + thumbnail: + desc_html: Used for previews via OpenGraph and API. 1200x630px recommended + title: Server thumbnail + timeline_preview: + desc_html: Display link to public timeline on landing page and allow API access to the public timeline without authentication + title: Allow unauthenticated access to public timeline + title: Site settings + trendable_by_default: + desc_html: Affects hashtags that have not been previously disallowed + title: Allow hashtags to trend without prior review + trends: + desc_html: Publicly display previously reviewed hashtags that are currently trending + title: Trending hashtags + statuses: + back_to_account: Back to account page + batch: + delete: Delete + nsfw_off: Mark as not sensitive + nsfw_on: Mark as sensitive + deleted: Deleted + failed_to_execute: Failed to execute + media: + title: Media + no_media: No media + no_status_selected: No statuses were changed as none were selected + title: Account statuses + with_media: With media + tags: + accounts_today: Unique uses today + accounts_week: Unique uses this week + breakdown: Breakdown of today's usage by source + context: Context + directory: In directory + in_directory: "%{count} in directory" + last_active: Last active + most_popular: Most popular + most_recent: Most recent + name: Hashtag + review: Review status + reviewed: Reviewed + title: Hashtags + trending_right_now: Trending right now + unique_uses_today: "%{count} posting today" + unreviewed: Not reviewed + updated_msg: Hashtag settings updated successfully + title: Administration + warning_presets: + add_new: Add new + delete: Delete + edit: Edit + edit_preset: Edit warning preset + title: Manage warning presets + admin_mailer: + new_pending_account: + body: The details of the new account are below. You can approve or reject this application. + subject: New account up for review on %{instance} (%{username}) + new_report: + body: "%{reporter} has reported %{target}" + body_remote: Someone from %{domain} has reported %{target} + subject: New report for %{instance} (#%{id}) + new_trending_tag: + body: 'The hashtag #%{name} is trending today, but has not been previously reviewed. It will not be displayed publicly unless you allow it to, or just save the form as it is to never hear about it again.' + subject: New hashtag up for review on %{instance} (#%{name}) + aliases: + add_new: Create alias + created_msg: Successfully created a new alias. You can now initiate the move from the old account. + deleted_msg: Successfully remove the alias. Moving from that account to this one will no longer be possible. + hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is harmless and reversible. The account migration is initiated from the old account. + remove: Unlink alias + appearance: + advanced_web_interface: Advanced web interface + advanced_web_interface_hint: 'If you want to make use of your entire screen width, the advanced web interface allows you to configure many different columns to see as much information at the same time as you want: Home, notifications, federated timeline, any number of lists and hashtags.' + animations_and_accessibility: Animations and accessibility + confirmation_dialogs: Confirmation dialogs + discovery: Discovery + sensitive_content: Sensitive content + application_mailer: + notification_preferences: Change e-mail preferences + salutation: "%{name}," + settings: 'Change e-mail preferences: %{link}' + view: 'View:' + view_profile: View profile + view_status: View status + applications: + created: Application successfully created + destroyed: Application successfully deleted + invalid_url: The provided URL is invalid + regenerate_token: Regenerate access token + token_regenerated: Access token successfully regenerated + warning: Be very careful with this data. Never share it with anyone! + your_token: Your access token + auth: + apply_for_account: Request an invite + change_password: Password + checkbox_agreement_html: I agree to the server rules and terms of service + checkbox_agreement_without_rules_html: I agree to the terms of service + delete_account: Delete account + delete_account_html: If you wish to delete your account, you can proceed here. You will be asked for confirmation. + description: + prefix_invited_by_user: "@%{name} invites you to join this server of Mastodon!" + prefix_sign_up: Sign up on Mastodon today! + suffix: With an account, you will be able to follow people, post updates and exchange messages with users from any Mastodon server and more! + didnt_get_confirmation: Didn't receive confirmation instructions? + forgot_password: Forgot your password? + invalid_reset_password_token: Password reset token is invalid or expired. Please request a new one. + login: Log in + logout: Logout + migrate_account: Move to a different account + migrate_account_html: If you wish to redirect this account to a different one, you can configure it here. + or_log_in_with: Or log in with + providers: + cas: CAS + saml: SAML + register: Sign up + registration_closed: "%{instance} is not accepting new members" + resend_confirmation: Resend confirmation instructions + reset_password: Reset password + security: Security + set_new_password: Set new password + setup: + email_below_hint_html: If the below e-mail address is incorrect, you can change it here and receive a new confirmation e-mail. + email_settings_hint_html: The confirmation e-mail was sent to %{email}. If that e-mail address is not correct, you can change it in account settings. + title: Setup + status: + account_status: Account status + confirming: Waiting for e-mail confirmation to be completed. + functional: Your account is fully operational. + pending: Your application is pending review by our staff. This may take some time. You will receive an e-mail if your application is approved. + redirecting_to: Your account is inactive because it is currently redirecting to %{acct}. + trouble_logging_in: Trouble logging in? + authorize_follow: + already_following: You are already following this account + error: Unfortunately, there was an error looking up the remote account + follow: Follow + follow_request: 'You have sent a follow request to:' + following: 'Success! You are now following:' + post_follow: + close: Or, you can just close this window. + return: Show the user's profile + web: Go to web + title: Follow %{acct} + challenge: + confirm: Continue + hint_html: "Tip: We won't ask you for your password again for the next hour." + invalid_password: Invalid password + prompt: Confirm password to continue + datetime: + distance_in_words: + about_x_hours: "%{count}h" + about_x_months: "%{count}mo" + about_x_years: "%{count}y" + almost_x_years: "%{count}y" + half_a_minute: Just now + less_than_x_minutes: "%{count}m" + less_than_x_seconds: Just now + over_x_years: "%{count}y" + x_days: "%{count}d" + x_minutes: "%{count}m" + x_months: "%{count}mo" + x_seconds: "%{count}s" + deletes: + challenge_not_passed: The information you entered was not correct + confirm_password: Enter your current password to verify your identity + confirm_username: Enter your username to confirm the procedure + proceed: Delete account + success_msg: Your account was successfully deleted + warning: + before: 'Before proceeding, please read these notes carefully:' + caches: Content that has been cached by other servers may persist + data_removal: Your posts and other data will be permanently removed + email_change_html: You can change your e-mail address without deleting your account + email_contact_html: If it still doesn't arrive, you can e-mail %{email} for help + email_reconfirmation_html: If you are not receiving the confirmation e-mail, you can request it again + irreversible: You will not be able to restore or reactivate your account + more_details_html: For more details, see the privacy policy. + username_available: Your username will become available again + username_unavailable: Your username will remain unavailable + directories: + directory: Profile directory + explanation: Discover users based on their interests + explore_mastodon: Explore %{title} + domain_validator: + invalid_domain: is not a valid domain name + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + content: Security verification failed. Are you blocking cookies? + title: Security verification failed + '429': Throttled + '500': + content: We're sorry, but something went wrong on our end. + title: This page is not correct + '503': The page could not be served due to a temporary server failure. + noscript_html: To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform. + existing_username_validator: + not_found: could not find a local user with that username + not_found_multiple: could not find %{usernames} + exports: + archive_takeout: + date: Date + download: Download your archive + hint_html: You can request an archive of your toots and uploaded media. The exported data will be in ActivityPub format, readable by any compliant software. You can request an archive every 7 days. + in_progress: Compiling your archive... + request: Request your archive + size: Size + blocks: You block + csv: CSV + domain_blocks: Domain blocks + follows: You follow + lists: Lists + mutes: You mute + storage: Media storage + featured_tags: + add_new: Add new + errors: + limit: You have already featured the maximum amount of hashtags + hint_html: "What are featured hashtags? They are displayed prominently on your public profile and allow people to browse your public posts specifically under those hashtags. They are a great tool for keeping track of creative works or long-term projects." + filters: + contexts: + home: Home timeline + notifications: Notifications + public: Public timelines + thread: Conversations + edit: + title: Edit filter + errors: + invalid_context: None or invalid context supplied + invalid_irreversible: Irreversible filtering only works with home or notifications context + index: + delete: Delete + title: Filters + new: + title: Add new filter + footer: + developers: Developers + more: More… + resources: Resources + trending_now: Trending now + generic: + all: All + changes_saved_msg: Changes successfully saved! + copy: Copy + no_batch_actions_available: No batch actions available on this page + order_by: Order by + save_changes: Save changes + validation_errors: + one: Something isn't quite right yet! Please review the error below + other: Something isn't quite right yet! Please review %{count} errors below + html_validator: + invalid_markup: 'contains invalid HTML markup: %{error}' + identity_proofs: + active: Active + authorize: Yes, authorize + authorize_connection_prompt: Authorize this cryptographic connection? + errors: + failed: The cryptographic connection failed. Please try again from %{provider}. + keybase: + invalid_token: Keybase tokens are hashes of signatures and must be 66 hex characters + verification_failed: Keybase does not recognize this token as a signature of Keybase user %{kb_username}. Please retry from Keybase. + wrong_user: Cannot create a proof for %{proving} while logged in as %{current}. Log in as %{proving} and try again. + explanation_html: Here you can cryptographically connect your other identities, such as a Keybase profile. This lets other people send you encrypted messages and trust content you send them. + i_am_html: I am %{username} on %{service}. + identity: Identity + inactive: Inactive + publicize_checkbox: 'And toot this:' + publicize_toot: 'It is proven! I am %{username} on %{service}: %{url}' + status: Verification status + view_proof: View proof + imports: + modes: + merge: Merge + merge_long: Keep existing records and add new ones + overwrite: Overwrite + overwrite_long: Replace current records with the new ones + preface: You can import data that you have exported from another server, such as a list of the people you are following or blocking. + success: Your data was successfully uploaded and will now be processed in due time + types: + blocking: Blocking list + domain_blocking: Domain blocking list + following: Following list + muting: Muting list + upload: Upload + in_memoriam_html: In Memoriam. + invites: + delete: Deactivate + expired: Expired + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day + expires_in_prompt: Never + generate: Generate invite link + invited_by: 'You were invited by:' + max_uses: + one: 1 use + other: "%{count} uses" + max_uses_prompt: No limit + prompt: Generate and share links with others to grant access to this server + table: + expires_at: Expires + uses: Uses + title: Invite people + lists: + errors: + limit: You have reached the maximum amount of lists + media_attachments: + validations: + images_and_video: Cannot attach a video to a status that already contains images + too_many: Cannot attach more than 4 files + migrations: + acct: Moved to + cancel: Cancel redirect + cancel_explanation: Cancelling the redirect will re-activate your current account, but will not bring back followers that have been moved to that account. + cancelled_msg: Successfully cancelled the redirect. + errors: + already_moved: is the same account you have already moved to + missing_also_known_as: is not back-referencing this account + move_to_self: cannot be current account + not_found: could not be found + on_cooldown: You are on cooldown + followers_count: Followers at time of move + incoming_migrations: Moving from a different account + incoming_migrations_html: To move from another account to this one, first you need to create an account alias. + moved_msg: Your account is now redirecting to %{acct} and your followers are being moved over. + not_redirecting: Your account is not redirecting to any other account currently. + on_cooldown: You have recently migrated your account. This function will become available again in %{count} days. + past_migrations: Past migrations + proceed_with_move: Move followers + redirecting_to: Your account is redirecting to %{acct}. + set_redirect: Set redirect + warning: + backreference_required: The new account must first be configured to back-reference this one + before: 'Before proceeding, please read these notes carefully:' + cooldown: After moving there is a cooldown period during which you will not be able to move again + disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation. + followers: This action will move all followers from the current account to the new account + only_redirect_html: Alternatively, you can only put up a redirect on your profile. + other_data: No other data will be moved automatically + redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches + moderation: + title: Moderation + notification_mailer: + digest: + action: View all notifications + body: Here is a brief summary of the messages you missed since your last visit on %{since} + mention: "%{name} mentioned you in:" + new_followers_summary: + one: Also, you have acquired one new follower while being away! Yay! + other: Also, you have acquired %{count} new followers while being away! Amazing! + subject: + one: "1 new notification since your last visit \U0001F418" + other: "%{count} new notifications since your last visit \U0001F418" + title: In your absence... + favourite: + body: 'Your status was squeaked by %{name}:' + subject: "%{name} squeaked your status" + title: New squeak + follow: + body: "%{name} is now following you!" + subject: "%{name} is now following you" + title: New follower + follow_request: + action: Manage follow requests + body: "%{name} has requested to follow you" + subject: 'Pending follower: %{name}' + title: New follow request + mention: + action: Reply + body: 'You were mentioned by %{name} in:' + subject: You were mentioned by %{name} + title: New mention + reblog: + body: 'Your status was pumped by %{name}:' + subject: "%{name} pumped your status" + title: New pump + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + unit: '' + pagination: + newer: Newer + next: Next + older: Older + prev: Prev + truncate: "…" + polls: + errors: + already_voted: You have already voted on this poll + duplicate_options: contain duplicate items + duration_too_long: is too far into the future + duration_too_short: is too soon + expired: The poll has already ended + over_character_limit: cannot be longer than %{max} characters each + too_few_options: must have more than one item + too_many_options: can't contain more than %{max} items + preferences: + other: Other + posting_defaults: Posting defaults + public_timelines: Public timelines + relationships: + activity: Account activity + dormant: Dormant + last_active: Last active + most_recent: Most recent + moved: Moved + mutual: Mutual + primary: Primary + relationship: Relationship + remove_selected_domains: Remove all followers from the selected domains + remove_selected_followers: Remove selected followers + remove_selected_follows: Unfollow selected users + status: Account status + remote_follow: + acct: Enter your username@domain you want to act from + missing_resource: Could not find the required redirect URL for your account + no_account_html: Don't have an account? You can sign up here + proceed: Proceed to follow + prompt: 'You are going to follow:' + reason_html: "Why is this step necessary? %{instance} might not be the server where you are registered, so we need to redirect you to your home server first." + remote_interaction: + favourite: + proceed: Proceed to squeak + prompt: 'You want to squeak this toot:' + reblog: + proceed: Proceed to pump + prompt: 'You want to pump this toot:' + reply: + proceed: Proceed to reply + prompt: 'You want to reply to this toot:' + scheduled_statuses: + over_daily_limit: You have exceeded the limit of %{limit} scheduled toots for that day + over_total_limit: You have exceeded the limit of %{limit} scheduled toots + too_soon: The scheduled date must be in the future + sessions: + activity: Last activity + browser: Browser + browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Unknown browser + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo + current_session: Current session + description: "%{browser} on %{platform}" + explanation: These are the web browsers currently logged in to your Mastodon account. + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac + other: unknown platform + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Revoke + revoke_success: Session successfully revoked + title: Sessions + settings: + account: Account + account_settings: Account settings + aliases: Account aliases + appearance: Appearance + authorized_apps: Authorized apps + back: Back to Mastodon + delete: Account deletion + development: Development + edit_profile: Edit profile + export: Data export + featured_tags: Featured hashtags + identity_proofs: Identity proofs + import: Import + import_and_export: Import and export + migrate: Account migration + notifications: Notifications + preferences: Preferences + profile: Profile + relationships: Follows and followers + two_factor_authentication: Two-factor Auth + spam_check: + spam_detected_and_silenced: This is an automated report. Spam has been detected and the sender has been silenced automatically. If this is a mistake, please unsilence the account. + statuses: + attached: + description: 'Attached: %{attached}' + image: + one: "%{count} image" + other: "%{count} images" + video: + one: "%{count} video" + other: "%{count} videos" + boosted_from_html: Pumped from %{acct_link} + content_warning: 'Content warning: %{warning}' + disallowed_hashtags: + one: 'contained a disallowed hashtag: %{tags}' + other: 'contained the disallowed hashtags: %{tags}' + language_detection: Automatically detect language + open_in_web: Open in web + over_character_limit: character limit of %{max} exceeded + pin_errors: + limit: You have already pinned the maximum number of toots + ownership: Someone else's toot cannot be pinned + private: Non-public toot cannot be pinned + reblog: A pump cannot be pinned + poll: + total_people: + one: "%{count} person" + other: "%{count} people" + total_votes: + one: "%{count} vote" + other: "%{count} votes" + vote: Vote + show_more: Show more + sign_in_to_participate: Sign in to participate in the conversation + strip_formatting: + all: All + all_long: Strip all advanced formatting + blocks: Block elements + blocks_long: Strip formatting for title headers and block quotes + none: None + none_long: Do not strip any formatting supported by Mastodon + title: '%{name}: "%{quote}"' + visibilities: + private: Followers-only + private_long: Only show to followers + public: Public + public_long: Everyone can see + unlisted: Unlisted + unlisted_long: Everyone can see, but not listed on public timelines + stream_entries: + pinned: Pinned toot + reblogged: pumped + sensitive_content: Sensitive content + tags: + does_not_match_previous_name: does not match the previous name + terms: + body_html: | +

Privacy Policy

+

What information do we collect?

+ + + +
+ +

What do we use your information for?

+ +

Any of the information we collect from you may be used in the following ways:

+ + + +
+ +

How do we protect your information?

+ +

We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.

+ +
+ +

What is our data retention policy?

+ +

We will make a good faith effort to:

+ + + +

You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.

+ +

You may irreversibly delete your account at any time.

+ +
+ +

Do we use cookies?

+ +

Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.

+ +

We use cookies to understand and save your preferences for future visits.

+ +
+ +

Do we disclose any information to outside parties?

+ +

We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.

+ +

Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.

+ +

When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your squeaks. Applications can never access your e-mail address or password.

+ +
+ +

Site usage by children

+ +

If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site.

+ +

If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site.

+ +

Law requirements can be different if this server is in another jurisdiction.

+ +
+ +

Changes to our Privacy Policy

+ +

If we decide to change our privacy policy, we will post those changes on this page.

+ +

This document is CC-BY-SA. It was last updated March 7, 2018.

+ +

Originally adapted from the Discourse privacy policy.

+ title: "%{instance} Terms of Service and Privacy Policy" + themes: + contrast: High contrast + contrast-wider: High contrast (wider) + pop: Inflate + pop-wider: Inflate (wider) + pop-light: Inflate (light) + pop-light-wider: Inflate (light, wider) + mastodon: Mastodon + mastodon-wider: Mastodon (wider) + mastodon-light: Mastodon (light) + mastodon-light-wider: Mastodon (light, wider) + werefox: Werefox Software Theme + werefox-wider: Werefox Software Theme but W I D E + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" + two_factor_authentication: + code_hint: Enter the code generated by your authenticator app to confirm + description_html: If you enable two-factor authentication, logging in will require you to be in possession of your phone, which will generate tokens for you to enter. + disable: Disable + enable: Enable + enabled: Two-factor authentication is enabled + enabled_success: Two-factor authentication successfully enabled + generate_recovery_codes: Generate recovery codes + instructions_html: "Scan this QR code into Google Authenticator or a similiar TOTP app on your phone. From now on, that app will generate tokens that you will have to enter when logging in." + lost_recovery_codes: Recovery codes allow you to regain access to your account if you lose your phone. If you've lost your recovery codes, you can regenerate them here. Your old recovery codes will be invalidated. + manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:' + recovery_codes: Backup recovery codes + recovery_codes_regenerated: Recovery codes successfully regenerated + recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. Keep the recovery codes safe. For example, you may print them and store them with other important documents. + setup: Set up + wrong_code: The entered code was invalid! Are server time and device time correct? + user_mailer: + backup_ready: + explanation: You requested a full backup of your Mastodon account. It's now ready for download! + subject: Your archive is ready for download + title: Archive takeout + warning: + explanation: + disable: While your account is frozen, your account data remains intact, but you cannot perform any actions until it is unlocked. + silence: While your account is limited, only people who are already following you will see your toots on this server, and you may be excluded from various public listings. However, others may still manually follow you. + suspend: Your account has been suspended, and all of your toots and your uploaded media files have been irreversibly removed from this server, and servers where you had followers. + get_in_touch: You can reply to this e-mail to get in touch with the staff of %{instance}. + review_server_policies: Review server policies + statuses: 'Specifically, for:' + subject: + disable: Your account %{acct} has been frozen + none: Warning for %{acct} + silence: Your account %{acct} has been limited + suspend: Your account %{acct} has been suspended + title: + disable: Account frozen + none: Warning + silence: Account limited + suspend: Account suspended + welcome: + edit_profile_action: Setup profile + edit_profile_step: You can customize your profile by uploading an avatar, header, changing your display name and more. If you’d like to review new followers before they’re allowed to follow you, you can lock your account. + explanation: Here are some tips to get you started + final_action: Start posting + final_step: 'Start posting! Even without followers your public messages may be seen by others, for example on the local timeline and in hashtags. You may want to introduce yourself on the #introductions hashtag.' + full_handle: Your full handle + full_handle_hint: This is what you would tell your friends so they can message or follow you from another server. + review_preferences_action: Change preferences + review_preferences_step: Make sure to set your preferences, such as which emails you'd like to receive, or what privacy level you’d like your posts to default to. If you don’t have motion sickness, you could choose to enable GIF autoplay. + subject: Welcome to Mastodon + tip_federated_timeline: The federated timeline is a firehose view of the Mastodon network. But it only includes people your neighbours are subscribed to, so it's not complete. + tip_following: You follow your server's admin(s) by default. To find more interesting people, check the local and federated timelines. + tip_local_timeline: The local timeline is a firehose view of people on %{instance}. These are your immediate neighbours! + tip_mobile_webapp: If your mobile browser offers you to add Mastodon to your homescreen, you can receive push notifications. It acts like a native app in many ways! + tips: Tips + title: Welcome aboard, %{name}! + users: + follow_limit_reached: You cannot follow more than %{limit} people + invalid_email: The e-mail address is invalid + invalid_otp_token: Invalid two-factor code + otp_lost_help_html: If you lost access to both, you may get in touch with %{email} + seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available. + signed_in_as: 'Signed in as:' + verification: + explanation_html: 'You can verify yourself as the owner of the links in your profile metadata. For that, the linked website must contain a link back to your Mastodon profile. The link back must have a rel="me" attribute. The text content of the link does not matter. Here is an example:' + verification: Verification diff --git a/config/settings.yml b/config/settings.yml index bd2f65b5e..ababd6aad 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -29,13 +29,14 @@ defaults: &defaults show_application: true system_font_ui: false noindex: false - theme: 'default' + theme: 'mastodon' aggregate_reblogs: true advanced_layout: false use_blurhash: true use_pending_items: false trends: true trendable_by_default: false + strip_formatting: 'none' notification_emails: follow: false reblog: false diff --git a/config/themes.yml b/config/themes.yml index 9c21c9459..5a8594f74 100644 --- a/config/themes.yml +++ b/config/themes.yml @@ -1,3 +1,12 @@ -default: styles/application.scss contrast: styles/contrast.scss +contrast-wider: styles/contrast-wider.scss +pop: styles/pop.scss +pop-wider: styles/pop-wider.scss +pop-light: styles/pop-light.scss +pop-light-wider: styles/pop-light-wider.scss +mastodon: styles/application.scss +mastodon-wider: styles/mastodon-wider.scss mastodon-light: styles/mastodon-light.scss +mastodon-light-wider: styles/mastodon-light-wider.scss +werefox: styles/werefox.scss +werefox-wider: styles/werefox-wider.scss diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index f3ead6d8d..4536741c3 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -21,7 +21,7 @@ module Mastodon end def suffix - '' + '-asonix-changes' end def to_a @@ -33,11 +33,11 @@ module Mastodon end def repository - ENV.fetch('GITHUB_REPOSITORY') { 'tootsuite/mastodon' } + 'asonix/mastodon' end def source_base_url - ENV.fetch('SOURCE_BASE_URL') { "https://github.com/#{repository}" } + "https://git.asonix.dog/#{repository}" end # specify git tag or commit hash here