diff --git a/src/i18n/messages.js b/src/i18n/messages.js index 18ed79b7..c7439f51 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -34,6 +34,7 @@ const loaders = { ru: () => import('./ru.json'), sk: () => import('./sk.json'), te: () => import('./te.json'), + tok: () => import('./tok.json'), uk: () => import('./uk.json'), zh: () => import('./zh.json'), zh_Hant: () => import('./zh_Hant.json') diff --git a/src/i18n/service_worker_messages.js b/src/i18n/service_worker_messages.js index f691f1c4..7a148c9a 100644 --- a/src/i18n/service_worker_messages.js +++ b/src/i18n/service_worker_messages.js @@ -29,6 +29,7 @@ const messages = { ru: require('../lib/notification-i18n-loader.js!./ru.json'), sk: require('../lib/notification-i18n-loader.js!./sk.json'), te: require('../lib/notification-i18n-loader.js!./te.json'), + tok: require('../lib/notification-i18n-loader.js!./tok.json'), zh: require('../lib/notification-i18n-loader.js!./zh.json'), en: require('../lib/notification-i18n-loader.js!./en.json') } diff --git a/src/i18n/tok.json b/src/i18n/tok.json new file mode 100644 index 00000000..6336d1a3 --- /dev/null +++ b/src/i18n/tok.json @@ -0,0 +1,1071 @@ + +{ + "about": { + "bubble_instances": "󱤟󱦓󱤟󱦔󱥁󱦔", + "bubble_instances_description": "󱤑󱤤󱤧󱤇󱤉󱤟󱥁.󱥆󱤧󱥖󱤉󱤟󱥁.", + "mrf": { + "federation": "Federation", + "keyword": { + "ftl_removal": "󱤴󱥶󱥧󱤩\"󱤪󱦓󱤟󱦔󱤄󱦔\"", + "is_replaced_by": "󱤧󱤆󱥩", + "keyword_policies": "󱤤󱦓󱥂󱦔󱥣󱦔", + "reject": "󱤴󱥶", + "replace": "󱤴󱤆" + }, + "mrf_policies": "󱤴󱤘󱤤󱤆󱥁", + "mrf_policies_desc": "󱤤󱤆󱤧󱤆󱤉󱥁:󱤟󱤆󱤧󱥌󱤉󱤪󱥩󱤴󱤡,󱤴󱤘󱥶󱤉󱤪,󱤴󱤘󱤆󱤉󱤪.󱤴󱤘󱤤󱤆󱤉󱥁:", + "simple": { + "accept": "󱥄󱤈󱤉󱤪", + "accept_desc": "󱤴󱤧󱤈󱤉󱤪󱥧󱤟󱥁󱥨", + "ftl_removal": "󱥄󱥶󱤉󱤟󱥁󱥧󱤩\"󱤪󱦓󱤟󱦔󱤄󱦔\"", + "ftl_removal_desc": "󱤴󱥶󱤉󱤟󱥁󱥧󱤩\"󱤪󱦓󱤟󱦔󱤄󱦔\":", + "instance": "󱤟", + "media_nsfw": "󱥄󱤥󱤉󱥠", + "media_nsfw_desc": "󱤴󱤥󱤉󱥠󱥧󱤟󱥁:", + "media_removal": "󱥄󱥶󱤉󱥠", + "media_removal_desc": "󱤴󱥶󱤉󱥠󱥧󱤟󱥁:", + "not_applicable": "󱤪󱤧󱥶", + "quarantine": "󱥄󱥌󱤂󱤉󱤪", + "quarantine_desc": "󱤴󱥌󱤂󱤉󱤪󱥩󱤟󱥁:", + "reason": "󱤴󱥉󱤉󱥁󱥧󱥙", + "reject": "󱥄󱥶󱤉󱤪", + "reject_desc": "󱤴󱥶󱤉󱤪󱥧󱤟󱥁:", + "simple_policies": "󱤴󱤘󱤤󱤆󱥩󱤟󱥳" + } + }, + "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": "󱥬", + "delete": "󱥄󱥶", + "delete_confirm": "󱥞󱥶󱤂󱥶󱤉󱤪󱥁?", + "empty_chat_list_placeholder": "󱥞󱥇󱥬󱥩󱤑.󱥄󱥇󱥬󱥩󱤑!", + "empty_message_error": "󱥞󱤘󱤂󱥬󱤉󱤂!", + "error_loading_chat": "󱤴󱥈.󱤴󱤘󱤂󱥌󱤉󱤪󱥬󱥩󱥞.", + "error_sending_message": "󱤴󱥈.󱤴󱤘󱤂󱥌󱤉󱥬󱥩󱤑󱤆.", + "message_user": "󱥬󱥩{nickname}", + "more": "󱥄󱥌󱤉󱤪󱥸", + "new": "󱥄󱥇󱤉󱥬", + "you": "󱥞:" + }, + "display_date": { + "today": "󱥜󱥤󱥁" + }, + "domain_mute_card": { + "mute": "󱥄󱤥", + "mute_progress": "󱤴󱤥󱤉󱥁…", + "unmute": "󱥄󱥌", + "unmute_progress": "󱤴󱥌󱤉󱥁󱥩󱥞…" + }, + "": { + "add_": "󱥄󱥌󱤉󱥠󱦐󱤋󱦒󱤰󱦒󱥄󱦒󱥗󱦒󱤌󱦒󱦑󱥩󱤪󱥁", + "custom": "󱥠󱦐󱤋󱦒󱤰󱦒󱥄󱦒󱥗󱦒󱤌󱦒󱦑󱥸", + "": "󱥠󱦐󱤋󱦒󱤰󱦒󱥄󱦒󱥗󱦒󱤌󱦒󱦑", + "keep_open": "󱥄󱥶󱤂󱤉󱥓󱥁", + "load_all": "󱥄󱤃󱤉󱥠󱦐󱤋󱦒󱤰󱦒󱥄󱦒󱥗󱦒󱤌󱦒󱦑 {Amount}", + "load_all_hint": "󱤴󱥌󱤉󱥠󱦐󱤋󱦒󱤰󱦒󱥄󱦒󱥗󱦒󱤌󱦒󱦑{saneAmount}󱥩󱥞.󱤴󱥌󱤉󱥠󱤄󱥩󱥞,󱤎󱦓󱥠󱦔󱥢󱦔󱥞󱤧󱥈.", + "search_": "󱥄󱤮󱥩󱥠󱦐󱤋󱦒󱤰󱦒󱥄󱦒󱥗󱦒󱤌󱦒󱦑", + "stickers": "󱥠", + "unicode": "󱥠󱦐󱤋󱦒󱤰󱦒󱥄󱦒󱥗󱦒󱤌󱦒󱦑󱤿" + }, + "errors": { + "storage_unavailable": "󱤎󱦐󱥉󱦒󱤋󱦒󱤬󱦒󱥄󱦒󱤰󱦒󱤈󱦒󱦑 could not access browser storage. Your login or your local settings won't be saved and you 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": "Admin", + "moderator": "Moderator" + }, + "scope_in_timeline": { + "direct": "Direct", + "local": "Local - only your 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" + }, + "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", + "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" + }, + "nav": { + "about": "About", + "administration": "Administration", + "announcements": "Announcements", + "back": "Back", + "bookmarks": "Bookmarks", + "bubble_timeline": "Bubble timeline", + "bubble_timeline_description": "Posts from instances close to yours, as recommended by the admins", + "chats": "Chats", + "dms": "Direct messages", + "friend_requests": "Follow requests", + "home_timeline": "Home timeline", + "home_timeline_description": "Posts from people you follow", + "interactions": "Interactions", + "lists": "Lists", + "mentions": "Mentions", + "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 your post", + "follow_request": "wants to follow you", + "followed_you": "followed you", + "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 your post" + }, + "password_reset": { + "check_email": "Check your email for a link to reset your password.", + "forgot_password": "Forgot password?", + "instruction": "Enter your email address or username. We will send you a link to reset your password.", + "password_reset": "Password reset", + "password_reset_disabled": "Password reset is disabled. Please contact your instance administrator.", + "password_reset_required": "You must reset your password to log in.", + "password_reset_required_but_mailer_is_disabled": "You must reset your password, but password reset is disabled. Please contact your instance administrator.", + "placeholder": "Your email or username", + "return_home": "Return to the home page", + "too_many_requests": "You have 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": "Your account is not {0}. Anyone can follow you to view your 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)", + "default": "Just arrived at Luna Nova Academy", + "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.", + "empty_status_error": "Can't send a post with no content and no files", + "edit_status": "Edit Status", + "edit_remote_warning": "Other instances may not support edits!", + "edit_unsupported_warning": "Polls and mentions will not be changed by editing.", + "media_description": "Media description", + "media_description_error": "Failed to update media, try again", + "media_not_sensitive_warning": "You have a Content Warning, but the attachments are not marked as sensitive!", + "new_status": "New post", + "post": "Post", + "posting": "Posting", + "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 your 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": { + "bio": "Bio", + "bio_placeholder": "e.g.\nHi! Welcome to my bio.\nI love watching anime and playing games. I hope we can be friends!", + "captcha": "CAPTCHA", + "email": "Email", + "email_language": "In which language do you want to receive emails from the server?", + "fullname": "Display name", + "fullname_placeholder": "e.g. Atsuko Kagari", + "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 you want to register.", + "register": "Register", + "registration": "Registration", + "token": "Invite token", + "username_placeholder": "e.g. akko", + "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": "People", + "people_talking": "{count} people talking", + "person_talking": "{count} person 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 you to download an archive of your account information and your posts, but they cannot yet be imported into a 󱤎󱦐󱥉󱦒󱤋󱦒󱤬󱦒󱥄󱦒󱤰󱦒󱤈󱦒󱦑 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 your 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 your email.", + "change_password": "Change password", + "change_password_error": "There was an issue changing your 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_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": "Your current avatar", + "current_mascot": "Your 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 your data and deactivate your account.", + "delete_account_error": "There was an issue deleting your account. If this persists please contact your instance administrator.", + "delete_account_instructions": "Type your 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", + "_reactions_on_timeline": "Show 󱥠󱦐󱤋󱦒󱤰󱦒󱥄󱦒󱥗󱦒󱤌󱦒󱦑 reactions on timeline", + "enable_web_push_notifications": "Enable web push notifications", + "enter_current_password_to_confirm": "Enter your current password to confirm your identity", + "expert_mode": "Show advanced", + "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 󱤎󱦐󱥉󱦒󱤋󱦒󱤬󱦒󱥄󱦒󱤰󱦒󱤈󱦒󱦑FE (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 󱤎󱦐󱥉󱦒󱤋󱦒󱤬󱦒󱥄󱦒󱤰󱦒󱤈󱦒󱦑 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 your 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 my favorites (people 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 me", + "hide_follows_count_description": "Don't show follow count", + "hide_follows_description": "Don't show who I'm 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 󱤎󱦐󱥉󱦒󱤋󱦒󱤬󱦒󱥄󱦒󱤰󱦒󱤈󱦒󱦑 theme. No changes to your theme were made.", + "limited_availability": "Unavailable in your browser", + "links": "Links", + "list_aliases_error": "Error fetching aliases: {error}", + "list_backups_error": "Error fetching backup list: {error}", + "lock_account_description": "Restrict your account to approved followers only", + "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 you when you are 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 - otherwise you won't see them again. If you lose access to your 2FA app and recovery codes you'll be locked out of your account.", + "scan": { + "desc": "Using your 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 your two-factor app:" + }, + "wait_pre_setup_otp": "presetting OTP", + "waiting_a_recovery_codes": "Receiving backup codes…", + "warning_of_generate_new_codes": "When you generate new recovery codes, your 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 you want to move this account somewhere else, you must go to your 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 bot posts", + "mute_export": "Mute export", + "mute_export_button": "Export your 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 you do 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__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 you voted in", + "notification_visibility_repeats": "Repeats", + "notifications": "Notifications", + "nsfw_clickthrough": "Hide sensitive/NSFW media", + "oauth_tokens": "OAuth tokens", + "pad_": "Pad 󱥠󱦐󱤋󱦒󱤰󱦒󱥄󱦒󱥗󱦒󱤌󱦒󱦑 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": "Posts", + "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 me or users I'm following", + "reply_visibility_following_short": "Show replies to my follows", + "reply_visibility_self": "Only show replies directed at me", + "reply_visibility_self_short": "Show replies to self only", + "reset_avatar": "Reset avatar", + "reset_avatar_confirm": "Do you really want to reset the avatar?", + "reset_background_confirm": "Do you really want to reset the background?", + "reset_banner_confirm": "Do you 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 you want to block", + "search_user_to_mute": "Search whom you want 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 your profile and affects all sessions and clients", + "settings": "Settings", + "show_admin_badge": "Show \"Admin\" badge in my profile", + "show_moderator_badge": "Show \"Moderator\" badge in my 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_wider_shortcuts": "Show wider gap between top panel shortcuts", + "show_yous": "Show (You)s", + "stop_gifs": "Pause animated images until you hover on them", + "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\" you have to enter exact font name as it appears in system.", + "size": "Size (in px)", + "weight": "Weight (boldness)" + }, + "preview": { + "button": "Button", + "checkbox": "I have 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 you 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": "󱤎󱦐󱥉󱦒󱤋󱦒󱤬󱦒󱥄󱦒󱤰󱦒󱤈󱦒󱦑FE's version rolled back.", + "fe_upgraded": "󱤎󱦐󱥉󱦒󱤋󱦒󱤬󱦒󱥄󱦒󱤰󱦒󱤈󱦒󱦑FE's theme engine upgraded after version update.", + "future_version_imported": "File you imported was made in newer version of FE.", + "migration_napshot_gone": "For whatever reason snapshot was missing, some stuff could look different than you remember.", + "migration_snapshot_ok": "Just to be safe, theme snapshot loaded. You can try loading theme data.", + "older_version_imported": "File you 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. You can load theme's actual data instead.", + "snapshot_source_mismatch": "Versions conflict: most likely FE was rolled back and updated again, if you changed theme using older version of FE you most likely want to use old version, otherwise use new version.", + "upgraded_from_v2": "󱤎󱦐󱥉󱦒󱤋󱦒󱤬󱦒󱥄󱦒󱤰󱦒󱤈󱦒󱦑FE has been upgraded, theme could look a little bit different than you remember.", + "v2_imported": "File you 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 your color theme.", + "theme_help_v2_1": "You 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 I guess?", + "use_at_icon": "Display {'@'} symbol as an icon instead of text", + "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", + "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", + "word_filter": "Word filter", + "wordfilter": "Wordfilter" + }, + "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": "Do you 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", + "edited_at": "Edited {time}", + "edit_history": "Edit History", + "edit_history_modal_title": "Edited {historyCount} time | Edited {historyCount} times", + "expand": "Expand", + "external_source": "External source", + "favorites": "Favorites", + "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", + "remove_attachment": "Remove attachment", + "repeat_confirm": "Do you 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": "(You)" + }, + "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}", + "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", + "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 your 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. Are you 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 Admin", + "grant_moderator": "Grant Moderator", + "moderation": "Moderation", + "quarantine": "Disallow user posts from federating", + "revoke_admin": "Revoke Admin", + "revoke_moderator": "Revoke Moderator", + "sandbox": "Force posts to be followers-only", + "strip_media": "Remove media from posts" + }, + "approve": "Approve", + "approve_confirm": "Are you sure you want to let this user follow you?", + "approve_confirm_accept_button": "Yes, accept", + "approve_confirm_cancel_button": "No, cancel", + "approve_confirm_title": "Approve follow request", + "block": "Block", + "block_confirm": "Are you sure you want 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!", + "bot": "Bot", + "deactivated": "Deactivated", + "deny": "Deny", + "deny_confirm": "Are you sure you want 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", + "following": "Following!", + "follows_you": "Follows you!", + "hidden": "Hidden", + "hide_repeats": "Hide repeats", + "highlight": { + "disabled": "No highlight", + "side": "Side stripe", + "solid": "Solid bg", + "striped": "Striped bg" + }, + "its_you": "It's you!", + "media": "Media", + "mention": "Mention", + "message": "Message", + "mute": "Mute", + "mute_confirm": "Are you sure you want 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", + "replies": "With Replies", + "report": "Report", + "show_repeats": "Show repeats", + "statuses": "Posts", + "subscribe": "Subscribe", + "unblock": "Unblock", + "unblock_progress": "Unblocking…", + "unfollow_confirm": "Are you sure you want to unfollow {user}?", + "unfollow_confirm_accept_button": "Yes, unfollow", + "unfollow_confirm_cancel_button": "No, don't unfollow", + "unfollow_confirm_title": "Unfollow user", + "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" + }, + "user_reporting": { + "add_comment_description": "The report will be sent to your instance moderators. You can provide an explanation of why you are 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 your request.", + "submit": "Submit", + "title": "Reporting {0}" + }, + "who_to_follow": { + "more": "More", + "who_to_follow": "Who to follow" + } +} + + diff --git a/src/services/locale/locale.service.js b/src/services/locale/locale.service.js index 8cef2522..fcff883f 100644 --- a/src/services/locale/locale.service.js +++ b/src/services/locale/locale.service.js @@ -5,7 +5,8 @@ import _ from 'lodash' const specialLanguageCodes = { 'ja_easy': 'ja', 'zh_Hant': 'zh-HANT', - 'zh': 'zh-Hans' + 'zh': 'zh-Hans', + 'tok': 'tok' } const internalToBrowserLocale = code => specialLanguageCodes[code] || code @@ -16,7 +17,8 @@ const getLanguageName = (code) => { const specialLanguageNames = { 'ja_easy': 'やさしいにほんご', 'zh': '简体中文', - 'zh_Hant': '繁體中文' + 'zh_Hant': '繁體中文', + 'tok': '󱥬󱦖󱥔' } const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code) const browserLocale = internalToBrowserLocale(code)