diff --git a/README.md b/README.md index 815b72e..dcfb33c 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,5 @@ _none_ - 0001-confirm-favorite: opens a "confirmation" modal on favorites, identical to reposts. (TODO: undo formatting changes) - 0002-move-notifications: moves toast notifications to the bottom of the screen +- 0003-en_3pp: adds "English (3rd Person)" locale + - If you want to use this without the patch, copy this over the one's en.json: https://codeberg.org/tachikoma/tachikoma-fe/src/branch/0003-en_3pp/src/i18n/en_3pp.json diff --git a/akkoma-fe/0001-confirm-favorite.patch b/akkoma-fe/0001-confirm-favorite.patch index 52de84d..dccbf15 100644 --- a/akkoma-fe/0001-confirm-favorite.patch +++ b/akkoma-fe/0001-confirm-favorite.patch @@ -1,96 +1,61 @@ diff --git a/src/components/favorite_button/favorite_button.js b/src/components/favorite_button/favorite_button.js -index d15699f7..e5f1a3c5 100644 +index d15699f7..cca8a479 100644 --- a/src/components/favorite_button/favorite_button.js +++ b/src/components/favorite_button/favorite_button.js -@@ -1,41 +1,60 @@ --import { mapGetters } from 'vuex' --import { library } from '@fortawesome/fontawesome-svg-core' --import { faStar } from '@fortawesome/free-solid-svg-icons' --import { -- faStar as faStarRegular --} from '@fortawesome/free-regular-svg-icons' -+import ConfirmModal from "../confirm_modal/confirm_modal.vue"; -+import { mapGetters } from "vuex"; -+import { library } from "@fortawesome/fontawesome-svg-core"; -+import { faStar } from "@fortawesome/free-solid-svg-icons"; -+import { faStar as faStarRegular } from "@fortawesome/free-regular-svg-icons"; - --library.add( -- faStar, -- faStarRegular --) -+library.add(faStar, faStarRegular); +@@ -1,4 +1,5 @@ + import { mapGetters } from 'vuex' ++import ConfirmModal from '../confirm_modal/confirm_modal.vue' + import { library } from '@fortawesome/fontawesome-svg-core' + import { faStar } from '@fortawesome/free-solid-svg-icons' + import { +@@ -12,13 +13,24 @@ library.add( const FavoriteButton = { -- props: ['status', 'loggedIn'], -- data () { -+ props: ["status", "loggedIn"], + props: ['status', 'loggedIn'], + components: { -+ ConfirmModal, ++ ConfirmModal + }, -+ data() { + data () { return { - animated: false -- } + animated: false, -+ showingConfirmDialog: false, -+ }; ++ showingConfirmDialog: false + } }, methods: { -- favorite () { -+ favorite() { -+ if (!this.status.favorited && this.shouldConfirmFavorite) { -+ this.showConfirmDialog(); + favorite () { ++ if (!this.status.repeated && this.shouldConfirmFavorite) { ++ this.showConfirmDialog() + } else { -+ this.doFavorite(); ++ this.doFavorite() + } + }, -+ doFavorite() { ++ doFavorite () { if (!this.status.favorited) { -- this.$store.dispatch('favorite', { id: this.status.id }) -+ this.$store.dispatch("favorite", { id: this.status.id }); + this.$store.dispatch('favorite', { id: this.status.id }) } else { -- this.$store.dispatch('unfavorite', { id: this.status.id }) -+ this.$store.dispatch("unfavorite", { id: this.status.id }); - } -- this.animated = true -+ this.animated = true; +@@ -28,12 +40,21 @@ const FavoriteButton = { setTimeout(() => { -- this.animated = false -- }, 500) -- } -+ this.animated = false; -+ }, 500); -+ this.hideConfirmDialog(); + this.animated = false + }, 500) + }, -+ showConfirmDialog() { -+ this.showingConfirmDialog = true; -+ }, -+ hideConfirmDialog() { -+ this.showingConfirmDialog = false; ++ showConfirmDialog () { ++ this.showingConfirmDialog = true + }, ++ hideConfirmDialog () { ++ this.showingConfirmDialog = false + } }, computed: { -- ...mapGetters(['mergedConfig']), -- remoteInteractionLink () { -- return this.$store.getters.remoteInteractionLink({ statusId: this.status.id }) -- } -- } --} -+ ...mapGetters(["mergedConfig"]), -+ shouldConfirmFavorite() { -+ return this.mergedConfig.modalOnFavorite; + ...mapGetters(['mergedConfig']), + remoteInteractionLink () { + return this.$store.getters.remoteInteractionLink({ statusId: this.status.id }) + }, -+ remoteInteractionLink() { -+ return this.$store.getters.remoteInteractionLink({ -+ statusId: this.status.id, -+ }); -+ }, -+ }, -+}; - --export default FavoriteButton -+export default FavoriteButton; ++ shouldConfirmRepeat () { ++ return this.mergedConfig.modalOnRepeat + } + } + } diff --git a/src/components/favorite_button/favorite_button.vue b/src/components/favorite_button/favorite_button.vue index 16bf441e..06ed7d59 100644 --- a/src/components/favorite_button/favorite_button.vue @@ -130,6 +95,29 @@ index 64950f8a..b09c6d9f 100644
  • {{ $t('settings.confirm_dialogs_unfollow') }} +diff --git a/src/i18n/en.json b/src/i18n/en.json +index 965cddb0..ed140e5a 100644 +--- a/src/i18n/en.json ++++ b/src/i18n/en.json +@@ -510,6 +510,7 @@ + "confirm_dialogs_deny_follow": "Rejecting a follow request", + "confirm_dialogs_mute": "Muting someone", + "confirm_dialogs_repeat": "Repeating a post", ++ "confirm_dialogs_favorite": "Favoriting a post", + "confirm_dialogs_unfollow": "Unfollowing someone", + "confirm_new_password": "Confirm new password", + "confirmation_dialogs": "Confirmation options", +@@ -975,6 +976,10 @@ + "expand": "Expand", + "external_source": "External source", + "favorites": "Favorites", ++ "favorite_confirm": "Do you really want to favorite this post?", ++ "favorite_confirm_accept_button": "Yes, favorite it", ++ "favorite_confirm_cancel_button": "No, don't favorite", ++ "favorite_confirm_title": "Confirm favorite", + "hide_attachment": "Hide attachment", + "hide_content": "Hide content", + "hide_full_subject": "Hide full content warning", diff --git a/src/modules/config.js b/src/modules/config.js index 551b5bb6..0e78c749 100644 --- a/src/modules/config.js diff --git a/akkoma-fe/0003-en_3pp.patch b/akkoma-fe/0003-en_3pp.patch new file mode 100644 index 0000000..e3b8ddd --- /dev/null +++ b/akkoma-fe/0003-en_3pp.patch @@ -0,0 +1,1261 @@ +diff --git a/src/i18n/en_3pp.json b/src/i18n/en_3pp.json +new file mode 100644 +index 00000000..441f15fc +--- /dev/null ++++ b/src/i18n/en_3pp.json +@@ -0,0 +1,1223 @@ ++{ ++ "about": { ++ "bubble_instances": "Local Bubble Instances", ++ "bubble_instances_description": "Instances chosen by the admins to represent the local area of this instance", ++ "mrf": { ++ "federation": "Federation", ++ "keyword": { ++ "ftl_removal": "Removal from \"The Whole Known Network\" Timeline", ++ "is_replaced_by": "→", ++ "keyword_policies": "Keyword policies", ++ "reject": "Reject", ++ "replace": "Replace" ++ }, ++ "mrf_policies": "Enabled MRF policies", ++ "mrf_policies_desc": "MRF policies manipulate the federation behaviour of the instance. The following policies are enabled:", ++ "simple": { ++ "accept": "Accept", ++ "accept_desc": "This instance only accepts messages from the following instances:", ++ "ftl_removal": "Removal from \"Known Network\" Timeline", ++ "ftl_removal_desc": "This instance removes these instances from \"Known Network\" timeline:", ++ "instance": "Instance", ++ "media_nsfw": "Media force-set as sensitive", ++ "media_nsfw_desc": "This instance forces media to be set sensitive in posts on the following instances:", ++ "media_removal": "Media Removal", ++ "media_removal_desc": "This instance removes media from posts on the following instances:", ++ "not_applicable": "N/A", ++ "quarantine": "Quarantine", ++ "quarantine_desc": "This instance will not send posts to the following instances:", ++ "reason": "Reason", ++ "reject": "Reject", ++ "reject_desc": "This instance will not accept messages from the following instances:", ++ "simple_policies": "Instance-specific policies" ++ } ++ }, ++ "staff": "Staff" ++ }, ++ "announcements": { ++ "all_day_prompt": "This is an all-day event", ++ "cancel_edit_action": "Cancel", ++ "close_error": "Close", ++ "delete_action": "Delete", ++ "edit_action": "Edit", ++ "end_time_display": "Ends at {time}", ++ "end_time_prompt": "End time: ", ++ "inactive_message": "This announcement is inactive", ++ "mark_as_read_action": "Mark as read", ++ "page_header": "Announcements", ++ "post_action": "Post", ++ "post_error": "Error: {error}", ++ "post_form_header": "Post announcement", ++ "post_placeholder": "Announcement content", ++ "published_time_display": "Published at {time}", ++ "start_time_display": "Starts at {time}", ++ "start_time_prompt": "Start time: ", ++ "submit_edit_action": "Submit", ++ "title": "Announcement" ++ }, ++ "chats": { ++ "chats": "Chats", ++ "delete": "Delete", ++ "delete_confirm": "Does it really want to delete this message?", ++ "empty_chat_list_placeholder": "That one doesn't have any chats yet. Start a new chat!", ++ "empty_message_error": "Cannot post empty message", ++ "error_loading_chat": "Something went wrong when loading the chat.", ++ "error_sending_message": "Something went wrong when sending the message.", ++ "message_user": "Message {nickname}", ++ "more": "More", ++ "new": "New Chat", ++ "you": "[self]:" ++ }, ++ "display_date": { ++ "today": "Today" ++ }, ++ "domain_mute_card": { ++ "mute": "Mute", ++ "mute_progress": "Muting…", ++ "unmute": "Unmute", ++ "unmute_progress": "Unmuting…" ++ }, ++ "emoji": { ++ "add_emoji": "Insert emoji", ++ "custom": "Custom emoji", ++ "emoji": "Emoji", ++ "keep_open": "Keep picker open", ++ "load_all": "Loading all {emojiAmount} emoji", ++ "load_all_hint": "Loaded first {saneAmount} emoji, loading all emoji may cause performance issues.", ++ "search_emoji": "Search for an emoji", ++ "stickers": "Stickers", ++ "unicode": "Unicode emoji", ++ "recent": "Recently used" ++ }, ++ "errors": { ++ "storage_unavailable": "Pleroma could not access browser storage. Its login and local settings won't be saved and it might encounter unexpected issues. Try enabling cookies." ++ }, ++ "exporter": { ++ "export": "Export", ++ "processing": "Processing, you'll soon be asked to download your file" ++ }, ++ "features_panel": { ++ "media_proxy": "Media proxy", ++ "scope_options": "Scope options", ++ "text_limit": "Text limit", ++ "title": "Features", ++ "upload_limit": "Upload limit", ++ "who_to_follow": "Who to follow" ++ }, ++ "file_type": { ++ "audio": "Audio", ++ "file": "File", ++ "image": "Image", ++ "video": "Video" ++ }, ++ "finder": { ++ "error_fetching_user": "Error fetching user", ++ "find_user": "Find user" ++ }, ++ "general": { ++ "apply": "Apply", ++ "cancel": "Cancel", ++ "close": "Close", ++ "confirm": "Confirm", ++ "disable": "Disable", ++ "dismiss": "Dismiss", ++ "enable": "Enable", ++ "error_retry": "Please try again", ++ "flash_content": "Click to show Flash content using Ruffle (Experimental, may not work).", ++ "flash_fail": "Failed to load flash content, see console for details.", ++ "flash_security": "Note that this can be potentially dangerous since Flash content is still arbitrary code.", ++ "generic_error": "An error occured", ++ "loading": "Loading…", ++ "more": "More", ++ "optional": "optional", ++ "peek": "Peek", ++ "retry": "Try again", ++ "role": { ++ "admin": "Doll", ++ "moderator": "Doll User" ++ }, ++ "scope_in_timeline": { ++ "direct": "Direct", ++ "local": "Local - only this instance can see this post", ++ "private": "Followers-only", ++ "public": "Public", ++ "unlisted": "Unlisted" ++ }, ++ "show_less": "Show less", ++ "show_more": "Show more", ++ "submit": "Submit", ++ "verify": "Verify" ++ }, ++ "image_cropper": { ++ "cancel": "Cancel", ++ "crop_picture": "Crop picture", ++ "save": "Save", ++ "save_without_cropping": "Save without cropping" ++ }, ++ "importer": { ++ "error": "An error occured while importing this file.", ++ "submit": "Submit", ++ "success": "Imported successfully." ++ }, ++ "interactions": { ++ "favs_repeats": "Repeats and favorites", ++ "follows": "New follows", ++ "load_older": "Load older interactions", ++ "moves": "User migrates" ++ }, ++ "languages": { ++ "ar": "Arabic", ++ "az": "Azerbaijani", ++ "bg": "Bulgarian", ++ "cs": "Czech", ++ "da": "Danish", ++ "de": "German", ++ "el": "Greek", ++ "en": "English", ++ "en_3pp": "English (3rd Person)", ++ "eo": "Esperanto", ++ "es": "Spanish", ++ "fa": "Persian", ++ "fi": "Finnish", ++ "fr": "French", ++ "ga": "Irish", ++ "he": "Hebrew", ++ "hi": "Hindi", ++ "hu": "Hungarian", ++ "id": "Indonesian", ++ "it": "Italian", ++ "ja": "Japanese", ++ "ko": "Korean", ++ "lt": "Lithuanian", ++ "lv": "Latvian", ++ "nl": "Dutch", ++ "pl": "Polish", ++ "pt": "Portuguese", ++ "ru": "Russian", ++ "sk": "Slovak", ++ "sv": "Swedish", ++ "tr": "Turkish", ++ "translated_from": { ++ "ar": "Translated from @:languages.ar", ++ "az": "Translated from @:languages.az", ++ "bg": "Translated from @:languages.bg", ++ "cs": "Translated from @:languages.cs", ++ "da": "Translated from @:languages.da", ++ "de": "Translated from @:languages.de", ++ "el": "Translated from @:languages.el", ++ "en": "Translated from @:languages.en", ++ "eo": "Translated from @:languages.eo", ++ "es": "Translated from @:languages.es", ++ "fa": "Translated from @:languages.fa", ++ "fi": "Translated from @:languages.fi", ++ "fr": "Translated from @:languages.fr", ++ "ga": "Translated from @:languages.ga", ++ "he": "Translated from @:languages.he", ++ "hi": "Translated from @:languages.hi", ++ "hu": "Translated from @:languages.hu", ++ "id": "Translated from @:languages.id", ++ "it": "Translated from @:languages.it", ++ "ja": "Translated from @:languages.ja", ++ "ko": "Translated from @:languages.ko", ++ "lt": "Translated from @:languages.lt", ++ "lv": "Translated from @:languages.lv", ++ "nl": "Translated from @:languages.nl", ++ "pl": "Translated from @:languages.pl", ++ "pt": "Translated from @:languages.pt", ++ "ru": "Translated from @:languages.ru", ++ "sk": "Translated from @:languages.sk", ++ "sv": "Translated from @:languages.sv", ++ "tr": "Translated from @:languages.tr", ++ "uk": "Translated from @:languages.uk", ++ "zh": "Translated from @:languages.zh" ++ }, ++ "uk": "Ukrainian", ++ "zh": "Chinese" ++ }, ++ "lists": { ++ "create": "Create", ++ "delete": "Delete list", ++ "following_only": "Limit to Following", ++ "lists": "Lists", ++ "new": "New List", ++ "save": "Save changes", ++ "search": "Search users", ++ "title": "List title" ++ }, ++ "login": { ++ "authentication_code": "Authentication code", ++ "description": "Log in with OAuth", ++ "enter_recovery_code": "Enter a recovery code", ++ "enter_two_factor_code": "Enter a two-factor code", ++ "heading": { ++ "recovery": "Two-factor recovery", ++ "totp": "Two-factor authentication" ++ }, ++ "hint": "Log in to join the discussion", ++ "login": "Log in", ++ "logout": "Log out", ++ "logout_confirm": "Is it sure it wants to log out?", ++ "logout_confirm_accept_button": "Log out", ++ "logout_confirm_cancel_button": "Cancel", ++ "logout_confirm_title": "Log out", ++ "password": "Password", ++ "placeholder": "myusername", ++ "recovery_code": "Recovery code", ++ "register": "Register", ++ "username": "Username" ++ }, ++ "media_modal": { ++ "counter": "{current} / {total}", ++ "hide": "Close media viewer", ++ "next": "Next", ++ "previous": "Previous" ++ }, ++ "moderation": { ++ "moderation": "Moderation", ++ "reports": { ++ "add_note": "Add note", ++ "close": "Close", ++ "delete_note": "Delete", ++ "delete_note_accept": "Yes, delete it", ++ "delete_note_cancel": "No, keep it", ++ "delete_note_confirm": "Is it sure it wants to delete this note?", ++ "delete_note_title": "Confirm deletion", ++ "no_content": "No description given", ++ "no_reports": "No reports to show", ++ "note_placeholder": "Leave a note", ++ "notes": "{ count } note | { count } notes", ++ "reopen": "Reopen", ++ "report": "Report on", ++ "reports": "Reports", ++ "resolve": "Resolve", ++ "show_closed": "Show closed", ++ "statuses": "{ count } post| { count } posts", ++ "tag_policy_notice": "Enable the TagPolicy MRF to set post restrictions", ++ "tags": "Set post restrictions" ++ }, ++ "statuses": "Posts", ++ "users": "Users" ++ }, ++ "nav": { ++ "about": "About", ++ "administration": "Administration", ++ "announcements": "Announcements", ++ "back": "Back", ++ "bookmarks": "Bookmarks", ++ "bubble_timeline": "Bubble timeline", ++ "bubble_timeline_description": "Posts from instances close to this one, as recommended by the admins", ++ "chats": "Chats", ++ "dms": "Direct messages", ++ "friend_requests": "Follow requests", ++ "home_timeline": "Home timeline", ++ "home_timeline_description": "Posts from people that one follows", ++ "interactions": "Interactions", ++ "lists": "Lists", ++ "mentions": "Mentions", ++ "moderation": "Moderation", ++ "preferences": "Preferences", ++ "public_timeline_description": "Public posts from this instance", ++ "public_tl": "Public timeline", ++ "search": "Search", ++ "timeline": "Timeline", ++ "timelines": "Timelines", ++ "twkn": "Known Network", ++ "twkn_timeline_description": "Posts from the entire network", ++ "user_search": "User Search", ++ "who_to_follow": "Who to follow" ++ }, ++ "notifications": { ++ "broken_favorite": "Unknown post, searching for it…", ++ "error": "Error fetching notifications: {0}", ++ "favorited_you": "favorited its post", ++ "follow_request": "wants to follow that one", ++ "followed_you": "followed that one", ++ "load_older": "Load older notifications", ++ "migrated_to": "migrated to", ++ "no_more_notifications": "No more notifications", ++ "notifications": "Notifications", ++ "poll_ended": "poll has ended", ++ "reacted_with": "reacted with {0}", ++ "read": "Read!", ++ "repeated_you": "repeated its post" ++ }, ++ "password_reset": { ++ "check_email": "Check the registered email for a link to reset the password.", ++ "forgot_password": "Forgot password?", ++ "instruction": "Enter that one's email address or username. The hive will send that one a link to reset its password.", ++ "password_reset": "Password reset", ++ "password_reset_disabled": "Password reset is disabled. Please contact the instance administrator.", ++ "password_reset_required": "That one must reset its password to log in.", ++ "password_reset_required_but_mailer_is_disabled": "That one must reset its password, but password reset is disabled. Please contact the instance administrator.", ++ "placeholder": "email or username", ++ "return_home": "Return to the home page", ++ "too_many_requests": "That one has reached the limit of attempts, try again later." ++ }, ++ "polls": { ++ "add_option": "Add option", ++ "add_poll": "Add poll", ++ "expired": "Poll ended {0} ago", ++ "expires_in": "Poll ends in {0}", ++ "expiry": "Poll age", ++ "multiple_choices": "Multiple choices", ++ "not_enough_options": "Too few unique options in poll", ++ "option": "Option", ++ "people_voted_count": "{count} person voted | {count} people voted", ++ "single_choice": "Single choice", ++ "type": "Poll type", ++ "vote": "Vote", ++ "votes": "votes", ++ "votes_count": "{count} vote | {count} votes" ++ }, ++ "post_status": { ++ "account_not_locked_warning": "That one's account is not {0}. Anyone can follow it to view its follower-only posts.", ++ "account_not_locked_warning_link": "locked", ++ "attachments_sensitive": "Mark attachments as sensitive", ++ "content_type": { ++ "text/bbcode": "BBCode", ++ "text/html": "HTML", ++ "text/markdown": "Markdown", ++ "text/plain": "Plain text", ++ "text/x.misskeymarkdown": "MFM" ++ }, ++ "content_warning": "Content Warning (optional)", ++ "toggle_content_warning": "Toggle content warning", ++ "default": "awawawawawawawawawawa", ++ "direct_warning_to_all": "This post will be visible to all the mentioned users.", ++ "direct_warning_to_first_only": "This post will only be visible to the mentioned users at the beginning of the message.", ++ "edit_remote_warning": "Changes made to the post may not be visible on some instances!", ++ "edit_status": "Edit Status", ++ "edit_unsupported_warning": "Polls and mentions will not be changed by editing.", ++ "empty_status_error": "Can't send a post with no content and no files", ++ "media_description": "Media description", ++ "media_description_error": "Failed to update media, try again", ++ "media_not_sensitive_warning": "This post has a Content Warning, but the attachments are not marked as sensitive!", ++ "new_status": "New meow", ++ "post": "Meow", ++ "posting": "Meowing", ++ "preview": "Preview", ++ "preview_empty": "Empty", ++ "scope": { ++ "direct": "Direct - post to mentioned users only", ++ "local": "Local - do not federate this post", ++ "private": "Followers-only - post to followers only", ++ "public": "Public - post to public timelines", ++ "unlisted": "Unlisted - do not post to public timelines" ++ }, ++ "scope_notice": { ++ "local": "This post will not be visible on other instances", ++ "private": "This post will be visible to followers only", ++ "public": "This post will be visible to everyone", ++ "unlisted": "This post will not be visible in Public Timeline and The Whole Known Network" ++ } ++ }, ++ "registration": { ++ "awaiting_email_confirmation": "The account has been registered and an email has been sent to the registered address. Please check the email to complete registration.", ++ "awaiting_email_confirmation_title": "Awaiting email confirmation", ++ "bio": "Bio", ++ "bio_placeholder": "e.g.\nHi! Welcome to its bio.\nThis one loves watching anime and playing games. It hopes we can be friends!", ++ "captcha": "CAPTCHA", ++ "email": "Email", ++ "email_language": "In which language does it want to receive emails from the server?", ++ "fullname": "Display name", ++ "fullname_placeholder": "e.g. Unit 41787-25Y", ++ "new_captcha": "Click the image to get a new captcha", ++ "password_confirm": "Password confirmation", ++ "reason": "Reason to register", ++ "reason_placeholder": "This instance approves registrations manually.\nLet the administration know why that one wants to register.", ++ "register": "Register", ++ "registration": "Registration", ++ "request_sent": "The registration request has been sent for approval. That one will receive an email when its account is approved.", ++ "request_sent_title": "Registration request sent", ++ "token": "Invite token", ++ "username_placeholder": "e.g. 41787", ++ "validations": { ++ "email_required": "cannot be left blank", ++ "fullname_required": "cannot be left blank", ++ "password_confirmation_match": "should be the same as password", ++ "password_confirmation_required": "cannot be left blank", ++ "password_required": "cannot be left blank", ++ "username_required": "cannot be left blank" ++ } ++ }, ++ "remote_user_resolver": { ++ "error": "Not found.", ++ "remote_user_resolver": "Remote user resolver", ++ "searching_for": "Searching for" ++ }, ++ "search": { ++ "hashtags": "Hashtags", ++ "no_results": "No results", ++ "people": "Creatures", ++ "people_talking": "{count} creatures talking", ++ "person_talking": "{count} creature talking" ++ }, ++ "selectable_list": { ++ "select_all": "Select all" ++ }, ++ "settings": { ++ "accent": "Accent", ++ "account_alias": "Account aliases", ++ "account_alias_table_head": "Alias", ++ "account_backup": "Account backup", ++ "account_backup_description": "This allows one to download an archive of its account information and its posts, but they cannot yet be imported into a Akkoma account.", ++ "account_backup_table_head": "Backup", ++ "account_privacy": "Privacy", ++ "add_alias_error": "Error adding alias: {error}", ++ "add_backup": "Create a new backup", ++ "add_backup_error": "Error adding a new backup: {error}", ++ "added_alias": "Alias is added.", ++ "added_backup": "Added a new backup.", ++ "allow_following_move": "Allow auto-follow when following account moves", ++ "always_show_post_button": "Always show floating New Post button", ++ "app_name": "App name", ++ "attachmentRadius": "Attachments", ++ "attachments": "Attachments", ++ "autohide_floating_post_button": "Automatically hide New Post button (mobile)", ++ "avatar": "Avatar", ++ "avatarAltRadius": "Avatars (notifications)", ++ "avatarRadius": "Avatars", ++ "avatar_size_instruction": "The recommended minimum size for avatar images is 150x150 pixels.", ++ "background": "Background", ++ "backup_not_ready": "This backup is not ready yet.", ++ "bio": "Bio", ++ "block_export": "Block export", ++ "block_export_button": "Export current blocks to a csv file", ++ "block_import": "Block import", ++ "block_import_error": "Error importing blocks", ++ "blocks_imported": "Blocks imported! Processing them will take a while.", ++ "blocks_tab": "Blocks", ++ "bot": "This is a bot account", ++ "btnRadius": "Buttons", ++ "cBlue": "Blue (Reply, follow)", ++ "cGreen": "Green (Retweet)", ++ "cOrange": "Orange (Favorite)", ++ "cRed": "Red (Cancel)", ++ "change_email": "Change email", ++ "change_email_error": "There was an issue changing the registered email.", ++ "change_password": "Change password", ++ "change_password_error": "There was an issue changing the password.", ++ "changed_email": "Email changed successfully!", ++ "changed_password": "Password changed successfully!", ++ "chatMessageRadius": "Chat message", ++ "checkboxRadius": "Checkboxes", ++ "collapse_subject": "Collapse posts with content warnings", ++ "columns": "Columns", ++ "composing": "Composing", ++ "confirm_dialogs": "Require confirmation for:", ++ "confirm_dialogs_approve_follow": "Accepting a follow request", ++ "confirm_dialogs_block": "Blocking someone", ++ "confirm_dialogs_delete": "Deleting a post", ++ "confirm_dialogs_deny_follow": "Rejecting a follow request", ++ "confirm_dialogs_mute": "Muting someone", ++ "confirm_dialogs_repeat": "Repeating a post", ++ "confirm_dialogs_favorite": "Favoriting a post", ++ "confirm_dialogs_unfollow": "Unfollowing someone", ++ "confirm_new_password": "Confirm new password", ++ "confirmation_dialogs": "Confirmation options", ++ "conversation_display": "Conversation display style", ++ "conversation_display_linear": "Linear-style", ++ "conversation_display_tree": "Tree-style", ++ "conversation_other_replies_button": "Show the \"other replies\" button", ++ "conversation_other_replies_button_below": "Below posts", ++ "conversation_other_replies_button_inside": "Inside posts", ++ "current_avatar": "Current avatar", ++ "current_mascot": "Current mascot", ++ "current_password": "Current password", ++ "data_import_export_tab": "Data import / export", ++ "default_vis": "Default visibility scope", ++ "delete_account": "Delete account", ++ "delete_account_description": "Permanently delete all data and deactivate this account.", ++ "delete_account_error": "There was an issue deleting the account. If this persists please contact the instance administrator.", ++ "delete_account_instructions": "Type the account password in the input below to confirm account deletion.", ++ "disable_sticky_headers": "Don't stick column headers to top of the screen", ++ "discoverable": "Allow discovery of this account in search results and other services", ++ "domain_mutes": "Domains", ++ "download_backup": "Download", ++ "email_language": "Language for receiving emails from the server", ++ "emoji_reactions_on_timeline": "Show emoji reactions on timeline", ++ "enable_web_push_notifications": "Enable web push notifications", ++ "enter_current_password_to_confirm": "Enter the current password to confirm that one's identity", ++ "expert_mode": "Show advanced", ++ "expire_posts_enabled": "Delete posts after a set amount of days", ++ "expire_posts_input_placeholder": "Number of days", ++ "export_theme": "Save preset", ++ "file_export_import": { ++ "backup_restore": "Settings backup", ++ "backup_settings": "Backup settings to file", ++ "backup_settings_theme": "Backup settings and theme to file", ++ "errors": { ++ "file_slightly_new": "File minor version is different, some settings might not load", ++ "file_too_new": "Incompatible major version: {fileMajor}, this PleromaFE (settings ver {feMajor}) is too old to handle it", ++ "file_too_old": "Incompatible major version: {fileMajor}, file version is too old and not supported (min. set. ver. {feMajor})", ++ "invalid_file": "The selected file is not a supported Pleroma settings backup. No changes were made." ++ }, ++ "restore_settings": "Restore settings from file" ++ }, ++ "filtering": "Filtering", ++ "filtering_explanation": "All posts containing these words will be muted, one per line", ++ "follow_export": "Follow export", ++ "follow_export_button": "Export current follows to a csv file", ++ "follow_import": "Follow import", ++ "follow_import_error": "Error importing followers", ++ "follows_imported": "Follows imported! Processing them will take a while.", ++ "foreground": "Foreground", ++ "fun": "Fun", ++ "general": "General", ++ "greentext": "Meme arrows", ++ "hide_all_muted_posts": "Hide muted posts", ++ "hide_attachments_in_convo": "Hide attachments in conversations", ++ "hide_attachments_in_tl": "Hide attachments in timeline", ++ "hide_bot_indication": "Hide bot indication in posts", ++ "hide_favorites_description": "Don't show list of its favorites (creatures still get notified)", ++ "hide_filtered_statuses": "Hide all filtered posts", ++ "hide_followers_count_description": "Don't show follower count", ++ "hide_followers_description": "Don't show who's following it", ++ "hide_follows_count_description": "Don't show follow count", ++ "hide_follows_description": "Don't show who it is following", ++ "hide_isp": "Hide instance-specific panel", ++ "hide_list_aliases_error_action": "Close", ++ "hide_media_previews": "Hide media previews", ++ "hide_muted_posts": "Hide posts of muted users", ++ "hide_muted_threads": "Hide muted threads", ++ "hide_post_stats": "Hide post statistics (e.g. the number of favorites)", ++ "hide_shoutbox": "Hide instance shoutbox", ++ "hide_site_favicon": "Hide instance favicon in top panel", ++ "hide_site_name": "Hide instance name in top panel", ++ "hide_threads_with_blocked_users": "Hide threads mentioning blocked users", ++ "hide_user_stats": "Hide user statistics (e.g. the number of followers)", ++ "hide_wallpaper": "Hide instance wallpaper", ++ "hide_wordfiltered_statuses": "Hide word-filtered posts", ++ "import_blocks_from_a_csv_file": "Import blocks from a csv file", ++ "import_followers_from_a_csv_file": "Import follows from a csv file", ++ "import_mutes_from_a_csv_file": "Import mutes from a csv file", ++ "import_theme": "Load preset", ++ "inputRadius": "Input fields", ++ "instance_default": "(default: {value})", ++ "instance_default_simple": "(default)", ++ "interface": "Interface", ++ "interfaceLanguage": "Interface language", ++ "invalid_theme_imported": "The selected file is not a supported Pleroma theme. No changes to this theme were made.", ++ "limited_availability": "Unavailable in this browser", ++ "links": "Links", ++ "list_aliases_error": "Error fetching aliases: {error}", ++ "list_backups_error": "Error fetching backup list: {error}", ++ "lock_account_description": "Restrict this account to approved followers only", ++ "permit_followback_description": "Automatically approve requests from already followed users", ++ "loop_video": "Loop videos", ++ "loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")", ++ "mascot": "Mastodon FE Mascot", ++ "max_depth_in_thread": "Maximum number of levels in thread to display by default", ++ "max_thumbnails": "Maximum amount of thumbnails per post (empty = no limit)", ++ "mention_link_bolden_you": "Highlight mention of that one when it's mentioned", ++ "mention_link_display": "Display mention links", ++ "mention_link_display_full": "always as full names (e.g. {'@'}foo{'@'}example.org)", ++ "mention_link_display_full_for_remote": "as full names only for remote users (e.g. {'@'}foo{'@'}example.org)", ++ "mention_link_display_short": "always as short names (e.g. {'@'}foo)", ++ "mention_link_fade_domain": "Fade domains (e.g. {'@'}example.org in {'@'}foo{'@'}example.org)", ++ "mention_link_show_avatar": "Show user avatar beside the link", ++ "mention_link_show_tooltip": "Show full user names as tooltip for remote users", ++ "mention_links": "Mention links", ++ "mfa": { ++ "authentication_methods": "Authentication methods", ++ "confirm_and_enable": "Confirm & enable OTP", ++ "generate_new_recovery_codes": "Generate new recovery codes", ++ "otp": "OTP", ++ "recovery_codes": "Recovery codes.", ++ "recovery_codes_warning": "Write the codes down or save them somewhere secure - they will not be shown again. If one loses access to its 2FA app and recovery codes, it will be locked out of its account.", ++ "scan": { ++ "desc": "Using the two-factor app, scan this QR code or enter text key:", ++ "secret_code": "Key", ++ "title": "Scan" ++ }, ++ "setup_otp": "Setup OTP", ++ "title": "Two-factor Authentication", ++ "verify": { ++ "desc": "To enable two-factor authentication, enter the code from the two-factor app:" ++ }, ++ "wait_pre_setup_otp": "presetting OTP", ++ "waiting_a_recovery_codes": "Receiving backup codes…", ++ "warning_of_generate_new_codes": "When one generates new recovery codes, the old codes won't work anymore." ++ }, ++ "minimal_scopes_mode": "Minimize post scope selection options", ++ "more_settings": "More settings", ++ "move_account": "Move account", ++ "move_account_error": "Error moving account: {error}", ++ "move_account_notes": "If one wants to move this account somewhere else, it must go to its target account and add an alias pointing here.", ++ "move_account_target": "Target account (e.g. {example})", ++ "moved_account": "Account is moved.", ++ "mute_bot_posts": "Mute non-sentient bot posts", ++ "mute_export": "Mute export", ++ "mute_export_button": "Export current mutes to a csv file", ++ "mute_import": "Mute import", ++ "mute_import_error": "Error importing mutes", ++ "mutes_and_blocks": "Mutes and Blocks", ++ "mutes_imported": "Mutes imported! Processing them will take a while.", ++ "mutes_tab": "Mutes", ++ "name": "Name", ++ "name_bio": "Name & bio", ++ "new_alias_target": "Add a new alias (e.g. {example})", ++ "new_email": "New email", ++ "new_password": "New password", ++ "no_blocks": "No blocks", ++ "no_mutes": "No mutes", ++ "no_rich_text_description": "Strip rich text formatting from all posts", ++ "notification_blocks": "Blocking a user stops all notifications as well as unsubscribes them.", ++ "notification_mutes": "To stop receiving notifications from a specific user, use a mute.", ++ "notification_setting_block_from_strangers": "Block notifications from users who it does not follow", ++ "notification_setting_filters": "Filters", ++ "notification_setting_hide_if_cw": "Hide the contents of push notifications if under a Content Warning", ++ "notification_setting_hide_notification_contents": "Hide the sender and contents of push notifications", ++ "notification_setting_privacy": "Privacy", ++ "notification_visibility": "Types of notifications to show", ++ "notification_visibility_emoji_reactions": "Reactions", ++ "notification_visibility_follows": "Follows", ++ "notification_visibility_likes": "Favorites", ++ "notification_visibility_mentions": "Mentions", ++ "notification_visibility_moves": "User Migrates", ++ "notification_visibility_polls": "Ends of polls that one voted in", ++ "notification_visibility_repeats": "Repeats", ++ "notifications": "Notifications", ++ "nsfw_clickthrough": "Hide sensitive/NSFW media", ++ "oauth_tokens": "OAuth tokens", ++ "pad_emoji": "Pad emoji with spaces when adding from picker", ++ "panelRadius": "Panels", ++ "pause_on_unfocused": "Pause when tab is not focused", ++ "play_videos_in_modal": "Play videos in a popup frame", ++ "post_look_feel": "Posts Look & Feel", ++ "post_status_content_type": "Default post content type", ++ "posts": "Meows", ++ "preload_images": "Preload images", ++ "presets": "Presets", ++ "profile_background": "Profile background", ++ "profile_banner": "Profile banner", ++ "profile_fields": { ++ "add_field": "Add field", ++ "label": "Profile metadata", ++ "name": "Label", ++ "value": "Content" ++ }, ++ "profile_tab": "Profile", ++ "radii_help": "Set up interface edge rounding (in pixels)", ++ "refresh_token": "Refresh token", ++ "remove_alias": "Remove this alias", ++ "remove_backup": "Remove", ++ "render_mfm": "Render Misskey Markdown", ++ "render_mfm_on_hover": "Pause MFM animations until post hover", ++ "replies_in_timeline": "Replies in timeline", ++ "reply_visibility_all": "Show all replies", ++ "reply_visibility_following": "Only show replies directed at self or users its following", ++ "reply_visibility_following_short": "Show replies to its follows", ++ "reply_visibility_self": "Only show replies directed at self", ++ "reply_visibility_self_short": "Show replies to self only", ++ "reset_avatar": "Reset avatar", ++ "reset_avatar_confirm": "Does it really want to reset the avatar?", ++ "reset_background_confirm": "Does it really want to reset the background?", ++ "reset_banner_confirm": "Does it really want to reset the banner?", ++ "reset_profile_background": "Reset profile background", ++ "reset_profile_banner": "Reset profile banner", ++ "revoke_token": "Revoke", ++ "right_sidebar": "Reverse order of columns", ++ "save": "Save changes", ++ "saving_err": "Error saving settings", ++ "saving_ok": "Settings saved", ++ "scope_copy": "Copy scope when replying (DMs are always copied)", ++ "search_user_to_block": "Search whom it wants to block", ++ "search_user_to_mute": "Search whom it wants to mute", ++ "security": "Security", ++ "security_tab": "Security", ++ "sensitive_by_default": "Mark posts as sensitive by default", ++ "sensitive_if_subject": "Automatically mark images as sensitive if a content warning is specified", ++ "set_new_avatar": "Set new avatar", ++ "set_new_mascot": "Set new mascot", ++ "set_new_profile_background": "Set new profile background", ++ "set_new_profile_banner": "Set new profile banner", ++ "setting_changed": "Setting is different from default", ++ "setting_server_side": "This setting is tied to that one's profile and affects all sessions and clients", ++ "settings": "Settings", ++ "settings_profile": "Settings Profiles", ++ "settings_profile_creation": "Create new profile", ++ "settings_profile_creation_new_name_label": "Name", ++ "settings_profile_creation_submit": "Create", ++ "settings_profile_currently": "Currently using {name} (version: {version})", ++ "settings_profile_delete": "Delete", ++ "settings_profile_delete_confirm": "Does it really want to delete this profile?", ++ "settings_profile_force_sync": "Synchronize", ++ "settings_profile_in_use": "In use", ++ "settings_profile_use": "Use", ++ "settings_profiles_refresh": "Reload settings profiles", ++ "settings_profiles_show": "Show all settings profiles", ++ "settings_profiles_unshow": "Hide all settings profiles", ++ "show_admin_badge": "Show \"Doll\" badge in profile", ++ "show_moderator_badge": "Show \"Doll User\" badge in profile", ++ "show_nav_shortcuts": "Show extra navigation shortcuts in top panel", ++ "show_panel_nav_shortcuts": "Show timeline navigation shortcuts at the top of the panel", ++ "show_scrollbars": "Show side column's scrollbars", ++ "show_page_backgrounds": "Show page-specific backgrounds, e.g. for user profiles", ++ "show_wider_shortcuts": "Show wider gap between top panel shortcuts", ++ "show_yous": "Show ([loopback])s", ++ "stop_gifs": "Pause animated images until hovered over", ++ "streaming": "Automatically show new posts when scrolled to the top", ++ "style": { ++ "advanced_colors": { ++ "_tab_label": "Advanced", ++ "alert": "Alert background", ++ "alert_error": "Error", ++ "alert_neutral": "Neutral", ++ "alert_warning": "Warning", ++ "badge": "Badge background", ++ "badge_notification": "Notification", ++ "borders": "Borders", ++ "buttons": "Buttons", ++ "chat": { ++ "border": "Border", ++ "incoming": "Incoming", ++ "outgoing": "Outgoing" ++ }, ++ "disabled": "Disabled", ++ "faint_text": "Faded text", ++ "highlight": "Highlighted elements", ++ "icons": "Icons", ++ "inputs": "Input fields", ++ "panel_header": "Panel header", ++ "poll": "Poll graph", ++ "popover": "Tooltips, menus, popovers", ++ "post": "Posts/User bios", ++ "pressed": "Pressed", ++ "selectedMenu": "Selected menu item", ++ "selectedPost": "Selected post", ++ "tabs": "Tabs", ++ "toggled": "Toggled", ++ "top_bar": "Top bar", ++ "underlay": "Underlay", ++ "wallpaper": "Wallpaper" ++ }, ++ "common": { ++ "color": "Color", ++ "contrast": { ++ "context": { ++ "18pt": "for large (18pt+) text", ++ "text": "for text" ++ }, ++ "hint": "Contrast ratio is {ratio}, it {level} {context}", ++ "level": { ++ "aa": "meets Level AA guideline (minimal)", ++ "aaa": "meets Level AAA guideline (recommended)", ++ "bad": "doesn't meet any accessibility guidelines" ++ } ++ }, ++ "opacity": "Opacity" ++ }, ++ "common_colors": { ++ "_tab_label": "Common", ++ "foreground_hint": "See \"Advanced\" tab for more detailed control", ++ "main": "Common colors", ++ "rgbo": "Icons, accents, badges" ++ }, ++ "fonts": { ++ "_tab_label": "Fonts", ++ "components": { ++ "input": "Input fields", ++ "interface": "Interface", ++ "post": "Post text", ++ "postCode": "Monospaced text in a post (rich text)" ++ }, ++ "custom": "Custom", ++ "family": "Font name", ++ "help": "Select font to use for elements of UI. For \"custom\" one must enter the exact font name as it appears in system.", ++ "size": "Size (in px)", ++ "weight": "Weight (boldness)" ++ }, ++ "preview": { ++ "button": "Button", ++ "checkbox": "This one has skimmed over terms and conditions", ++ "content": "Content", ++ "error": "Example error", ++ "faint_link": "helpful manual", ++ "fine_print": "Read our {0} to learn nothing useful!", ++ "header": "Preview", ++ "header_faint": "This is fine", ++ "input": "Just arrived at Luna Nova Academy", ++ "link": "a nice lil' link", ++ "mono": "content", ++ "text": "A bunch of more {0} and {1}" ++ }, ++ "radii": { ++ "_tab_label": "Roundness" ++ }, ++ "shadows": { ++ "_tab_label": "Shadow and lighting", ++ "blur": "Blur", ++ "component": "Component", ++ "components": { ++ "avatar": "User avatar (in profile view)", ++ "avatarStatus": "User avatar (in post display)", ++ "button": "Button", ++ "buttonHover": "Button (hover)", ++ "buttonPressed": "Button (pressed)", ++ "buttonPressedHover": "Button (pressed+hover)", ++ "input": "Input field", ++ "panel": "Panel", ++ "panelHeader": "Panel header", ++ "popup": "Popups and tooltips", ++ "topBar": "Top bar" ++ }, ++ "filter_hint": { ++ "always_drop_shadow": "Warning, this shadow always uses {0} when browser supports it.", ++ "avatar_inset": "Please note that combining both inset and non-inset shadows on avatars might give unexpected results with transparent avatars.", ++ "drop_shadow_syntax": "{0} does not support {1} parameter and {2} keyword.", ++ "inset_classic": "Inset shadows will be using {0}", ++ "spread_zero": "Shadows with spread > 0 will appear as if it was set to zero" ++ }, ++ "hintV3": "For shadows one can also use the {0} notation to use other color slot.", ++ "inset": "Inset", ++ "override": "Override", ++ "shadow_id": "Shadow #{value}", ++ "spread": "Spread" ++ }, ++ "switcher": { ++ "clear_all": "Clear all", ++ "clear_opacity": "Clear opacity", ++ "help": { ++ "fe_downgraded": "PleromaFE's version rolled back.", ++ "fe_upgraded": "PleromaFE's theme engine upgraded after version update.", ++ "future_version_imported": "File imported was made in newer version of FE.", ++ "migration_napshot_gone": "For whatever reason snapshot was missing, some stuff could look different than that one remembers.", ++ "migration_snapshot_ok": "Just to be safe, theme snapshot loaded. One can try loading theme data.", ++ "older_version_imported": "File imported was made in older version of FE.", ++ "snapshot_missing": "No theme snapshot was in the file so it could look different than originally envisioned.", ++ "snapshot_present": "Theme snapshot is loaded, so all values are overriden. One can load theme's actual data instead.", ++ "snapshot_source_mismatch": "Versions conflict: most likely FE was rolled back and updated again, if one changed theme using older version of FE it most likely want to use old version, otherwise use new version.", ++ "upgraded_from_v2": "PleromaFE has been upgraded, theme could look a little bit different than that one remembers.", ++ "v2_imported": "File imported was made for older FE. We try to maximize compatibility but there still could be inconsistencies." ++ }, ++ "keep_as_is": "Keep as is", ++ "keep_color": "Keep colors", ++ "keep_fonts": "Keep fonts", ++ "keep_opacity": "Keep opacity", ++ "keep_roundness": "Keep roundness", ++ "keep_shadows": "Keep shadows", ++ "load_theme": "Load theme", ++ "reset": "Reset", ++ "save_load_hint": "\"Keep\" options preserve currently set options when selecting or loading themes, it also stores said options when exporting a theme. When all checkboxes unset, exporting theme will save everything.", ++ "use_snapshot": "Old version", ++ "use_source": "New version" ++ } ++ }, ++ "subject_input_always_show": "Always show content warning field", ++ "subject_line_behavior": "Copy content warning when replying", ++ "subject_line_email": "Like email: \"re: warning\"", ++ "subject_line_mastodon": "Like mastodon: copy as is", ++ "subject_line_noop": "Do not copy", ++ "text": "Text", ++ "theme": "Theme", ++ "theme_help": "Use hex color codes (#rrggbb) to customize the color theme.", ++ "theme_help_v2_1": "One can also override certain component's colors and opacity by toggling the checkbox, use \"Clear all\" button to clear all overrides.", ++ "theme_help_v2_2": "Icons underneath some entries are background/text contrast indicators, hover over for detailed info. Please keep in mind that when using transparency contrast indicators show the worst possible case.", ++ "third_column_mode": "When there's enough space, show third column containing", ++ "third_column_mode_none": "Don't show third column at all", ++ "third_column_mode_notifications": "Notifications column", ++ "third_column_mode_postform": "Main post form and navigation", ++ "token": "Token", ++ "tooltipRadius": "Tooltips/alerts", ++ "translation_language": "Automatic Translation Language", ++ "tree_advanced": "Display extra buttons to open and close reply chains in threads", ++ "tree_fade_ancestors": "Display ancestors of the current post in faint text", ++ "type_domains_to_mute": "Search domains to mute", ++ "upload_a_photo": "Upload a photo", ++ "useStreamingApi": "Receive posts and notifications real-time", ++ "useStreamingApiWarning": "It's cool use it. If it breaks refresh we guess?", ++ "use_contain_fit": "Don't crop the attachment in thumbnails", ++ "use_one_click_nsfw": "Open NSFW attachments with just one click", ++ "user_mutes": "Users", ++ "user_profile_default_tab": "Default Tab on User Profile", ++ "user_profiles": "User Profiles", ++ "user_settings": "User Settings", ++ "user_accepts_direct_messages_from": "Accept DMs From", ++ "user_accepts_direct_messages_from_everybody": "Everybody", ++ "user_accepts_direct_messages_from_nobody": "Nobody", ++ "user_accepts_direct_messages_from_people_i_follow": "Creatures it follows", ++ "valid_until": "Valid until", ++ "values": { ++ "false": "no", ++ "true": "yes" ++ }, ++ "version": { ++ "backend_version": "Backend version", ++ "frontend_version": "Frontend version", ++ "title": "Version" ++ }, ++ "virtual_scrolling": "Optimize timeline rendering", ++ "use_blurhash": "Use blurhashes for NSFW thumbnails", ++ "word_filter": "Word filter", ++ "wordfilter": "Wordfilter" ++ }, ++ "settings_profile": { ++ "creating": "Creating new setting profile \"{profile}\"...", ++ "synchronization_error": "Could not synchronize settings: {err}", ++ "synchronized": "Synchronized settings!", ++ "synchronizing": "Synchronizing setting profile \"{profile}\"..." ++ }, ++ "status": { ++ "ancestor_follow": "See {numReplies} other reply under this post | See {numReplies} other replies under this post", ++ "ancestor_follow_with_icon": "{icon} {text}", ++ "attachment_stop_flash": "Stop Flash player", ++ "bookmark": "Bookmark", ++ "collapse_attachments": "Collapse attachments", ++ "copy_link": "Copy link to post", ++ "delete": "Delete post", ++ "delete_confirm": "Does it really want to delete this post?", ++ "delete_confirm_accept_button": "Yes, delete it", ++ "delete_confirm_cancel_button": "No, keep it", ++ "delete_confirm_title": "Confirm deletion", ++ "edit": "Edit", ++ "edit_history": "Edit History", ++ "edit_history_modal_title": "Edited {historyCount} time | Edited {historyCount} times", ++ "edited_at": "Edited {time}", ++ "expand": "Expand", ++ "external_source": "External source", ++ "favorites": "Favorites", ++ "favorite_confirm": "Does it really want to favorite this post?", ++ "favorite_confirm_accept_button": "Yes, favorite it", ++ "favorite_confirm_cancel_button": "No, don't favorite", ++ "favorite_confirm_title": "Confirm favorite", ++ "hide_attachment": "Hide attachment", ++ "hide_content": "Hide content", ++ "hide_full_subject": "Hide full content warning", ++ "many_attachments": "Post has {number} attachment | Post has {number} attachments", ++ "mentions": "Mentions", ++ "move_down": "Shift attachment right", ++ "move_up": "Shift attachment left", ++ "mute_conversation": "Mute conversation", ++ "nsfw": "NSFW", ++ "open_gallery": "Open gallery", ++ "override_translation_source_language": "Override source language", ++ "pin": "Pin on profile", ++ "pinned": "Pinned", ++ "plus_more": "+{number} more", ++ "redraft": "Delete & redraft", ++ "redraft_confirm": "Does it really want to delete and redraft this post? Interactions to the original post will not be preserved.", ++ "redraft_confirm_accept_button": "Yes, delete and redraft", ++ "redraft_confirm_cancel_button": "No, keep the original", ++ "redraft_confirm_title": "Confirm delete & redraft", ++ "remove_attachment": "Remove attachment", ++ "repeat_confirm": "Does it really want to repeat this post?", ++ "repeat_confirm_accept_button": "Yes, repeat it", ++ "repeat_confirm_cancel_button": "No, don't repeat", ++ "repeat_confirm_title": "Confirm repeat", ++ "repeats": "Repeats", ++ "replies_list": "Replies:", ++ "replies_list_with_others": "View {numReplies} more reply | View {numReplies} more replies", ++ "reply_to": "Reply to", ++ "show_all_attachments": "Show all attachments", ++ "show_all_conversation": "Show full conversation ({numStatus} other post) | Show full conversation ({numStatus} other posts)", ++ "show_all_conversation_with_icon": "{icon} {text}", ++ "show_attachment_description": "Preview description (open attachment for full description)", ++ "show_attachment_in_modal": "Show attachment in a window", ++ "show_content": "Show content", ++ "show_full_subject": "Show full content warning", ++ "show_only_conversation_under_this": "Only show replies to this post", ++ "status_deleted": "This post was deleted", ++ "status_unavailable": "Post unavailable", ++ "thread_follow": "View {numStatus} more reply | View {numStatus} more replies", ++ "thread_follow_with_icon": "{icon} {text}", ++ "thread_hide": "Hide this thread", ++ "thread_muted": "Thread muted", ++ "thread_muted_and_words": ", has words:", ++ "thread_show": "Show this thread", ++ "thread_show_full": "Show {numStatus} reply | Show all {numStatus} replies", ++ "thread_show_full_with_icon": "{icon} {text}", ++ "translate": "Translate", ++ "translated_from": "Translated from {language}", ++ "unbookmark": "Unbookmark", ++ "unmute_conversation": "Unmute conversation", ++ "unpin": "Unpin from profile", ++ "you": "([loopback])" ++ }, ++ "time": { ++ "in_future": "in {0}", ++ "in_past": "{0} ago", ++ "now": "just now", ++ "now_short": "now", ++ "unit": { ++ "days": "{0} day | {0} days", ++ "days_short": "{0}d", ++ "hours": "{0} hour | {0} hours", ++ "hours_short": "{0}h", ++ "minutes": "{0} minute | {0} minutes", ++ "minutes_short": "{0}min", ++ "months": "{0} month | {0} months", ++ "months_short": "{0}mo", ++ "seconds": "{0} second | {0} seconds", ++ "seconds_short": "{0}s", ++ "weeks": "{0} week | {0} weeks", ++ "weeks_short": "{0}w", ++ "years": "{0} year | {0} years", ++ "years_short": "{0}y" ++ } ++ }, ++ "timeline": { ++ "collapse": "Collapse", ++ "conversation": "Conversation", ++ "error": "Error fetching timeline: {0}", ++ "follow_tag": "Follow hashtag", ++ "load_older": "Load older posts", ++ "no_more_statuses": "No more posts", ++ "no_retweet_hint": "Post is marked as followers-only or direct and cannot be repeated or quoted", ++ "no_statuses": "No posts", ++ "reload": "Reload", ++ "repeated": "repeated", ++ "show_new": "Show new", ++ "socket_broke": "Realtime connection lost: CloseEvent code {0}", ++ "socket_reconnected": "Realtime connection established", ++ "follow_tag": "Follow hashtag", ++ "unfollow_tag": "Unfollow hashtag", ++ "up_to_date": "Up-to-date" ++ }, ++ "toast": { ++ "no_translation_target_set": "No translation target language set - this may fail. Please set a target language in settings." ++ }, ++ "tool_tip": { ++ "accept_follow_request": "Accept follow request", ++ "add_reaction": "Add Reaction", ++ "bookmark": "Bookmark", ++ "favorite": "Favorite", ++ "media_upload": "Upload media", ++ "quote": "Quote", ++ "reject_follow_request": "Reject follow request", ++ "repeat": "Repeat", ++ "reply": "Reply", ++ "user_settings": "User Settings" ++ }, ++ "upload": { ++ "error": { ++ "base": "Upload failed.", ++ "default": "Try again later", ++ "file_too_big": "File too big [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]", ++ "message": "Upload failed: {0}" ++ }, ++ "file_size_units": { ++ "B": "B", ++ "GiB": "GiB", ++ "KiB": "KiB", ++ "MiB": "MiB", ++ "TiB": "TiB" ++ } ++ }, ++ "user_card": { ++ "admin_menu": { ++ "activate_account": "Activate account", ++ "deactivate_account": "Deactivate account", ++ "delete_account": "Delete account", ++ "delete_user": "Delete user", ++ "delete_user_data_and_deactivate_confirmation": "This will permanently delete the data from this account and deactivate it. Is it absolutely sure?", ++ "disable_any_subscription": "Disallow following user at all", ++ "disable_remote_subscription": "Disallow following user from remote instances", ++ "force_nsfw": "Mark all posts as NSFW", ++ "force_unlisted": "Force posts to be unlisted", ++ "grant_admin": "Grant Doll", ++ "grant_moderator": "Grant Doll User", ++ "moderation": "Moderation", ++ "quarantine": "Disallow user posts from federating", ++ "revoke_admin": "Revoke Doll", ++ "revoke_moderator": "Revoke Doll User", ++ "sandbox": "Force posts to be followers-only", ++ "strip_media": "Remove media from posts" ++ }, ++ "approve": "Approve", ++ "approve_confirm": "Is it sure it wants to let this user follow it?", ++ "approve_confirm_accept_button": "Yes, accept", ++ "approve_confirm_cancel_button": "No, cancel", ++ "approve_confirm_title": "Approve follow request", ++ "block": "Block", ++ "block_confirm": "Is it sure it wants to block {user}?", ++ "block_confirm_accept_button": "Yes, block", ++ "block_confirm_cancel_button": "No, don't block", ++ "block_confirm_title": "Block user", ++ "block_progress": "Blocking…", ++ "blocked": "Blocked!", ++ "blocks_you": "Blocks that one!", ++ "bot": "Mechanical", ++ "deactivated": "Deactivated", ++ "deny": "Deny", ++ "deny_confirm": "Is it sure it wants to deny this user's follow request?", ++ "deny_confirm_accept_button": "Yes, deny", ++ "deny_confirm_cancel_button": "No, cancel", ++ "deny_confirm_title": "Deny follow request", ++ "domain_muted": "Unblock domain", ++ "edit_profile": "Edit profile", ++ "favorites": "Favorites", ++ "follow": "Follow", ++ "follow_cancel": "Cancel request", ++ "follow_progress": "Requesting…", ++ "follow_sent": "Request sent!", ++ "follow_unfollow": "Unfollow", ++ "followees": "Following", ++ "followers": "Followers", ++ "followed_tags": "Followed hashtags", ++ "followed_users": "Followed users", ++ "following": "Following!", ++ "follows_you": "Follows that one!", ++ "hidden": "Hidden", ++ "hide_repeats": "Hide repeats", ++ "highlight": { ++ "disabled": "No highlight", ++ "side": "Side stripe", ++ "solid": "Solid bg", ++ "striped": "Striped bg" ++ }, ++ "its_you": "awawawa!!", ++ "media": "Media", ++ "mention": "Mention", ++ "message": "Message", ++ "mute": "Mute", ++ "mute_confirm": "Is it sure it wants to mute {user}?", ++ "mute_confirm_accept_button": "Yes, mute", ++ "mute_confirm_cancel_button": "No, don't mute", ++ "mute_confirm_title": "Mute user", ++ "mute_domain": "Block domain", ++ "mute_progress": "Muting…", ++ "muted": "Muted", ++ "note": "Private note", ++ "per_day": "per day", ++ "remote_follow": "Remote follow", ++ "remove_follower": "Remove follower", ++ "replies": "With Replies", ++ "report": "Report", ++ "requested_by": "Has requested to follow that one", ++ "show_repeats": "Show repeats", ++ "statuses": "Posts", ++ "subscribe": "Subscribe", ++ "unblock": "Unblock", ++ "unblock_progress": "Unblocking…", ++ "unfollow_confirm": "Is it sure it wants to unfollow {user}?", ++ "unfollow_confirm_accept_button": "Yes, unfollow", ++ "unfollow_confirm_cancel_button": "No, don't unfollow", ++ "unfollow_confirm_title": "Unfollow user", ++ "not_following_any_hashtags": "It is not following any hashtags", ++ "follow_tag": "Follow hashtag", ++ "unfollow_tag": "Unfollow hashtag", ++ "unmute": "Unmute", ++ "unmute_progress": "Unmuting…", ++ "unsubscribe": "Unsubscribe" ++ }, ++ "user_profile": { ++ "profile_does_not_exist": "Sorry, this profile does not exist.", ++ "profile_loading_error": "Sorry, there was an error loading this profile.", ++ "timeline_title": "User timeline", ++ "field_validated": "Link Verified" ++ }, ++ "user_reporting": { ++ "add_comment_description": "The report will be sent to the instance moderators. One can provide an explanation of why it is reporting this account below:", ++ "additional_comments": "Additional comments", ++ "forward_description": "The account is from another server. Send a copy of the report there as well?", ++ "forward_to": "Forward to {0}", ++ "generic_error": "An error occurred while processing the request.", ++ "submit": "Submit", ++ "title": "Reporting {0}" ++ }, ++ "who_to_follow": { ++ "more": "More", ++ "who_to_follow": "Who to follow" ++ } ++} +diff --git a/src/i18n/messages.js b/src/i18n/messages.js +index 3282fd85..b5b9a8cd 100644 +--- a/src/i18n/messages.js ++++ b/src/i18n/messages.js +@@ -13,6 +13,7 @@ const loaders = { + cs: () => import('./cs.json'), + de: () => import('./de.json'), + eo: () => import('./eo.json'), ++ en_3pp: () => import('./en_3pp.json'), + es: () => import('./es.json'), + et: () => import('./et.json'), + eu: () => import('./eu.json'), +diff --git a/src/services/locale/locale.service.js b/src/services/locale/locale.service.js +index 607cd447..ef7d8434 100644 +--- a/src/services/locale/locale.service.js ++++ b/src/services/locale/locale.service.js +@@ -3,6 +3,7 @@ import ISO6391 from 'iso-639-1' + import _ from 'lodash' + + const specialLanguageCodes = { ++ 'en_3pp': 'en', + 'ja_easy': 'ja', + 'zh_Hant': 'zh-HANT', + 'zh': 'zh-Hans' +@@ -37,6 +38,7 @@ const internalToBackendLocale = code => internalToBrowserLocale(code).replace('_ + + const getLanguageName = (code) => { + const specialLanguageNames = { ++ 'en_3pp': 'English (3rd Person)', + 'ja_easy': 'やさしいにほんご', + 'zh': '简体中文', + 'zh_Hant': '繁體中文' diff --git a/flake.nix b/flake.nix index 8899edc..a5ffb47 100644 --- a/flake.nix +++ b/flake.nix @@ -73,6 +73,7 @@ patches = [ ./akkoma-fe/0001-confirm-favorite.patch ./akkoma-fe/0002-move-notifications.patch + ./akkoma-fe/0003-en_3pp.patch ]; patchFlags = "-p1 -F5"; });