diff --git a/Localization/StringsConvertor/Intents/input/cs.lproj/Intents.strings b/Localization/StringsConvertor/Intents/input/cs.lproj/Intents.strings index 6877490ba..6f29830a1 100644 --- a/Localization/StringsConvertor/Intents/input/cs.lproj/Intents.strings +++ b/Localization/StringsConvertor/Intents/input/cs.lproj/Intents.strings @@ -1,51 +1,51 @@ -"16wxgf" = "Post on Mastodon"; +"16wxgf" = "Příspěvek na Mastodon"; -"751xkl" = "Text Content"; +"751xkl" = "Textový obsah"; -"CsR7G2" = "Post on Mastodon"; +"CsR7G2" = "Příspěvek na Mastodon"; -"HZSGTr" = "What content to post?"; +"HZSGTr" = "Jaký obsah se má přidat?"; -"HdGikU" = "Posting failed"; +"HdGikU" = "Odeslání se nezdařilo"; -"KDNTJ4" = "Failure Reason"; +"KDNTJ4" = "Důvod selhání"; -"RHxKOw" = "Send Post with text content"; +"RHxKOw" = "Odeslat příspěvek s textovým obsahem"; -"RxSqsb" = "Post"; +"RxSqsb" = "Příspěvek"; -"WCIR3D" = "Post ${content} on Mastodon"; +"WCIR3D" = "Zveřejnit ${content} na Mastodon"; -"ZKJSNu" = "Post"; +"ZKJSNu" = "Příspěvek"; "ZS1XaK" = "${content}"; -"ZbSjzC" = "Visibility"; +"ZbSjzC" = "Viditelnost"; -"Zo4jgJ" = "Post Visibility"; +"Zo4jgJ" = "Viditelnost příspěvku"; -"apSxMG-dYQ5NN" = "There are ${count} options matching ‘Public’."; +"apSxMG-dYQ5NN" = "Existuje ${count} možností odpovídajících 'Veřejný'."; -"apSxMG-ehFLjY" = "There are ${count} options matching ‘Followers Only’."; +"apSxMG-ehFLjY" = "Existuje ${count} možností, které odpovídají „jen sledujícím“."; -"ayoYEb-dYQ5NN" = "${content}, Public"; +"ayoYEb-dYQ5NN" = "${content}, veřejné"; -"ayoYEb-ehFLjY" = "${content}, Followers Only"; +"ayoYEb-ehFLjY" = "${content}, pouze sledující"; -"dUyuGg" = "Post on Mastodon"; +"dUyuGg" = "Příspěvek na Mastodon"; -"dYQ5NN" = "Public"; +"dYQ5NN" = "Veřejný"; -"ehFLjY" = "Followers Only"; +"ehFLjY" = "Pouze sledující"; -"gfePDu" = "Posting failed. ${failureReason}"; +"gfePDu" = "Odeslání se nezdařilo. ${failureReason}"; -"k7dbKQ" = "Post was sent successfully."; +"k7dbKQ" = "Příspěvek byl úspěšně odeslán."; -"oGiqmY-dYQ5NN" = "Just to confirm, you wanted ‘Public’?"; +"oGiqmY-dYQ5NN" = "Jen pro kontrolu, chtěli jste „Veřejný“?"; -"oGiqmY-ehFLjY" = "Just to confirm, you wanted ‘Followers Only’?"; +"oGiqmY-ehFLjY" = "Jen pro kontrolu, chtěli jste „Pouze sledující“?"; "rM6dvp" = "URL"; -"ryJLwG" = "Post was sent successfully. "; +"ryJLwG" = "Příspěvek byl úspěšně odeslán. "; diff --git a/Localization/StringsConvertor/Intents/input/cs.lproj/Intents.stringsdict b/Localization/StringsConvertor/Intents/input/cs.lproj/Intents.stringsdict index a739f778f..deea8db12 100644 --- a/Localization/StringsConvertor/Intents/input/cs.lproj/Intents.stringsdict +++ b/Localization/StringsConvertor/Intents/input/cs.lproj/Intents.stringsdict @@ -5,7 +5,7 @@ There are ${count} options matching ‘${content}’. - 2 NSStringLocalizedFormatKey - There are %#@count_option@ matching ‘${content}’. + Existuje %#@count_option@ odpovídající „${content}“. count_option NSStringFormatSpecTypeKey diff --git a/Localization/StringsConvertor/Intents/input/pt-BR.lproj/Intents.strings b/Localization/StringsConvertor/Intents/input/pt-BR.lproj/Intents.strings index 6877490ba..4d4e426c6 100644 --- a/Localization/StringsConvertor/Intents/input/pt-BR.lproj/Intents.strings +++ b/Localization/StringsConvertor/Intents/input/pt-BR.lproj/Intents.strings @@ -1,26 +1,26 @@ -"16wxgf" = "Post on Mastodon"; +"16wxgf" = "Postar no Mastodon"; -"751xkl" = "Text Content"; +"751xkl" = "Conteúdo do texto"; -"CsR7G2" = "Post on Mastodon"; +"CsR7G2" = "Postar no Mastodon"; "HZSGTr" = "What content to post?"; "HdGikU" = "Posting failed"; -"KDNTJ4" = "Failure Reason"; +"KDNTJ4" = "Motivo da falha"; -"RHxKOw" = "Send Post with text content"; +"RHxKOw" = "Enviar postagem com conteúdo de texto"; -"RxSqsb" = "Post"; +"RxSqsb" = "Postagem"; -"WCIR3D" = "Post ${content} on Mastodon"; +"WCIR3D" = "Postar ${content} no Mastodon"; -"ZKJSNu" = "Post"; +"ZKJSNu" = "Postar"; "ZS1XaK" = "${content}"; -"ZbSjzC" = "Visibility"; +"ZbSjzC" = "Visibilidade"; "Zo4jgJ" = "Post Visibility"; diff --git a/Localization/StringsConvertor/Intents/input/pt-BR.lproj/Intents.stringsdict b/Localization/StringsConvertor/Intents/input/pt-BR.lproj/Intents.stringsdict index 18422c772..a48559b4a 100644 --- a/Localization/StringsConvertor/Intents/input/pt-BR.lproj/Intents.stringsdict +++ b/Localization/StringsConvertor/Intents/input/pt-BR.lproj/Intents.stringsdict @@ -5,7 +5,7 @@ There are ${count} options matching ‘${content}’. - 2 NSStringLocalizedFormatKey - There are %#@count_option@ matching ‘${content}’. + Existem %#@count_option@ opções correspondentes a ‘${content}’. count_option NSStringFormatSpecTypeKey @@ -13,15 +13,15 @@ NSStringFormatValueTypeKey %ld one - 1 option + 1 opção other - %ld options + %ld opções There are ${count} options matching ‘${visibility}’. NSStringLocalizedFormatKey - There are %#@count_option@ matching ‘${visibility}’. + Existem %#@count_option@ opções correspondentes a ‘${visibility}’. count_option NSStringFormatSpecTypeKey @@ -29,9 +29,9 @@ NSStringFormatValueTypeKey %ld one - 1 option + 1 opção other - %ld options + %ld opções diff --git a/Localization/StringsConvertor/Sources/StringsConvertor/main.swift b/Localization/StringsConvertor/Sources/StringsConvertor/main.swift index 76dc722f6..beba6cb3f 100644 --- a/Localization/StringsConvertor/Sources/StringsConvertor/main.swift +++ b/Localization/StringsConvertor/Sources/StringsConvertor/main.swift @@ -47,6 +47,7 @@ private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) { private func map(language: String) -> String? { switch language { + case "Base.lproj": return "Base" case "ar.lproj": return "ar" // Arabic case "eu.lproj": return "eu" // Basque case "ca.lproj": return "ca" // Catalan diff --git a/Localization/StringsConvertor/input/Base.lproj/Localizable.stringsdict b/Localization/StringsConvertor/input/Base.lproj/Localizable.stringsdict new file mode 100644 index 000000000..cd97825f4 --- /dev/null +++ b/Localization/StringsConvertor/input/Base.lproj/Localizable.stringsdict @@ -0,0 +1,631 @@ + + + + + a11y.plural.count.unread.notification + + NSStringLocalizedFormatKey + %#@notification_count_unread_notification@ + notification_count_unread_notification + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + no unread notification + one + 1 unread notification + few + %ld unread notifications + many + %ld unread notification + other + %ld unread notification + + + a11y.plural.count.input_limit_exceeds + + NSStringLocalizedFormatKey + Input limit exceeds %#@character_count@ + character_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 characters + one + 1 character + few + %ld characters + many + %ld characters + other + %ld characters + + + a11y.plural.count.input_limit_remains + + NSStringLocalizedFormatKey + Input limit remains %#@character_count@ + character_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 characters + one + 1 character + few + %ld characters + many + %ld characters + other + %ld characters + + + a11y.plural.count.characters_left + + NSStringLocalizedFormatKey + %#@character_count@ left + character_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + no characters + one + 1 character + few + %ld characters + many + %ld characters + other + %ld characters + + + plural.count.followed_by_and_mutual + + NSStringLocalizedFormatKey + %#@names@%#@count_mutual@ + names + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + other + + + count_mutual + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + Followed by %1$@ + one + Followed by %1$@, and another mutual + few + Followed by %1$@, and %ld mutuals + many + Followed by %1$@, and %ld mutuals + other + Followed by %1$@, and %ld mutuals + + + plural.count.metric_formatted.post + + NSStringLocalizedFormatKey + %@ %#@post_count@ + post_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + posts + one + post + few + posts + many + posts + other + posts + + + plural.count.media + + NSStringLocalizedFormatKey + %#@media_count@ + media_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 media + one + 1 media + few + %ld media + many + %ld media + other + %ld media + + + plural.count.post + + NSStringLocalizedFormatKey + %#@post_count@ + post_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 posts + one + 1 post + few + %ld posts + many + %ld posts + other + %ld posts + + + plural.count.favorite + + NSStringLocalizedFormatKey + %#@favorite_count@ + favorite_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 favorites + one + 1 favorite + few + %ld favorites + many + %ld favorites + other + %ld favorites + + + plural.count.reblog + + NSStringLocalizedFormatKey + %#@reblog_count@ + reblog_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 reblogs + one + 1 reblog + few + %ld reblogs + many + %ld reblogs + other + %ld reblogs + + + plural.count.reply + + NSStringLocalizedFormatKey + %#@reply_count@ + reply_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 replies + one + 1 reply + few + %ld replies + many + %ld replies + other + %ld replies + + + plural.count.vote + + NSStringLocalizedFormatKey + %#@vote_count@ + vote_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 votes + one + 1 vote + few + %ld votes + many + %ld votes + other + %ld votes + + + plural.count.voter + + NSStringLocalizedFormatKey + %#@voter_count@ + voter_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 voters + one + 1 voter + few + %ld voters + many + %ld voters + other + %ld voters + + + plural.people_talking + + NSStringLocalizedFormatKey + %#@count_people_talking@ + count_people_talking + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 people talking + one + 1 people talking + few + %ld people talking + many + %ld people talking + other + %ld people talking + + + plural.count.following + + NSStringLocalizedFormatKey + %#@count_following@ + count_following + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 following + one + 1 following + few + %ld following + many + %ld following + other + %ld following + + + plural.count.follower + + NSStringLocalizedFormatKey + %#@count_follower@ + count_follower + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 followers + one + 1 follower + few + %ld followers + many + %ld followers + other + %ld followers + + + date.year.left + + NSStringLocalizedFormatKey + %#@count_year_left@ + count_year_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 years left + one + 1 year left + few + %ld years left + many + %ld years left + other + %ld years left + + + date.month.left + + NSStringLocalizedFormatKey + %#@count_month_left@ + count_month_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 months left + one + 1 months left + few + %ld months left + many + %ld months left + other + %ld months left + + + date.day.left + + NSStringLocalizedFormatKey + %#@count_day_left@ + count_day_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 days left + one + 1 day left + few + %ld days left + many + %ld days left + other + %ld days left + + + date.hour.left + + NSStringLocalizedFormatKey + %#@count_hour_left@ + count_hour_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 hours left + one + 1 hour left + few + %ld hours left + many + %ld hours left + other + %ld hours left + + + date.minute.left + + NSStringLocalizedFormatKey + %#@count_minute_left@ + count_minute_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 minutes left + one + 1 minute left + few + %ld minutes left + many + %ld minutes left + other + %ld minutes left + + + date.second.left + + NSStringLocalizedFormatKey + %#@count_second_left@ + count_second_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 seconds left + one + 1 second left + few + %ld seconds left + many + %ld seconds left + other + %ld seconds left + + + date.year.ago.abbr + + NSStringLocalizedFormatKey + %#@count_year_ago_abbr@ + count_year_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0y ago + one + 1y ago + few + %ldy ago + many + %ldy ago + other + %ldy ago + + + date.month.ago.abbr + + NSStringLocalizedFormatKey + %#@count_month_ago_abbr@ + count_month_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0M ago + one + 1M ago + few + %ldM ago + many + %ldM ago + other + %ldM ago + + + date.day.ago.abbr + + NSStringLocalizedFormatKey + %#@count_day_ago_abbr@ + count_day_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0d ago + one + 1d ago + few + %ldd ago + many + %ldd ago + other + %ldd ago + + + date.hour.ago.abbr + + NSStringLocalizedFormatKey + %#@count_hour_ago_abbr@ + count_hour_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0h ago + one + 1h ago + few + %ldh ago + many + %ldh ago + other + %ldh ago + + + date.minute.ago.abbr + + NSStringLocalizedFormatKey + %#@count_minute_ago_abbr@ + count_minute_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0m ago + one + 1m ago + few + %ldm ago + many + %ldm ago + other + %ldm ago + + + date.second.ago.abbr + + NSStringLocalizedFormatKey + %#@count_second_ago_abbr@ + count_second_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0s ago + one + 1s ago + few + %lds ago + many + %lds ago + other + %lds ago + + + + diff --git a/Localization/StringsConvertor/input/Base.lproj/app.json b/Localization/StringsConvertor/input/Base.lproj/app.json new file mode 100644 index 000000000..c40c0a39e --- /dev/null +++ b/Localization/StringsConvertor/input/Base.lproj/app.json @@ -0,0 +1,718 @@ +{ + "common": { + "alerts": { + "common": { + "please_try_again": "Please try again.", + "please_try_again_later": "Please try again later." + }, + "sign_up_failure": { + "title": "Sign Up Failure" + }, + "server_error": { + "title": "Server Error" + }, + "vote_failure": { + "title": "Vote Failure", + "poll_ended": "The poll has ended" + }, + "discard_post_content": { + "title": "Discard Draft", + "message": "Confirm to discard composed post content." + }, + "publish_post_failure": { + "title": "Publish Failure", + "message": "Failed to publish the post.\nPlease check your internet connection.", + "attachments_message": { + "video_attach_with_photo": "Cannot attach a video to a post that already contains images.", + "more_than_one_video": "Cannot attach more than one video." + } + }, + "edit_profile_failure": { + "title": "Edit Profile Error", + "message": "Cannot edit profile. Please try again." + }, + "sign_out": { + "title": "Sign Out", + "message": "Are you sure you want to sign out?", + "confirm": "Sign Out" + }, + "block_domain": { + "title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.", + "block_entire_domain": "Block Domain" + }, + "save_photo_failure": { + "title": "Save Photo Failure", + "message": "Please enable the photo library access permission to save the photo." + }, + "delete_post": { + "title": "Delete Post", + "message": "Are you sure you want to delete this post?" + }, + "clean_cache": { + "title": "Clean Cache", + "message": "Successfully cleaned %s cache." + } + }, + "controls": { + "actions": { + "back": "Back", + "next": "Next", + "previous": "Previous", + "open": "Open", + "add": "Add", + "remove": "Remove", + "edit": "Edit", + "save": "Save", + "ok": "OK", + "done": "Done", + "confirm": "Confirm", + "continue": "Continue", + "compose": "Compose", + "cancel": "Cancel", + "discard": "Discard", + "try_again": "Try Again", + "take_photo": "Take Photo", + "save_photo": "Save Photo", + "copy_photo": "Copy Photo", + "sign_in": "Sign In", + "sign_up": "Sign Up", + "see_more": "See More", + "preview": "Preview", + "share": "Share", + "share_user": "Share %s", + "share_post": "Share Post", + "open_in_safari": "Open in Safari", + "open_in_browser": "Open in Browser", + "find_people": "Find people to follow", + "manually_search": "Manually search instead", + "skip": "Skip", + "reply": "Reply", + "report_user": "Report %s", + "block_domain": "Block %s", + "unblock_domain": "Unblock %s", + "settings": "Settings", + "delete": "Delete" + }, + "tabs": { + "home": "Home", + "search": "Search", + "notification": "Notification", + "profile": "Profile" + }, + "keyboard": { + "common": { + "switch_to_tab": "Switch to %s", + "compose_new_post": "Compose New Post", + "show_favorites": "Show Favorites", + "open_settings": "Open Settings" + }, + "timeline": { + "previous_status": "Previous Post", + "next_status": "Next Post", + "open_status": "Open Post", + "open_author_profile": "Open Author's Profile", + "open_reblogger_profile": "Open Reblogger's Profile", + "reply_status": "Reply to Post", + "toggle_reblog": "Toggle Reblog on Post", + "toggle_favorite": "Toggle Favorite on Post", + "toggle_content_warning": "Toggle Content Warning", + "preview_image": "Preview Image" + }, + "segmented_control": { + "previous_section": "Previous Section", + "next_section": "Next Section" + } + }, + "status": { + "user_reblogged": "%s reblogged", + "user_replied_to": "Replied to %s", + "show_post": "Show Post", + "show_user_profile": "Show user profile", + "content_warning": "Content Warning", + "sensitive_content": "Sensitive Content", + "media_content_warning": "Tap anywhere to reveal", + "tap_to_reveal": "Tap to reveal", + "poll": { + "vote": "Vote", + "closed": "Closed" + }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, + "actions": { + "reply": "Reply", + "reblog": "Reblog", + "unreblog": "Undo reblog", + "favorite": "Favorite", + "unfavorite": "Unfavorite", + "menu": "Menu", + "hide": "Hide", + "show_image": "Show image", + "show_gif": "Show GIF", + "show_video_player": "Show video player", + "tap_then_hold_to_show_menu": "Tap then hold to show menu" + }, + "tag": { + "url": "URL", + "mention": "Mention", + "link": "Link", + "hashtag": "Hashtag", + "email": "Email", + "emoji": "Emoji" + }, + "visibility": { + "unlisted": "Everyone can see this post but not display in the public timeline.", + "private": "Only their followers can see this post.", + "private_from_me": "Only my followers can see this post.", + "direct": "Only mentioned user can see this post." + } + }, + "friendship": { + "follow": "Follow", + "following": "Following", + "request": "Request", + "pending": "Pending", + "block": "Block", + "block_user": "Block %s", + "block_domain": "Block %s", + "unblock": "Unblock", + "unblock_user": "Unblock %s", + "blocked": "Blocked", + "mute": "Mute", + "mute_user": "Mute %s", + "unmute": "Unmute", + "unmute_user": "Unmute %s", + "muted": "Muted", + "edit_info": "Edit Info", + "show_reblogs": "Show Reblogs", + "hide_reblogs": "Hide Reblogs" + }, + "timeline": { + "filtered": "Filtered", + "timestamp": { + "now": "Now" + }, + "loader": { + "load_missing_posts": "Load missing posts", + "loading_missing_posts": "Loading missing posts...", + "show_more_replies": "Show more replies" + }, + "header": { + "no_status_found": "No Post Found", + "blocking_warning": "You can’t view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.", + "user_blocking_warning": "You can’t view %s’s profile\nuntil you unblock them.\nYour profile looks like this to them.", + "blocked_warning": "You can’t view this user’s profile\nuntil they unblock you.", + "user_blocked_warning": "You can’t view %s’s profile\nuntil they unblock you.", + "suspended_warning": "This user has been suspended.", + "user_suspended_warning": "%s’s account has been suspended." + } + } + } + }, + "scene": { + "welcome": { + "slogan": "Social networking\nback in your hands.", + "get_started": "Get Started", + "log_in": "Log In" + }, + "server_picker": { + "title": "Mastodon is made of users in different servers.", + "subtitle": "Pick a server based on your interests, region, or a general purpose one.", + "subtitle_extend": "Pick a server based on your interests, region, or a general purpose one. Each server is operated by an entirely independent organization or individual.", + "button": { + "category": { + "all": "All", + "all_accessiblity_description": "Category: All", + "academia": "academia", + "activism": "activism", + "food": "food", + "furry": "furry", + "games": "games", + "general": "general", + "journalism": "journalism", + "lgbt": "lgbt", + "regional": "regional", + "art": "art", + "music": "music", + "tech": "tech" + }, + "see_less": "See Less", + "see_more": "See More" + }, + "label": { + "language": "LANGUAGE", + "users": "USERS", + "category": "CATEGORY" + }, + "input": { + "placeholder": "Search servers", + "search_servers_or_enter_url": "Search servers or enter URL" + }, + "empty_state": { + "finding_servers": "Finding available servers...", + "bad_network": "Something went wrong while loading the data. Check your internet connection.", + "no_results": "No results" + } + }, + "register": { + "title": "Let’s get you set up on %s", + "lets_get_you_set_up_on_domain": "Let’s get you set up on %s", + "input": { + "avatar": { + "delete": "Delete" + }, + "username": { + "placeholder": "username", + "duplicate_prompt": "This username is taken." + }, + "display_name": { + "placeholder": "display name" + }, + "email": { + "placeholder": "email" + }, + "password": { + "placeholder": "password", + "require": "Your password needs at least:", + "character_limit": "8 characters", + "accessibility": { + "checked": "checked", + "unchecked": "unchecked" + }, + "hint": "Your password needs at least eight characters" + }, + "invite": { + "registration_user_invite_request": "Why do you want to join?" + } + }, + "error": { + "item": { + "username": "Username", + "email": "Email", + "password": "Password", + "agreement": "Agreement", + "locale": "Locale", + "reason": "Reason" + }, + "reason": { + "blocked": "%s contains a disallowed email provider", + "unreachable": "%s does not seem to exist", + "taken": "%s is already in use", + "reserved": "%s is a reserved keyword", + "accepted": "%s must be accepted", + "blank": "%s is required", + "invalid": "%s is invalid", + "too_long": "%s is too long", + "too_short": "%s is too short", + "inclusion": "%s is not a supported value" + }, + "special": { + "username_invalid": "Username must only contain alphanumeric characters and underscores", + "username_too_long": "Username is too long (can’t be longer than 30 characters)", + "email_invalid": "This is not a valid email address", + "password_too_short": "Password is too short (must be at least 8 characters)" + } + } + }, + "server_rules": { + "title": "Some ground rules.", + "subtitle": "These are set and enforced by the %s moderators.", + "prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.", + "terms_of_service": "terms of service", + "privacy_policy": "privacy policy", + "button": { + "confirm": "I Agree" + } + }, + "confirm_email": { + "title": "One last thing.", + "subtitle": "Tap the link we emailed to you to verify your account.", + "tap_the_link_we_emailed_to_you_to_verify_your_account": "Tap the link we emailed to you to verify your account", + "button": { + "open_email_app": "Open Email App", + "resend": "Resend" + }, + "dont_receive_email": { + "title": "Check your email", + "description": "Check if your email address is correct as well as your junk folder if you haven’t.", + "resend_email": "Resend Email" + }, + "open_email_app": { + "title": "Check your inbox.", + "description": "We just sent you an email. Check your junk folder if you haven’t.", + "mail": "Mail", + "open_email_client": "Open Email Client" + } + }, + "home_timeline": { + "title": "Home", + "navigation_bar_state": { + "offline": "Offline", + "new_posts": "See new posts", + "published": "Published!", + "Publishing": "Publishing post...", + "accessibility": { + "logo_label": "Logo Button", + "logo_hint": "Tap to scroll to top and tap again to previous location" + } + } + }, + "suggestion_account": { + "title": "Find People to Follow", + "follow_explain": "When you follow someone, you’ll see their posts in your home feed." + }, + "compose": { + "title": { + "new_post": "New Post", + "new_reply": "New Reply" + }, + "media_selection": { + "camera": "Take Photo", + "photo_library": "Photo Library", + "browse": "Browse" + }, + "content_input_placeholder": "Type or paste what’s on your mind", + "compose_action": "Publish", + "replying_to_user": "replying to %s", + "attachment": { + "photo": "photo", + "video": "video", + "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", + "description_photo": "Describe the photo for the visually-impaired...", + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not recognize this media attachment", + "attachment_too_large": "Attachment too large", + "compressing_state": "Compressing...", + "server_processing_state": "Server Processing..." + }, + "poll": { + "duration_time": "Duration: %s", + "thirty_minutes": "30 minutes", + "one_hour": "1 Hour", + "six_hours": "6 Hours", + "one_day": "1 Day", + "three_days": "3 Days", + "seven_days": "7 Days", + "option_number": "Option %ld", + "the_poll_is_invalid": "The poll is invalid", + "the_poll_has_empty_option": "The poll has empty option" + }, + "content_warning": { + "placeholder": "Write an accurate warning here..." + }, + "visibility": { + "public": "Public", + "unlisted": "Unlisted", + "private": "Followers only", + "direct": "Only people I mention" + }, + "auto_complete": { + "space_to_add": "Space to add" + }, + "accessibility": { + "append_attachment": "Add Attachment", + "append_poll": "Add Poll", + "remove_poll": "Remove Poll", + "custom_emoji_picker": "Custom Emoji Picker", + "enable_content_warning": "Enable Content Warning", + "disable_content_warning": "Disable Content Warning", + "post_visibility_menu": "Post Visibility Menu", + "post_options": "Post Options", + "posting_as": "Posting as %s" + }, + "keyboard": { + "discard_post": "Discard Post", + "publish_post": "Publish Post", + "toggle_poll": "Toggle Poll", + "toggle_content_warning": "Toggle Content Warning", + "append_attachment_entry": "Add Attachment - %s", + "select_visibility_entry": "Select Visibility - %s" + } + }, + "profile": { + "header": { + "follows_you": "Follows You" + }, + "dashboard": { + "posts": "posts", + "following": "following", + "followers": "followers" + }, + "fields": { + "add_row": "Add Row", + "placeholder": { + "label": "Label", + "content": "Content" + } + }, + "segmented_control": { + "posts": "Posts", + "replies": "Replies", + "posts_and_replies": "Posts and Replies", + "media": "Media", + "about": "About" + }, + "relationship_action_alert": { + "confirm_mute_user": { + "title": "Mute Account", + "message": "Confirm to mute %s" + }, + "confirm_unmute_user": { + "title": "Unmute Account", + "message": "Confirm to unmute %s" + }, + "confirm_block_user": { + "title": "Block Account", + "message": "Confirm to block %s" + }, + "confirm_unblock_user": { + "title": "Unblock Account", + "message": "Confirm to unblock %s" + }, + "confirm_show_reblogs": { + "title": "Show Reblogs", + "message": "Confirm to show reblogs" + }, + "confirm_hide_reblogs": { + "title": "Hide Reblogs", + "message": "Confirm to hide reblogs" + } + }, + "accessibility": { + "show_avatar_image": "Show avatar image", + "edit_avatar_image": "Edit avatar image", + "show_banner_image": "Show banner image", + "double_tap_to_open_the_list": "Double tap to open the list" + } + }, + "follower": { + "title": "follower", + "footer": "Followers from other servers are not displayed." + }, + "following": { + "title": "following", + "footer": "Follows from other servers are not displayed." + }, + "familiarFollowers": { + "title": "Followers you familiar", + "followed_by_names": "Followed by %s" + }, + "favorited_by": { + "title": "Favorited By" + }, + "reblogged_by": { + "title": "Reblogged By" + }, + "search": { + "title": "Search", + "search_bar": { + "placeholder": "Search hashtags and users", + "cancel": "Cancel" + }, + "recommend": { + "button_text": "See All", + "hash_tag": { + "title": "Trending on Mastodon", + "description": "Hashtags that are getting quite a bit of attention", + "people_talking": "%s people are talking" + }, + "accounts": { + "title": "Accounts you might like", + "description": "You may like to follow these accounts", + "follow": "Follow" + } + }, + "searching": { + "segment": { + "all": "All", + "people": "People", + "hashtags": "Hashtags", + "posts": "Posts" + }, + "empty_state": { + "no_results": "No results" + }, + "recent_search": "Recent searches", + "clear": "Clear" + } + }, + "discovery": { + "tabs": { + "posts": "Posts", + "hashtags": "Hashtags", + "news": "News", + "community": "Community", + "for_you": "For You" + }, + "intro": "These are the posts gaining traction in your corner of Mastodon." + }, + "favorite": { + "title": "Your Favorites" + }, + "notification": { + "title": { + "Everything": "Everything", + "Mentions": "Mentions" + }, + "notification_description": { + "followed_you": "followed you", + "favorited_your_post": "favorited your post", + "reblogged_your_post": "reblogged your post", + "mentioned_you": "mentioned you", + "request_to_follow_you": "request to follow you", + "poll_has_ended": "poll has ended" + }, + "keyobard": { + "show_everything": "Show Everything", + "show_mentions": "Show Mentions" + }, + "follow_request": { + "accept": "Accept", + "accepted": "Accepted", + "reject": "reject", + "rejected": "Rejected" + } + }, + "thread": { + "back_title": "Post", + "title": "Post from %s" + }, + "settings": { + "title": "Settings", + "section": { + "appearance": { + "title": "Appearance", + "automatic": "Automatic", + "light": "Always Light", + "dark": "Always Dark" + }, + "look_and_feel": { + "title": "Look and Feel", + "use_system": "Use System", + "really_dark": "Really Dark", + "sorta_dark": "Sorta Dark", + "light": "Light" + }, + "notifications": { + "title": "Notifications", + "favorites": "Favorites my post", + "follows": "Follows me", + "boosts": "Reblogs my post", + "mentions": "Mentions me", + "trigger": { + "anyone": "anyone", + "follower": "a follower", + "follow": "anyone I follow", + "noone": "no one", + "title": "Notify me when" + } + }, + "preference": { + "title": "Preferences", + "true_black_dark_mode": "True black dark mode", + "disable_avatar_animation": "Disable animated avatars", + "disable_emoji_animation": "Disable animated emojis", + "using_default_browser": "Use default browser to open links", + "open_links_in_mastodon": "Open links in Mastodon" + }, + "boring_zone": { + "title": "The Boring Zone", + "account_settings": "Account Settings", + "terms": "Terms of Service", + "privacy": "Privacy Policy" + }, + "spicy_zone": { + "title": "The Spicy Zone", + "clear": "Clear Media Cache", + "signout": "Sign Out" + } + }, + "footer": { + "mastodon_description": "Mastodon is open source software. You can report issues on GitHub at %s (%s)" + }, + "keyboard": { + "close_settings_window": "Close Settings Window" + } + }, + "report": { + "title_report": "Report", + "title": "Report %s", + "step1": "Step 1 of 2", + "step2": "Step 2 of 2", + "content1": "Are there any other posts you’d like to add to the report?", + "content2": "Is there anything the moderators should know about this report?", + "report_sent_title": "Thanks for reporting, we’ll look into this.", + "send": "Send Report", + "skip_to_send": "Send without comment", + "text_placeholder": "Type or paste additional comments", + "reported": "REPORTED", + "step_one": { + "step_1_of_4": "Step 1 of 4", + "whats_wrong_with_this_post": "What's wrong with this post?", + "whats_wrong_with_this_account": "What's wrong with this account?", + "whats_wrong_with_this_username": "What's wrong with %s?", + "select_the_best_match": "Select the best match", + "i_dont_like_it": "I don’t like it", + "it_is_not_something_you_want_to_see": "It is not something you want to see", + "its_spam": "It’s spam", + "malicious_links_fake_engagement_or_repetetive_replies": "Malicious links, fake engagement, or repetetive replies", + "it_violates_server_rules": "It violates server rules", + "you_are_aware_that_it_breaks_specific_rules": "You are aware that it breaks specific rules", + "its_something_else": "It’s something else", + "the_issue_does_not_fit_into_other_categories": "The issue does not fit into other categories" + }, + "step_two": { + "step_2_of_4": "Step 2 of 4", + "which_rules_are_being_violated": "Which rules are being violated?", + "select_all_that_apply": "Select all that apply", + "i_just_don’t_like_it": "I just don’t like it" + }, + "step_three": { + "step_3_of_4": "Step 3 of 4", + "are_there_any_posts_that_back_up_this_report": "Are there any posts that back up this report?", + "select_all_that_apply": "Select all that apply" + }, + "step_four": { + "step_4_of_4": "Step 4 of 4", + "is_there_anything_else_we_should_know": "Is there anything else we should know?" + }, + "step_final": { + "dont_want_to_see_this": "Don’t want to see this?", + "when_you_see_something_you_dont_like_on_mastodon_you_can_remove_the_person_from_your_experience.": "When you see something you don’t like on Mastodon, you can remove the person from your experience.", + "unfollow": "Unfollow", + "unfollowed": "Unfollowed", + "unfollow_user": "Unfollow %s", + "mute_user": "Mute %s", + "you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "You won’t see their posts or reblogs in your home feed. They won’t know they’ve been muted.", + "block_user": "Block %s", + "they_will_no_longer_be_able_to_follow_or_see_your_posts_but_they_can_see_if_theyve_been_blocked": "They will no longer be able to follow or see your posts, but they can see if they’ve been blocked.", + "while_we_review_this_you_can_take_action_against_user": "While we review this, you can take action against %s" + } + }, + "preview": { + "keyboard": { + "close_preview": "Close Preview", + "show_next": "Show Next", + "show_previous": "Show Previous" + } + }, + "account_list": { + "tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher", + "dismiss_account_switcher": "Dismiss Account Switcher", + "add_account": "Add Account" + }, + "wizard": { + "new_in_mastodon": "New in Mastodon", + "multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.", + "accessibility_hint": "Double tap to dismiss this wizard" + }, + "bookmark": { + "title": "Bookmarks" + } + } +} \ No newline at end of file diff --git a/Localization/StringsConvertor/input/Base.lproj/ios-infoPlist.json b/Localization/StringsConvertor/input/Base.lproj/ios-infoPlist.json new file mode 100644 index 000000000..c6db73de0 --- /dev/null +++ b/Localization/StringsConvertor/input/Base.lproj/ios-infoPlist.json @@ -0,0 +1,6 @@ +{ + "NSCameraUsageDescription": "Used to take photo for post status", + "NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library", + "NewPostShortcutItemTitle": "New Post", + "SearchShortcutItemTitle": "Search" +} diff --git a/Localization/StringsConvertor/input/ar.lproj/app.json b/Localization/StringsConvertor/input/ar.lproj/app.json index ce68229ac..4c5ac4c8b 100644 --- a/Localization/StringsConvertor/input/ar.lproj/app.json +++ b/Localization/StringsConvertor/input/ar.lproj/app.json @@ -136,6 +136,12 @@ "vote": "صَوِّت", "closed": "انتهى" }, + "meta_entity": { + "url": "رابِط: %s", + "hashtag": "وَسْم: %s", + "mention": "إظهار المِلف التعريفي: %s", + "email": "عُنوان البريد الإلكتُروني: %s" + }, "actions": { "reply": "الرَّد", "reblog": "إعادة النشر", @@ -181,8 +187,8 @@ "unmute_user": "رفع الكتم عن %s", "muted": "مكتوم", "edit_info": "تَحريرُ المَعلُومات", - "show_reblogs": "Show Reblogs", - "hide_reblogs": "Hide Reblogs" + "show_reblogs": "إظهار إعادات التدوين", + "hide_reblogs": "إخفاء إعادات التدوين" }, "timeline": { "filtered": "مُصفَّى", @@ -376,7 +382,11 @@ "video": "مقطع مرئي", "attachment_broken": "هذا ال%s مُعطَّل\nويتعذَّرُ رفعُه إلى ماستودون.", "description_photo": "صِف الصورة للمَكفوفين...", - "description_video": "صِف المقطع المرئي للمَكفوفين..." + "description_video": "صِف المقطع المرئي للمَكفوفين...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "المُدَّة: %s", @@ -459,12 +469,12 @@ "message": "تأكيدُ رَفع الحَظرِ عَن %s" }, "confirm_show_reblogs": { - "title": "Show Reblogs", - "message": "Confirm to show reblogs" + "title": "إظهار إعادات التدوين", + "message": "التأكيد لِإظهار إعادات التدوين" }, "confirm_hide_reblogs": { - "title": "Hide Reblogs", - "message": "Confirm to hide reblogs" + "title": "إخفاء إعادات التدوين", + "message": "التأكيد لِإخفاء إعادات التدوين" } }, "accessibility": { @@ -696,7 +706,7 @@ "accessibility_hint": "انقر نقرًا مزدوجًا لتجاهُل النافذة المنبثقة" }, "bookmark": { - "title": "Bookmarks" + "title": "العَلاماتُ المَرجعيَّة" } } } diff --git a/Localization/StringsConvertor/input/ca.lproj/app.json b/Localization/StringsConvertor/input/ca.lproj/app.json index 4766eb31b..7164d1d12 100644 --- a/Localization/StringsConvertor/input/ca.lproj/app.json +++ b/Localization/StringsConvertor/input/ca.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vota", "closed": "Finalitzada" }, + "meta_entity": { + "url": "Enllaç: %s", + "hashtag": "Etiqueta %s", + "mention": "Mostra el Perfil: %s", + "email": "Correu electrònic: %s" + }, "actions": { "reply": "Respon", "reblog": "Impuls", @@ -376,7 +382,11 @@ "video": "vídeo", "attachment_broken": "Aquest %s està trencat i no pot ser\ncarregat a Mastodon.", "description_photo": "Descriu la foto per als disminuïts visuals...", - "description_video": "Descriu el vídeo per als disminuïts visuals..." + "description_video": "Descriu el vídeo per als disminuïts visuals...", + "load_failed": "Ha fallat la càrrega", + "upload_failed": "Pujada fallida", + "can_not_recognize_this_media_attachment": "No es pot reconèixer l'adjunt multimèdia", + "attachment_too_large": "El fitxer adjunt és massa gran" }, "poll": { "duration_time": "Durada: %s", @@ -696,7 +706,7 @@ "accessibility_hint": "Toca dues vegades per descartar l'assistent" }, "bookmark": { - "title": "Bookmarks" + "title": "Marcadors" } } } diff --git a/Localization/StringsConvertor/input/ckb.lproj/app.json b/Localization/StringsConvertor/input/ckb.lproj/app.json index 49f72d7a3..25452f38b 100644 --- a/Localization/StringsConvertor/input/ckb.lproj/app.json +++ b/Localization/StringsConvertor/input/ckb.lproj/app.json @@ -136,6 +136,12 @@ "vote": "دەنگ بدە", "closed": "داخراوە" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "وەڵامی بدەوە", "reblog": "پۆستی بکەوە", @@ -376,7 +382,11 @@ "video": "ڤیدیۆ", "attachment_broken": "ئەم %sـە تێک چووە و ناتوانیت بەرزی بکەیتەوە.", "description_photo": "وێنەکەت بۆ نابیناکان باس بکە...", - "description_video": "ڤیدیۆکەت بۆ نابیناکان باس بکە..." + "description_video": "ڤیدیۆکەت بۆ نابیناکان باس بکە...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "کات:‌ %s", diff --git a/Localization/StringsConvertor/input/cs.lproj/Localizable.stringsdict b/Localization/StringsConvertor/input/cs.lproj/Localizable.stringsdict index cdf35477e..827bd79e6 100644 --- a/Localization/StringsConvertor/input/cs.lproj/Localizable.stringsdict +++ b/Localization/StringsConvertor/input/cs.lproj/Localizable.stringsdict @@ -13,19 +13,19 @@ NSStringFormatValueTypeKey ld one - 1 unread notification + 1 nepřečtené oznámení few - %ld unread notification + %ld nepřečtené oznámení many - %ld unread notification + %ld nepřečtených oznámení other - %ld unread notification + %ld nepřečtených oznámení a11y.plural.count.input_limit_exceeds NSStringLocalizedFormatKey - Input limit exceeds %#@character_count@ + Vstupní limit přesahuje %#@character_count@ character_count NSStringFormatSpecTypeKey @@ -33,19 +33,19 @@ NSStringFormatValueTypeKey ld one - 1 character + 1 znak few - %ld characters + %ld znaky many - %ld characters + %ld znaků other - %ld characters + %ld znaků a11y.plural.count.input_limit_remains NSStringLocalizedFormatKey - Input limit remains %#@character_count@ + Vstupní limit zůstává %#@character_count@ character_count NSStringFormatSpecTypeKey @@ -53,13 +53,13 @@ NSStringFormatValueTypeKey ld one - 1 character + 1 znak few - %ld characters + %ld znaky many - %ld characters + %ld znaků other - %ld characters + %ld znaků plural.count.followed_by_and_mutual @@ -108,13 +108,13 @@ NSStringFormatValueTypeKey ld one - post + příspěvek few - posts + příspěvky many - posts + příspěvků other - posts + příspěvků plural.count.media @@ -128,13 +128,13 @@ NSStringFormatValueTypeKey ld one - 1 media + 1 médium few - %ld media + %ld média many - %ld media + %ld médií other - %ld media + %ld médií plural.count.post @@ -148,13 +148,13 @@ NSStringFormatValueTypeKey ld one - 1 post + 1 příspěvek few - %ld posts + %ld příspěvky many - %ld posts + %ld příspěvků other - %ld posts + %ld příspěvků plural.count.favorite @@ -168,7 +168,7 @@ NSStringFormatValueTypeKey ld one - 1 favorite + 1 oblíbený few %ld favorites many @@ -208,13 +208,13 @@ NSStringFormatValueTypeKey ld one - 1 reply + 1 odpověď few - %ld replies + %ld odpovědi many - %ld replies + %ld odpovědí other - %ld replies + %ld odpovědí plural.count.vote @@ -228,13 +228,13 @@ NSStringFormatValueTypeKey ld one - 1 vote + 1 hlas few - %ld votes + %ld hlasy many - %ld votes + %ld hlasů other - %ld votes + %ld hlasů plural.count.voter @@ -248,13 +248,13 @@ NSStringFormatValueTypeKey ld one - 1 voter + 1 hlasující few - %ld voters + %ld hlasující many - %ld voters + %ld hlasujících other - %ld voters + %ld hlasujících plural.people_talking diff --git a/Localization/StringsConvertor/input/cs.lproj/app.json b/Localization/StringsConvertor/input/cs.lproj/app.json index 550f71808..4050352f4 100644 --- a/Localization/StringsConvertor/input/cs.lproj/app.json +++ b/Localization/StringsConvertor/input/cs.lproj/app.json @@ -37,12 +37,12 @@ "confirm": "Odhlásit se" }, "block_domain": { - "title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.", + "title": "Opravdu chcete blokovat celou doménu %s? Ve většině případů stačí zablokovat nebo skrýt pár konkrétních uživatelů, což také doporučujeme. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.", "block_entire_domain": "Blokovat doménu" }, "save_photo_failure": { "title": "Uložení fotografie se nezdařilo", - "message": "Please enable the photo library access permission to save the photo." + "message": "Pro uložení fotografie povolte přístup k knihovně fotografií." }, "delete_post": { "title": "Odstranit příspěvek", @@ -79,7 +79,7 @@ "see_more": "Zobrazit více", "preview": "Náhled", "share": "Sdílet", - "share_user": "Share %s", + "share_user": "Sdílet %s", "share_post": "Sdílet příspěvek", "open_in_safari": "Otevřít v Safari", "open_in_browser": "Otevřít v prohlížeči", @@ -125,7 +125,7 @@ }, "status": { "user_reblogged": "%s reblogged", - "user_replied_to": "Replied to %s", + "user_replied_to": "Odpověděl %s", "show_post": "Zobrazit příspěvek", "show_user_profile": "Zobrazit profil uživatele", "content_warning": "Varování o obsahu", @@ -136,18 +136,24 @@ "vote": "Hlasovat", "closed": "Uzavřeno" }, + "meta_entity": { + "url": "Odkaz: %s", + "hashtag": "Hashtag: %s", + "mention": "Zobrazit profil: %s", + "email": "E-mailová adresa: %s" + }, "actions": { "reply": "Odpovědět", "reblog": "Boostnout", "unreblog": "Undo reblog", - "favorite": "Favorite", + "favorite": "Oblíbit", "unfavorite": "Odebrat z oblízených", "menu": "Nabídka", "hide": "Skrýt", "show_image": "Zobrazit obrázek", "show_gif": "Zobrazit GIF", "show_video_player": "Zobrazit video přehrávač", - "tap_then_hold_to_show_menu": "Tap then hold to show menu" + "tap_then_hold_to_show_menu": "Klepnutím podržte pro zobrazení nabídky" }, "tag": { "url": "URL", @@ -159,22 +165,22 @@ }, "visibility": { "unlisted": "Každý může vidět tento příspěvek, ale nezobrazovat ve veřejné časové ose.", - "private": "Only their followers can see this post.", - "private_from_me": "Only my followers can see this post.", - "direct": "Only mentioned user can see this post." + "private": "Pouze jejich sledující mohou vidět tento příspěvek.", + "private_from_me": "Pouze moji sledující mohou vidět tento příspěvek.", + "direct": "Pouze zmíněný uživatel může vidět tento příspěvek." } }, "friendship": { "follow": "Sledovat", - "following": "Following", - "request": "Request", + "following": "Sleduji", + "request": "Požadavek", "pending": "Čekající", "block": "Blokovat", "block_user": "Blokovat %s", "block_domain": "Blokovat %s", "unblock": "Odblokovat", "unblock_user": "Odblokovat %s", - "blocked": "Blocked", + "blocked": "Blokovaný", "mute": "Skrýt", "mute_user": "Skrýt %s", "unmute": "Odkrýt", @@ -185,7 +191,7 @@ "hide_reblogs": "Hide Reblogs" }, "timeline": { - "filtered": "Filtered", + "filtered": "Filtrováno", "timestamp": { "now": "Nyní" }, @@ -196,26 +202,26 @@ }, "header": { "no_status_found": "Nebyl nalezen žádný příspěvek", - "blocking_warning": "You can’t view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.", - "user_blocking_warning": "You can’t view %s’s profile\nuntil you unblock them.\nYour profile looks like this to them.", - "blocked_warning": "You can’t view this user’s profile\nuntil they unblock you.", - "user_blocked_warning": "You can’t view %s’s profile\nuntil they unblock you.", - "suspended_warning": "This user has been suspended.", - "user_suspended_warning": "%s’s account has been suspended." + "blocking_warning": "Nemůžete zobrazit profil tohoto uživatele, dokud ho neodblokujete.\nVáš profil pro něj vypadá takto.", + "user_blocking_warning": "Nemůžete zobrazit profil %s, dokud ho neodblokujete.\nVáš profil pro něj vypadá takto.", + "blocked_warning": "Nemůžeš zobrazit profil tohoto uživatele, dokud tě neodblokují.", + "user_blocked_warning": "Nemůžete zobrazit profil %s, dokud vás neodblokuje.", + "suspended_warning": "Tento uživatel byl pozastaven.", + "user_suspended_warning": "Účet %s byl pozastaven." } } } }, "scene": { "welcome": { - "slogan": "Social networking\nback in your hands.", + "slogan": "Sociální sítě opět ve vašich rukou.", "get_started": "Začínáme", "log_in": "Přihlásit se" }, "server_picker": { "title": "Mastodon tvoří uživatelé z různých serverů.", - "subtitle": "Pick a server based on your interests, region, or a general purpose one.", - "subtitle_extend": "Pick a server based on your interests, region, or a general purpose one. Each server is operated by an entirely independent organization or individual.", + "subtitle": "Vyberte server založený na vašich zájmech, regionu nebo obecném účelu.", + "subtitle_extend": "Vyberte server založený na vašich zájmech, regionu nebo obecném účelu. Každý server je provozován zcela nezávislou organizací nebo jednotlivcem.", "button": { "category": { "all": "Vše", @@ -224,7 +230,7 @@ "activism": "aktivismus", "food": "jídlo", "furry": "furry", - "games": "games", + "games": "hry", "general": "obecné", "journalism": "žurnalistika", "lgbt": "lgbt", @@ -252,8 +258,8 @@ } }, "register": { - "title": "Let’s get you set up on %s", - "lets_get_you_set_up_on_domain": "Let’s get you set up on %s", + "title": "Pojďme si nastavit %s", + "lets_get_you_set_up_on_domain": "Pojďme si nastavit %s", "input": { "avatar": { "delete": "Smazat" @@ -292,51 +298,51 @@ "reason": "Důvod" }, "reason": { - "blocked": "%s contains a disallowed email provider", - "unreachable": "%s does not seem to exist", + "blocked": "%s používá zakázanou e-mailovou službu", + "unreachable": "%s pravděpodobně neexistuje", "taken": "%s se již používá", "reserved": "%s je rezervované klíčové slovo", "accepted": "%s musí být přijato", "blank": "%s je vyžadováno", - "invalid": "%s is invalid", - "too_long": "%s is too long", - "too_short": "%s is too short", - "inclusion": "%s is not a supported value" + "invalid": "%s je neplatné", + "too_long": "%s je příliš dlouhé", + "too_short": "%s je příliš krátké", + "inclusion": "%s není podporovaná hodnota" }, "special": { - "username_invalid": "Username must only contain alphanumeric characters and underscores", - "username_too_long": "Username is too long (can’t be longer than 30 characters)", + "username_invalid": "Uživatelské jméno musí obsahovat pouze alfanumerické znaky a podtržítka", + "username_too_long": "Uživatelské jméno je příliš dlouhé (nemůže být delší než 30 znaků)", "email_invalid": "Toto není platná e-mailová adresa", - "password_too_short": "Password is too short (must be at least 8 characters)" + "password_too_short": "Heslo je příliš krátké (musí mít alespoň 8 znaků)" } } }, "server_rules": { - "title": "Some ground rules.", - "subtitle": "These are set and enforced by the %s moderators.", - "prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.", - "terms_of_service": "terms of service", - "privacy_policy": "privacy policy", + "title": "Některá základní pravidla.", + "subtitle": "Ty nastavují a prosazují moderátoři %s.", + "prompt": "Pokračováním budete podléhat podmínkám služby a zásad ochrany osobních údajů pro uživatele %s.", + "terms_of_service": "podmínky služby", + "privacy_policy": "zásady ochrany osobních údajů", "button": { - "confirm": "I Agree" + "confirm": "Souhlasím" } }, "confirm_email": { - "title": "One last thing.", - "subtitle": "Tap the link we emailed to you to verify your account.", - "tap_the_link_we_emailed_to_you_to_verify_your_account": "Tap the link we emailed to you to verify your account", + "title": "Ještě jedna věc.", + "subtitle": "Klepněte na odkaz, který jsme vám poslali e-mailem, abyste ověřili Váš účet.", + "tap_the_link_we_emailed_to_you_to_verify_your_account": "Klepněte na odkaz, který jsme vám poslali e-mailem, abyste ověřili Váš účet", "button": { - "open_email_app": "Open Email App", - "resend": "Resend" + "open_email_app": "Otevřít e-mailovou aplikaci", + "resend": "Poslat znovu" }, "dont_receive_email": { - "title": "Check your email", - "description": "Check if your email address is correct as well as your junk folder if you haven’t.", - "resend_email": "Resend Email" + "title": "Zkontrolujte svůj e-mail", + "description": "Zkontrolujte, zda je vaše e-mailová adresa správná, stejně jako složka nevyžádané pošty, pokud ji máte.", + "resend_email": "Znovu odeslat e-mail" }, "open_email_app": { - "title": "Check your inbox.", - "description": "We just sent you an email. Check your junk folder if you haven’t.", + "title": "Zkontrolujte doručenou poštu.", + "description": "Právě jsme vám poslali e-mail. Zkontrolujte složku nevyžádané zprávy, pokud ji máte.", "mail": "Pošta", "open_email_client": "Otevřít e-mailového klienta" } @@ -349,37 +355,41 @@ "published": "Publikováno!", "Publishing": "Publikování příspěvku...", "accessibility": { - "logo_label": "Logo Button", - "logo_hint": "Tap to scroll to top and tap again to previous location" + "logo_label": "Tlačítko s logem", + "logo_hint": "Klepnutím přejdete nahoru a znovu klepněte na předchozí místo" } } }, "suggestion_account": { - "title": "Find People to Follow", - "follow_explain": "When you follow someone, you’ll see their posts in your home feed." + "title": "Najít lidi pro sledování", + "follow_explain": "Když někoho sledujete, uvidíte jejich příspěvky ve vašem domovském kanálu." }, "compose": { "title": { "new_post": "Nový příspěvek", - "new_reply": "New Reply" + "new_reply": "Nová odpověď" }, "media_selection": { - "camera": "Take Photo", - "photo_library": "Photo Library", - "browse": "Browse" + "camera": "Vyfotit", + "photo_library": "Knihovna fotografií", + "browse": "Procházet" }, - "content_input_placeholder": "Type or paste what’s on your mind", - "compose_action": "Publish", - "replying_to_user": "replying to %s", + "content_input_placeholder": "Napište nebo vložte, co je na mysli", + "compose_action": "Zveřejnit", + "replying_to_user": "odpovídá na %s", "attachment": { - "photo": "photo", + "photo": "fotka", "video": "video", - "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", - "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "attachment_broken": "Tento %s je poškozený a nemůže být\nnahrán do Mastodonu.", + "description_photo": "Popište fotografii pro zrakově postižené osoby...", + "description_video": "Popište video pro zrakově postižené...", + "load_failed": "Načtení se nezdařilo", + "upload_failed": "Nahrání selhalo", + "can_not_recognize_this_media_attachment": "Nelze rozpoznat toto medium přílohy", + "attachment_too_large": "Příloha je příliš velká" }, "poll": { - "duration_time": "Duration: %s", + "duration_time": "Doba trvání: %s", "thirty_minutes": "30 minut", "one_hour": "1 hodina", "six_hours": "6 hodin", @@ -389,7 +399,7 @@ "option_number": "Možnost %ld" }, "content_warning": { - "placeholder": "Write an accurate warning here..." + "placeholder": "Zde napište přesné varování..." }, "visibility": { "public": "Veřejný", @@ -398,7 +408,7 @@ "direct": "Pouze lidé, které zmíním" }, "auto_complete": { - "space_to_add": "Space to add" + "space_to_add": "Mezera k přidání" }, "accessibility": { "append_attachment": "Přidat přílohu", @@ -413,7 +423,7 @@ "discard_post": "Zahodit příspěvek", "publish_post": "Publikovat příspěvek", "toggle_poll": "Přepnout anketu", - "toggle_content_warning": "Toggle Content Warning", + "toggle_content_warning": "Přepnout varování obsahu", "append_attachment_entry": "Přidat přílohu - %s", "select_visibility_entry": "Vyberte viditelnost - %s" } @@ -424,13 +434,13 @@ }, "dashboard": { "posts": "příspěvky", - "following": "following", + "following": "sledování", "followers": "sledující" }, "fields": { "add_row": "Přidat řádek", "placeholder": { - "label": "Label", + "label": "Označení", "content": "Obsah" } }, @@ -439,7 +449,7 @@ "replies": "Odpovědí", "posts_and_replies": "Příspěvky a odpovědi", "media": "Média", - "about": "About" + "about": "O uživateli" }, "relationship_action_alert": { "confirm_mute_user": { @@ -448,7 +458,7 @@ }, "confirm_unmute_user": { "title": "Zrušit skrytí účtu", - "message": "Confirm to unmute %s" + "message": "Potvrďte zrušení ztlumení %s" }, "confirm_block_user": { "title": "Blokovat účet", @@ -456,7 +466,7 @@ }, "confirm_unblock_user": { "title": "Odblokovat účet", - "message": "Confirm to unblock %s" + "message": "Potvrďte odblokování %s" }, "confirm_show_reblogs": { "title": "Show Reblogs", @@ -468,235 +478,235 @@ } }, "accessibility": { - "show_avatar_image": "Show avatar image", - "edit_avatar_image": "Edit avatar image", - "show_banner_image": "Show banner image", - "double_tap_to_open_the_list": "Double tap to open the list" + "show_avatar_image": "Zobrazit obrázek avataru", + "edit_avatar_image": "Upravit obrázek avataru", + "show_banner_image": "Zobrazit obrázek banneru", + "double_tap_to_open_the_list": "Dvojitým poklepáním otevřete seznam" } }, "follower": { - "title": "follower", - "footer": "Followers from other servers are not displayed." + "title": "sledující", + "footer": "Sledující z jiných serverů nejsou zobrazeni." }, "following": { - "title": "following", - "footer": "Follows from other servers are not displayed." + "title": "sledování", + "footer": "Sledování z jiných serverů není zobrazeno." }, "familiarFollowers": { - "title": "Followers you familiar", - "followed_by_names": "Followed by %s" + "title": "Sledující, které znáte", + "followed_by_names": "Sledován od %s" }, "favorited_by": { - "title": "Favorited By" + "title": "Oblíben" }, "reblogged_by": { "title": "Reblogged By" }, "search": { - "title": "Search", + "title": "Hledat", "search_bar": { - "placeholder": "Search hashtags and users", - "cancel": "Cancel" + "placeholder": "Hledat hashtagy a uživatele", + "cancel": "Zrušit" }, "recommend": { - "button_text": "See All", + "button_text": "Zobrazit vše", "hash_tag": { - "title": "Trending on Mastodon", - "description": "Hashtags that are getting quite a bit of attention", - "people_talking": "%s people are talking" + "title": "Populární na Mastodonu", + "description": "Hashtagy, kterým se dostává dosti pozornosti", + "people_talking": "%s lidí mluví" }, "accounts": { - "title": "Accounts you might like", - "description": "You may like to follow these accounts", - "follow": "Follow" + "title": "Účty, které by se vám mohly líbit", + "description": "Možná budete chtít sledovat tyto účty", + "follow": "Sledovat" } }, "searching": { "segment": { - "all": "All", - "people": "People", - "hashtags": "Hashtags", - "posts": "Posts" + "all": "Vše", + "people": "Lidé", + "hashtags": "Hashtagy", + "posts": "Příspěvky" }, "empty_state": { - "no_results": "No results" + "no_results": "Žádné výsledky" }, - "recent_search": "Recent searches", - "clear": "Clear" + "recent_search": "Nedávná hledání", + "clear": "Vymazat" } }, "discovery": { "tabs": { - "posts": "Posts", - "hashtags": "Hashtags", - "news": "News", - "community": "Community", - "for_you": "For You" + "posts": "Příspěvky", + "hashtags": "Hashtagy", + "news": "Zprávy", + "community": "Komunita", + "for_you": "Pro vás" }, - "intro": "These are the posts gaining traction in your corner of Mastodon." + "intro": "Toto jsou příspěvky, které získávají pozornost ve vašem koutu Mastodonu." }, "favorite": { - "title": "Your Favorites" + "title": "Vaše oblíbené" }, "notification": { "title": { - "Everything": "Everything", - "Mentions": "Mentions" + "Everything": "Všechno", + "Mentions": "Zmínky" }, "notification_description": { - "followed_you": "followed you", - "favorited_your_post": "favorited your post", - "reblogged_your_post": "reblogged your post", - "mentioned_you": "mentioned you", - "request_to_follow_you": "request to follow you", - "poll_has_ended": "poll has ended" + "followed_you": "vás sleduje", + "favorited_your_post": "si oblíbil váš příspěvek", + "reblogged_your_post": "boostnul váš příspěvek", + "mentioned_you": "vás zmínil/a", + "request_to_follow_you": "požádat vás o sledování", + "poll_has_ended": "anketa skončila" }, "keyobard": { - "show_everything": "Show Everything", - "show_mentions": "Show Mentions" + "show_everything": "Zobrazit vše", + "show_mentions": "Zobrazit zmínky" }, "follow_request": { - "accept": "Accept", - "accepted": "Accepted", - "reject": "reject", - "rejected": "Rejected" + "accept": "Přijmout", + "accepted": "Přijato", + "reject": "odmítnout", + "rejected": "Zamítnuto" } }, "thread": { - "back_title": "Post", - "title": "Post from %s" + "back_title": "Příspěvek", + "title": "Příspěvek od %s" }, "settings": { - "title": "Settings", + "title": "Nastavení", "section": { "appearance": { - "title": "Appearance", - "automatic": "Automatic", - "light": "Always Light", - "dark": "Always Dark" + "title": "Vzhled", + "automatic": "Automaticky", + "light": "Vždy světlý", + "dark": "Vždy tmavý" }, "look_and_feel": { - "title": "Look and Feel", - "use_system": "Use System", - "really_dark": "Really Dark", + "title": "Vzhled a chování", + "use_system": "Použít systém", + "really_dark": "Skutečně tmavý", "sorta_dark": "Sorta Dark", - "light": "Light" + "light": "Světlý" }, "notifications": { - "title": "Notifications", - "favorites": "Favorites my post", - "follows": "Follows me", - "boosts": "Reblogs my post", - "mentions": "Mentions me", + "title": "Upozornění", + "favorites": "Oblíbil si můj příspěvek", + "follows": "Sleduje mě", + "boosts": "Boostnul můj příspěvek", + "mentions": "Zmiňuje mě", "trigger": { - "anyone": "anyone", - "follower": "a follower", - "follow": "anyone I follow", - "noone": "no one", - "title": "Notify me when" + "anyone": "kdokoliv", + "follower": "sledující", + "follow": "kdokoli, koho sleduji", + "noone": "nikdo", + "title": "Upozornit, když" } }, "preference": { - "title": "Preferences", - "true_black_dark_mode": "True black dark mode", - "disable_avatar_animation": "Disable animated avatars", - "disable_emoji_animation": "Disable animated emojis", - "using_default_browser": "Use default browser to open links", - "open_links_in_mastodon": "Open links in Mastodon" + "title": "Předvolby", + "true_black_dark_mode": "Skutečný černý tmavý režim", + "disable_avatar_animation": "Zakázat animované avatary", + "disable_emoji_animation": "Zakázat animované emoji", + "using_default_browser": "Použít výchozí prohlížeč pro otevírání odkazů", + "open_links_in_mastodon": "Otevřít odkazy v Mastodonu" }, "boring_zone": { - "title": "The Boring Zone", - "account_settings": "Account Settings", - "terms": "Terms of Service", - "privacy": "Privacy Policy" + "title": "Nudná část", + "account_settings": "Nastavení účtu", + "terms": "Podmínky služby", + "privacy": "Zásady ochrany osobních údajů" }, "spicy_zone": { - "title": "The Spicy Zone", - "clear": "Clear Media Cache", - "signout": "Sign Out" + "title": "Ostrá část", + "clear": "Vymazat mezipaměť médií", + "signout": "Odhlásit se" } }, "footer": { - "mastodon_description": "Mastodon is open source software. You can report issues on GitHub at %s (%s)" + "mastodon_description": "Mastodon je open source software. Na GitHub můžete nahlásit problémy na %s (%s)" }, "keyboard": { - "close_settings_window": "Close Settings Window" + "close_settings_window": "Zavřít okno nastavení" } }, "report": { - "title_report": "Report", - "title": "Report %s", - "step1": "Step 1 of 2", - "step2": "Step 2 of 2", - "content1": "Are there any other posts you’d like to add to the report?", - "content2": "Is there anything the moderators should know about this report?", - "report_sent_title": "Thanks for reporting, we’ll look into this.", - "send": "Send Report", - "skip_to_send": "Send without comment", - "text_placeholder": "Type or paste additional comments", - "reported": "REPORTED", + "title_report": "Nahlásit", + "title": "Nahlásit %s", + "step1": "Krok 1 ze 2", + "step2": "Krok 2 ze 2", + "content1": "Existují nějaké další příspěvky, které byste chtěli přidat do zprávy?", + "content2": "Je o tomto hlášení něco, co by měli vědět moderátoři?", + "report_sent_title": "Děkujeme za nahlášení, podíváme se na to.", + "send": "Odeslat hlášení", + "skip_to_send": "Odeslat bez komentáře", + "text_placeholder": "Napište nebo vložte další komentáře", + "reported": "NAHLÁŠEN", "step_one": { - "step_1_of_4": "Step 1 of 4", - "whats_wrong_with_this_post": "What's wrong with this post?", - "whats_wrong_with_this_account": "What's wrong with this account?", - "whats_wrong_with_this_username": "What's wrong with %s?", - "select_the_best_match": "Select the best match", - "i_dont_like_it": "I don’t like it", - "it_is_not_something_you_want_to_see": "It is not something you want to see", - "its_spam": "It’s spam", - "malicious_links_fake_engagement_or_repetetive_replies": "Malicious links, fake engagement, or repetetive replies", - "it_violates_server_rules": "It violates server rules", - "you_are_aware_that_it_breaks_specific_rules": "You are aware that it breaks specific rules", - "its_something_else": "It’s something else", - "the_issue_does_not_fit_into_other_categories": "The issue does not fit into other categories" + "step_1_of_4": "Krok 1 ze 4", + "whats_wrong_with_this_post": "Co je na tomto příspěvku špatně?", + "whats_wrong_with_this_account": "Co je špatně s tímto účtem?", + "whats_wrong_with_this_username": "Co je špatně na %s?", + "select_the_best_match": "Vyberte nejbližší možnost", + "i_dont_like_it": "Nelíbí se mi", + "it_is_not_something_you_want_to_see": "Není to něco, co chcete vidět", + "its_spam": "Je to spam", + "malicious_links_fake_engagement_or_repetetive_replies": "Škodlivé odkazy, falešné zapojení nebo opakující se odpovědi", + "it_violates_server_rules": "Porušuje pravidla serveru", + "you_are_aware_that_it_breaks_specific_rules": "Máte za to, že porušuje konkrétní pravidla", + "its_something_else": "Jde o něco jiného", + "the_issue_does_not_fit_into_other_categories": "Problém neodpovídá ostatním kategoriím" }, "step_two": { - "step_2_of_4": "Step 2 of 4", - "which_rules_are_being_violated": "Which rules are being violated?", - "select_all_that_apply": "Select all that apply", - "i_just_don’t_like_it": "I just don’t like it" + "step_2_of_4": "Krok 2 ze 4", + "which_rules_are_being_violated": "Jaká pravidla jsou porušována?", + "select_all_that_apply": "Vyberte všechna relevantní", + "i_just_don’t_like_it": "Jen se mi to nelíbí" }, "step_three": { - "step_3_of_4": "Step 3 of 4", - "are_there_any_posts_that_back_up_this_report": "Are there any posts that back up this report?", - "select_all_that_apply": "Select all that apply" + "step_3_of_4": "Krok 3 ze 4", + "are_there_any_posts_that_back_up_this_report": "Existují příspěvky dokládající toto hlášení?", + "select_all_that_apply": "Vyberte všechna relevantní" }, "step_four": { - "step_4_of_4": "Step 4 of 4", - "is_there_anything_else_we_should_know": "Is there anything else we should know?" + "step_4_of_4": "Krok 4 ze 4", + "is_there_anything_else_we_should_know": "Je ještě něco jiného, co bychom měli vědět?" }, "step_final": { - "dont_want_to_see_this": "Don’t want to see this?", - "when_you_see_something_you_dont_like_on_mastodon_you_can_remove_the_person_from_your_experience.": "When you see something you don’t like on Mastodon, you can remove the person from your experience.", - "unfollow": "Unfollow", - "unfollowed": "Unfollowed", - "unfollow_user": "Unfollow %s", - "mute_user": "Mute %s", - "you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "You won’t see their posts or reblogs in your home feed. They won’t know they’ve been muted.", - "block_user": "Block %s", - "they_will_no_longer_be_able_to_follow_or_see_your_posts_but_they_can_see_if_theyve_been_blocked": "They will no longer be able to follow or see your posts, but they can see if they’ve been blocked.", - "while_we_review_this_you_can_take_action_against_user": "While we review this, you can take action against %s" + "dont_want_to_see_this": "Nechcete to vidět?", + "when_you_see_something_you_dont_like_on_mastodon_you_can_remove_the_person_from_your_experience.": "Když uvidíte něco, co se vám nelíbí na Mastodonu, můžete odstranit tuto osobu ze svého zážitku.", + "unfollow": "Přestat sledovat", + "unfollowed": "Už nesledujete", + "unfollow_user": "Přestat sledovat %s", + "mute_user": "Skrýt %s", + "you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "Neuvidíte jejich příspěvky nebo boostnutí v domovském kanálu. Nebudou vědět, že jsou skrytí.", + "block_user": "Blokovat %s", + "they_will_no_longer_be_able_to_follow_or_see_your_posts_but_they_can_see_if_theyve_been_blocked": "Už nebudou moci sledovat nebo vidět vaše příspěvky, ale mohou vidět, zda byly zablokovány.", + "while_we_review_this_you_can_take_action_against_user": "Zatímco to posuzujeme, můžete podniknout kroky proti %s" } }, "preview": { "keyboard": { - "close_preview": "Close Preview", - "show_next": "Show Next", - "show_previous": "Show Previous" + "close_preview": "Zavřít náhled", + "show_next": "Zobrazit další", + "show_previous": "Zobrazit předchozí" } }, "account_list": { - "tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher", - "dismiss_account_switcher": "Dismiss Account Switcher", - "add_account": "Add Account" + "tab_bar_hint": "Aktuální vybraný profil: %s. Dvojitým poklepáním zobrazíte přepínač účtů", + "dismiss_account_switcher": "Zrušit přepínač účtů", + "add_account": "Přidat účet" }, "wizard": { - "new_in_mastodon": "New in Mastodon", - "multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.", - "accessibility_hint": "Double tap to dismiss this wizard" + "new_in_mastodon": "Nový v Mastodonu", + "multiple_account_switch_intro_description": "Přepínání mezi více účty podržením tlačítka profilu.", + "accessibility_hint": "Dvojitým poklepáním tohoto průvodce odmítnete" }, "bookmark": { - "title": "Bookmarks" + "title": "Záložky" } } } diff --git a/Localization/StringsConvertor/input/cs.lproj/ios-infoPlist.json b/Localization/StringsConvertor/input/cs.lproj/ios-infoPlist.json index c6db73de0..88bbb346a 100644 --- a/Localization/StringsConvertor/input/cs.lproj/ios-infoPlist.json +++ b/Localization/StringsConvertor/input/cs.lproj/ios-infoPlist.json @@ -1,6 +1,6 @@ { - "NSCameraUsageDescription": "Used to take photo for post status", - "NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library", - "NewPostShortcutItemTitle": "New Post", - "SearchShortcutItemTitle": "Search" + "NSCameraUsageDescription": "Slouží k pořízení fotografie pro příspěvek", + "NSPhotoLibraryAddUsageDescription": "Slouží k uložení fotografie do knihovny fotografií", + "NewPostShortcutItemTitle": "Nový příspěvek", + "SearchShortcutItemTitle": "Hledat" } diff --git a/Localization/StringsConvertor/input/cy.lproj/app.json b/Localization/StringsConvertor/input/cy.lproj/app.json index bc7f75d96..f36fe7d16 100644 --- a/Localization/StringsConvertor/input/cy.lproj/app.json +++ b/Localization/StringsConvertor/input/cy.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vote", "closed": "Closed" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Reply", "reblog": "Hybwch", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/da.lproj/app.json b/Localization/StringsConvertor/input/da.lproj/app.json index 80b0882d9..a6a971860 100644 --- a/Localization/StringsConvertor/input/da.lproj/app.json +++ b/Localization/StringsConvertor/input/da.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vote", "closed": "Closed" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Reply", "reblog": "Reblog", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/de.lproj/Localizable.stringsdict b/Localization/StringsConvertor/input/de.lproj/Localizable.stringsdict index c6a8a4297..f60c6b0d7 100644 --- a/Localization/StringsConvertor/input/de.lproj/Localizable.stringsdict +++ b/Localization/StringsConvertor/input/de.lproj/Localizable.stringsdict @@ -248,9 +248,9 @@ NSStringFormatValueTypeKey ld one - 1 Follower + 1 Folgender other - %ld Follower + %ld Folgende date.year.left diff --git a/Localization/StringsConvertor/input/de.lproj/app.json b/Localization/StringsConvertor/input/de.lproj/app.json index 355bfcc1b..481f07a4a 100644 --- a/Localization/StringsConvertor/input/de.lproj/app.json +++ b/Localization/StringsConvertor/input/de.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Abstimmen", "closed": "Beendet" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Antworten", "reblog": "Teilen", @@ -376,7 +382,11 @@ "video": "Video", "attachment_broken": "Dieses %s scheint defekt zu sein und\nkann nicht auf Mastodon hochgeladen werden.", "description_photo": "Für Menschen mit Sehbehinderung beschreiben...", - "description_video": "Für Menschen mit Sehbehinderung beschreiben..." + "description_video": "Für Menschen mit Sehbehinderung beschreiben...", + "load_failed": "Laden fehlgeschlagen", + "upload_failed": "Upload fehlgeschlagen", + "can_not_recognize_this_media_attachment": "Medienanhang wurde nicht erkannt", + "attachment_too_large": "Anhang zu groß" }, "poll": { "duration_time": "Dauer: %s", @@ -425,7 +435,7 @@ "dashboard": { "posts": "Beiträge", "following": "Gefolgte", - "followers": "Folger" + "followers": "Folgende" }, "fields": { "add_row": "Zeile hinzufügen", @@ -460,7 +470,7 @@ }, "confirm_show_reblogs": { "title": "Reblogs anzeigen", - "message": "Confirm to show reblogs" + "message": "Bestätigen um Reblogs anzuzeigen" }, "confirm_hide_reblogs": { "title": "Reblogs ausblenden", @@ -476,11 +486,11 @@ }, "follower": { "title": "Follower", - "footer": "Follower von anderen Servern werden nicht angezeigt." + "footer": "Folger, die nicht auf deinem Server registriert sind, werden nicht angezeigt." }, "following": { "title": "Folgende", - "footer": "Wem das Konto folgt wird von anderen Servern werden nicht angezeigt." + "footer": "Gefolgte, die nicht auf deinem Server registriert sind, werden nicht angezeigt." }, "familiarFollowers": { "title": "Follower, die dir bekannt vorkommen", @@ -590,7 +600,7 @@ "mentions": "Mich erwähnt", "trigger": { "anyone": "jeder", - "follower": "ein Folger", + "follower": "ein Folgender", "follow": "ein von mir Gefolgter", "noone": "niemand", "title": "Benachrichtige mich, wenn" @@ -696,7 +706,7 @@ "accessibility_hint": "Doppeltippen, um diesen Assistenten zu schließen" }, "bookmark": { - "title": "Bookmarks" + "title": "Lesezeichen" } } } diff --git a/Localization/StringsConvertor/input/de.lproj/ios-infoPlist.json b/Localization/StringsConvertor/input/de.lproj/ios-infoPlist.json index fe8fe1c1a..a571fba1c 100644 --- a/Localization/StringsConvertor/input/de.lproj/ios-infoPlist.json +++ b/Localization/StringsConvertor/input/de.lproj/ios-infoPlist.json @@ -1,6 +1,6 @@ { - "NSCameraUsageDescription": "Verwendet um Fotos für neue Beiträge aufzunehmen", - "NSPhotoLibraryAddUsageDescription": "Verwendet um Fotos zu speichern", + "NSCameraUsageDescription": "Wird verwendet, um Fotos für neue Beiträge aufzunehmen", + "NSPhotoLibraryAddUsageDescription": "Wird verwendet, um Foto in der Foto-Mediathek zu speichern", "NewPostShortcutItemTitle": "Neuer Beitrag", - "SearchShortcutItemTitle": "Suche" + "SearchShortcutItemTitle": "Suchen" } diff --git a/Localization/StringsConvertor/input/en-US.lproj/app.json b/Localization/StringsConvertor/input/en-US.lproj/app.json index 80b0882d9..a6a971860 100644 --- a/Localization/StringsConvertor/input/en-US.lproj/app.json +++ b/Localization/StringsConvertor/input/en-US.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vote", "closed": "Closed" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Reply", "reblog": "Reblog", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/en.lproj/app.json b/Localization/StringsConvertor/input/en.lproj/app.json index 2d23d5b91..25f06ad83 100644 --- a/Localization/StringsConvertor/input/en.lproj/app.json +++ b/Localization/StringsConvertor/input/en.lproj/app.json @@ -138,7 +138,7 @@ }, "meta_entity": { "url": "Link: %s", - "hashtag": "Hastag %s", + "hashtag": "Hashtag: %s", "mention": "Show Profile: %s", "email": "Email address: %s" }, @@ -382,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/es-AR.lproj/app.json b/Localization/StringsConvertor/input/es-AR.lproj/app.json index 62d439a3c..309cf4d34 100644 --- a/Localization/StringsConvertor/input/es-AR.lproj/app.json +++ b/Localization/StringsConvertor/input/es-AR.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Votar", "closed": "Cerrada" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Responder", "reblog": "Adherir", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "Este archivo de %s está roto\ny no se puede subir a Mastodon.", "description_photo": "Describí la imagen para personas con dificultades visuales…", - "description_video": "Describí el video para personas con dificultades visuales…" + "description_video": "Describí el video para personas con dificultades visuales…", + "load_failed": "Falló la descarga", + "upload_failed": "Falló la subida", + "can_not_recognize_this_media_attachment": "No se pudo reconocer este archivo adjunto", + "attachment_too_large": "Adjunto demasiado grande" }, "poll": { "duration_time": "Duración: %s", diff --git a/Localization/StringsConvertor/input/es.lproj/app.json b/Localization/StringsConvertor/input/es.lproj/app.json index 39e0f37d1..7eaff340d 100644 --- a/Localization/StringsConvertor/input/es.lproj/app.json +++ b/Localization/StringsConvertor/input/es.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vota", "closed": "Cerrado" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Responder", "reblog": "Rebloguear", @@ -376,7 +382,11 @@ "video": "vídeo", "attachment_broken": "Este %s está roto y no puede\nsubirse a Mastodon.", "description_photo": "Describe la foto para los usuarios con dificultad visual...", - "description_video": "Describe el vídeo para los usuarios con dificultad visual..." + "description_video": "Describe el vídeo para los usuarios con dificultad visual...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duración: %s", diff --git a/Localization/StringsConvertor/input/eu.lproj/app.json b/Localization/StringsConvertor/input/eu.lproj/app.json index 5c2e16601..3f58f522c 100644 --- a/Localization/StringsConvertor/input/eu.lproj/app.json +++ b/Localization/StringsConvertor/input/eu.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Bozkatu", "closed": "Itxita" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Erantzun", "reblog": "Bultzada", @@ -376,7 +382,11 @@ "video": "bideoa", "attachment_broken": "%s hondatuta dago eta ezin da\nMastodonera igo.", "description_photo": "Deskribatu argazkia ikusmen arazoak dituztenentzat...", - "description_video": "Deskribatu bideoa ikusmen arazoak dituztenentzat..." + "description_video": "Deskribatu bideoa ikusmen arazoak dituztenentzat...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Iraupena: %s", diff --git a/Localization/StringsConvertor/input/fi.lproj/app.json b/Localization/StringsConvertor/input/fi.lproj/app.json index d6210c4d5..a42642786 100644 --- a/Localization/StringsConvertor/input/fi.lproj/app.json +++ b/Localization/StringsConvertor/input/fi.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vote", "closed": "Suljettu" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Vastaa", "reblog": "Jaa edelleen", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Kuvaile kuva näkövammaisille...", - "description_video": "Kuvaile video näkövammaisille..." + "description_video": "Kuvaile video näkövammaisille...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Kesto: %s", diff --git a/Localization/StringsConvertor/input/fr.lproj/app.json b/Localization/StringsConvertor/input/fr.lproj/app.json index ed53d1096..25bb6e511 100644 --- a/Localization/StringsConvertor/input/fr.lproj/app.json +++ b/Localization/StringsConvertor/input/fr.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Voter", "closed": "Fermé" }, + "meta_entity": { + "url": "Lien : %s", + "hashtag": "Hashtag : %s", + "mention": "Afficher le profile : %s", + "email": "Adresse e-mail : %s" + }, "actions": { "reply": "Répondre", "reblog": "Rebloguer", @@ -376,7 +382,11 @@ "video": "vidéo", "attachment_broken": "Ce %s est brisé et ne peut pas être\ntéléversé sur Mastodon.", "description_photo": "Décrire cette photo pour les personnes malvoyantes...", - "description_video": "Décrire cette vidéo pour les personnes malvoyantes..." + "description_video": "Décrire cette vidéo pour les personnes malvoyantes...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Durée: %s", @@ -696,7 +706,7 @@ "accessibility_hint": "Tapotez deux fois pour fermer cet assistant" }, "bookmark": { - "title": "Bookmarks" + "title": "Favoris" } } } diff --git a/Localization/StringsConvertor/input/gd.lproj/app.json b/Localization/StringsConvertor/input/gd.lproj/app.json index a2062a89b..c1d17f813 100644 --- a/Localization/StringsConvertor/input/gd.lproj/app.json +++ b/Localization/StringsConvertor/input/gd.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Cuir bhòt", "closed": "Dùinte" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Freagair", "reblog": "Brosnaich", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "Seo %s a tha briste is cha ghabh\na luchdadh suas gu Mastodon.", "description_photo": "Mìnich an dealbh dhan fheadhainn air a bheil cion-lèirsinne…", - "description_video": "Mìnich a’ video dhan fheadhainn air a bheil cion-lèirsinne…" + "description_video": "Mìnich a’ video dhan fheadhainn air a bheil cion-lèirsinne…", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Faide: %s", diff --git a/Localization/StringsConvertor/input/gl.lproj/app.json b/Localization/StringsConvertor/input/gl.lproj/app.json index 513573f79..3c394be95 100644 --- a/Localization/StringsConvertor/input/gl.lproj/app.json +++ b/Localization/StringsConvertor/input/gl.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Votar", "closed": "Pechada" }, + "meta_entity": { + "url": "Ligazón: %s", + "hashtag": "Cancelo: %s", + "mention": "Mostrar Perfil: %s", + "email": "Enderezo de email: %s" + }, "actions": { "reply": "Responder", "reblog": "Promover", @@ -181,8 +187,8 @@ "unmute_user": "Deixar de acalar a @%s", "muted": "Acalada", "edit_info": "Editar info", - "show_reblogs": "Show Reblogs", - "hide_reblogs": "Hide Reblogs" + "show_reblogs": "Mostrar Promocións", + "hide_reblogs": "Agochar Promocións" }, "timeline": { "filtered": "Filtrado", @@ -376,7 +382,11 @@ "video": "vídeo", "attachment_broken": "Este %s está estragado e non pode\nser subido a Mastodon.", "description_photo": "Describe a foto para persoas con problemas visuais...", - "description_video": "Describe o vídeo para persoas con problemas visuais..." + "description_video": "Describe o vídeo para persoas con problemas visuais...", + "load_failed": "Fallou a carga", + "upload_failed": "Erro na subida", + "can_not_recognize_this_media_attachment": "Non se recoñece o tipo de multimedia", + "attachment_too_large": "Adxunto demasiado grande" }, "poll": { "duration_time": "Duración: %s", @@ -459,12 +469,12 @@ "message": "Confirma o desbloqueo de %s" }, "confirm_show_reblogs": { - "title": "Show Reblogs", - "message": "Confirm to show reblogs" + "title": "Mostrar Promocións", + "message": "Confirma para ver promocións" }, "confirm_hide_reblogs": { - "title": "Hide Reblogs", - "message": "Confirm to hide reblogs" + "title": "Agochar Promocións", + "message": "Confirma para agochar promocións" } }, "accessibility": { @@ -696,7 +706,7 @@ "accessibility_hint": "Dobre toque para desbotar este asistente" }, "bookmark": { - "title": "Bookmarks" + "title": "Marcadores" } } } diff --git a/Localization/StringsConvertor/input/hi.lproj/app.json b/Localization/StringsConvertor/input/hi.lproj/app.json index d9ef32b3a..f0fedf75f 100644 --- a/Localization/StringsConvertor/input/hi.lproj/app.json +++ b/Localization/StringsConvertor/input/hi.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vote", "closed": "Closed" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Reply", "reblog": "Reblog", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/id.lproj/app.json b/Localization/StringsConvertor/input/id.lproj/app.json index 607e9a638..d942a22ad 100644 --- a/Localization/StringsConvertor/input/id.lproj/app.json +++ b/Localization/StringsConvertor/input/id.lproj/app.json @@ -6,29 +6,29 @@ "please_try_again_later": "Silakan coba lagi nanti." }, "sign_up_failure": { - "title": "Sign Up Failure" + "title": "Gagal Mendaftar" }, "server_error": { "title": "Kesalahan Server" }, "vote_failure": { - "title": "Vote Failure", + "title": "Gagal Voting", "poll_ended": "Japat telah berakhir" }, "discard_post_content": { "title": "Hapus Draf", - "message": "Confirm to discard composed post content." + "message": "Konfirmasi untuk mengabaikan postingan yang dibuat." }, "publish_post_failure": { - "title": "Publish Failure", - "message": "Failed to publish the post.\nPlease check your internet connection.", + "title": "Gagal Mempublikasikan", + "message": "Gagal mempublikasikan postingan.\nMohon periksa koneksi Internet Anda.", "attachments_message": { "video_attach_with_photo": "Tidak dapat melampirkan video di postingan yang sudah mengandung gambar.", "more_than_one_video": "Tidak dapat melampirkan lebih dari satu video." } }, "edit_profile_failure": { - "title": "Edit Profile Error", + "title": "Masalah dalam mengubah profil", "message": "Tidak dapat menyunting profil. Harap coba lagi." }, "sign_out": { @@ -37,16 +37,16 @@ "confirm": "Keluar" }, "block_domain": { - "title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.", + "title": "Apakah Anda benar, benar yakin ingin memblokir keseluruhan %s? Dalam kebanyakan kasus, beberapa pemblokiran atau pembisuan yang ditargetkan sudah cukup dan lebih disukai. Anda tidak akan melihat konten dari domain tersebut dan semua pengikut Anda dari domain itu akan dihapus.", "block_entire_domain": "Blokir Domain" }, "save_photo_failure": { - "title": "Save Photo Failure", - "message": "Please enable the photo library access permission to save the photo." + "title": "Gagal Menyimpan Foto", + "message": "Mohon aktifkan izin akses pustaka foto untuk menyimpan foto." }, "delete_post": { "title": "Apakah Anda yakin ingin menghapus postingan ini?", - "message": "Are you sure you want to delete this post?" + "message": "Apakah Anda yakin untuk menghapus kiriman ini?" }, "clean_cache": { "title": "Bersihkan Cache", @@ -67,11 +67,11 @@ "done": "Selesai", "confirm": "Konfirmasi", "continue": "Lanjut", - "compose": "Compose", + "compose": "Tulis", "cancel": "Batal", - "discard": "Discard", + "discard": "Buang", "try_again": "Coba Lagi", - "take_photo": "Take Photo", + "take_photo": "Ambil Foto", "save_photo": "Simpan Foto", "copy_photo": "Salin Foto", "sign_in": "Masuk", @@ -82,9 +82,9 @@ "share_user": "Bagikan %s", "share_post": "Bagikan Postingan", "open_in_safari": "Buka di Safari", - "open_in_browser": "Open in Browser", + "open_in_browser": "Buka di Peramban", "find_people": "Cari orang untuk diikuti", - "manually_search": "Manually search instead", + "manually_search": "Cari secara manual saja", "skip": "Lewati", "reply": "Balas", "report_user": "Laporkan %s", @@ -111,16 +111,16 @@ "next_status": "Postingan Selanjutnya", "open_status": "Buka Postingan", "open_author_profile": "Buka Profil Penulis", - "open_reblogger_profile": "Open Reblogger's Profile", + "open_reblogger_profile": "Buka Profil Reblogger", "reply_status": "Balas Postingan", - "toggle_reblog": "Toggle Reblog on Post", - "toggle_favorite": "Toggle Favorite on Post", - "toggle_content_warning": "Toggle Content Warning", - "preview_image": "Preview Image" + "toggle_reblog": "Nyalakan Reblog pada Postingan", + "toggle_favorite": "Nyalakan Favorit pada Postingan", + "toggle_content_warning": "Nyalakan Peringatan Konten", + "preview_image": "Pratinjau Gambar" }, "segmented_control": { - "previous_section": "Previous Section", - "next_section": "Next Section" + "previous_section": "Bagian Sebelumnya", + "next_section": "Bagian Selanjutnya" } }, "status": { @@ -136,6 +136,12 @@ "vote": "Vote", "closed": "Ditutup" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Balas", "reblog": "Reblog", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "%s ini rusak dan tidak dapat diunggah ke Mastodon.", "description_photo": "Jelaskan fotonya untuk mereka yang tidak dapat melihat dengan jelas...", - "description_video": "Jelaskan videonya untuk mereka yang tidak dapat melihat dengan jelas..." + "description_video": "Jelaskan videonya untuk mereka yang tidak dapat melihat dengan jelas...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Durasi: %s", diff --git a/Localization/StringsConvertor/input/it.lproj/app.json b/Localization/StringsConvertor/input/it.lproj/app.json index 269d299ec..73f42d1eb 100644 --- a/Localization/StringsConvertor/input/it.lproj/app.json +++ b/Localization/StringsConvertor/input/it.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vota", "closed": "Chiuso" }, + "meta_entity": { + "url": "Collegamento: %s", + "hashtag": "Hashtag: %s", + "mention": "Mostra il profilo: %s", + "email": "Indirizzo email: %s" + }, "actions": { "reply": "Rispondi", "reblog": "Condivisione", @@ -376,7 +382,11 @@ "video": "filmato", "attachment_broken": "Questo %s è rotto e non può essere\ncaricato su Mastodon.", "description_photo": "Descrivi la foto per gli utenti ipovedenti...", - "description_video": "Descrivi il filmato per gli utenti ipovedenti..." + "description_video": "Descrivi il filmato per gli utenti ipovedenti...", + "load_failed": "Caricamento fallito", + "upload_failed": "Caricamento fallito", + "can_not_recognize_this_media_attachment": "Impossibile riconoscere questo allegato multimediale", + "attachment_too_large": "Allegato troppo grande" }, "poll": { "duration_time": "Durata: %s", @@ -696,7 +706,7 @@ "accessibility_hint": "Doppio tocco per eliminare questa procedura guidata" }, "bookmark": { - "title": "Bookmarks" + "title": "Segnalibri" } } } diff --git a/Localization/StringsConvertor/input/ja.lproj/app.json b/Localization/StringsConvertor/input/ja.lproj/app.json index b7615abf3..9ff2a60a6 100644 --- a/Localization/StringsConvertor/input/ja.lproj/app.json +++ b/Localization/StringsConvertor/input/ja.lproj/app.json @@ -136,6 +136,12 @@ "vote": "投票", "closed": "終了" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "返信", "reblog": "ブースト", @@ -376,7 +382,11 @@ "video": "動画", "attachment_broken": "%sは壊れていてMastodonにアップロードできません。", "description_photo": "閲覧が難しいユーザーへの画像説明", - "description_video": "閲覧が難しいユーザーへの映像説明" + "description_video": "閲覧が難しいユーザーへの映像説明", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "期間: %s", diff --git a/Localization/StringsConvertor/input/kab.lproj/app.json b/Localization/StringsConvertor/input/kab.lproj/app.json index 2cff3d68d..9c5d7659a 100644 --- a/Localization/StringsConvertor/input/kab.lproj/app.json +++ b/Localization/StringsConvertor/input/kab.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Dɣeṛ", "closed": "Ifukk" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Err", "reblog": "Aɛiwed n usuffeɣ", @@ -376,7 +382,11 @@ "video": "tavidyutt", "attachment_broken": "%s-a yerreẓ, ur yezmir ara\nAd d-yettwasali ɣef Mastodon.", "description_photo": "Glem-d tawlaft i wid yesɛan ugur deg yiẓri...", - "description_video": "Glem-d tavidyut i wid yesɛan ugur deg yiẓri..." + "description_video": "Glem-d tavidyut i wid yesɛan ugur deg yiẓri...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Tangazt: %s", diff --git a/Localization/StringsConvertor/input/kmr.lproj/app.json b/Localization/StringsConvertor/input/kmr.lproj/app.json index d48edf3ae..098f514ee 100644 --- a/Localization/StringsConvertor/input/kmr.lproj/app.json +++ b/Localization/StringsConvertor/input/kmr.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Deng bide", "closed": "Girtî" }, + "meta_entity": { + "url": "Girêdan: %s", + "hashtag": "Hashtagê: %s", + "mention": "Profîlê nîşan bide: %s", + "email": "Navnîşanên e-nameyê: %s" + }, "actions": { "reply": "Bersivê bide", "reblog": "Ji nû ve nivîsandin", @@ -181,8 +187,8 @@ "unmute_user": "%s bêdeng neke", "muted": "Bêdengkirî", "edit_info": "Zanyariyan serrast bike", - "show_reblogs": "Show Reblogs", - "hide_reblogs": "Hide Reblogs" + "show_reblogs": "Bilindkirinan nîşan bide", + "hide_reblogs": "Bilindkirinan veşêre" }, "timeline": { "filtered": "Parzûnkirî", @@ -376,7 +382,11 @@ "video": "vîdyo", "attachment_broken": "Ev %s naxebite û nayê barkirin\n li ser Mastodon.", "description_photo": "Wêneyê ji bo kêmbînên dîtbar bide nasîn...", - "description_video": "Vîdyoyê ji bo kêmbînên dîtbar bide nasîn..." + "description_video": "Vîdyoyê ji bo kêmbînên dîtbar bide nasîn...", + "load_failed": "Barkirin têk çû", + "upload_failed": "Barkirin têk çû", + "can_not_recognize_this_media_attachment": "Nikare ev pêveka medyayê nas bike", + "attachment_too_large": "Pêvek pir mezin e" }, "poll": { "duration_time": "Dirêjî: %s", @@ -459,12 +469,12 @@ "message": "Ji bo rakirina astengkirinê %s bipejirîne" }, "confirm_show_reblogs": { - "title": "Show Reblogs", - "message": "Confirm to show reblogs" + "title": "Bilindkirinan nîşan bide", + "message": "Bo nîşandana bilindkirinan bipejirîne" }, "confirm_hide_reblogs": { - "title": "Hide Reblogs", - "message": "Confirm to hide reblogs" + "title": "Bilindkirinan veşêre", + "message": "Bo veşartina bilindkirinan bipejirîne" } }, "accessibility": { @@ -696,7 +706,7 @@ "accessibility_hint": "Du caran bitikîne da ku çarçoveyahilpekok ji holê rakî" }, "bookmark": { - "title": "Bookmarks" + "title": "Şûnpel" } } } diff --git a/Localization/StringsConvertor/input/ko.lproj/app.json b/Localization/StringsConvertor/input/ko.lproj/app.json index bbb4d1dea..826ac389c 100644 --- a/Localization/StringsConvertor/input/ko.lproj/app.json +++ b/Localization/StringsConvertor/input/ko.lproj/app.json @@ -129,13 +129,19 @@ "show_post": "게시물 보기", "show_user_profile": "사용자 프로필 보기", "content_warning": "열람 주의", - "sensitive_content": "Sensitive Content", + "sensitive_content": "민감한 콘텐츠", "media_content_warning": "아무 곳이나 눌러서 보기", "tap_to_reveal": "눌러서 확인", "poll": { "vote": "투표", "closed": "마감" }, + "meta_entity": { + "url": "링크: %s", + "hashtag": "해시태그: %s", + "mention": "프로필 보기: %s", + "email": "이메일 주소: %s" + }, "actions": { "reply": "답글", "reblog": "리블로그", @@ -376,7 +382,11 @@ "video": "동영상", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "시각장애인을 위한 사진 설명…", - "description_video": "시각장애인을 위한 영상 설명…" + "description_video": "시각장애인을 위한 영상 설명…", + "load_failed": "불러오기 실패", + "upload_failed": "업로드 실패", + "can_not_recognize_this_media_attachment": "이 미디어 첨부파일을 인식할 수 없습니다", + "attachment_too_large": "첨부파일이 너무 큽니다" }, "poll": { "duration_time": "기간: %s", diff --git a/Localization/StringsConvertor/input/lv.lproj/app.json b/Localization/StringsConvertor/input/lv.lproj/app.json index 0051383db..2835f0887 100644 --- a/Localization/StringsConvertor/input/lv.lproj/app.json +++ b/Localization/StringsConvertor/input/lv.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Balsot", "closed": "Aizvērts" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Atbildēt", "reblog": "Reblogot", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/nl.lproj/app.json b/Localization/StringsConvertor/input/nl.lproj/app.json index 649fe5064..e0b2872fb 100644 --- a/Localization/StringsConvertor/input/nl.lproj/app.json +++ b/Localization/StringsConvertor/input/nl.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Stemmen", "closed": "Gesloten" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Reageren", "reblog": "Delen", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "Deze %s is corrupt en kan niet geüpload worden naar Mastodon.", "description_photo": "Omschrijf de foto voor mensen met een visuele beperking...", - "description_video": "Omschrijf de video voor mensen met een visuele beperking..." + "description_video": "Omschrijf de video voor mensen met een visuele beperking...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duur: %s", diff --git a/Localization/StringsConvertor/input/pt-BR.lproj/app.json b/Localization/StringsConvertor/input/pt-BR.lproj/app.json index 063ed346c..26e6edb76 100644 --- a/Localization/StringsConvertor/input/pt-BR.lproj/app.json +++ b/Localization/StringsConvertor/input/pt-BR.lproj/app.json @@ -6,7 +6,7 @@ "please_try_again_later": "Tente novamente mais tarde." }, "sign_up_failure": { - "title": "Sign Up Failure" + "title": "Falha no cadastro" }, "server_error": { "title": "Erro do servidor" @@ -17,7 +17,7 @@ }, "discard_post_content": { "title": "Deletar Rascunho", - "message": "Confirm to discard composed post content." + "message": "Confirme para descartar o conteúdo da publicação composta." }, "publish_post_failure": { "title": "Falha ao publicar", @@ -42,7 +42,7 @@ }, "save_photo_failure": { "title": "Falha ao salvar foto", - "message": "Please enable the photo library access permission to save the photo." + "message": "Por favor, ative a permissão de acesso à galeria para salvar a foto." }, "delete_post": { "title": "Deletar Toot", @@ -71,212 +71,218 @@ "cancel": "Cancelar", "discard": "Descartar", "try_again": "Tente novamente", - "take_photo": "Take Photo", + "take_photo": "Tirar foto", "save_photo": "Salvar foto", "copy_photo": "Copiar foto", - "sign_in": "Sign In", - "sign_up": "Sign Up", - "see_more": "See More", - "preview": "Preview", + "sign_in": "Entrar", + "sign_up": "Criar conta", + "see_more": "Ver mais", + "preview": "Pré-visualização", "share": "Compartilhar", "share_user": "Compartilhar %s", - "share_post": "Share Post", - "open_in_safari": "Open in Safari", - "open_in_browser": "Open in Browser", - "find_people": "Find people to follow", - "manually_search": "Manually search instead", - "skip": "Skip", - "reply": "Reply", - "report_user": "Report %s", - "block_domain": "Block %s", - "unblock_domain": "Unblock %s", - "settings": "Settings", - "delete": "Delete" + "share_post": "Compartilhar postagem", + "open_in_safari": "Abrir no Safari", + "open_in_browser": "Abrir no navegador", + "find_people": "Encontre pessoas para seguir", + "manually_search": "Procure manualmente em vez disso", + "skip": "Pular", + "reply": "Responder", + "report_user": "Denunciar %s", + "block_domain": "Bloquear %s", + "unblock_domain": "Desbloquear %s", + "settings": "Configurações", + "delete": "Excluir" }, "tabs": { - "home": "Home", - "search": "Search", - "notification": "Notification", - "profile": "Profile" + "home": "Início", + "search": "Buscar", + "notification": "Notificação", + "profile": "Perfil" }, "keyboard": { "common": { - "switch_to_tab": "Switch to %s", - "compose_new_post": "Compose New Post", - "show_favorites": "Show Favorites", - "open_settings": "Open Settings" + "switch_to_tab": "Mudar para %s", + "compose_new_post": "Compor novo toot", + "show_favorites": "Mostrar favoritos", + "open_settings": "Abrir configurações" }, "timeline": { - "previous_status": "Previous Post", - "next_status": "Next Post", - "open_status": "Open Post", - "open_author_profile": "Open Author's Profile", - "open_reblogger_profile": "Open Reblogger's Profile", - "reply_status": "Reply to Post", - "toggle_reblog": "Toggle Reblog on Post", - "toggle_favorite": "Toggle Favorite on Post", - "toggle_content_warning": "Toggle Content Warning", - "preview_image": "Preview Image" + "previous_status": "Postagem anterior", + "next_status": "Próxima postagem", + "open_status": "Abrir toot", + "open_author_profile": "Abrir perfil do autor", + "open_reblogger_profile": "Abrir perfil do reblogger", + "reply_status": "Responder toot", + "toggle_reblog": "Ativar/desativar Reblog na postagem", + "toggle_favorite": "Ativar/desativar Favorito na postagem", + "toggle_content_warning": "Ativar/desativar Aviso de Conteúdo", + "preview_image": "Pré-visualizar imagem" }, "segmented_control": { - "previous_section": "Previous Section", - "next_section": "Next Section" + "previous_section": "Seção anterior", + "next_section": "Próxima seção" } }, "status": { - "user_reblogged": "%s reblogged", - "user_replied_to": "Replied to %s", - "show_post": "Show Post", - "show_user_profile": "Show user profile", - "content_warning": "Content Warning", - "sensitive_content": "Sensitive Content", - "media_content_warning": "Tap anywhere to reveal", - "tap_to_reveal": "Tap to reveal", + "user_reblogged": "%s reblogou", + "user_replied_to": "Em resposta a %s", + "show_post": "Mostrar postagem", + "show_user_profile": "Mostrar perfil de usuário", + "content_warning": "Aviso de Conteúdo", + "sensitive_content": "Conteúdo sensível", + "media_content_warning": "Toque em qualquer lugar para revelar", + "tap_to_reveal": "Toque para revelar", "poll": { - "vote": "Vote", - "closed": "Closed" + "vote": "Votar", + "closed": "Fechado" + }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Mostrar perfil: %s", + "email": "Endereço de e-mail: %s" }, "actions": { "reply": "Responder", - "reblog": "Reblog", - "unreblog": "Undo reblog", - "favorite": "Favorite", - "unfavorite": "Unfavorite", + "reblog": "Reblogar", + "unreblog": "Desfazer reblog", + "favorite": "Favoritar", + "unfavorite": "Remover favorito", "menu": "Menu", - "hide": "Hide", - "show_image": "Show image", - "show_gif": "Show GIF", - "show_video_player": "Show video player", - "tap_then_hold_to_show_menu": "Tap then hold to show menu" + "hide": "Ocultar", + "show_image": "Exibir imagem", + "show_gif": "Exibir GIF", + "show_video_player": "Mostrar reprodutor de vídeo", + "tap_then_hold_to_show_menu": "Toque e em seguida segure para exibir o menu" }, "tag": { "url": "URL", - "mention": "Mention", + "mention": "Mencionar", "link": "Link", "hashtag": "Hashtag", - "email": "Email", + "email": "E-mail", "emoji": "Emoji" }, "visibility": { "unlisted": "Everyone can see this post but not display in the public timeline.", - "private": "Only their followers can see this post.", - "private_from_me": "Only my followers can see this post.", - "direct": "Only mentioned user can see this post." + "private": "Somente seus seguidores podem ver essa postagem.", + "private_from_me": "Somente meus seguidores podem ver essa postagem.", + "direct": "Somente o usuário mencionado pode ver essa postagem." } }, "friendship": { - "follow": "Follow", - "following": "Following", - "request": "Request", - "pending": "Pending", - "block": "Block", - "block_user": "Block %s", - "block_domain": "Block %s", - "unblock": "Unblock", - "unblock_user": "Unblock %s", - "blocked": "Blocked", - "mute": "Mute", - "mute_user": "Mute %s", - "unmute": "Unmute", - "unmute_user": "Unmute %s", - "muted": "Muted", - "edit_info": "Edit Info", - "show_reblogs": "Show Reblogs", - "hide_reblogs": "Hide Reblogs" + "follow": "Seguir", + "following": "Seguindo", + "request": "Solicitação", + "pending": "Pendente", + "block": "Bloquear", + "block_user": "Bloquear %s", + "block_domain": "Bloquear %s", + "unblock": "Desbloquear", + "unblock_user": "Desbloquear %s", + "blocked": "Bloqueado", + "mute": "Silenciar", + "mute_user": "Silenciar %s", + "unmute": "Remover silenciado", + "unmute_user": "Remover silenciado %s", + "muted": "Silenciado", + "edit_info": "Editar informação", + "show_reblogs": "Mostrar Reblogs", + "hide_reblogs": "Ocultar Reblogs" }, "timeline": { - "filtered": "Filtered", + "filtered": "Filtrado", "timestamp": { - "now": "Now" + "now": "Agora" }, "loader": { - "load_missing_posts": "Load missing posts", - "loading_missing_posts": "Loading missing posts...", - "show_more_replies": "Show more replies" + "load_missing_posts": "Carregar postagens em falta", + "loading_missing_posts": "Carregando postagens em falta...", + "show_more_replies": "Exibir mais respostas" }, "header": { - "no_status_found": "No Post Found", + "no_status_found": "Nenhuma postagem encontrada", "blocking_warning": "You can’t view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.", "user_blocking_warning": "You can’t view %s’s profile\nuntil you unblock them.\nYour profile looks like this to them.", - "blocked_warning": "You can’t view this user’s profile\nuntil they unblock you.", - "user_blocked_warning": "You can’t view %s’s profile\nuntil they unblock you.", - "suspended_warning": "This user has been suspended.", - "user_suspended_warning": "%s’s account has been suspended." + "blocked_warning": "Você não pode ver o perfil desse usuário até que ele o desbloqueie.", + "user_blocked_warning": "Você não pode ver o perfil de %s até que ele o desbloqueie.", + "suspended_warning": "Esse usuário foi suspenso.", + "user_suspended_warning": "A conta de %s foi suspensa." } } } }, "scene": { "welcome": { - "slogan": "Social networking\nback in your hands.", - "get_started": "Get Started", - "log_in": "Log In" + "slogan": "Você no controle de sua rede social.", + "get_started": "Comece já", + "log_in": "Entrar" }, "server_picker": { - "title": "Mastodon is made of users in different servers.", - "subtitle": "Pick a server based on your interests, region, or a general purpose one.", - "subtitle_extend": "Pick a server based on your interests, region, or a general purpose one. Each server is operated by an entirely independent organization or individual.", + "title": "Mastodon é feito de usuários em instâncias diferentes.", + "subtitle": "Escolha uma instância baseada nos seus interesses, região, ou em uma proposta geral.", + "subtitle_extend": "Escolha uma instância baseada nos seus interesses, região, ou em uma proposta geral. Cada instância é operada por um indivíduo ou uma organização totalmente independente.", "button": { "category": { - "all": "All", - "all_accessiblity_description": "Category: All", - "academia": "academia", - "activism": "activism", - "food": "food", + "all": "Todos", + "all_accessiblity_description": "Categoria: Todos", + "academia": "acadêmico", + "activism": "ativismo", + "food": "comida", "furry": "furry", - "games": "games", - "general": "general", - "journalism": "journalism", + "games": "jogos", + "general": "geral", + "journalism": "jornalismo", "lgbt": "lgbt", "regional": "regional", - "art": "art", - "music": "music", - "tech": "tech" + "art": "arte", + "music": "música", + "tech": "tecnologia" }, - "see_less": "See Less", - "see_more": "See More" + "see_less": "Ver menos", + "see_more": "Ver mais" }, "label": { - "language": "LANGUAGE", - "users": "USERS", - "category": "CATEGORY" + "language": "Idioma", + "users": "Usuários", + "category": "Categoria" }, "input": { - "placeholder": "Search servers", - "search_servers_or_enter_url": "Search servers or enter URL" + "placeholder": "Procurar instâncias", + "search_servers_or_enter_url": "Procurar instâncias ou inserir URL" }, "empty_state": { - "finding_servers": "Finding available servers...", - "bad_network": "Something went wrong while loading the data. Check your internet connection.", - "no_results": "No results" + "finding_servers": "Procurando instâncias disponíveis...", + "bad_network": "Algo deu errado ao carregar os dados. Verifique sua conexão com a internet.", + "no_results": "Sem resultados" } }, "register": { - "title": "Let’s get you set up on %s", + "title": "Vamos configurar você em %s", "lets_get_you_set_up_on_domain": "Let’s get you set up on %s", "input": { "avatar": { - "delete": "Delete" + "delete": "Excluir" }, "username": { - "placeholder": "username", - "duplicate_prompt": "This username is taken." + "placeholder": "nome de usuário", + "duplicate_prompt": "Esse nome de usuário já está sendo usado." }, "display_name": { - "placeholder": "display name" + "placeholder": "nome de exibição" }, "email": { - "placeholder": "email" + "placeholder": "e-mail" }, "password": { - "placeholder": "password", - "require": "Your password needs at least:", - "character_limit": "8 characters", + "placeholder": "senha", + "require": "Sua senha deve ter pelo menos:", + "character_limit": "8 carácteres", "accessibility": { "checked": "checked", "unchecked": "unchecked" }, - "hint": "Your password needs at least eight characters" + "hint": "Sua senha precisa ter pelo menos oito carácteres" }, "invite": { "registration_user_invite_request": "Why do you want to join?" @@ -284,17 +290,17 @@ }, "error": { "item": { - "username": "Username", - "email": "Email", - "password": "Password", - "agreement": "Agreement", - "locale": "Locale", - "reason": "Reason" + "username": "Nome de usuário", + "email": "E-mail", + "password": "Senha", + "agreement": "Termos de uso", + "locale": "Localidade", + "reason": "Motivo" }, "reason": { "blocked": "%s contains a disallowed email provider", - "unreachable": "%s does not seem to exist", - "taken": "%s is already in use", + "unreachable": "%s parece não existir", + "taken": "%s já está em uso", "reserved": "%s is a reserved keyword", "accepted": "%s must be accepted", "blank": "%s is required", @@ -366,27 +372,31 @@ "media_selection": { "camera": "Take Photo", "photo_library": "Photo Library", - "browse": "Browse" + "browse": "Navegar" }, - "content_input_placeholder": "Type or paste what’s on your mind", - "compose_action": "Publish", - "replying_to_user": "replying to %s", + "content_input_placeholder": "Digite ou cole o que está na sua mente", + "compose_action": "Publicar", + "replying_to_user": "em resposta a %s", "attachment": { - "photo": "photo", - "video": "video", + "photo": "foto", + "video": "vídeo", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { - "duration_time": "Duration: %s", - "thirty_minutes": "30 minutes", - "one_hour": "1 Hour", - "six_hours": "6 Hours", - "one_day": "1 Day", - "three_days": "3 Days", - "seven_days": "7 Days", - "option_number": "Option %ld" + "duration_time": "Duração: %s", + "thirty_minutes": "30 minutos", + "one_hour": "1 hora", + "six_hours": "6 horas", + "one_day": "1 dia", + "three_days": "3 dias", + "seven_days": "7 dias", + "option_number": "Opção %ld" }, "content_warning": { "placeholder": "Write an accurate warning here..." @@ -423,9 +433,9 @@ "follows_you": "Follows You" }, "dashboard": { - "posts": "posts", - "following": "following", - "followers": "followers" + "posts": "toots", + "following": "seguindo", + "followers": "seguidores" }, "fields": { "add_row": "Add Row", @@ -508,30 +518,30 @@ "accounts": { "title": "Accounts you might like", "description": "You may like to follow these accounts", - "follow": "Follow" + "follow": "Seguir" } }, "searching": { "segment": { - "all": "All", - "people": "People", + "all": "Todos", + "people": "Pessoas", "hashtags": "Hashtags", - "posts": "Posts" + "posts": "Toots" }, "empty_state": { - "no_results": "No results" + "no_results": "Sem resultados" }, - "recent_search": "Recent searches", - "clear": "Clear" + "recent_search": "Pesquisas recentes", + "clear": "Limpar" } }, "discovery": { "tabs": { - "posts": "Posts", + "posts": "Toots", "hashtags": "Hashtags", - "news": "News", - "community": "Community", - "for_you": "For You" + "news": "Notícias", + "community": "Comunidade", + "for_you": "Para você" }, "intro": "These are the posts gaining traction in your corner of Mastodon." }, diff --git a/Localization/StringsConvertor/input/pt-BR.lproj/ios-infoPlist.json b/Localization/StringsConvertor/input/pt-BR.lproj/ios-infoPlist.json index c6db73de0..04b53a160 100644 --- a/Localization/StringsConvertor/input/pt-BR.lproj/ios-infoPlist.json +++ b/Localization/StringsConvertor/input/pt-BR.lproj/ios-infoPlist.json @@ -1,6 +1,6 @@ { - "NSCameraUsageDescription": "Used to take photo for post status", - "NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library", - "NewPostShortcutItemTitle": "New Post", - "SearchShortcutItemTitle": "Search" + "NSCameraUsageDescription": "Usado para tirar uma foto para postagem", + "NSPhotoLibraryAddUsageDescription": "Usado para salvar foto na Galeria", + "NewPostShortcutItemTitle": "Novo Toot", + "SearchShortcutItemTitle": "Buscar" } diff --git a/Localization/StringsConvertor/input/pt.lproj/app.json b/Localization/StringsConvertor/input/pt.lproj/app.json index 80b0882d9..a6a971860 100644 --- a/Localization/StringsConvertor/input/pt.lproj/app.json +++ b/Localization/StringsConvertor/input/pt.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vote", "closed": "Closed" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Reply", "reblog": "Reblog", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/ro.lproj/app.json b/Localization/StringsConvertor/input/ro.lproj/app.json index 8b9da0903..a9d3804fa 100644 --- a/Localization/StringsConvertor/input/ro.lproj/app.json +++ b/Localization/StringsConvertor/input/ro.lproj/app.json @@ -32,9 +32,9 @@ "message": "Nu se poate edita profilul. Vă rugăm să încercaţi din nou." }, "sign_out": { - "title": "Deconectați-vă", + "title": "Deconectare", "message": "Sigur doriți să vă deconectați?", - "confirm": "Deconectați-vă" + "confirm": "Deconectare" }, "block_domain": { "title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.", @@ -136,6 +136,12 @@ "vote": "Vote", "closed": "Closed" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Reply", "reblog": "Reblog", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/ru.lproj/app.json b/Localization/StringsConvertor/input/ru.lproj/app.json index 7a4833554..798cdb4c5 100644 --- a/Localization/StringsConvertor/input/ru.lproj/app.json +++ b/Localization/StringsConvertor/input/ru.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Проголосовать", "closed": "Завершён" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Ответить", "reblog": "Продвинуть", @@ -376,7 +382,11 @@ "video": "видео", "attachment_broken": "Это %s повреждено и не может\nбыть отправлено в Mastodon.", "description_photo": "Опишите фото для людей с нарушениями зрения...", - "description_video": "Опишите видео для людей с нарушениями зрения..." + "description_video": "Опишите видео для людей с нарушениями зрения...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Продолжительность: %s", diff --git a/Localization/StringsConvertor/input/si.lproj/app.json b/Localization/StringsConvertor/input/si.lproj/app.json index f42e91ae1..816536440 100644 --- a/Localization/StringsConvertor/input/si.lproj/app.json +++ b/Localization/StringsConvertor/input/si.lproj/app.json @@ -136,6 +136,12 @@ "vote": "ඡන්දය", "closed": "වසා ඇත" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "පිළිතුරු", "reblog": "Reblog", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/sl.lproj/app.json b/Localization/StringsConvertor/input/sl.lproj/app.json index 99a823feb..37b62a45d 100644 --- a/Localization/StringsConvertor/input/sl.lproj/app.json +++ b/Localization/StringsConvertor/input/sl.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Glasuj", "closed": "Zaprto" }, + "meta_entity": { + "url": "Povezava: %s", + "hashtag": "Ključnik: %s", + "mention": "Pokaži profil: %s", + "email": "E-naslov: %s" + }, "actions": { "reply": "Odgovori", "reblog": "Poobjavi", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "To %s je okvarjeno in ga ni\nmožno naložiti v Mastodon.", "description_photo": "Opiši fotografijo za slabovidne in osebe z okvaro vida ...", - "description_video": "Opiši video za slabovidne in osebe z okvaro vida ..." + "description_video": "Opiši video za slabovidne in osebe z okvaro vida ...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Trajanje: %s", @@ -696,7 +706,7 @@ "accessibility_hint": "Dvakrat tapnite, da zapustite tega čarovnika" }, "bookmark": { - "title": "Bookmarks" + "title": "Zaznamki" } } } diff --git a/Localization/StringsConvertor/input/sv.lproj/Localizable.stringsdict b/Localization/StringsConvertor/input/sv.lproj/Localizable.stringsdict index 048af4732..c7317903d 100644 --- a/Localization/StringsConvertor/input/sv.lproj/Localizable.stringsdict +++ b/Localization/StringsConvertor/input/sv.lproj/Localizable.stringsdict @@ -152,9 +152,9 @@ NSStringFormatValueTypeKey ld one - %ld puff + %ld boost other - %ld puffar + %ld boostar plural.count.reply diff --git a/Localization/StringsConvertor/input/sv.lproj/app.json b/Localization/StringsConvertor/input/sv.lproj/app.json index 85f243b03..c740609c9 100644 --- a/Localization/StringsConvertor/input/sv.lproj/app.json +++ b/Localization/StringsConvertor/input/sv.lproj/app.json @@ -111,9 +111,9 @@ "next_status": "Nästa inlägg", "open_status": "Öppna inlägg", "open_author_profile": "Öppna författarens profil", - "open_reblogger_profile": "Öppna ompostarens profil", + "open_reblogger_profile": "Öppna boostarens profil", "reply_status": "Svara på inlägg", - "toggle_reblog": "Växla puff på inlägg", + "toggle_reblog": "Växla boost på inlägg", "toggle_favorite": "Växla favorit på inlägg", "toggle_content_warning": "Växla innehållsvarning", "preview_image": "Förhandsgranska bild" @@ -124,7 +124,7 @@ } }, "status": { - "user_reblogged": "%s puffade", + "user_reblogged": "%s boostade", "user_replied_to": "Svarade på %s", "show_post": "Visa inlägg", "show_user_profile": "Visa användarprofil", @@ -136,10 +136,16 @@ "vote": "Rösta", "closed": "Stängd" }, + "meta_entity": { + "url": "Länk: %s", + "hashtag": "Hashtag: %s", + "mention": "Visa profil: %s", + "email": "E-postadress: %s" + }, "actions": { "reply": "Svara", - "reblog": "Puffa", - "unreblog": "Ångra puff", + "reblog": "Boosta", + "unreblog": "Ångra boost", "favorite": "Favorit", "unfavorite": "Ta bort favorit", "menu": "Meny", @@ -181,8 +187,8 @@ "unmute_user": "Avtysta %s", "muted": "Tystad", "edit_info": "Redigera info", - "show_reblogs": "Visa knuffar", - "hide_reblogs": "Dölj puffar" + "show_reblogs": "Visa boostar", + "hide_reblogs": "Dölj boostar" }, "timeline": { "filtered": "Filtrerat", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "Denna %s är trasig och kan inte\nladdas upp till Mastodon.", "description_photo": "Beskriv fotot för synskadade...", - "description_video": "Beskriv videon för de synskadade..." + "description_video": "Beskriv videon för de synskadade...", + "load_failed": "Det gick inte att läsa in", + "upload_failed": "Uppladdning misslyckades", + "can_not_recognize_this_media_attachment": "Känner inte igen mediebilagan", + "attachment_too_large": "Bilagan är för stor" }, "poll": { "duration_time": "Längd: %s", @@ -459,12 +469,12 @@ "message": "Bekräfta för att avblockera %s" }, "confirm_show_reblogs": { - "title": "Visa puffar", - "message": "Bekräfta för att visa puffar" + "title": "Visa boostar", + "message": "Bekräfta för att visa boostar" }, "confirm_hide_reblogs": { - "title": "Dölj puffar", - "message": "Bekräfta för att dölja puffar" + "title": "Dölj boostar", + "message": "Bekräfta för att dölja boostar" } }, "accessibility": { @@ -490,7 +500,7 @@ "title": "Favoriserad av" }, "reblogged_by": { - "title": "Puffat av" + "title": "Boostat av" }, "search": { "title": "Sök", @@ -546,7 +556,7 @@ "notification_description": { "followed_you": "följde dig", "favorited_your_post": "favoriserade ditt inlägg", - "reblogged_your_post": "puffade ditt inlägg", + "reblogged_your_post": "boostade ditt inlägg", "mentioned_you": "nämnde dig", "request_to_follow_you": "begär att följa dig", "poll_has_ended": "omröstningen har avslutats" @@ -586,7 +596,7 @@ "title": "Notiser", "favorites": "Favoriserar mitt inlägg", "follows": "Följer mig", - "boosts": "Ompostar mitt inlägg", + "boosts": "Boostar mitt inlägg", "mentions": "Nämner mig", "trigger": { "anyone": "alla", @@ -672,7 +682,7 @@ "unfollowed": "Slutade följa", "unfollow_user": "Avfölj %s", "mute_user": "Tysta %s", - "you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "Du kommer inte att se deras inlägg eller ompostningar i ditt hemflöde. De kommer inte att veta att de har blivit tystade.", + "you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "Du kommer inte att se deras inlägg eller boostar i ditt hemflöde. De kommer inte att veta att de har blivit tystade.", "block_user": "Blockera %s", "they_will_no_longer_be_able_to_follow_or_see_your_posts_but_they_can_see_if_theyve_been_blocked": "De kommer inte längre att kunna följa eller se dina inlägg, men de kan se om de har blockerats.", "while_we_review_this_you_can_take_action_against_user": "Medan vi granskar detta kan du vidta åtgärder mot %s" @@ -696,7 +706,7 @@ "accessibility_hint": "Dubbeltryck för att avvisa den här guiden" }, "bookmark": { - "title": "Bookmarks" + "title": "Bokmärken" } } } diff --git a/Localization/StringsConvertor/input/th.lproj/app.json b/Localization/StringsConvertor/input/th.lproj/app.json index 763b827cd..9b4316025 100644 --- a/Localization/StringsConvertor/input/th.lproj/app.json +++ b/Localization/StringsConvertor/input/th.lproj/app.json @@ -136,6 +136,12 @@ "vote": "ลงคะแนน", "closed": "ปิดแล้ว" }, + "meta_entity": { + "url": "ลิงก์: %s", + "hashtag": "แฮชแท็ก: %s", + "mention": "โปรไฟล์ที่แสดง: %s", + "email": "ที่อยู่อีเมล: %s" + }, "actions": { "reply": "ตอบกลับ", "reblog": "ดัน", @@ -181,8 +187,8 @@ "unmute_user": "เลิกซ่อน %s", "muted": "ซ่อนอยู่", "edit_info": "แก้ไขข้อมูล", - "show_reblogs": "Show Reblogs", - "hide_reblogs": "Hide Reblogs" + "show_reblogs": "แสดงการดัน", + "hide_reblogs": "ซ่อนการดัน" }, "timeline": { "filtered": "กรองอยู่", @@ -215,7 +221,7 @@ "server_picker": { "title": "Mastodon ประกอบด้วยผู้ใช้ในเซิร์ฟเวอร์ต่าง ๆ", "subtitle": "เลือกเซิร์ฟเวอร์ตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ", - "subtitle_extend": "เลือกเซิร์ฟเวอร์ตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ แต่ละเซิร์ฟเวอร์ดำเนินการโดยองค์กรหรือบุคคลที่เป็นอิสระโดยสิ้นเชิง", + "subtitle_extend": "เลือกเซิร์ฟเวอร์ตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ แต่ละเซิร์ฟเวอร์ได้รับการดำเนินงานโดยองค์กรหรือบุคคลที่เป็นอิสระโดยสิ้นเชิง", "button": { "category": { "all": "ทั้งหมด", @@ -376,7 +382,11 @@ "video": "วิดีโอ", "attachment_broken": "%s นี้เสียหายและไม่สามารถ\nอัปโหลดไปยัง Mastodon", "description_photo": "อธิบายรูปภาพสำหรับผู้บกพร่องทางการมองเห็น...", - "description_video": "อธิบายวิดีโอสำหรับผู้บกพร่องทางการมองเห็น..." + "description_video": "อธิบายวิดีโอสำหรับผู้บกพร่องทางการมองเห็น...", + "load_failed": "การโหลดล้มเหลว", + "upload_failed": "การอัปโหลดล้มเหลว", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "ไฟล์แนบใหญ่เกินไป" }, "poll": { "duration_time": "ระยะเวลา: %s", @@ -459,12 +469,12 @@ "message": "ยืนยันเพื่อเลิกปิดกั้น %s" }, "confirm_show_reblogs": { - "title": "Show Reblogs", - "message": "Confirm to show reblogs" + "title": "แสดงการดัน", + "message": "ยืนยันเพื่อแสดงการดัน" }, "confirm_hide_reblogs": { - "title": "Hide Reblogs", - "message": "Confirm to hide reblogs" + "title": "ซ่อนการดัน", + "message": "ยืนยันเพื่อซ่อนการดัน" } }, "accessibility": { @@ -696,7 +706,7 @@ "accessibility_hint": "แตะสองครั้งเพื่อปิดตัวช่วยสร้างนี้" }, "bookmark": { - "title": "Bookmarks" + "title": "ที่คั่นหน้า" } } } diff --git a/Localization/StringsConvertor/input/tr.lproj/app.json b/Localization/StringsConvertor/input/tr.lproj/app.json index cef7fd7f4..2abb92845 100644 --- a/Localization/StringsConvertor/input/tr.lproj/app.json +++ b/Localization/StringsConvertor/input/tr.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Oy ver", "closed": "Kapandı" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Yanıtla", "reblog": "Yeniden paylaş", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "Bu %s bozuk ve Mastodon'a\nyüklenemiyor.", "description_photo": "Görme engelliler için fotoğrafı tarif edin...", - "description_video": "Görme engelliler için videoyu tarif edin..." + "description_video": "Görme engelliler için videoyu tarif edin...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Süre: %s", diff --git a/Localization/StringsConvertor/input/uk.lproj/app.json b/Localization/StringsConvertor/input/uk.lproj/app.json index 80b0882d9..a6a971860 100644 --- a/Localization/StringsConvertor/input/uk.lproj/app.json +++ b/Localization/StringsConvertor/input/uk.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Vote", "closed": "Closed" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "Reply", "reblog": "Reblog", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.", "description_photo": "Describe the photo for the visually-impaired...", - "description_video": "Describe the video for the visually-impaired..." + "description_video": "Describe the video for the visually-impaired...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Duration: %s", diff --git a/Localization/StringsConvertor/input/vi.lproj/app.json b/Localization/StringsConvertor/input/vi.lproj/app.json index b857399b3..5b7696727 100644 --- a/Localization/StringsConvertor/input/vi.lproj/app.json +++ b/Localization/StringsConvertor/input/vi.lproj/app.json @@ -136,6 +136,12 @@ "vote": "Bình chọn", "closed": "Kết thúc" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Hiện hồ sơ: %s", + "email": "Email: %s" + }, "actions": { "reply": "Trả lời", "reblog": "Đăng lại", @@ -376,7 +382,11 @@ "video": "video", "attachment_broken": "%s này bị lỗi và không thể\ntải lên Mastodon.", "description_photo": "Mô tả hình ảnh cho người khiếm thị...", - "description_video": "Mô tả video cho người khiếm thị..." + "description_video": "Mô tả video cho người khiếm thị...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "Thời hạn: %s", @@ -696,7 +706,7 @@ "accessibility_hint": "Nhấn hai lần để bỏ qua" }, "bookmark": { - "title": "Bookmarks" + "title": "Tút đã lưu" } } } diff --git a/Localization/StringsConvertor/input/zh-Hans.lproj/app.json b/Localization/StringsConvertor/input/zh-Hans.lproj/app.json index 7f3703b8a..ddf89e159 100644 --- a/Localization/StringsConvertor/input/zh-Hans.lproj/app.json +++ b/Localization/StringsConvertor/input/zh-Hans.lproj/app.json @@ -136,6 +136,12 @@ "vote": "投票", "closed": "已关闭" }, + "meta_entity": { + "url": "Link: %s", + "hashtag": "Hashtag: %s", + "mention": "Show Profile: %s", + "email": "Email address: %s" + }, "actions": { "reply": "回复", "reblog": "转发", @@ -376,7 +382,11 @@ "video": "视频", "attachment_broken": "%s已损坏\n无法上传到 Mastodon", "description_photo": "为视觉障碍人士添加照片的文字说明...", - "description_video": "为视觉障碍人士添加视频的文字说明..." + "description_video": "为视觉障碍人士添加视频的文字说明...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "时长:%s", diff --git a/Localization/StringsConvertor/input/zh-Hant.lproj/app.json b/Localization/StringsConvertor/input/zh-Hant.lproj/app.json index ae497109e..ab7343c99 100644 --- a/Localization/StringsConvertor/input/zh-Hant.lproj/app.json +++ b/Localization/StringsConvertor/input/zh-Hant.lproj/app.json @@ -136,6 +136,12 @@ "vote": "投票", "closed": "已關閉" }, + "meta_entity": { + "url": "連結:%s", + "hashtag": "主題標籤: %s", + "mention": "顯示個人檔案:%s", + "email": "電子郵件地址:%s" + }, "actions": { "reply": "回覆", "reblog": "轉嘟", @@ -376,7 +382,11 @@ "video": "影片", "attachment_broken": "此 %s 已損毀,並無法被上傳至 Mastodon。", "description_photo": "為視障人士提供圖片說明...", - "description_video": "為視障人士提供影片說明..." + "description_video": "為視障人士提供影片說明...", + "load_failed": "Load Failed", + "upload_failed": "Upload Failed", + "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", + "attachment_too_large": "Attachment too large" }, "poll": { "duration_time": "持續時間:%s", @@ -696,7 +706,7 @@ "accessibility_hint": "點兩下以關閉此設定精靈" }, "bookmark": { - "title": "Bookmarks" + "title": "書籤" } } } diff --git a/Localization/app.json b/Localization/app.json index 25f06ad83..c40c0a39e 100644 --- a/Localization/app.json +++ b/Localization/app.json @@ -385,8 +385,10 @@ "description_video": "Describe the video for the visually-impaired...", "load_failed": "Load Failed", "upload_failed": "Upload Failed", - "can_not_recognize_this_media_attachment": "Can not regonize this media attachment", - "attachment_too_large": "Attachment too large" + "can_not_recognize_this_media_attachment": "Can not recognize this media attachment", + "attachment_too_large": "Attachment too large", + "compressing_state": "Compressing...", + "server_processing_state": "Server Processing..." }, "poll": { "duration_time": "Duration: %s", @@ -396,7 +398,9 @@ "one_day": "1 Day", "three_days": "3 Days", "seven_days": "7 Days", - "option_number": "Option %ld" + "option_number": "Option %ld", + "the_poll_is_invalid": "The poll is invalid", + "the_poll_has_empty_option": "The poll has empty option" }, "content_warning": { "placeholder": "Write an accurate warning here..." @@ -711,4 +715,4 @@ "title": "Bookmarks" } } -} +} \ No newline at end of file diff --git a/Mastodon/Scene/Compose/ComposeViewController.swift b/Mastodon/Scene/Compose/ComposeViewController.swift index 6de17e31f..fd5ed5817 100644 --- a/Mastodon/Scene/Compose/ComposeViewController.swift +++ b/Mastodon/Scene/Compose/ComposeViewController.swift @@ -44,18 +44,6 @@ final class ComposeViewController: UIViewController, NeedsDependency { }() private(set) lazy var cancelBarButtonItem = UIBarButtonItem(title: L10n.Common.Controls.Actions.cancel, style: .plain, target: self, action: #selector(ComposeViewController.cancelBarButtonItemPressed(_:))) - let characterCountLabel: UILabel = { - let label = UILabel() - label.font = .systemFont(ofSize: 15, weight: .regular) - label.text = "500" - label.textColor = Asset.Colors.Label.secondary.color - label.accessibilityLabel = L10n.A11y.Plural.Count.inputLimitRemains(500) - return label - }() - private(set) lazy var characterCountBarButtonItem: UIBarButtonItem = { - let barButtonItem = UIBarButtonItem(customView: characterCountLabel) - return barButtonItem - }() let publishButton: UIButton = { let button = RoundedEdgesButton(type: .custom) @@ -93,20 +81,6 @@ final class ComposeViewController: UIViewController, NeedsDependency { } -extension ComposeViewController { - private static func createLayout() -> UICollectionViewLayout { - let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(44)) - let item = NSCollectionLayoutItem(layoutSize: itemSize) - let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(44)) - let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitems: [item]) - let section = NSCollectionLayoutSection(group: group) - section.contentInsetsReference = .readableContent - // section.interGroupSpacing = 10 - // section.contentInsets = NSDirectionalEdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10) - return UICollectionViewCompositionalLayout(section: section) - } -} - extension ComposeViewController { override func viewDidLoad() { @@ -139,16 +113,6 @@ extension ComposeViewController { ]) composeContentViewController.didMove(toParent: self) - // bind navigation bar style - // configureNavigationBarTitleStyle() - viewModel.traitCollectionDidChangePublisher - .receive(on: DispatchQueue.main) - .sink { [weak self] _ in - guard let self = self else { return } - self.configureNavigationBarTitleStyle() - } - .store(in: &disposeBag) - // bind title viewModel.$title .receive(on: DispatchQueue.main) @@ -189,53 +153,6 @@ extension ComposeViewController { present(alertController, animated: true, completion: nil) } -// private func setupBackgroundColor(theme: Theme) { -// let backgroundColor = UIColor(dynamicProvider: { traitCollection in -// switch traitCollection.userInterfaceStyle { -// case .light: -// return .systemBackground -// default: -// return theme.systemElevatedBackgroundColor -// } -// }) -// view.backgroundColor = backgroundColor -//// tableView.backgroundColor = backgroundColor -//// composeToolbarBackgroundView.backgroundColor = theme.composeToolbarBackgroundColor -// } -// -// // keyboard shortcutBar -// private func setupInputAssistantItem(item: UITextInputAssistantItem) { -// let barButtonItems = [ -// composeToolbarView.mediaBarButtonItem, -// composeToolbarView.pollBarButtonItem, -// composeToolbarView.contentWarningBarButtonItem, -// composeToolbarView.visibilityBarButtonItem, -// ] -// let group = UIBarButtonItemGroup(barButtonItems: barButtonItems, representativeItem: nil) -// -// item.trailingBarButtonGroups = [group] -// } -// -// private func configureToolbarDisplay(keyboardHasShortcutBar: Bool) { -// switch self.traitCollection.userInterfaceIdiom { -// case .pad: -// let shouldHideToolbar = keyboardHasShortcutBar && self.traitCollection.horizontalSizeClass == .regular -// self.composeToolbarView.alpha = shouldHideToolbar ? 0 : 1 -// self.composeToolbarBackgroundView.alpha = shouldHideToolbar ? 0 : 1 -// default: -// break -// } -// } -// - private func configureNavigationBarTitleStyle() { - switch traitCollection.userInterfaceIdiom { - case .pad: - navigationController?.navigationBar.prefersLargeTitles = traitCollection.horizontalSizeClass == .regular - default: - break - } - } - } extension ComposeViewController { @@ -340,130 +257,137 @@ extension ComposeViewController: UIAdaptivePresentationControllerDelegate { } -//extension ComposeViewController { -// override var keyCommands: [UIKeyCommand]? { -// composeKeyCommands -// } -//} -// -//extension ComposeViewController { -// -// enum ComposeKeyCommand: String, CaseIterable { -// case discardPost -// case publishPost -// case mediaBrowse -// case mediaPhotoLibrary -// case mediaCamera -// case togglePoll -// case toggleContentWarning -// case selectVisibilityPublic -// // TODO: remove selectVisibilityUnlisted from codebase -// // case selectVisibilityUnlisted -// case selectVisibilityPrivate -// case selectVisibilityDirect -// -// var title: String { -// switch self { -// case .discardPost: return L10n.Scene.Compose.Keyboard.discardPost -// case .publishPost: return L10n.Scene.Compose.Keyboard.publishPost -// case .mediaBrowse: return L10n.Scene.Compose.Keyboard.appendAttachmentEntry(L10n.Scene.Compose.MediaSelection.browse) -// case .mediaPhotoLibrary: return L10n.Scene.Compose.Keyboard.appendAttachmentEntry(L10n.Scene.Compose.MediaSelection.photoLibrary) -// case .mediaCamera: return L10n.Scene.Compose.Keyboard.appendAttachmentEntry(L10n.Scene.Compose.MediaSelection.camera) -// case .togglePoll: return L10n.Scene.Compose.Keyboard.togglePoll -// case .toggleContentWarning: return L10n.Scene.Compose.Keyboard.toggleContentWarning -// case .selectVisibilityPublic: return L10n.Scene.Compose.Keyboard.selectVisibilityEntry(L10n.Scene.Compose.Visibility.public) -// // case .selectVisibilityUnlisted: return L10n.Scene.Compose.Keyboard.selectVisibilityEntry(L10n.Scene.Compose.Visibility.unlisted) -// case .selectVisibilityPrivate: return L10n.Scene.Compose.Keyboard.selectVisibilityEntry(L10n.Scene.Compose.Visibility.private) -// case .selectVisibilityDirect: return L10n.Scene.Compose.Keyboard.selectVisibilityEntry(L10n.Scene.Compose.Visibility.direct) -// } -// } -// -// // UIKeyCommand input -// var input: String { -// switch self { -// case .discardPost: return "w" // + command -// case .publishPost: return "\r" // (enter) + command -// case .mediaBrowse: return "b" // + option + command -// case .mediaPhotoLibrary: return "p" // + option + command -// case .mediaCamera: return "c" // + option + command -// case .togglePoll: return "p" // + shift + command -// case .toggleContentWarning: return "c" // + shift + command -// case .selectVisibilityPublic: return "1" // + command -// // case .selectVisibilityUnlisted: return "2" // + command -// case .selectVisibilityPrivate: return "2" // + command -// case .selectVisibilityDirect: return "3" // + command -// } -// } -// -// var modifierFlags: UIKeyModifierFlags { -// switch self { -// case .discardPost: return [.command] -// case .publishPost: return [.command] -// case .mediaBrowse: return [.alternate, .command] -// case .mediaPhotoLibrary: return [.alternate, .command] -// case .mediaCamera: return [.alternate, .command] -// case .togglePoll: return [.shift, .command] -// case .toggleContentWarning: return [.shift, .command] -// case .selectVisibilityPublic: return [.command] -// // case .selectVisibilityUnlisted: return [.command] -// case .selectVisibilityPrivate: return [.command] -// case .selectVisibilityDirect: return [.command] -// } -// } -// -// var propertyList: Any { -// return rawValue -// } -// } -// -// var composeKeyCommands: [UIKeyCommand]? { -// ComposeKeyCommand.allCases.map { command in -// UIKeyCommand( -// title: command.title, -// image: nil, -// action: #selector(Self.composeKeyCommandHandler(_:)), -// input: command.input, -// modifierFlags: command.modifierFlags, -// propertyList: command.propertyList, -// alternates: [], -// discoverabilityTitle: nil, -// attributes: [], -// state: .off -// ) -// } -// } -// -// @objc private func composeKeyCommandHandler(_ sender: UIKeyCommand) { -// guard let rawValue = sender.propertyList as? String, -// let command = ComposeKeyCommand(rawValue: rawValue) else { return } -// -// switch command { -// case .discardPost: -// cancelBarButtonItemPressed(cancelBarButtonItem) -// case .publishPost: -// publishBarButtonItemPressed(publishBarButtonItem) -// case .mediaBrowse: -// present(documentPickerController, animated: true, completion: nil) -// case .mediaPhotoLibrary: -// present(photoLibraryPicker, animated: true, completion: nil) -// case .mediaCamera: -// guard UIImagePickerController.isSourceTypeAvailable(.camera) else { -// return -// } -// present(imagePickerController, animated: true, completion: nil) -// case .togglePoll: -// composeToolbarView.pollButton.sendActions(for: .touchUpInside) -// case .toggleContentWarning: -// composeToolbarView.contentWarningButton.sendActions(for: .touchUpInside) -// case .selectVisibilityPublic: -// viewModel.selectedStatusVisibility = .public -// // case .selectVisibilityUnlisted: -// // viewModel.selectedStatusVisibility.value = .unlisted -// case .selectVisibilityPrivate: -// viewModel.selectedStatusVisibility = .private -// case .selectVisibilityDirect: -// viewModel.selectedStatusVisibility = .direct -// } -// } -// -//} +extension ComposeViewController { + override var keyCommands: [UIKeyCommand]? { + composeKeyCommands + } +} + +extension ComposeViewController { + + enum ComposeKeyCommand: String, CaseIterable { + case discardPost + case publishPost + case mediaBrowse + case mediaPhotoLibrary + case mediaCamera + case togglePoll + case toggleContentWarning + case selectVisibilityPublic + // TODO: remove selectVisibilityUnlisted from codebase + // case selectVisibilityUnlisted + case selectVisibilityPrivate + case selectVisibilityDirect + + var title: String { + switch self { + case .discardPost: return L10n.Scene.Compose.Keyboard.discardPost + case .publishPost: return L10n.Scene.Compose.Keyboard.publishPost + case .mediaBrowse: return L10n.Scene.Compose.Keyboard.appendAttachmentEntry(L10n.Scene.Compose.MediaSelection.browse) + case .mediaPhotoLibrary: return L10n.Scene.Compose.Keyboard.appendAttachmentEntry(L10n.Scene.Compose.MediaSelection.photoLibrary) + case .mediaCamera: return L10n.Scene.Compose.Keyboard.appendAttachmentEntry(L10n.Scene.Compose.MediaSelection.camera) + case .togglePoll: return L10n.Scene.Compose.Keyboard.togglePoll + case .toggleContentWarning: return L10n.Scene.Compose.Keyboard.toggleContentWarning + case .selectVisibilityPublic: return L10n.Scene.Compose.Keyboard.selectVisibilityEntry(L10n.Scene.Compose.Visibility.public) + // case .selectVisibilityUnlisted: return L10n.Scene.Compose.Keyboard.selectVisibilityEntry(L10n.Scene.Compose.Visibility.unlisted) + case .selectVisibilityPrivate: return L10n.Scene.Compose.Keyboard.selectVisibilityEntry(L10n.Scene.Compose.Visibility.private) + case .selectVisibilityDirect: return L10n.Scene.Compose.Keyboard.selectVisibilityEntry(L10n.Scene.Compose.Visibility.direct) + } + } + + // UIKeyCommand input + var input: String { + switch self { + case .discardPost: return "w" // + command + case .publishPost: return "\r" // (enter) + command + case .mediaBrowse: return "b" // + option + command + case .mediaPhotoLibrary: return "p" // + option + command + case .mediaCamera: return "c" // + option + command + case .togglePoll: return "p" // + shift + command + case .toggleContentWarning: return "c" // + shift + command + case .selectVisibilityPublic: return "1" // + command + // case .selectVisibilityUnlisted: return "2" // + command + case .selectVisibilityPrivate: return "2" // + command + case .selectVisibilityDirect: return "3" // + command + } + } + + var modifierFlags: UIKeyModifierFlags { + switch self { + case .discardPost: return [.command] + case .publishPost: return [.command] + case .mediaBrowse: return [.alternate, .command] + case .mediaPhotoLibrary: return [.alternate, .command] + case .mediaCamera: return [.alternate, .command] + case .togglePoll: return [.shift, .command] + case .toggleContentWarning: return [.shift, .command] + case .selectVisibilityPublic: return [.command] + // case .selectVisibilityUnlisted: return [.command] + case .selectVisibilityPrivate: return [.command] + case .selectVisibilityDirect: return [.command] + } + } + + var propertyList: Any { + return rawValue + } + } + + var composeKeyCommands: [UIKeyCommand]? { + ComposeKeyCommand.allCases.map { command in + UIKeyCommand( + title: command.title, + image: nil, + action: #selector(Self.composeKeyCommandHandler(_:)), + input: command.input, + modifierFlags: command.modifierFlags, + propertyList: command.propertyList, + alternates: [], + discoverabilityTitle: nil, + attributes: [], + state: .off + ) + } + } + + @objc private func composeKeyCommandHandler(_ sender: UIKeyCommand) { + guard let rawValue = sender.propertyList as? String, + let command = ComposeKeyCommand(rawValue: rawValue) else { return } + + switch command { + case .discardPost: + cancelBarButtonItemPressed(cancelBarButtonItem) + case .publishPost: + publishBarButtonItemPressed(publishBarButtonItem) + case .mediaBrowse: + guard !isViewControllerIsAlreadyModal(composeContentViewController.documentPickerController) else { return } + present(composeContentViewController.documentPickerController, animated: true, completion: nil) + case .mediaPhotoLibrary: + guard !isViewControllerIsAlreadyModal(composeContentViewController.photoLibraryPicker) else { return } + present(composeContentViewController.photoLibraryPicker, animated: true, completion: nil) + case .mediaCamera: + guard UIImagePickerController.isSourceTypeAvailable(.camera) else { + return + } + guard !isViewControllerIsAlreadyModal(composeContentViewController.imagePickerController) else { return } + present(composeContentViewController.imagePickerController, animated: true, completion: nil) + case .togglePoll: + composeContentViewModel.isPollActive.toggle() + case .toggleContentWarning: + composeContentViewModel.isContentWarningActive.toggle() + case .selectVisibilityPublic: + composeContentViewModel.visibility = .public + // case .selectVisibilityUnlisted: + // viewModel.selectedStatusVisibility.value = .unlisted + case .selectVisibilityPrivate: + composeContentViewModel.visibility = .private + case .selectVisibilityDirect: + composeContentViewModel.visibility = .direct + } + } + + private func isViewControllerIsAlreadyModal(_ viewController: UIViewController) -> Bool { + return viewController.presentingViewController != nil + } + +} diff --git a/MastodonSDK/Sources/MastodonAsset/Generated/Assets.swift b/MastodonSDK/Sources/MastodonAsset/Generated/Assets.swift index fc47acdfd..53d81edb6 100644 --- a/MastodonSDK/Sources/MastodonAsset/Generated/Assets.swift +++ b/MastodonSDK/Sources/MastodonAsset/Generated/Assets.swift @@ -8,6 +8,9 @@ #elseif os(tvOS) || os(watchOS) import UIKit #endif +#if canImport(SwiftUI) + import SwiftUI +#endif // Deprecated typealiases @available(*, deprecated, renamed: "ColorAsset.Color", message: "This typealias will be removed in SwiftGen 7.0") @@ -279,6 +282,24 @@ public final class ColorAsset { return color }() + #if os(iOS) || os(tvOS) + @available(iOS 11.0, tvOS 11.0, *) + public func color(compatibleWith traitCollection: UITraitCollection) -> Color { + let bundle = Bundle.module + guard let color = Color(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load color asset named \(name).") + } + return color + } + #endif + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) + public private(set) lazy var swiftUIColor: SwiftUI.Color = { + SwiftUI.Color(asset: self) + }() + #endif + fileprivate init(name: String) { self.name = name } @@ -298,6 +319,16 @@ public extension ColorAsset.Color { } } +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) +public extension SwiftUI.Color { + init(asset: ColorAsset) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle) + } +} +#endif + public struct ImageAsset { public fileprivate(set) var name: String @@ -307,6 +338,7 @@ public struct ImageAsset { public typealias Image = UIImage #endif + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *) public var image: Image { let bundle = Bundle.module #if os(iOS) || os(tvOS) @@ -322,9 +354,28 @@ public struct ImageAsset { } return result } + + #if os(iOS) || os(tvOS) + @available(iOS 8.0, tvOS 9.0, *) + public func image(compatibleWith traitCollection: UITraitCollection) -> Image { + let bundle = Bundle.module + guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + #endif + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) + public var swiftUIImage: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif } public extension ImageAsset.Image { + @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *) @available(macOS, deprecated, message: "This initializer is unsafe on macOS, please use the ImageAsset.image property") convenience init?(asset: ImageAsset) { @@ -338,3 +389,23 @@ public extension ImageAsset.Image { #endif } } + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) +public extension SwiftUI.Image { + init(asset: ImageAsset) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle) + } + + init(asset: ImageAsset, label: Text) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: ImageAsset) { + let bundle = Bundle.module + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif diff --git a/MastodonSDK/Sources/MastodonAsset/Generated/Fonts.swift b/MastodonSDK/Sources/MastodonAsset/Generated/Fonts.swift index 22c6c9ed3..740c44bc9 100644 --- a/MastodonSDK/Sources/MastodonAsset/Generated/Fonts.swift +++ b/MastodonSDK/Sources/MastodonAsset/Generated/Fonts.swift @@ -1,18 +1,20 @@ // swiftlint:disable all // Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen -#if os(OSX) +#if os(macOS) import AppKit.NSFont #elseif os(iOS) || os(tvOS) || os(watchOS) import UIKit.UIFont #endif +#if canImport(SwiftUI) + import SwiftUI +#endif // Deprecated typealiases @available(*, deprecated, renamed: "FontConvertible.Font", message: "This typealias will be removed in SwiftGen 7.0") public typealias Font = FontConvertible.Font -// swiftlint:disable superfluous_disable_command -// swiftlint:disable file_length +// swiftlint:disable superfluous_disable_command file_length implicit_return // MARK: - Fonts @@ -36,7 +38,7 @@ public struct FontConvertible { public let family: String public let path: String - #if os(OSX) + #if os(macOS) public typealias Font = NSFont #elseif os(iOS) || os(tvOS) || os(watchOS) public typealias Font = UIFont @@ -49,12 +51,41 @@ public struct FontConvertible { return font } + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) + public func swiftUIFont(size: CGFloat) -> SwiftUI.Font { + return SwiftUI.Font.custom(self, size: size) + } + + @available(iOS 14.0, tvOS 14.0, watchOS 7.0, macOS 11.0, *) + public func swiftUIFont(fixedSize: CGFloat) -> SwiftUI.Font { + return SwiftUI.Font.custom(self, fixedSize: fixedSize) + } + + @available(iOS 14.0, tvOS 14.0, watchOS 7.0, macOS 11.0, *) + public func swiftUIFont(size: CGFloat, relativeTo textStyle: SwiftUI.Font.TextStyle) -> SwiftUI.Font { + return SwiftUI.Font.custom(self, size: size, relativeTo: textStyle) + } + #endif + public func register() { // swiftlint:disable:next conditional_returns_on_newline guard let url = url else { return } CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil) } + fileprivate func registerIfNeeded() { + #if os(iOS) || os(tvOS) || os(watchOS) + if !UIFont.fontNames(forFamilyName: family).contains(name) { + register() + } + #elseif os(macOS) + if let url = url, CTFontManagerGetScopeForURL(url as CFURL) == .none { + register() + } + #endif + } + fileprivate var url: URL? { // swiftlint:disable:next implicit_return return Bundle.module.url(forResource: path, withExtension: nil) @@ -63,16 +94,34 @@ public struct FontConvertible { public extension FontConvertible.Font { convenience init?(font: FontConvertible, size: CGFloat) { - #if os(iOS) || os(tvOS) || os(watchOS) - if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) { - font.register() - } - #elseif os(OSX) - if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none { - font.register() - } - #endif - + font.registerIfNeeded() self.init(name: font.name, size: size) } } + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) +public extension SwiftUI.Font { + static func custom(_ font: FontConvertible, size: CGFloat) -> SwiftUI.Font { + font.registerIfNeeded() + return custom(font.name, size: size) + } +} + +@available(iOS 14.0, tvOS 14.0, watchOS 7.0, macOS 11.0, *) +public extension SwiftUI.Font { + static func custom(_ font: FontConvertible, fixedSize: CGFloat) -> SwiftUI.Font { + font.registerIfNeeded() + return custom(font.name, fixedSize: fixedSize) + } + + static func custom( + _ font: FontConvertible, + size: CGFloat, + relativeTo textStyle: SwiftUI.Font.TextStyle + ) -> SwiftUI.Font { + font.registerIfNeeded() + return custom(font.name, size: size, relativeTo: textStyle) + } +} +#endif diff --git a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift index b9afdf8eb..f3d69950e 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift +++ b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift @@ -3,1432 +3,1452 @@ import Foundation -// swiftlint:disable superfluous_disable_command file_length implicit_return +// swiftlint:disable superfluous_disable_command file_length implicit_return prefer_self_in_static_references // MARK: - Strings // swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length // swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces public enum L10n { - public enum Common { public enum Alerts { public enum BlockDomain { /// Block Domain - public static let blockEntireDomain = L10n.tr("Localizable", "Common.Alerts.BlockDomain.BlockEntireDomain") + public static let blockEntireDomain = L10n.tr("Localizable", "Common.Alerts.BlockDomain.BlockEntireDomain", fallback: "Block Domain") /// Are you really, really sure you want to block the entire %@? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed. public static func title(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Alerts.BlockDomain.Title", String(describing: p1)) + return L10n.tr("Localizable", "Common.Alerts.BlockDomain.Title", String(describing: p1), fallback: "Are you really, really sure you want to block the entire %@? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.") } } public enum CleanCache { /// Successfully cleaned %@ cache. public static func message(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Alerts.CleanCache.Message", String(describing: p1)) + return L10n.tr("Localizable", "Common.Alerts.CleanCache.Message", String(describing: p1), fallback: "Successfully cleaned %@ cache.") } /// Clean Cache - public static let title = L10n.tr("Localizable", "Common.Alerts.CleanCache.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.CleanCache.Title", fallback: "Clean Cache") } public enum Common { /// Please try again. - public static let pleaseTryAgain = L10n.tr("Localizable", "Common.Alerts.Common.PleaseTryAgain") + public static let pleaseTryAgain = L10n.tr("Localizable", "Common.Alerts.Common.PleaseTryAgain", fallback: "Please try again.") /// Please try again later. - public static let pleaseTryAgainLater = L10n.tr("Localizable", "Common.Alerts.Common.PleaseTryAgainLater") + public static let pleaseTryAgainLater = L10n.tr("Localizable", "Common.Alerts.Common.PleaseTryAgainLater", fallback: "Please try again later.") } public enum DeletePost { /// Are you sure you want to delete this post? - public static let message = L10n.tr("Localizable", "Common.Alerts.DeletePost.Message") + public static let message = L10n.tr("Localizable", "Common.Alerts.DeletePost.Message", fallback: "Are you sure you want to delete this post?") /// Delete Post - public static let title = L10n.tr("Localizable", "Common.Alerts.DeletePost.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.DeletePost.Title", fallback: "Delete Post") } public enum DiscardPostContent { /// Confirm to discard composed post content. - public static let message = L10n.tr("Localizable", "Common.Alerts.DiscardPostContent.Message") + public static let message = L10n.tr("Localizable", "Common.Alerts.DiscardPostContent.Message", fallback: "Confirm to discard composed post content.") /// Discard Draft - public static let title = L10n.tr("Localizable", "Common.Alerts.DiscardPostContent.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.DiscardPostContent.Title", fallback: "Discard Draft") } public enum EditProfileFailure { /// Cannot edit profile. Please try again. - public static let message = L10n.tr("Localizable", "Common.Alerts.EditProfileFailure.Message") + public static let message = L10n.tr("Localizable", "Common.Alerts.EditProfileFailure.Message", fallback: "Cannot edit profile. Please try again.") /// Edit Profile Error - public static let title = L10n.tr("Localizable", "Common.Alerts.EditProfileFailure.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.EditProfileFailure.Title", fallback: "Edit Profile Error") } public enum PublishPostFailure { - /// Failed to publish the post.\nPlease check your internet connection. - public static let message = L10n.tr("Localizable", "Common.Alerts.PublishPostFailure.Message") + /// Failed to publish the post. + /// Please check your internet connection. + public static let message = L10n.tr("Localizable", "Common.Alerts.PublishPostFailure.Message", fallback: "Failed to publish the post.\nPlease check your internet connection.") /// Publish Failure - public static let title = L10n.tr("Localizable", "Common.Alerts.PublishPostFailure.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.PublishPostFailure.Title", fallback: "Publish Failure") public enum AttachmentsMessage { /// Cannot attach more than one video. - public static let moreThanOneVideo = L10n.tr("Localizable", "Common.Alerts.PublishPostFailure.AttachmentsMessage.MoreThanOneVideo") + public static let moreThanOneVideo = L10n.tr("Localizable", "Common.Alerts.PublishPostFailure.AttachmentsMessage.MoreThanOneVideo", fallback: "Cannot attach more than one video.") /// Cannot attach a video to a post that already contains images. - public static let videoAttachWithPhoto = L10n.tr("Localizable", "Common.Alerts.PublishPostFailure.AttachmentsMessage.VideoAttachWithPhoto") + public static let videoAttachWithPhoto = L10n.tr("Localizable", "Common.Alerts.PublishPostFailure.AttachmentsMessage.VideoAttachWithPhoto", fallback: "Cannot attach a video to a post that already contains images.") } } public enum SavePhotoFailure { /// Please enable the photo library access permission to save the photo. - public static let message = L10n.tr("Localizable", "Common.Alerts.SavePhotoFailure.Message") + public static let message = L10n.tr("Localizable", "Common.Alerts.SavePhotoFailure.Message", fallback: "Please enable the photo library access permission to save the photo.") /// Save Photo Failure - public static let title = L10n.tr("Localizable", "Common.Alerts.SavePhotoFailure.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.SavePhotoFailure.Title", fallback: "Save Photo Failure") } public enum ServerError { /// Server Error - public static let title = L10n.tr("Localizable", "Common.Alerts.ServerError.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.ServerError.Title", fallback: "Server Error") } public enum SignOut { /// Sign Out - public static let confirm = L10n.tr("Localizable", "Common.Alerts.SignOut.Confirm") + public static let confirm = L10n.tr("Localizable", "Common.Alerts.SignOut.Confirm", fallback: "Sign Out") /// Are you sure you want to sign out? - public static let message = L10n.tr("Localizable", "Common.Alerts.SignOut.Message") + public static let message = L10n.tr("Localizable", "Common.Alerts.SignOut.Message", fallback: "Are you sure you want to sign out?") /// Sign Out - public static let title = L10n.tr("Localizable", "Common.Alerts.SignOut.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.SignOut.Title", fallback: "Sign Out") } public enum SignUpFailure { /// Sign Up Failure - public static let title = L10n.tr("Localizable", "Common.Alerts.SignUpFailure.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.SignUpFailure.Title", fallback: "Sign Up Failure") } public enum VoteFailure { /// The poll has ended - public static let pollEnded = L10n.tr("Localizable", "Common.Alerts.VoteFailure.PollEnded") + public static let pollEnded = L10n.tr("Localizable", "Common.Alerts.VoteFailure.PollEnded", fallback: "The poll has ended") /// Vote Failure - public static let title = L10n.tr("Localizable", "Common.Alerts.VoteFailure.Title") + public static let title = L10n.tr("Localizable", "Common.Alerts.VoteFailure.Title", fallback: "Vote Failure") } } public enum Controls { public enum Actions { /// Add - public static let add = L10n.tr("Localizable", "Common.Controls.Actions.Add") + public static let add = L10n.tr("Localizable", "Common.Controls.Actions.Add", fallback: "Add") /// Back - public static let back = L10n.tr("Localizable", "Common.Controls.Actions.Back") + public static let back = L10n.tr("Localizable", "Common.Controls.Actions.Back", fallback: "Back") /// Block %@ public static func blockDomain(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Actions.BlockDomain", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Actions.BlockDomain", String(describing: p1), fallback: "Block %@") } /// Cancel - public static let cancel = L10n.tr("Localizable", "Common.Controls.Actions.Cancel") + public static let cancel = L10n.tr("Localizable", "Common.Controls.Actions.Cancel", fallback: "Cancel") /// Compose - public static let compose = L10n.tr("Localizable", "Common.Controls.Actions.Compose") + public static let compose = L10n.tr("Localizable", "Common.Controls.Actions.Compose", fallback: "Compose") /// Confirm - public static let confirm = L10n.tr("Localizable", "Common.Controls.Actions.Confirm") + public static let confirm = L10n.tr("Localizable", "Common.Controls.Actions.Confirm", fallback: "Confirm") /// Continue - public static let `continue` = L10n.tr("Localizable", "Common.Controls.Actions.Continue") + public static let `continue` = L10n.tr("Localizable", "Common.Controls.Actions.Continue", fallback: "Continue") /// Copy Photo - public static let copyPhoto = L10n.tr("Localizable", "Common.Controls.Actions.CopyPhoto") + public static let copyPhoto = L10n.tr("Localizable", "Common.Controls.Actions.CopyPhoto", fallback: "Copy Photo") /// Delete - public static let delete = L10n.tr("Localizable", "Common.Controls.Actions.Delete") + public static let delete = L10n.tr("Localizable", "Common.Controls.Actions.Delete", fallback: "Delete") /// Discard - public static let discard = L10n.tr("Localizable", "Common.Controls.Actions.Discard") + public static let discard = L10n.tr("Localizable", "Common.Controls.Actions.Discard", fallback: "Discard") /// Done - public static let done = L10n.tr("Localizable", "Common.Controls.Actions.Done") + public static let done = L10n.tr("Localizable", "Common.Controls.Actions.Done", fallback: "Done") /// Edit - public static let edit = L10n.tr("Localizable", "Common.Controls.Actions.Edit") + public static let edit = L10n.tr("Localizable", "Common.Controls.Actions.Edit", fallback: "Edit") /// Find people to follow - public static let findPeople = L10n.tr("Localizable", "Common.Controls.Actions.FindPeople") + public static let findPeople = L10n.tr("Localizable", "Common.Controls.Actions.FindPeople", fallback: "Find people to follow") /// Manually search instead - public static let manuallySearch = L10n.tr("Localizable", "Common.Controls.Actions.ManuallySearch") + public static let manuallySearch = L10n.tr("Localizable", "Common.Controls.Actions.ManuallySearch", fallback: "Manually search instead") /// Next - public static let next = L10n.tr("Localizable", "Common.Controls.Actions.Next") + public static let next = L10n.tr("Localizable", "Common.Controls.Actions.Next", fallback: "Next") /// OK - public static let ok = L10n.tr("Localizable", "Common.Controls.Actions.Ok") + public static let ok = L10n.tr("Localizable", "Common.Controls.Actions.Ok", fallback: "OK") /// Open - public static let `open` = L10n.tr("Localizable", "Common.Controls.Actions.Open") + public static let `open` = L10n.tr("Localizable", "Common.Controls.Actions.Open", fallback: "Open") /// Open in Browser - public static let openInBrowser = L10n.tr("Localizable", "Common.Controls.Actions.OpenInBrowser") + public static let openInBrowser = L10n.tr("Localizable", "Common.Controls.Actions.OpenInBrowser", fallback: "Open in Browser") /// Open in Safari - public static let openInSafari = L10n.tr("Localizable", "Common.Controls.Actions.OpenInSafari") + public static let openInSafari = L10n.tr("Localizable", "Common.Controls.Actions.OpenInSafari", fallback: "Open in Safari") /// Preview - public static let preview = L10n.tr("Localizable", "Common.Controls.Actions.Preview") + public static let preview = L10n.tr("Localizable", "Common.Controls.Actions.Preview", fallback: "Preview") /// Previous - public static let previous = L10n.tr("Localizable", "Common.Controls.Actions.Previous") + public static let previous = L10n.tr("Localizable", "Common.Controls.Actions.Previous", fallback: "Previous") /// Remove - public static let remove = L10n.tr("Localizable", "Common.Controls.Actions.Remove") + public static let remove = L10n.tr("Localizable", "Common.Controls.Actions.Remove", fallback: "Remove") /// Reply - public static let reply = L10n.tr("Localizable", "Common.Controls.Actions.Reply") + public static let reply = L10n.tr("Localizable", "Common.Controls.Actions.Reply", fallback: "Reply") /// Report %@ public static func reportUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Actions.ReportUser", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Actions.ReportUser", String(describing: p1), fallback: "Report %@") } /// Save - public static let save = L10n.tr("Localizable", "Common.Controls.Actions.Save") + public static let save = L10n.tr("Localizable", "Common.Controls.Actions.Save", fallback: "Save") /// Save Photo - public static let savePhoto = L10n.tr("Localizable", "Common.Controls.Actions.SavePhoto") + public static let savePhoto = L10n.tr("Localizable", "Common.Controls.Actions.SavePhoto", fallback: "Save Photo") /// See More - public static let seeMore = L10n.tr("Localizable", "Common.Controls.Actions.SeeMore") + public static let seeMore = L10n.tr("Localizable", "Common.Controls.Actions.SeeMore", fallback: "See More") /// Settings - public static let settings = L10n.tr("Localizable", "Common.Controls.Actions.Settings") + public static let settings = L10n.tr("Localizable", "Common.Controls.Actions.Settings", fallback: "Settings") /// Share - public static let share = L10n.tr("Localizable", "Common.Controls.Actions.Share") + public static let share = L10n.tr("Localizable", "Common.Controls.Actions.Share", fallback: "Share") /// Share Post - public static let sharePost = L10n.tr("Localizable", "Common.Controls.Actions.SharePost") + public static let sharePost = L10n.tr("Localizable", "Common.Controls.Actions.SharePost", fallback: "Share Post") /// Share %@ public static func shareUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Actions.ShareUser", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Actions.ShareUser", String(describing: p1), fallback: "Share %@") } /// Sign In - public static let signIn = L10n.tr("Localizable", "Common.Controls.Actions.SignIn") + public static let signIn = L10n.tr("Localizable", "Common.Controls.Actions.SignIn", fallback: "Sign In") /// Sign Up - public static let signUp = L10n.tr("Localizable", "Common.Controls.Actions.SignUp") + public static let signUp = L10n.tr("Localizable", "Common.Controls.Actions.SignUp", fallback: "Sign Up") /// Skip - public static let skip = L10n.tr("Localizable", "Common.Controls.Actions.Skip") + public static let skip = L10n.tr("Localizable", "Common.Controls.Actions.Skip", fallback: "Skip") /// Take Photo - public static let takePhoto = L10n.tr("Localizable", "Common.Controls.Actions.TakePhoto") + public static let takePhoto = L10n.tr("Localizable", "Common.Controls.Actions.TakePhoto", fallback: "Take Photo") /// Try Again - public static let tryAgain = L10n.tr("Localizable", "Common.Controls.Actions.TryAgain") + public static let tryAgain = L10n.tr("Localizable", "Common.Controls.Actions.TryAgain", fallback: "Try Again") /// Unblock %@ public static func unblockDomain(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Actions.UnblockDomain", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Actions.UnblockDomain", String(describing: p1), fallback: "Unblock %@") } } public enum Friendship { /// Block - public static let block = L10n.tr("Localizable", "Common.Controls.Friendship.Block") + public static let block = L10n.tr("Localizable", "Common.Controls.Friendship.Block", fallback: "Block") /// Block %@ public static func blockDomain(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Friendship.BlockDomain", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Friendship.BlockDomain", String(describing: p1), fallback: "Block %@") } /// Blocked - public static let blocked = L10n.tr("Localizable", "Common.Controls.Friendship.Blocked") + public static let blocked = L10n.tr("Localizable", "Common.Controls.Friendship.Blocked", fallback: "Blocked") /// Block %@ public static func blockUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Friendship.BlockUser", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Friendship.BlockUser", String(describing: p1), fallback: "Block %@") } /// Edit Info - public static let editInfo = L10n.tr("Localizable", "Common.Controls.Friendship.EditInfo") + public static let editInfo = L10n.tr("Localizable", "Common.Controls.Friendship.EditInfo", fallback: "Edit Info") /// Follow - public static let follow = L10n.tr("Localizable", "Common.Controls.Friendship.Follow") + public static let follow = L10n.tr("Localizable", "Common.Controls.Friendship.Follow", fallback: "Follow") /// Following - public static let following = L10n.tr("Localizable", "Common.Controls.Friendship.Following") + public static let following = L10n.tr("Localizable", "Common.Controls.Friendship.Following", fallback: "Following") /// Hide Reblogs - public static let hideReblogs = L10n.tr("Localizable", "Common.Controls.Friendship.HideReblogs") + public static let hideReblogs = L10n.tr("Localizable", "Common.Controls.Friendship.HideReblogs", fallback: "Hide Reblogs") /// Mute - public static let mute = L10n.tr("Localizable", "Common.Controls.Friendship.Mute") + public static let mute = L10n.tr("Localizable", "Common.Controls.Friendship.Mute", fallback: "Mute") /// Muted - public static let muted = L10n.tr("Localizable", "Common.Controls.Friendship.Muted") + public static let muted = L10n.tr("Localizable", "Common.Controls.Friendship.Muted", fallback: "Muted") /// Mute %@ public static func muteUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Friendship.MuteUser", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Friendship.MuteUser", String(describing: p1), fallback: "Mute %@") } /// Pending - public static let pending = L10n.tr("Localizable", "Common.Controls.Friendship.Pending") + public static let pending = L10n.tr("Localizable", "Common.Controls.Friendship.Pending", fallback: "Pending") /// Request - public static let request = L10n.tr("Localizable", "Common.Controls.Friendship.Request") + public static let request = L10n.tr("Localizable", "Common.Controls.Friendship.Request", fallback: "Request") /// Show Reblogs - public static let showReblogs = L10n.tr("Localizable", "Common.Controls.Friendship.ShowReblogs") + public static let showReblogs = L10n.tr("Localizable", "Common.Controls.Friendship.ShowReblogs", fallback: "Show Reblogs") /// Unblock - public static let unblock = L10n.tr("Localizable", "Common.Controls.Friendship.Unblock") + public static let unblock = L10n.tr("Localizable", "Common.Controls.Friendship.Unblock", fallback: "Unblock") /// Unblock %@ public static func unblockUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Friendship.UnblockUser", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Friendship.UnblockUser", String(describing: p1), fallback: "Unblock %@") } /// Unmute - public static let unmute = L10n.tr("Localizable", "Common.Controls.Friendship.Unmute") + public static let unmute = L10n.tr("Localizable", "Common.Controls.Friendship.Unmute", fallback: "Unmute") /// Unmute %@ public static func unmuteUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Friendship.UnmuteUser", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Friendship.UnmuteUser", String(describing: p1), fallback: "Unmute %@") } } public enum Keyboard { public enum Common { /// Compose New Post - public static let composeNewPost = L10n.tr("Localizable", "Common.Controls.Keyboard.Common.ComposeNewPost") + public static let composeNewPost = L10n.tr("Localizable", "Common.Controls.Keyboard.Common.ComposeNewPost", fallback: "Compose New Post") /// Open Settings - public static let openSettings = L10n.tr("Localizable", "Common.Controls.Keyboard.Common.OpenSettings") + public static let openSettings = L10n.tr("Localizable", "Common.Controls.Keyboard.Common.OpenSettings", fallback: "Open Settings") /// Show Favorites - public static let showFavorites = L10n.tr("Localizable", "Common.Controls.Keyboard.Common.ShowFavorites") + public static let showFavorites = L10n.tr("Localizable", "Common.Controls.Keyboard.Common.ShowFavorites", fallback: "Show Favorites") /// Switch to %@ public static func switchToTab(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Keyboard.Common.SwitchToTab", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Keyboard.Common.SwitchToTab", String(describing: p1), fallback: "Switch to %@") } } public enum SegmentedControl { /// Next Section - public static let nextSection = L10n.tr("Localizable", "Common.Controls.Keyboard.SegmentedControl.NextSection") + public static let nextSection = L10n.tr("Localizable", "Common.Controls.Keyboard.SegmentedControl.NextSection", fallback: "Next Section") /// Previous Section - public static let previousSection = L10n.tr("Localizable", "Common.Controls.Keyboard.SegmentedControl.PreviousSection") + public static let previousSection = L10n.tr("Localizable", "Common.Controls.Keyboard.SegmentedControl.PreviousSection", fallback: "Previous Section") } public enum Timeline { /// Next Post - public static let nextStatus = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.NextStatus") + public static let nextStatus = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.NextStatus", fallback: "Next Post") /// Open Author's Profile - public static let openAuthorProfile = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.OpenAuthorProfile") + public static let openAuthorProfile = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.OpenAuthorProfile", fallback: "Open Author's Profile") /// Open Reblogger's Profile - public static let openRebloggerProfile = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.OpenRebloggerProfile") + public static let openRebloggerProfile = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.OpenRebloggerProfile", fallback: "Open Reblogger's Profile") /// Open Post - public static let openStatus = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.OpenStatus") + public static let openStatus = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.OpenStatus", fallback: "Open Post") /// Preview Image - public static let previewImage = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.PreviewImage") + public static let previewImage = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.PreviewImage", fallback: "Preview Image") /// Previous Post - public static let previousStatus = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.PreviousStatus") + public static let previousStatus = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.PreviousStatus", fallback: "Previous Post") /// Reply to Post - public static let replyStatus = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.ReplyStatus") + public static let replyStatus = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.ReplyStatus", fallback: "Reply to Post") /// Toggle Content Warning - public static let toggleContentWarning = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.ToggleContentWarning") + public static let toggleContentWarning = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.ToggleContentWarning", fallback: "Toggle Content Warning") /// Toggle Favorite on Post - public static let toggleFavorite = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.ToggleFavorite") + public static let toggleFavorite = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.ToggleFavorite", fallback: "Toggle Favorite on Post") /// Toggle Reblog on Post - public static let toggleReblog = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.ToggleReblog") + public static let toggleReblog = L10n.tr("Localizable", "Common.Controls.Keyboard.Timeline.ToggleReblog", fallback: "Toggle Reblog on Post") } } public enum Status { /// Content Warning - public static let contentWarning = L10n.tr("Localizable", "Common.Controls.Status.ContentWarning") + public static let contentWarning = L10n.tr("Localizable", "Common.Controls.Status.ContentWarning", fallback: "Content Warning") /// Tap anywhere to reveal - public static let mediaContentWarning = L10n.tr("Localizable", "Common.Controls.Status.MediaContentWarning") + public static let mediaContentWarning = L10n.tr("Localizable", "Common.Controls.Status.MediaContentWarning", fallback: "Tap anywhere to reveal") /// Sensitive Content - public static let sensitiveContent = L10n.tr("Localizable", "Common.Controls.Status.SensitiveContent") + public static let sensitiveContent = L10n.tr("Localizable", "Common.Controls.Status.SensitiveContent", fallback: "Sensitive Content") /// Show Post - public static let showPost = L10n.tr("Localizable", "Common.Controls.Status.ShowPost") + public static let showPost = L10n.tr("Localizable", "Common.Controls.Status.ShowPost", fallback: "Show Post") /// Show user profile - public static let showUserProfile = L10n.tr("Localizable", "Common.Controls.Status.ShowUserProfile") + public static let showUserProfile = L10n.tr("Localizable", "Common.Controls.Status.ShowUserProfile", fallback: "Show user profile") /// Tap to reveal - public static let tapToReveal = L10n.tr("Localizable", "Common.Controls.Status.TapToReveal") + public static let tapToReveal = L10n.tr("Localizable", "Common.Controls.Status.TapToReveal", fallback: "Tap to reveal") /// %@ reblogged public static func userReblogged(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Status.UserReblogged", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Status.UserReblogged", String(describing: p1), fallback: "%@ reblogged") } /// Replied to %@ public static func userRepliedTo(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Status.UserRepliedTo", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Status.UserRepliedTo", String(describing: p1), fallback: "Replied to %@") } public enum Actions { /// Favorite - public static let favorite = L10n.tr("Localizable", "Common.Controls.Status.Actions.Favorite") + public static let favorite = L10n.tr("Localizable", "Common.Controls.Status.Actions.Favorite", fallback: "Favorite") /// Hide - public static let hide = L10n.tr("Localizable", "Common.Controls.Status.Actions.Hide") + public static let hide = L10n.tr("Localizable", "Common.Controls.Status.Actions.Hide", fallback: "Hide") /// Menu - public static let menu = L10n.tr("Localizable", "Common.Controls.Status.Actions.Menu") + public static let menu = L10n.tr("Localizable", "Common.Controls.Status.Actions.Menu", fallback: "Menu") /// Reblog - public static let reblog = L10n.tr("Localizable", "Common.Controls.Status.Actions.Reblog") + public static let reblog = L10n.tr("Localizable", "Common.Controls.Status.Actions.Reblog", fallback: "Reblog") /// Reply - public static let reply = L10n.tr("Localizable", "Common.Controls.Status.Actions.Reply") + public static let reply = L10n.tr("Localizable", "Common.Controls.Status.Actions.Reply", fallback: "Reply") /// Show GIF - public static let showGif = L10n.tr("Localizable", "Common.Controls.Status.Actions.ShowGif") + public static let showGif = L10n.tr("Localizable", "Common.Controls.Status.Actions.ShowGif", fallback: "Show GIF") /// Show image - public static let showImage = L10n.tr("Localizable", "Common.Controls.Status.Actions.ShowImage") + public static let showImage = L10n.tr("Localizable", "Common.Controls.Status.Actions.ShowImage", fallback: "Show image") /// Show video player - public static let showVideoPlayer = L10n.tr("Localizable", "Common.Controls.Status.Actions.ShowVideoPlayer") + public static let showVideoPlayer = L10n.tr("Localizable", "Common.Controls.Status.Actions.ShowVideoPlayer", fallback: "Show video player") /// Tap then hold to show menu - public static let tapThenHoldToShowMenu = L10n.tr("Localizable", "Common.Controls.Status.Actions.TapThenHoldToShowMenu") + public static let tapThenHoldToShowMenu = L10n.tr("Localizable", "Common.Controls.Status.Actions.TapThenHoldToShowMenu", fallback: "Tap then hold to show menu") /// Unfavorite - public static let unfavorite = L10n.tr("Localizable", "Common.Controls.Status.Actions.Unfavorite") + public static let unfavorite = L10n.tr("Localizable", "Common.Controls.Status.Actions.Unfavorite", fallback: "Unfavorite") /// Undo reblog - public static let unreblog = L10n.tr("Localizable", "Common.Controls.Status.Actions.Unreblog") + public static let unreblog = L10n.tr("Localizable", "Common.Controls.Status.Actions.Unreblog", fallback: "Undo reblog") } public enum MetaEntity { /// Email address: %@ public static func email(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Status.MetaEntity.Email", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Status.MetaEntity.Email", String(describing: p1), fallback: "Email address: %@") } - /// Hastag %@ + /// Hashtag: %@ public static func hashtag(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Status.MetaEntity.Hashtag", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Status.MetaEntity.Hashtag", String(describing: p1), fallback: "Hashtag: %@") } /// Show Profile: %@ public static func mention(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Status.MetaEntity.Mention", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Status.MetaEntity.Mention", String(describing: p1), fallback: "Show Profile: %@") } /// Link: %@ public static func url(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Status.MetaEntity.Url", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Status.MetaEntity.Url", String(describing: p1), fallback: "Link: %@") } } public enum Poll { /// Closed - public static let closed = L10n.tr("Localizable", "Common.Controls.Status.Poll.Closed") + public static let closed = L10n.tr("Localizable", "Common.Controls.Status.Poll.Closed", fallback: "Closed") /// Vote - public static let vote = L10n.tr("Localizable", "Common.Controls.Status.Poll.Vote") + public static let vote = L10n.tr("Localizable", "Common.Controls.Status.Poll.Vote", fallback: "Vote") } public enum Tag { /// Email - public static let email = L10n.tr("Localizable", "Common.Controls.Status.Tag.Email") + public static let email = L10n.tr("Localizable", "Common.Controls.Status.Tag.Email", fallback: "Email") /// Emoji - public static let emoji = L10n.tr("Localizable", "Common.Controls.Status.Tag.Emoji") + public static let emoji = L10n.tr("Localizable", "Common.Controls.Status.Tag.Emoji", fallback: "Emoji") /// Hashtag - public static let hashtag = L10n.tr("Localizable", "Common.Controls.Status.Tag.Hashtag") + public static let hashtag = L10n.tr("Localizable", "Common.Controls.Status.Tag.Hashtag", fallback: "Hashtag") /// Link - public static let link = L10n.tr("Localizable", "Common.Controls.Status.Tag.Link") + public static let link = L10n.tr("Localizable", "Common.Controls.Status.Tag.Link", fallback: "Link") /// Mention - public static let mention = L10n.tr("Localizable", "Common.Controls.Status.Tag.Mention") + public static let mention = L10n.tr("Localizable", "Common.Controls.Status.Tag.Mention", fallback: "Mention") /// URL - public static let url = L10n.tr("Localizable", "Common.Controls.Status.Tag.Url") + public static let url = L10n.tr("Localizable", "Common.Controls.Status.Tag.Url", fallback: "URL") } public enum Visibility { /// Only mentioned user can see this post. - public static let direct = L10n.tr("Localizable", "Common.Controls.Status.Visibility.Direct") + public static let direct = L10n.tr("Localizable", "Common.Controls.Status.Visibility.Direct", fallback: "Only mentioned user can see this post.") /// Only their followers can see this post. - public static let `private` = L10n.tr("Localizable", "Common.Controls.Status.Visibility.Private") + public static let `private` = L10n.tr("Localizable", "Common.Controls.Status.Visibility.Private", fallback: "Only their followers can see this post.") /// Only my followers can see this post. - public static let privateFromMe = L10n.tr("Localizable", "Common.Controls.Status.Visibility.PrivateFromMe") + public static let privateFromMe = L10n.tr("Localizable", "Common.Controls.Status.Visibility.PrivateFromMe", fallback: "Only my followers can see this post.") /// Everyone can see this post but not display in the public timeline. - public static let unlisted = L10n.tr("Localizable", "Common.Controls.Status.Visibility.Unlisted") + public static let unlisted = L10n.tr("Localizable", "Common.Controls.Status.Visibility.Unlisted", fallback: "Everyone can see this post but not display in the public timeline.") } } public enum Tabs { /// Home - public static let home = L10n.tr("Localizable", "Common.Controls.Tabs.Home") + public static let home = L10n.tr("Localizable", "Common.Controls.Tabs.Home", fallback: "Home") /// Notification - public static let notification = L10n.tr("Localizable", "Common.Controls.Tabs.Notification") + public static let notification = L10n.tr("Localizable", "Common.Controls.Tabs.Notification", fallback: "Notification") /// Profile - public static let profile = L10n.tr("Localizable", "Common.Controls.Tabs.Profile") + public static let profile = L10n.tr("Localizable", "Common.Controls.Tabs.Profile", fallback: "Profile") /// Search - public static let search = L10n.tr("Localizable", "Common.Controls.Tabs.Search") + public static let search = L10n.tr("Localizable", "Common.Controls.Tabs.Search", fallback: "Search") } public enum Timeline { /// Filtered - public static let filtered = L10n.tr("Localizable", "Common.Controls.Timeline.Filtered") + public static let filtered = L10n.tr("Localizable", "Common.Controls.Timeline.Filtered", fallback: "Filtered") public enum Header { - /// You can’t view this user’s profile\nuntil they unblock you. - public static let blockedWarning = L10n.tr("Localizable", "Common.Controls.Timeline.Header.BlockedWarning") - /// You can’t view this user's profile\nuntil you unblock them.\nYour profile looks like this to them. - public static let blockingWarning = L10n.tr("Localizable", "Common.Controls.Timeline.Header.BlockingWarning") + /// You can’t view this user’s profile + /// until they unblock you. + public static let blockedWarning = L10n.tr("Localizable", "Common.Controls.Timeline.Header.BlockedWarning", fallback: "You can’t view this user’s profile\nuntil they unblock you.") + /// You can’t view this user's profile + /// until you unblock them. + /// Your profile looks like this to them. + public static let blockingWarning = L10n.tr("Localizable", "Common.Controls.Timeline.Header.BlockingWarning", fallback: "You can’t view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.") /// No Post Found - public static let noStatusFound = L10n.tr("Localizable", "Common.Controls.Timeline.Header.NoStatusFound") + public static let noStatusFound = L10n.tr("Localizable", "Common.Controls.Timeline.Header.NoStatusFound", fallback: "No Post Found") /// This user has been suspended. - public static let suspendedWarning = L10n.tr("Localizable", "Common.Controls.Timeline.Header.SuspendedWarning") - /// You can’t view %@’s profile\nuntil they unblock you. + public static let suspendedWarning = L10n.tr("Localizable", "Common.Controls.Timeline.Header.SuspendedWarning", fallback: "This user has been suspended.") + /// You can’t view %@’s profile + /// until they unblock you. public static func userBlockedWarning(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Timeline.Header.UserBlockedWarning", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Timeline.Header.UserBlockedWarning", String(describing: p1), fallback: "You can’t view %@’s profile\nuntil they unblock you.") } - /// You can’t view %@’s profile\nuntil you unblock them.\nYour profile looks like this to them. + /// You can’t view %@’s profile + /// until you unblock them. + /// Your profile looks like this to them. public static func userBlockingWarning(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Timeline.Header.UserBlockingWarning", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Timeline.Header.UserBlockingWarning", String(describing: p1), fallback: "You can’t view %@’s profile\nuntil you unblock them.\nYour profile looks like this to them.") } /// %@’s account has been suspended. public static func userSuspendedWarning(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Timeline.Header.UserSuspendedWarning", String(describing: p1)) + return L10n.tr("Localizable", "Common.Controls.Timeline.Header.UserSuspendedWarning", String(describing: p1), fallback: "%@’s account has been suspended.") } } public enum Loader { /// Loading missing posts... - public static let loadingMissingPosts = L10n.tr("Localizable", "Common.Controls.Timeline.Loader.LoadingMissingPosts") + public static let loadingMissingPosts = L10n.tr("Localizable", "Common.Controls.Timeline.Loader.LoadingMissingPosts", fallback: "Loading missing posts...") /// Load missing posts - public static let loadMissingPosts = L10n.tr("Localizable", "Common.Controls.Timeline.Loader.LoadMissingPosts") + public static let loadMissingPosts = L10n.tr("Localizable", "Common.Controls.Timeline.Loader.LoadMissingPosts", fallback: "Load missing posts") /// Show more replies - public static let showMoreReplies = L10n.tr("Localizable", "Common.Controls.Timeline.Loader.ShowMoreReplies") + public static let showMoreReplies = L10n.tr("Localizable", "Common.Controls.Timeline.Loader.ShowMoreReplies", fallback: "Show more replies") } public enum Timestamp { /// Now - public static let now = L10n.tr("Localizable", "Common.Controls.Timeline.Timestamp.Now") + public static let now = L10n.tr("Localizable", "Common.Controls.Timeline.Timestamp.Now", fallback: "Now") } } } } - public enum Scene { public enum AccountList { /// Add Account - public static let addAccount = L10n.tr("Localizable", "Scene.AccountList.AddAccount") + public static let addAccount = L10n.tr("Localizable", "Scene.AccountList.AddAccount", fallback: "Add Account") /// Dismiss Account Switcher - public static let dismissAccountSwitcher = L10n.tr("Localizable", "Scene.AccountList.DismissAccountSwitcher") + public static let dismissAccountSwitcher = L10n.tr("Localizable", "Scene.AccountList.DismissAccountSwitcher", fallback: "Dismiss Account Switcher") /// Current selected profile: %@. Double tap then hold to show account switcher public static func tabBarHint(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.AccountList.TabBarHint", String(describing: p1)) + return L10n.tr("Localizable", "Scene.AccountList.TabBarHint", String(describing: p1), fallback: "Current selected profile: %@. Double tap then hold to show account switcher") } } public enum Bookmark { /// Bookmarks - public static let title = L10n.tr("Localizable", "Scene.Bookmark.Title") + public static let title = L10n.tr("Localizable", "Scene.Bookmark.Title", fallback: "Bookmarks") } public enum Compose { /// Publish - public static let composeAction = L10n.tr("Localizable", "Scene.Compose.ComposeAction") + public static let composeAction = L10n.tr("Localizable", "Scene.Compose.ComposeAction", fallback: "Publish") /// Type or paste what’s on your mind - public static let contentInputPlaceholder = L10n.tr("Localizable", "Scene.Compose.ContentInputPlaceholder") + public static let contentInputPlaceholder = L10n.tr("Localizable", "Scene.Compose.ContentInputPlaceholder", fallback: "Type or paste what’s on your mind") /// replying to %@ public static func replyingToUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Compose.ReplyingToUser", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Compose.ReplyingToUser", String(describing: p1), fallback: "replying to %@") } public enum Accessibility { /// Add Attachment - public static let appendAttachment = L10n.tr("Localizable", "Scene.Compose.Accessibility.AppendAttachment") + public static let appendAttachment = L10n.tr("Localizable", "Scene.Compose.Accessibility.AppendAttachment", fallback: "Add Attachment") /// Add Poll - public static let appendPoll = L10n.tr("Localizable", "Scene.Compose.Accessibility.AppendPoll") + public static let appendPoll = L10n.tr("Localizable", "Scene.Compose.Accessibility.AppendPoll", fallback: "Add Poll") /// Custom Emoji Picker - public static let customEmojiPicker = L10n.tr("Localizable", "Scene.Compose.Accessibility.CustomEmojiPicker") + public static let customEmojiPicker = L10n.tr("Localizable", "Scene.Compose.Accessibility.CustomEmojiPicker", fallback: "Custom Emoji Picker") /// Disable Content Warning - public static let disableContentWarning = L10n.tr("Localizable", "Scene.Compose.Accessibility.DisableContentWarning") + public static let disableContentWarning = L10n.tr("Localizable", "Scene.Compose.Accessibility.DisableContentWarning", fallback: "Disable Content Warning") /// Enable Content Warning - public static let enableContentWarning = L10n.tr("Localizable", "Scene.Compose.Accessibility.EnableContentWarning") + public static let enableContentWarning = L10n.tr("Localizable", "Scene.Compose.Accessibility.EnableContentWarning", fallback: "Enable Content Warning") /// Posting as %@ public static func postingAs(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Compose.Accessibility.PostingAs", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Compose.Accessibility.PostingAs", String(describing: p1), fallback: "Posting as %@") } /// Post Options - public static let postOptions = L10n.tr("Localizable", "Scene.Compose.Accessibility.PostOptions") + public static let postOptions = L10n.tr("Localizable", "Scene.Compose.Accessibility.PostOptions", fallback: "Post Options") /// Post Visibility Menu - public static let postVisibilityMenu = L10n.tr("Localizable", "Scene.Compose.Accessibility.PostVisibilityMenu") + public static let postVisibilityMenu = L10n.tr("Localizable", "Scene.Compose.Accessibility.PostVisibilityMenu", fallback: "Post Visibility Menu") /// Remove Poll - public static let removePoll = L10n.tr("Localizable", "Scene.Compose.Accessibility.RemovePoll") + public static let removePoll = L10n.tr("Localizable", "Scene.Compose.Accessibility.RemovePoll", fallback: "Remove Poll") } public enum Attachment { - /// This %@ is broken and can’t be\nuploaded to Mastodon. + /// This %@ is broken and can’t be + /// uploaded to Mastodon. public static func attachmentBroken(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Compose.Attachment.AttachmentBroken", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Compose.Attachment.AttachmentBroken", String(describing: p1), fallback: "This %@ is broken and can’t be\nuploaded to Mastodon.") } + /// Attachment too large + public static let attachmentTooLarge = L10n.tr("Localizable", "Scene.Compose.Attachment.AttachmentTooLarge", fallback: "Attachment too large") + /// Can not recognize this media attachment + public static let canNotRecognizeThisMediaAttachment = L10n.tr("Localizable", "Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment", fallback: "Can not recognize this media attachment") + /// Compressing... + public static let compressingState = L10n.tr("Localizable", "Scene.Compose.Attachment.CompressingState", fallback: "Compressing...") /// Describe the photo for the visually-impaired... - public static let descriptionPhoto = L10n.tr("Localizable", "Scene.Compose.Attachment.DescriptionPhoto") + public static let descriptionPhoto = L10n.tr("Localizable", "Scene.Compose.Attachment.DescriptionPhoto", fallback: "Describe the photo for the visually-impaired...") /// Describe the video for the visually-impaired... - public static let descriptionVideo = L10n.tr("Localizable", "Scene.Compose.Attachment.DescriptionVideo") + public static let descriptionVideo = L10n.tr("Localizable", "Scene.Compose.Attachment.DescriptionVideo", fallback: "Describe the video for the visually-impaired...") + /// Load Failed + public static let loadFailed = L10n.tr("Localizable", "Scene.Compose.Attachment.LoadFailed", fallback: "Load Failed") /// photo - public static let photo = L10n.tr("Localizable", "Scene.Compose.Attachment.Photo") + public static let photo = L10n.tr("Localizable", "Scene.Compose.Attachment.Photo", fallback: "photo") + /// Server Processing... + public static let serverProcessingState = L10n.tr("Localizable", "Scene.Compose.Attachment.ServerProcessingState", fallback: "Server Processing...") + /// Upload Failed + public static let uploadFailed = L10n.tr("Localizable", "Scene.Compose.Attachment.UploadFailed", fallback: "Upload Failed") /// video - public static let video = L10n.tr("Localizable", "Scene.Compose.Attachment.Video") + public static let video = L10n.tr("Localizable", "Scene.Compose.Attachment.Video", fallback: "video") } public enum AutoComplete { /// Space to add - public static let spaceToAdd = L10n.tr("Localizable", "Scene.Compose.AutoComplete.SpaceToAdd") + public static let spaceToAdd = L10n.tr("Localizable", "Scene.Compose.AutoComplete.SpaceToAdd", fallback: "Space to add") } public enum ContentWarning { /// Write an accurate warning here... - public static let placeholder = L10n.tr("Localizable", "Scene.Compose.ContentWarning.Placeholder") + public static let placeholder = L10n.tr("Localizable", "Scene.Compose.ContentWarning.Placeholder", fallback: "Write an accurate warning here...") } public enum Keyboard { /// Add Attachment - %@ public static func appendAttachmentEntry(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Compose.Keyboard.AppendAttachmentEntry", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Compose.Keyboard.AppendAttachmentEntry", String(describing: p1), fallback: "Add Attachment - %@") } /// Discard Post - public static let discardPost = L10n.tr("Localizable", "Scene.Compose.Keyboard.DiscardPost") + public static let discardPost = L10n.tr("Localizable", "Scene.Compose.Keyboard.DiscardPost", fallback: "Discard Post") /// Publish Post - public static let publishPost = L10n.tr("Localizable", "Scene.Compose.Keyboard.PublishPost") + public static let publishPost = L10n.tr("Localizable", "Scene.Compose.Keyboard.PublishPost", fallback: "Publish Post") /// Select Visibility - %@ public static func selectVisibilityEntry(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Compose.Keyboard.SelectVisibilityEntry", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Compose.Keyboard.SelectVisibilityEntry", String(describing: p1), fallback: "Select Visibility - %@") } /// Toggle Content Warning - public static let toggleContentWarning = L10n.tr("Localizable", "Scene.Compose.Keyboard.ToggleContentWarning") + public static let toggleContentWarning = L10n.tr("Localizable", "Scene.Compose.Keyboard.ToggleContentWarning", fallback: "Toggle Content Warning") /// Toggle Poll - public static let togglePoll = L10n.tr("Localizable", "Scene.Compose.Keyboard.TogglePoll") + public static let togglePoll = L10n.tr("Localizable", "Scene.Compose.Keyboard.TogglePoll", fallback: "Toggle Poll") } public enum MediaSelection { /// Browse - public static let browse = L10n.tr("Localizable", "Scene.Compose.MediaSelection.Browse") + public static let browse = L10n.tr("Localizable", "Scene.Compose.MediaSelection.Browse", fallback: "Browse") /// Take Photo - public static let camera = L10n.tr("Localizable", "Scene.Compose.MediaSelection.Camera") + public static let camera = L10n.tr("Localizable", "Scene.Compose.MediaSelection.Camera", fallback: "Take Photo") /// Photo Library - public static let photoLibrary = L10n.tr("Localizable", "Scene.Compose.MediaSelection.PhotoLibrary") + public static let photoLibrary = L10n.tr("Localizable", "Scene.Compose.MediaSelection.PhotoLibrary", fallback: "Photo Library") } public enum Poll { /// Duration: %@ public static func durationTime(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Compose.Poll.DurationTime", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Compose.Poll.DurationTime", String(describing: p1), fallback: "Duration: %@") } /// 1 Day - public static let oneDay = L10n.tr("Localizable", "Scene.Compose.Poll.OneDay") + public static let oneDay = L10n.tr("Localizable", "Scene.Compose.Poll.OneDay", fallback: "1 Day") /// 1 Hour - public static let oneHour = L10n.tr("Localizable", "Scene.Compose.Poll.OneHour") + public static let oneHour = L10n.tr("Localizable", "Scene.Compose.Poll.OneHour", fallback: "1 Hour") /// Option %ld public static func optionNumber(_ p1: Int) -> String { - return L10n.tr("Localizable", "Scene.Compose.Poll.OptionNumber", p1) + return L10n.tr("Localizable", "Scene.Compose.Poll.OptionNumber", p1, fallback: "Option %ld") } /// 7 Days - public static let sevenDays = L10n.tr("Localizable", "Scene.Compose.Poll.SevenDays") + public static let sevenDays = L10n.tr("Localizable", "Scene.Compose.Poll.SevenDays", fallback: "7 Days") /// 6 Hours - public static let sixHours = L10n.tr("Localizable", "Scene.Compose.Poll.SixHours") + public static let sixHours = L10n.tr("Localizable", "Scene.Compose.Poll.SixHours", fallback: "6 Hours") + /// The poll has empty option + public static let thePollHasEmptyOption = L10n.tr("Localizable", "Scene.Compose.Poll.ThePollHasEmptyOption", fallback: "The poll has empty option") + /// The poll is invalid + public static let thePollIsInvalid = L10n.tr("Localizable", "Scene.Compose.Poll.ThePollIsInvalid", fallback: "The poll is invalid") /// 30 minutes - public static let thirtyMinutes = L10n.tr("Localizable", "Scene.Compose.Poll.ThirtyMinutes") + public static let thirtyMinutes = L10n.tr("Localizable", "Scene.Compose.Poll.ThirtyMinutes", fallback: "30 minutes") /// 3 Days - public static let threeDays = L10n.tr("Localizable", "Scene.Compose.Poll.ThreeDays") + public static let threeDays = L10n.tr("Localizable", "Scene.Compose.Poll.ThreeDays", fallback: "3 Days") } public enum Title { /// New Post - public static let newPost = L10n.tr("Localizable", "Scene.Compose.Title.NewPost") + public static let newPost = L10n.tr("Localizable", "Scene.Compose.Title.NewPost", fallback: "New Post") /// New Reply - public static let newReply = L10n.tr("Localizable", "Scene.Compose.Title.NewReply") + public static let newReply = L10n.tr("Localizable", "Scene.Compose.Title.NewReply", fallback: "New Reply") } public enum Visibility { /// Only people I mention - public static let direct = L10n.tr("Localizable", "Scene.Compose.Visibility.Direct") + public static let direct = L10n.tr("Localizable", "Scene.Compose.Visibility.Direct", fallback: "Only people I mention") /// Followers only - public static let `private` = L10n.tr("Localizable", "Scene.Compose.Visibility.Private") + public static let `private` = L10n.tr("Localizable", "Scene.Compose.Visibility.Private", fallback: "Followers only") /// Public - public static let `public` = L10n.tr("Localizable", "Scene.Compose.Visibility.Public") + public static let `public` = L10n.tr("Localizable", "Scene.Compose.Visibility.Public", fallback: "Public") /// Unlisted - public static let unlisted = L10n.tr("Localizable", "Scene.Compose.Visibility.Unlisted") + public static let unlisted = L10n.tr("Localizable", "Scene.Compose.Visibility.Unlisted", fallback: "Unlisted") } } public enum ConfirmEmail { /// Tap the link we emailed to you to verify your account. - public static let subtitle = L10n.tr("Localizable", "Scene.ConfirmEmail.Subtitle") + public static let subtitle = L10n.tr("Localizable", "Scene.ConfirmEmail.Subtitle", fallback: "Tap the link we emailed to you to verify your account.") /// Tap the link we emailed to you to verify your account - public static let tapTheLinkWeEmailedToYouToVerifyYourAccount = L10n.tr("Localizable", "Scene.ConfirmEmail.TapTheLinkWeEmailedToYouToVerifyYourAccount") + public static let tapTheLinkWeEmailedToYouToVerifyYourAccount = L10n.tr("Localizable", "Scene.ConfirmEmail.TapTheLinkWeEmailedToYouToVerifyYourAccount", fallback: "Tap the link we emailed to you to verify your account") /// One last thing. - public static let title = L10n.tr("Localizable", "Scene.ConfirmEmail.Title") + public static let title = L10n.tr("Localizable", "Scene.ConfirmEmail.Title", fallback: "One last thing.") public enum Button { /// Open Email App - public static let openEmailApp = L10n.tr("Localizable", "Scene.ConfirmEmail.Button.OpenEmailApp") + public static let openEmailApp = L10n.tr("Localizable", "Scene.ConfirmEmail.Button.OpenEmailApp", fallback: "Open Email App") /// Resend - public static let resend = L10n.tr("Localizable", "Scene.ConfirmEmail.Button.Resend") + public static let resend = L10n.tr("Localizable", "Scene.ConfirmEmail.Button.Resend", fallback: "Resend") } public enum DontReceiveEmail { /// Check if your email address is correct as well as your junk folder if you haven’t. - public static let description = L10n.tr("Localizable", "Scene.ConfirmEmail.DontReceiveEmail.Description") + public static let description = L10n.tr("Localizable", "Scene.ConfirmEmail.DontReceiveEmail.Description", fallback: "Check if your email address is correct as well as your junk folder if you haven’t.") /// Resend Email - public static let resendEmail = L10n.tr("Localizable", "Scene.ConfirmEmail.DontReceiveEmail.ResendEmail") + public static let resendEmail = L10n.tr("Localizable", "Scene.ConfirmEmail.DontReceiveEmail.ResendEmail", fallback: "Resend Email") /// Check your email - public static let title = L10n.tr("Localizable", "Scene.ConfirmEmail.DontReceiveEmail.Title") + public static let title = L10n.tr("Localizable", "Scene.ConfirmEmail.DontReceiveEmail.Title", fallback: "Check your email") } public enum OpenEmailApp { /// We just sent you an email. Check your junk folder if you haven’t. - public static let description = L10n.tr("Localizable", "Scene.ConfirmEmail.OpenEmailApp.Description") + public static let description = L10n.tr("Localizable", "Scene.ConfirmEmail.OpenEmailApp.Description", fallback: "We just sent you an email. Check your junk folder if you haven’t.") /// Mail - public static let mail = L10n.tr("Localizable", "Scene.ConfirmEmail.OpenEmailApp.Mail") + public static let mail = L10n.tr("Localizable", "Scene.ConfirmEmail.OpenEmailApp.Mail", fallback: "Mail") /// Open Email Client - public static let openEmailClient = L10n.tr("Localizable", "Scene.ConfirmEmail.OpenEmailApp.OpenEmailClient") + public static let openEmailClient = L10n.tr("Localizable", "Scene.ConfirmEmail.OpenEmailApp.OpenEmailClient", fallback: "Open Email Client") /// Check your inbox. - public static let title = L10n.tr("Localizable", "Scene.ConfirmEmail.OpenEmailApp.Title") + public static let title = L10n.tr("Localizable", "Scene.ConfirmEmail.OpenEmailApp.Title", fallback: "Check your inbox.") } } public enum Discovery { /// These are the posts gaining traction in your corner of Mastodon. - public static let intro = L10n.tr("Localizable", "Scene.Discovery.Intro") + public static let intro = L10n.tr("Localizable", "Scene.Discovery.Intro", fallback: "These are the posts gaining traction in your corner of Mastodon.") public enum Tabs { /// Community - public static let community = L10n.tr("Localizable", "Scene.Discovery.Tabs.Community") + public static let community = L10n.tr("Localizable", "Scene.Discovery.Tabs.Community", fallback: "Community") /// For You - public static let forYou = L10n.tr("Localizable", "Scene.Discovery.Tabs.ForYou") + public static let forYou = L10n.tr("Localizable", "Scene.Discovery.Tabs.ForYou", fallback: "For You") /// Hashtags - public static let hashtags = L10n.tr("Localizable", "Scene.Discovery.Tabs.Hashtags") + public static let hashtags = L10n.tr("Localizable", "Scene.Discovery.Tabs.Hashtags", fallback: "Hashtags") /// News - public static let news = L10n.tr("Localizable", "Scene.Discovery.Tabs.News") + public static let news = L10n.tr("Localizable", "Scene.Discovery.Tabs.News", fallback: "News") /// Posts - public static let posts = L10n.tr("Localizable", "Scene.Discovery.Tabs.Posts") + public static let posts = L10n.tr("Localizable", "Scene.Discovery.Tabs.Posts", fallback: "Posts") } } public enum Familiarfollowers { /// Followed by %@ public static func followedByNames(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Familiarfollowers.FollowedByNames", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Familiarfollowers.FollowedByNames", String(describing: p1), fallback: "Followed by %@") } /// Followers you familiar - public static let title = L10n.tr("Localizable", "Scene.Familiarfollowers.Title") + public static let title = L10n.tr("Localizable", "Scene.Familiarfollowers.Title", fallback: "Followers you familiar") } public enum Favorite { /// Your Favorites - public static let title = L10n.tr("Localizable", "Scene.Favorite.Title") + public static let title = L10n.tr("Localizable", "Scene.Favorite.Title", fallback: "Your Favorites") } public enum FavoritedBy { /// Favorited By - public static let title = L10n.tr("Localizable", "Scene.FavoritedBy.Title") + public static let title = L10n.tr("Localizable", "Scene.FavoritedBy.Title", fallback: "Favorited By") } public enum Follower { /// Followers from other servers are not displayed. - public static let footer = L10n.tr("Localizable", "Scene.Follower.Footer") + public static let footer = L10n.tr("Localizable", "Scene.Follower.Footer", fallback: "Followers from other servers are not displayed.") /// follower - public static let title = L10n.tr("Localizable", "Scene.Follower.Title") + public static let title = L10n.tr("Localizable", "Scene.Follower.Title", fallback: "follower") } public enum Following { /// Follows from other servers are not displayed. - public static let footer = L10n.tr("Localizable", "Scene.Following.Footer") + public static let footer = L10n.tr("Localizable", "Scene.Following.Footer", fallback: "Follows from other servers are not displayed.") /// following - public static let title = L10n.tr("Localizable", "Scene.Following.Title") + public static let title = L10n.tr("Localizable", "Scene.Following.Title", fallback: "following") } public enum HomeTimeline { /// Home - public static let title = L10n.tr("Localizable", "Scene.HomeTimeline.Title") + public static let title = L10n.tr("Localizable", "Scene.HomeTimeline.Title", fallback: "Home") public enum NavigationBarState { /// See new posts - public static let newPosts = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.NewPosts") + public static let newPosts = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.NewPosts", fallback: "See new posts") /// Offline - public static let offline = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Offline") + public static let offline = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Offline", fallback: "Offline") /// Published! - public static let published = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Published") + public static let published = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Published", fallback: "Published!") /// Publishing post... - public static let publishing = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Publishing") + public static let publishing = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Publishing", fallback: "Publishing post...") public enum Accessibility { /// Tap to scroll to top and tap again to previous location - public static let logoHint = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Accessibility.LogoHint") + public static let logoHint = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Accessibility.LogoHint", fallback: "Tap to scroll to top and tap again to previous location") /// Logo Button - public static let logoLabel = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Accessibility.LogoLabel") + public static let logoLabel = L10n.tr("Localizable", "Scene.HomeTimeline.NavigationBarState.Accessibility.LogoLabel", fallback: "Logo Button") } } } public enum Notification { public enum FollowRequest { /// Accept - public static let accept = L10n.tr("Localizable", "Scene.Notification.FollowRequest.Accept") + public static let accept = L10n.tr("Localizable", "Scene.Notification.FollowRequest.Accept", fallback: "Accept") /// Accepted - public static let accepted = L10n.tr("Localizable", "Scene.Notification.FollowRequest.Accepted") + public static let accepted = L10n.tr("Localizable", "Scene.Notification.FollowRequest.Accepted", fallback: "Accepted") /// reject - public static let reject = L10n.tr("Localizable", "Scene.Notification.FollowRequest.Reject") + public static let reject = L10n.tr("Localizable", "Scene.Notification.FollowRequest.Reject", fallback: "reject") /// Rejected - public static let rejected = L10n.tr("Localizable", "Scene.Notification.FollowRequest.Rejected") + public static let rejected = L10n.tr("Localizable", "Scene.Notification.FollowRequest.Rejected", fallback: "Rejected") } public enum Keyobard { /// Show Everything - public static let showEverything = L10n.tr("Localizable", "Scene.Notification.Keyobard.ShowEverything") + public static let showEverything = L10n.tr("Localizable", "Scene.Notification.Keyobard.ShowEverything", fallback: "Show Everything") /// Show Mentions - public static let showMentions = L10n.tr("Localizable", "Scene.Notification.Keyobard.ShowMentions") + public static let showMentions = L10n.tr("Localizable", "Scene.Notification.Keyobard.ShowMentions", fallback: "Show Mentions") } public enum NotificationDescription { /// favorited your post - public static let favoritedYourPost = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.FavoritedYourPost") + public static let favoritedYourPost = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.FavoritedYourPost", fallback: "favorited your post") /// followed you - public static let followedYou = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.FollowedYou") + public static let followedYou = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.FollowedYou", fallback: "followed you") /// mentioned you - public static let mentionedYou = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.MentionedYou") + public static let mentionedYou = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.MentionedYou", fallback: "mentioned you") /// poll has ended - public static let pollHasEnded = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.PollHasEnded") + public static let pollHasEnded = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.PollHasEnded", fallback: "poll has ended") /// reblogged your post - public static let rebloggedYourPost = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.RebloggedYourPost") + public static let rebloggedYourPost = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.RebloggedYourPost", fallback: "reblogged your post") /// request to follow you - public static let requestToFollowYou = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.RequestToFollowYou") + public static let requestToFollowYou = L10n.tr("Localizable", "Scene.Notification.NotificationDescription.RequestToFollowYou", fallback: "request to follow you") } public enum Title { /// Everything - public static let everything = L10n.tr("Localizable", "Scene.Notification.Title.Everything") + public static let everything = L10n.tr("Localizable", "Scene.Notification.Title.Everything", fallback: "Everything") /// Mentions - public static let mentions = L10n.tr("Localizable", "Scene.Notification.Title.Mentions") + public static let mentions = L10n.tr("Localizable", "Scene.Notification.Title.Mentions", fallback: "Mentions") } } public enum Preview { public enum Keyboard { /// Close Preview - public static let closePreview = L10n.tr("Localizable", "Scene.Preview.Keyboard.ClosePreview") + public static let closePreview = L10n.tr("Localizable", "Scene.Preview.Keyboard.ClosePreview", fallback: "Close Preview") /// Show Next - public static let showNext = L10n.tr("Localizable", "Scene.Preview.Keyboard.ShowNext") + public static let showNext = L10n.tr("Localizable", "Scene.Preview.Keyboard.ShowNext", fallback: "Show Next") /// Show Previous - public static let showPrevious = L10n.tr("Localizable", "Scene.Preview.Keyboard.ShowPrevious") + public static let showPrevious = L10n.tr("Localizable", "Scene.Preview.Keyboard.ShowPrevious", fallback: "Show Previous") } } public enum Profile { public enum Accessibility { /// Double tap to open the list - public static let doubleTapToOpenTheList = L10n.tr("Localizable", "Scene.Profile.Accessibility.DoubleTapToOpenTheList") + public static let doubleTapToOpenTheList = L10n.tr("Localizable", "Scene.Profile.Accessibility.DoubleTapToOpenTheList", fallback: "Double tap to open the list") /// Edit avatar image - public static let editAvatarImage = L10n.tr("Localizable", "Scene.Profile.Accessibility.EditAvatarImage") + public static let editAvatarImage = L10n.tr("Localizable", "Scene.Profile.Accessibility.EditAvatarImage", fallback: "Edit avatar image") /// Show avatar image - public static let showAvatarImage = L10n.tr("Localizable", "Scene.Profile.Accessibility.ShowAvatarImage") + public static let showAvatarImage = L10n.tr("Localizable", "Scene.Profile.Accessibility.ShowAvatarImage", fallback: "Show avatar image") /// Show banner image - public static let showBannerImage = L10n.tr("Localizable", "Scene.Profile.Accessibility.ShowBannerImage") + public static let showBannerImage = L10n.tr("Localizable", "Scene.Profile.Accessibility.ShowBannerImage", fallback: "Show banner image") } public enum Dashboard { /// followers - public static let followers = L10n.tr("Localizable", "Scene.Profile.Dashboard.Followers") + public static let followers = L10n.tr("Localizable", "Scene.Profile.Dashboard.Followers", fallback: "followers") /// following - public static let following = L10n.tr("Localizable", "Scene.Profile.Dashboard.Following") + public static let following = L10n.tr("Localizable", "Scene.Profile.Dashboard.Following", fallback: "following") /// posts - public static let posts = L10n.tr("Localizable", "Scene.Profile.Dashboard.Posts") + public static let posts = L10n.tr("Localizable", "Scene.Profile.Dashboard.Posts", fallback: "posts") } public enum Fields { /// Add Row - public static let addRow = L10n.tr("Localizable", "Scene.Profile.Fields.AddRow") + public static let addRow = L10n.tr("Localizable", "Scene.Profile.Fields.AddRow", fallback: "Add Row") public enum Placeholder { /// Content - public static let content = L10n.tr("Localizable", "Scene.Profile.Fields.Placeholder.Content") + public static let content = L10n.tr("Localizable", "Scene.Profile.Fields.Placeholder.Content", fallback: "Content") /// Label - public static let label = L10n.tr("Localizable", "Scene.Profile.Fields.Placeholder.Label") + public static let label = L10n.tr("Localizable", "Scene.Profile.Fields.Placeholder.Label", fallback: "Label") } } public enum Header { /// Follows You - public static let followsYou = L10n.tr("Localizable", "Scene.Profile.Header.FollowsYou") + public static let followsYou = L10n.tr("Localizable", "Scene.Profile.Header.FollowsYou", fallback: "Follows You") } public enum RelationshipActionAlert { public enum ConfirmBlockUser { /// Confirm to block %@ public static func message(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message", String(describing: p1), fallback: "Confirm to block %@") } /// Block Account - public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title") + public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title", fallback: "Block Account") } public enum ConfirmHideReblogs { /// Confirm to hide reblogs - public static let message = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message") + public static let message = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message", fallback: "Confirm to hide reblogs") /// Hide Reblogs - public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title") + public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title", fallback: "Hide Reblogs") } public enum ConfirmMuteUser { /// Confirm to mute %@ public static func message(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message", String(describing: p1), fallback: "Confirm to mute %@") } /// Mute Account - public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title") + public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title", fallback: "Mute Account") } public enum ConfirmShowReblogs { /// Confirm to show reblogs - public static let message = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message") + public static let message = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message", fallback: "Confirm to show reblogs") /// Show Reblogs - public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title") + public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title", fallback: "Show Reblogs") } public enum ConfirmUnblockUser { /// Confirm to unblock %@ public static func message(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message", String(describing: p1), fallback: "Confirm to unblock %@") } /// Unblock Account - public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title") + public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title", fallback: "Unblock Account") } public enum ConfirmUnmuteUser { /// Confirm to unmute %@ public static func message(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message", String(describing: p1), fallback: "Confirm to unmute %@") } /// Unmute Account - public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Title") + public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Title", fallback: "Unmute Account") } } public enum SegmentedControl { /// About - public static let about = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.About") + public static let about = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.About", fallback: "About") /// Media - public static let media = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.Media") + public static let media = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.Media", fallback: "Media") /// Posts - public static let posts = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.Posts") + public static let posts = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.Posts", fallback: "Posts") /// Posts and Replies - public static let postsAndReplies = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.PostsAndReplies") + public static let postsAndReplies = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.PostsAndReplies", fallback: "Posts and Replies") /// Replies - public static let replies = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.Replies") + public static let replies = L10n.tr("Localizable", "Scene.Profile.SegmentedControl.Replies", fallback: "Replies") } } public enum RebloggedBy { /// Reblogged By - public static let title = L10n.tr("Localizable", "Scene.RebloggedBy.Title") + public static let title = L10n.tr("Localizable", "Scene.RebloggedBy.Title", fallback: "Reblogged By") } public enum Register { /// Let’s get you set up on %@ public static func letsGetYouSetUpOnDomain(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.LetsGetYouSetUpOnDomain", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.LetsGetYouSetUpOnDomain", String(describing: p1), fallback: "Let’s get you set up on %@") } /// Let’s get you set up on %@ public static func title(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Title", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Title", String(describing: p1), fallback: "Let’s get you set up on %@") } public enum Error { public enum Item { /// Agreement - public static let agreement = L10n.tr("Localizable", "Scene.Register.Error.Item.Agreement") + public static let agreement = L10n.tr("Localizable", "Scene.Register.Error.Item.Agreement", fallback: "Agreement") /// Email - public static let email = L10n.tr("Localizable", "Scene.Register.Error.Item.Email") + public static let email = L10n.tr("Localizable", "Scene.Register.Error.Item.Email", fallback: "Email") /// Locale - public static let locale = L10n.tr("Localizable", "Scene.Register.Error.Item.Locale") + public static let locale = L10n.tr("Localizable", "Scene.Register.Error.Item.Locale", fallback: "Locale") /// Password - public static let password = L10n.tr("Localizable", "Scene.Register.Error.Item.Password") + public static let password = L10n.tr("Localizable", "Scene.Register.Error.Item.Password", fallback: "Password") /// Reason - public static let reason = L10n.tr("Localizable", "Scene.Register.Error.Item.Reason") + public static let reason = L10n.tr("Localizable", "Scene.Register.Error.Item.Reason", fallback: "Reason") /// Username - public static let username = L10n.tr("Localizable", "Scene.Register.Error.Item.Username") + public static let username = L10n.tr("Localizable", "Scene.Register.Error.Item.Username", fallback: "Username") } public enum Reason { /// %@ must be accepted public static func accepted(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.Accepted", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.Accepted", String(describing: p1), fallback: "%@ must be accepted") } /// %@ is required public static func blank(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.Blank", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.Blank", String(describing: p1), fallback: "%@ is required") } /// %@ contains a disallowed email provider public static func blocked(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.Blocked", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.Blocked", String(describing: p1), fallback: "%@ contains a disallowed email provider") } /// %@ is not a supported value public static func inclusion(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.Inclusion", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.Inclusion", String(describing: p1), fallback: "%@ is not a supported value") } /// %@ is invalid public static func invalid(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.Invalid", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.Invalid", String(describing: p1), fallback: "%@ is invalid") } /// %@ is a reserved keyword public static func reserved(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.Reserved", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.Reserved", String(describing: p1), fallback: "%@ is a reserved keyword") } /// %@ is already in use public static func taken(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.Taken", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.Taken", String(describing: p1), fallback: "%@ is already in use") } /// %@ is too long public static func tooLong(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.TooLong", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.TooLong", String(describing: p1), fallback: "%@ is too long") } /// %@ is too short public static func tooShort(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.TooShort", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.TooShort", String(describing: p1), fallback: "%@ is too short") } /// %@ does not seem to exist public static func unreachable(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Register.Error.Reason.Unreachable", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Register.Error.Reason.Unreachable", String(describing: p1), fallback: "%@ does not seem to exist") } } public enum Special { /// This is not a valid email address - public static let emailInvalid = L10n.tr("Localizable", "Scene.Register.Error.Special.EmailInvalid") + public static let emailInvalid = L10n.tr("Localizable", "Scene.Register.Error.Special.EmailInvalid", fallback: "This is not a valid email address") /// Password is too short (must be at least 8 characters) - public static let passwordTooShort = L10n.tr("Localizable", "Scene.Register.Error.Special.PasswordTooShort") + public static let passwordTooShort = L10n.tr("Localizable", "Scene.Register.Error.Special.PasswordTooShort", fallback: "Password is too short (must be at least 8 characters)") /// Username must only contain alphanumeric characters and underscores - public static let usernameInvalid = L10n.tr("Localizable", "Scene.Register.Error.Special.UsernameInvalid") + public static let usernameInvalid = L10n.tr("Localizable", "Scene.Register.Error.Special.UsernameInvalid", fallback: "Username must only contain alphanumeric characters and underscores") /// Username is too long (can’t be longer than 30 characters) - public static let usernameTooLong = L10n.tr("Localizable", "Scene.Register.Error.Special.UsernameTooLong") + public static let usernameTooLong = L10n.tr("Localizable", "Scene.Register.Error.Special.UsernameTooLong", fallback: "Username is too long (can’t be longer than 30 characters)") } } public enum Input { public enum Avatar { /// Delete - public static let delete = L10n.tr("Localizable", "Scene.Register.Input.Avatar.Delete") + public static let delete = L10n.tr("Localizable", "Scene.Register.Input.Avatar.Delete", fallback: "Delete") } public enum DisplayName { /// display name - public static let placeholder = L10n.tr("Localizable", "Scene.Register.Input.DisplayName.Placeholder") + public static let placeholder = L10n.tr("Localizable", "Scene.Register.Input.DisplayName.Placeholder", fallback: "display name") } public enum Email { /// email - public static let placeholder = L10n.tr("Localizable", "Scene.Register.Input.Email.Placeholder") + public static let placeholder = L10n.tr("Localizable", "Scene.Register.Input.Email.Placeholder", fallback: "email") } public enum Invite { /// Why do you want to join? - public static let registrationUserInviteRequest = L10n.tr("Localizable", "Scene.Register.Input.Invite.RegistrationUserInviteRequest") + public static let registrationUserInviteRequest = L10n.tr("Localizable", "Scene.Register.Input.Invite.RegistrationUserInviteRequest", fallback: "Why do you want to join?") } public enum Password { /// 8 characters - public static let characterLimit = L10n.tr("Localizable", "Scene.Register.Input.Password.CharacterLimit") + public static let characterLimit = L10n.tr("Localizable", "Scene.Register.Input.Password.CharacterLimit", fallback: "8 characters") /// Your password needs at least eight characters - public static let hint = L10n.tr("Localizable", "Scene.Register.Input.Password.Hint") + public static let hint = L10n.tr("Localizable", "Scene.Register.Input.Password.Hint", fallback: "Your password needs at least eight characters") /// password - public static let placeholder = L10n.tr("Localizable", "Scene.Register.Input.Password.Placeholder") + public static let placeholder = L10n.tr("Localizable", "Scene.Register.Input.Password.Placeholder", fallback: "password") /// Your password needs at least: - public static let require = L10n.tr("Localizable", "Scene.Register.Input.Password.Require") + public static let require = L10n.tr("Localizable", "Scene.Register.Input.Password.Require", fallback: "Your password needs at least:") public enum Accessibility { /// checked - public static let checked = L10n.tr("Localizable", "Scene.Register.Input.Password.Accessibility.Checked") + public static let checked = L10n.tr("Localizable", "Scene.Register.Input.Password.Accessibility.Checked", fallback: "checked") /// unchecked - public static let unchecked = L10n.tr("Localizable", "Scene.Register.Input.Password.Accessibility.Unchecked") + public static let unchecked = L10n.tr("Localizable", "Scene.Register.Input.Password.Accessibility.Unchecked", fallback: "unchecked") } } public enum Username { /// This username is taken. - public static let duplicatePrompt = L10n.tr("Localizable", "Scene.Register.Input.Username.DuplicatePrompt") + public static let duplicatePrompt = L10n.tr("Localizable", "Scene.Register.Input.Username.DuplicatePrompt", fallback: "This username is taken.") /// username - public static let placeholder = L10n.tr("Localizable", "Scene.Register.Input.Username.Placeholder") + public static let placeholder = L10n.tr("Localizable", "Scene.Register.Input.Username.Placeholder", fallback: "username") } } } public enum Report { /// Are there any other posts you’d like to add to the report? - public static let content1 = L10n.tr("Localizable", "Scene.Report.Content1") + public static let content1 = L10n.tr("Localizable", "Scene.Report.Content1", fallback: "Are there any other posts you’d like to add to the report?") /// Is there anything the moderators should know about this report? - public static let content2 = L10n.tr("Localizable", "Scene.Report.Content2") + public static let content2 = L10n.tr("Localizable", "Scene.Report.Content2", fallback: "Is there anything the moderators should know about this report?") /// REPORTED - public static let reported = L10n.tr("Localizable", "Scene.Report.Reported") + public static let reported = L10n.tr("Localizable", "Scene.Report.Reported", fallback: "REPORTED") /// Thanks for reporting, we’ll look into this. - public static let reportSentTitle = L10n.tr("Localizable", "Scene.Report.ReportSentTitle") + public static let reportSentTitle = L10n.tr("Localizable", "Scene.Report.ReportSentTitle", fallback: "Thanks for reporting, we’ll look into this.") /// Send Report - public static let send = L10n.tr("Localizable", "Scene.Report.Send") + public static let send = L10n.tr("Localizable", "Scene.Report.Send", fallback: "Send Report") /// Send without comment - public static let skipToSend = L10n.tr("Localizable", "Scene.Report.SkipToSend") + public static let skipToSend = L10n.tr("Localizable", "Scene.Report.SkipToSend", fallback: "Send without comment") /// Step 1 of 2 - public static let step1 = L10n.tr("Localizable", "Scene.Report.Step1") + public static let step1 = L10n.tr("Localizable", "Scene.Report.Step1", fallback: "Step 1 of 2") /// Step 2 of 2 - public static let step2 = L10n.tr("Localizable", "Scene.Report.Step2") + public static let step2 = L10n.tr("Localizable", "Scene.Report.Step2", fallback: "Step 2 of 2") /// Type or paste additional comments - public static let textPlaceholder = L10n.tr("Localizable", "Scene.Report.TextPlaceholder") + public static let textPlaceholder = L10n.tr("Localizable", "Scene.Report.TextPlaceholder", fallback: "Type or paste additional comments") /// Report %@ public static func title(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Report.Title", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Report.Title", String(describing: p1), fallback: "Report %@") } /// Report - public static let titleReport = L10n.tr("Localizable", "Scene.Report.TitleReport") + public static let titleReport = L10n.tr("Localizable", "Scene.Report.TitleReport", fallback: "Report") public enum StepFinal { /// Block %@ public static func blockUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Report.StepFinal.BlockUser", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Report.StepFinal.BlockUser", String(describing: p1), fallback: "Block %@") } /// Don’t want to see this? - public static let dontWantToSeeThis = L10n.tr("Localizable", "Scene.Report.StepFinal.DontWantToSeeThis") + public static let dontWantToSeeThis = L10n.tr("Localizable", "Scene.Report.StepFinal.DontWantToSeeThis", fallback: "Don’t want to see this?") /// Mute %@ public static func muteUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Report.StepFinal.MuteUser", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Report.StepFinal.MuteUser", String(describing: p1), fallback: "Mute %@") } /// They will no longer be able to follow or see your posts, but they can see if they’ve been blocked. - public static let theyWillNoLongerBeAbleToFollowOrSeeYourPostsButTheyCanSeeIfTheyveBeenBlocked = L10n.tr("Localizable", "Scene.Report.StepFinal.TheyWillNoLongerBeAbleToFollowOrSeeYourPostsButTheyCanSeeIfTheyveBeenBlocked") + public static let theyWillNoLongerBeAbleToFollowOrSeeYourPostsButTheyCanSeeIfTheyveBeenBlocked = L10n.tr("Localizable", "Scene.Report.StepFinal.TheyWillNoLongerBeAbleToFollowOrSeeYourPostsButTheyCanSeeIfTheyveBeenBlocked", fallback: "They will no longer be able to follow or see your posts, but they can see if they’ve been blocked.") /// Unfollow - public static let unfollow = L10n.tr("Localizable", "Scene.Report.StepFinal.Unfollow") + public static let unfollow = L10n.tr("Localizable", "Scene.Report.StepFinal.Unfollow", fallback: "Unfollow") /// Unfollowed - public static let unfollowed = L10n.tr("Localizable", "Scene.Report.StepFinal.Unfollowed") + public static let unfollowed = L10n.tr("Localizable", "Scene.Report.StepFinal.Unfollowed", fallback: "Unfollowed") /// Unfollow %@ public static func unfollowUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Report.StepFinal.UnfollowUser", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Report.StepFinal.UnfollowUser", String(describing: p1), fallback: "Unfollow %@") } /// When you see something you don’t like on Mastodon, you can remove the person from your experience. - public static let whenYouSeeSomethingYouDontLikeOnMastodonYouCanRemoveThePersonFromYourExperience = L10n.tr("Localizable", "Scene.Report.StepFinal.WhenYouSeeSomethingYouDontLikeOnMastodonYouCanRemoveThePersonFromYourExperience.") + public static let whenYouSeeSomethingYouDontLikeOnMastodonYouCanRemoveThePersonFromYourExperience = L10n.tr("Localizable", "Scene.Report.StepFinal.WhenYouSeeSomethingYouDontLikeOnMastodonYouCanRemoveThePersonFromYourExperience.", fallback: "When you see something you don’t like on Mastodon, you can remove the person from your experience.") /// While we review this, you can take action against %@ public static func whileWeReviewThisYouCanTakeActionAgainstUser(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Report.StepFinal.WhileWeReviewThisYouCanTakeActionAgainstUser", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Report.StepFinal.WhileWeReviewThisYouCanTakeActionAgainstUser", String(describing: p1), fallback: "While we review this, you can take action against %@") } /// You won’t see their posts or reblogs in your home feed. They won’t know they’ve been muted. - public static let youWontSeeTheirPostsOrReblogsInYourHomeFeedTheyWontKnowTheyVeBeenMuted = L10n.tr("Localizable", "Scene.Report.StepFinal.YouWontSeeTheirPostsOrReblogsInYourHomeFeedTheyWontKnowTheyVeBeenMuted") + public static let youWontSeeTheirPostsOrReblogsInYourHomeFeedTheyWontKnowTheyVeBeenMuted = L10n.tr("Localizable", "Scene.Report.StepFinal.YouWontSeeTheirPostsOrReblogsInYourHomeFeedTheyWontKnowTheyVeBeenMuted", fallback: "You won’t see their posts or reblogs in your home feed. They won’t know they’ve been muted.") } public enum StepFour { /// Is there anything else we should know? - public static let isThereAnythingElseWeShouldKnow = L10n.tr("Localizable", "Scene.Report.StepFour.IsThereAnythingElseWeShouldKnow") + public static let isThereAnythingElseWeShouldKnow = L10n.tr("Localizable", "Scene.Report.StepFour.IsThereAnythingElseWeShouldKnow", fallback: "Is there anything else we should know?") /// Step 4 of 4 - public static let step4Of4 = L10n.tr("Localizable", "Scene.Report.StepFour.Step4Of4") + public static let step4Of4 = L10n.tr("Localizable", "Scene.Report.StepFour.Step4Of4", fallback: "Step 4 of 4") } public enum StepOne { /// I don’t like it - public static let iDontLikeIt = L10n.tr("Localizable", "Scene.Report.StepOne.IDontLikeIt") + public static let iDontLikeIt = L10n.tr("Localizable", "Scene.Report.StepOne.IDontLikeIt", fallback: "I don’t like it") /// It is not something you want to see - public static let itIsNotSomethingYouWantToSee = L10n.tr("Localizable", "Scene.Report.StepOne.ItIsNotSomethingYouWantToSee") + public static let itIsNotSomethingYouWantToSee = L10n.tr("Localizable", "Scene.Report.StepOne.ItIsNotSomethingYouWantToSee", fallback: "It is not something you want to see") /// It’s something else - public static let itsSomethingElse = L10n.tr("Localizable", "Scene.Report.StepOne.ItsSomethingElse") + public static let itsSomethingElse = L10n.tr("Localizable", "Scene.Report.StepOne.ItsSomethingElse", fallback: "It’s something else") /// It’s spam - public static let itsSpam = L10n.tr("Localizable", "Scene.Report.StepOne.ItsSpam") + public static let itsSpam = L10n.tr("Localizable", "Scene.Report.StepOne.ItsSpam", fallback: "It’s spam") /// It violates server rules - public static let itViolatesServerRules = L10n.tr("Localizable", "Scene.Report.StepOne.ItViolatesServerRules") + public static let itViolatesServerRules = L10n.tr("Localizable", "Scene.Report.StepOne.ItViolatesServerRules", fallback: "It violates server rules") /// Malicious links, fake engagement, or repetetive replies - public static let maliciousLinksFakeEngagementOrRepetetiveReplies = L10n.tr("Localizable", "Scene.Report.StepOne.MaliciousLinksFakeEngagementOrRepetetiveReplies") + public static let maliciousLinksFakeEngagementOrRepetetiveReplies = L10n.tr("Localizable", "Scene.Report.StepOne.MaliciousLinksFakeEngagementOrRepetetiveReplies", fallback: "Malicious links, fake engagement, or repetetive replies") /// Select the best match - public static let selectTheBestMatch = L10n.tr("Localizable", "Scene.Report.StepOne.SelectTheBestMatch") + public static let selectTheBestMatch = L10n.tr("Localizable", "Scene.Report.StepOne.SelectTheBestMatch", fallback: "Select the best match") /// Step 1 of 4 - public static let step1Of4 = L10n.tr("Localizable", "Scene.Report.StepOne.Step1Of4") + public static let step1Of4 = L10n.tr("Localizable", "Scene.Report.StepOne.Step1Of4", fallback: "Step 1 of 4") /// The issue does not fit into other categories - public static let theIssueDoesNotFitIntoOtherCategories = L10n.tr("Localizable", "Scene.Report.StepOne.TheIssueDoesNotFitIntoOtherCategories") + public static let theIssueDoesNotFitIntoOtherCategories = L10n.tr("Localizable", "Scene.Report.StepOne.TheIssueDoesNotFitIntoOtherCategories", fallback: "The issue does not fit into other categories") /// What's wrong with this account? - public static let whatsWrongWithThisAccount = L10n.tr("Localizable", "Scene.Report.StepOne.WhatsWrongWithThisAccount") + public static let whatsWrongWithThisAccount = L10n.tr("Localizable", "Scene.Report.StepOne.WhatsWrongWithThisAccount", fallback: "What's wrong with this account?") /// What's wrong with this post? - public static let whatsWrongWithThisPost = L10n.tr("Localizable", "Scene.Report.StepOne.WhatsWrongWithThisPost") + public static let whatsWrongWithThisPost = L10n.tr("Localizable", "Scene.Report.StepOne.WhatsWrongWithThisPost", fallback: "What's wrong with this post?") /// What's wrong with %@? public static func whatsWrongWithThisUsername(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Report.StepOne.WhatsWrongWithThisUsername", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Report.StepOne.WhatsWrongWithThisUsername", String(describing: p1), fallback: "What's wrong with %@?") } /// You are aware that it breaks specific rules - public static let youAreAwareThatItBreaksSpecificRules = L10n.tr("Localizable", "Scene.Report.StepOne.YouAreAwareThatItBreaksSpecificRules") + public static let youAreAwareThatItBreaksSpecificRules = L10n.tr("Localizable", "Scene.Report.StepOne.YouAreAwareThatItBreaksSpecificRules", fallback: "You are aware that it breaks specific rules") } public enum StepThree { /// Are there any posts that back up this report? - public static let areThereAnyPostsThatBackUpThisReport = L10n.tr("Localizable", "Scene.Report.StepThree.AreThereAnyPostsThatBackUpThisReport") + public static let areThereAnyPostsThatBackUpThisReport = L10n.tr("Localizable", "Scene.Report.StepThree.AreThereAnyPostsThatBackUpThisReport", fallback: "Are there any posts that back up this report?") /// Select all that apply - public static let selectAllThatApply = L10n.tr("Localizable", "Scene.Report.StepThree.SelectAllThatApply") + public static let selectAllThatApply = L10n.tr("Localizable", "Scene.Report.StepThree.SelectAllThatApply", fallback: "Select all that apply") /// Step 3 of 4 - public static let step3Of4 = L10n.tr("Localizable", "Scene.Report.StepThree.Step3Of4") + public static let step3Of4 = L10n.tr("Localizable", "Scene.Report.StepThree.Step3Of4", fallback: "Step 3 of 4") } public enum StepTwo { /// I just don’t like it - public static let iJustDonTLikeIt = L10n.tr("Localizable", "Scene.Report.StepTwo.IJustDon’tLikeIt") + public static let iJustDonTLikeIt = L10n.tr("Localizable", "Scene.Report.StepTwo.IJustDon’tLikeIt", fallback: "I just don’t like it") /// Select all that apply - public static let selectAllThatApply = L10n.tr("Localizable", "Scene.Report.StepTwo.SelectAllThatApply") + public static let selectAllThatApply = L10n.tr("Localizable", "Scene.Report.StepTwo.SelectAllThatApply", fallback: "Select all that apply") /// Step 2 of 4 - public static let step2Of4 = L10n.tr("Localizable", "Scene.Report.StepTwo.Step2Of4") + public static let step2Of4 = L10n.tr("Localizable", "Scene.Report.StepTwo.Step2Of4", fallback: "Step 2 of 4") /// Which rules are being violated? - public static let whichRulesAreBeingViolated = L10n.tr("Localizable", "Scene.Report.StepTwo.WhichRulesAreBeingViolated") + public static let whichRulesAreBeingViolated = L10n.tr("Localizable", "Scene.Report.StepTwo.WhichRulesAreBeingViolated", fallback: "Which rules are being violated?") } } public enum Search { /// Search - public static let title = L10n.tr("Localizable", "Scene.Search.Title") + public static let title = L10n.tr("Localizable", "Scene.Search.Title", fallback: "Search") public enum Recommend { /// See All - public static let buttonText = L10n.tr("Localizable", "Scene.Search.Recommend.ButtonText") + public static let buttonText = L10n.tr("Localizable", "Scene.Search.Recommend.ButtonText", fallback: "See All") public enum Accounts { /// You may like to follow these accounts - public static let description = L10n.tr("Localizable", "Scene.Search.Recommend.Accounts.Description") + public static let description = L10n.tr("Localizable", "Scene.Search.Recommend.Accounts.Description", fallback: "You may like to follow these accounts") /// Follow - public static let follow = L10n.tr("Localizable", "Scene.Search.Recommend.Accounts.Follow") + public static let follow = L10n.tr("Localizable", "Scene.Search.Recommend.Accounts.Follow", fallback: "Follow") /// Accounts you might like - public static let title = L10n.tr("Localizable", "Scene.Search.Recommend.Accounts.Title") + public static let title = L10n.tr("Localizable", "Scene.Search.Recommend.Accounts.Title", fallback: "Accounts you might like") } public enum HashTag { /// Hashtags that are getting quite a bit of attention - public static let description = L10n.tr("Localizable", "Scene.Search.Recommend.HashTag.Description") + public static let description = L10n.tr("Localizable", "Scene.Search.Recommend.HashTag.Description", fallback: "Hashtags that are getting quite a bit of attention") /// %@ people are talking public static func peopleTalking(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Search.Recommend.HashTag.PeopleTalking", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Search.Recommend.HashTag.PeopleTalking", String(describing: p1), fallback: "%@ people are talking") } /// Trending on Mastodon - public static let title = L10n.tr("Localizable", "Scene.Search.Recommend.HashTag.Title") + public static let title = L10n.tr("Localizable", "Scene.Search.Recommend.HashTag.Title", fallback: "Trending on Mastodon") } } public enum SearchBar { /// Cancel - public static let cancel = L10n.tr("Localizable", "Scene.Search.SearchBar.Cancel") + public static let cancel = L10n.tr("Localizable", "Scene.Search.SearchBar.Cancel", fallback: "Cancel") /// Search hashtags and users - public static let placeholder = L10n.tr("Localizable", "Scene.Search.SearchBar.Placeholder") + public static let placeholder = L10n.tr("Localizable", "Scene.Search.SearchBar.Placeholder", fallback: "Search hashtags and users") } public enum Searching { /// Clear - public static let clear = L10n.tr("Localizable", "Scene.Search.Searching.Clear") + public static let clear = L10n.tr("Localizable", "Scene.Search.Searching.Clear", fallback: "Clear") /// Recent searches - public static let recentSearch = L10n.tr("Localizable", "Scene.Search.Searching.RecentSearch") + public static let recentSearch = L10n.tr("Localizable", "Scene.Search.Searching.RecentSearch", fallback: "Recent searches") public enum EmptyState { /// No results - public static let noResults = L10n.tr("Localizable", "Scene.Search.Searching.EmptyState.NoResults") + public static let noResults = L10n.tr("Localizable", "Scene.Search.Searching.EmptyState.NoResults", fallback: "No results") } public enum Segment { /// All - public static let all = L10n.tr("Localizable", "Scene.Search.Searching.Segment.All") + public static let all = L10n.tr("Localizable", "Scene.Search.Searching.Segment.All", fallback: "All") /// Hashtags - public static let hashtags = L10n.tr("Localizable", "Scene.Search.Searching.Segment.Hashtags") + public static let hashtags = L10n.tr("Localizable", "Scene.Search.Searching.Segment.Hashtags", fallback: "Hashtags") /// People - public static let people = L10n.tr("Localizable", "Scene.Search.Searching.Segment.People") + public static let people = L10n.tr("Localizable", "Scene.Search.Searching.Segment.People", fallback: "People") /// Posts - public static let posts = L10n.tr("Localizable", "Scene.Search.Searching.Segment.Posts") + public static let posts = L10n.tr("Localizable", "Scene.Search.Searching.Segment.Posts", fallback: "Posts") } } } public enum ServerPicker { /// Pick a server based on your interests, region, or a general purpose one. - public static let subtitle = L10n.tr("Localizable", "Scene.ServerPicker.Subtitle") + public static let subtitle = L10n.tr("Localizable", "Scene.ServerPicker.Subtitle", fallback: "Pick a server based on your interests, region, or a general purpose one.") /// Pick a server based on your interests, region, or a general purpose one. Each server is operated by an entirely independent organization or individual. - public static let subtitleExtend = L10n.tr("Localizable", "Scene.ServerPicker.SubtitleExtend") + public static let subtitleExtend = L10n.tr("Localizable", "Scene.ServerPicker.SubtitleExtend", fallback: "Pick a server based on your interests, region, or a general purpose one. Each server is operated by an entirely independent organization or individual.") /// Mastodon is made of users in different servers. - public static let title = L10n.tr("Localizable", "Scene.ServerPicker.Title") + public static let title = L10n.tr("Localizable", "Scene.ServerPicker.Title", fallback: "Mastodon is made of users in different servers.") public enum Button { /// See Less - public static let seeLess = L10n.tr("Localizable", "Scene.ServerPicker.Button.SeeLess") + public static let seeLess = L10n.tr("Localizable", "Scene.ServerPicker.Button.SeeLess", fallback: "See Less") /// See More - public static let seeMore = L10n.tr("Localizable", "Scene.ServerPicker.Button.SeeMore") + public static let seeMore = L10n.tr("Localizable", "Scene.ServerPicker.Button.SeeMore", fallback: "See More") public enum Category { /// academia - public static let academia = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Academia") + public static let academia = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Academia", fallback: "academia") /// activism - public static let activism = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Activism") + public static let activism = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Activism", fallback: "activism") /// All - public static let all = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.All") + public static let all = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.All", fallback: "All") /// Category: All - public static let allAccessiblityDescription = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.AllAccessiblityDescription") + public static let allAccessiblityDescription = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.AllAccessiblityDescription", fallback: "Category: All") /// art - public static let art = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Art") + public static let art = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Art", fallback: "art") /// food - public static let food = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Food") + public static let food = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Food", fallback: "food") /// furry - public static let furry = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Furry") + public static let furry = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Furry", fallback: "furry") /// games - public static let games = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Games") + public static let games = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Games", fallback: "games") /// general - public static let general = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.General") + public static let general = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.General", fallback: "general") /// journalism - public static let journalism = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Journalism") + public static let journalism = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Journalism", fallback: "journalism") /// lgbt - public static let lgbt = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Lgbt") + public static let lgbt = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Lgbt", fallback: "lgbt") /// music - public static let music = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Music") + public static let music = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Music", fallback: "music") /// regional - public static let regional = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Regional") + public static let regional = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Regional", fallback: "regional") /// tech - public static let tech = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Tech") + public static let tech = L10n.tr("Localizable", "Scene.ServerPicker.Button.Category.Tech", fallback: "tech") } } public enum EmptyState { /// Something went wrong while loading the data. Check your internet connection. - public static let badNetwork = L10n.tr("Localizable", "Scene.ServerPicker.EmptyState.BadNetwork") + public static let badNetwork = L10n.tr("Localizable", "Scene.ServerPicker.EmptyState.BadNetwork", fallback: "Something went wrong while loading the data. Check your internet connection.") /// Finding available servers... - public static let findingServers = L10n.tr("Localizable", "Scene.ServerPicker.EmptyState.FindingServers") + public static let findingServers = L10n.tr("Localizable", "Scene.ServerPicker.EmptyState.FindingServers", fallback: "Finding available servers...") /// No results - public static let noResults = L10n.tr("Localizable", "Scene.ServerPicker.EmptyState.NoResults") + public static let noResults = L10n.tr("Localizable", "Scene.ServerPicker.EmptyState.NoResults", fallback: "No results") } public enum Input { /// Search servers - public static let placeholder = L10n.tr("Localizable", "Scene.ServerPicker.Input.Placeholder") + public static let placeholder = L10n.tr("Localizable", "Scene.ServerPicker.Input.Placeholder", fallback: "Search servers") /// Search servers or enter URL - public static let searchServersOrEnterUrl = L10n.tr("Localizable", "Scene.ServerPicker.Input.SearchServersOrEnterUrl") + public static let searchServersOrEnterUrl = L10n.tr("Localizable", "Scene.ServerPicker.Input.SearchServersOrEnterUrl", fallback: "Search servers or enter URL") } public enum Label { /// CATEGORY - public static let category = L10n.tr("Localizable", "Scene.ServerPicker.Label.Category") + public static let category = L10n.tr("Localizable", "Scene.ServerPicker.Label.Category", fallback: "CATEGORY") /// LANGUAGE - public static let language = L10n.tr("Localizable", "Scene.ServerPicker.Label.Language") + public static let language = L10n.tr("Localizable", "Scene.ServerPicker.Label.Language", fallback: "LANGUAGE") /// USERS - public static let users = L10n.tr("Localizable", "Scene.ServerPicker.Label.Users") + public static let users = L10n.tr("Localizable", "Scene.ServerPicker.Label.Users", fallback: "USERS") } } public enum ServerRules { /// privacy policy - public static let privacyPolicy = L10n.tr("Localizable", "Scene.ServerRules.PrivacyPolicy") + public static let privacyPolicy = L10n.tr("Localizable", "Scene.ServerRules.PrivacyPolicy", fallback: "privacy policy") /// By continuing, you’re subject to the terms of service and privacy policy for %@. public static func prompt(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.ServerRules.Prompt", String(describing: p1)) + return L10n.tr("Localizable", "Scene.ServerRules.Prompt", String(describing: p1), fallback: "By continuing, you’re subject to the terms of service and privacy policy for %@.") } /// These are set and enforced by the %@ moderators. public static func subtitle(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.ServerRules.Subtitle", String(describing: p1)) + return L10n.tr("Localizable", "Scene.ServerRules.Subtitle", String(describing: p1), fallback: "These are set and enforced by the %@ moderators.") } /// terms of service - public static let termsOfService = L10n.tr("Localizable", "Scene.ServerRules.TermsOfService") + public static let termsOfService = L10n.tr("Localizable", "Scene.ServerRules.TermsOfService", fallback: "terms of service") /// Some ground rules. - public static let title = L10n.tr("Localizable", "Scene.ServerRules.Title") + public static let title = L10n.tr("Localizable", "Scene.ServerRules.Title", fallback: "Some ground rules.") public enum Button { /// I Agree - public static let confirm = L10n.tr("Localizable", "Scene.ServerRules.Button.Confirm") + public static let confirm = L10n.tr("Localizable", "Scene.ServerRules.Button.Confirm", fallback: "I Agree") } } public enum Settings { /// Settings - public static let title = L10n.tr("Localizable", "Scene.Settings.Title") + public static let title = L10n.tr("Localizable", "Scene.Settings.Title", fallback: "Settings") public enum Footer { /// Mastodon is open source software. You can report issues on GitHub at %@ (%@) public static func mastodonDescription(_ p1: Any, _ p2: Any) -> String { - return L10n.tr("Localizable", "Scene.Settings.Footer.MastodonDescription", String(describing: p1), String(describing: p2)) + return L10n.tr("Localizable", "Scene.Settings.Footer.MastodonDescription", String(describing: p1), String(describing: p2), fallback: "Mastodon is open source software. You can report issues on GitHub at %@ (%@)") } } public enum Keyboard { /// Close Settings Window - public static let closeSettingsWindow = L10n.tr("Localizable", "Scene.Settings.Keyboard.CloseSettingsWindow") + public static let closeSettingsWindow = L10n.tr("Localizable", "Scene.Settings.Keyboard.CloseSettingsWindow", fallback: "Close Settings Window") } public enum Section { public enum Appearance { /// Automatic - public static let automatic = L10n.tr("Localizable", "Scene.Settings.Section.Appearance.Automatic") + public static let automatic = L10n.tr("Localizable", "Scene.Settings.Section.Appearance.Automatic", fallback: "Automatic") /// Always Dark - public static let dark = L10n.tr("Localizable", "Scene.Settings.Section.Appearance.Dark") + public static let dark = L10n.tr("Localizable", "Scene.Settings.Section.Appearance.Dark", fallback: "Always Dark") /// Always Light - public static let light = L10n.tr("Localizable", "Scene.Settings.Section.Appearance.Light") + public static let light = L10n.tr("Localizable", "Scene.Settings.Section.Appearance.Light", fallback: "Always Light") /// Appearance - public static let title = L10n.tr("Localizable", "Scene.Settings.Section.Appearance.Title") + public static let title = L10n.tr("Localizable", "Scene.Settings.Section.Appearance.Title", fallback: "Appearance") } public enum BoringZone { /// Account Settings - public static let accountSettings = L10n.tr("Localizable", "Scene.Settings.Section.BoringZone.AccountSettings") + public static let accountSettings = L10n.tr("Localizable", "Scene.Settings.Section.BoringZone.AccountSettings", fallback: "Account Settings") /// Privacy Policy - public static let privacy = L10n.tr("Localizable", "Scene.Settings.Section.BoringZone.Privacy") + public static let privacy = L10n.tr("Localizable", "Scene.Settings.Section.BoringZone.Privacy", fallback: "Privacy Policy") /// Terms of Service - public static let terms = L10n.tr("Localizable", "Scene.Settings.Section.BoringZone.Terms") + public static let terms = L10n.tr("Localizable", "Scene.Settings.Section.BoringZone.Terms", fallback: "Terms of Service") /// The Boring Zone - public static let title = L10n.tr("Localizable", "Scene.Settings.Section.BoringZone.Title") + public static let title = L10n.tr("Localizable", "Scene.Settings.Section.BoringZone.Title", fallback: "The Boring Zone") } public enum LookAndFeel { /// Light - public static let light = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.Light") + public static let light = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.Light", fallback: "Light") /// Really Dark - public static let reallyDark = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.ReallyDark") + public static let reallyDark = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.ReallyDark", fallback: "Really Dark") /// Sorta Dark - public static let sortaDark = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.SortaDark") + public static let sortaDark = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.SortaDark", fallback: "Sorta Dark") /// Look and Feel - public static let title = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.Title") + public static let title = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.Title", fallback: "Look and Feel") /// Use System - public static let useSystem = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.UseSystem") + public static let useSystem = L10n.tr("Localizable", "Scene.Settings.Section.LookAndFeel.UseSystem", fallback: "Use System") } public enum Notifications { /// Reblogs my post - public static let boosts = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Boosts") + public static let boosts = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Boosts", fallback: "Reblogs my post") /// Favorites my post - public static let favorites = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Favorites") + public static let favorites = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Favorites", fallback: "Favorites my post") /// Follows me - public static let follows = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Follows") + public static let follows = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Follows", fallback: "Follows me") /// Mentions me - public static let mentions = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Mentions") + public static let mentions = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Mentions", fallback: "Mentions me") /// Notifications - public static let title = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Title") + public static let title = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Title", fallback: "Notifications") public enum Trigger { /// anyone - public static let anyone = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Anyone") + public static let anyone = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Anyone", fallback: "anyone") /// anyone I follow - public static let follow = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Follow") + public static let follow = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Follow", fallback: "anyone I follow") /// a follower - public static let follower = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Follower") + public static let follower = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Follower", fallback: "a follower") /// no one - public static let noone = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Noone") + public static let noone = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Noone", fallback: "no one") /// Notify me when - public static let title = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Title") + public static let title = L10n.tr("Localizable", "Scene.Settings.Section.Notifications.Trigger.Title", fallback: "Notify me when") } } public enum Preference { /// Disable animated avatars - public static let disableAvatarAnimation = L10n.tr("Localizable", "Scene.Settings.Section.Preference.DisableAvatarAnimation") + public static let disableAvatarAnimation = L10n.tr("Localizable", "Scene.Settings.Section.Preference.DisableAvatarAnimation", fallback: "Disable animated avatars") /// Disable animated emojis - public static let disableEmojiAnimation = L10n.tr("Localizable", "Scene.Settings.Section.Preference.DisableEmojiAnimation") + public static let disableEmojiAnimation = L10n.tr("Localizable", "Scene.Settings.Section.Preference.DisableEmojiAnimation", fallback: "Disable animated emojis") /// Open links in Mastodon - public static let openLinksInMastodon = L10n.tr("Localizable", "Scene.Settings.Section.Preference.OpenLinksInMastodon") + public static let openLinksInMastodon = L10n.tr("Localizable", "Scene.Settings.Section.Preference.OpenLinksInMastodon", fallback: "Open links in Mastodon") /// Preferences - public static let title = L10n.tr("Localizable", "Scene.Settings.Section.Preference.Title") + public static let title = L10n.tr("Localizable", "Scene.Settings.Section.Preference.Title", fallback: "Preferences") /// True black dark mode - public static let trueBlackDarkMode = L10n.tr("Localizable", "Scene.Settings.Section.Preference.TrueBlackDarkMode") + public static let trueBlackDarkMode = L10n.tr("Localizable", "Scene.Settings.Section.Preference.TrueBlackDarkMode", fallback: "True black dark mode") /// Use default browser to open links - public static let usingDefaultBrowser = L10n.tr("Localizable", "Scene.Settings.Section.Preference.UsingDefaultBrowser") + public static let usingDefaultBrowser = L10n.tr("Localizable", "Scene.Settings.Section.Preference.UsingDefaultBrowser", fallback: "Use default browser to open links") } public enum SpicyZone { /// Clear Media Cache - public static let clear = L10n.tr("Localizable", "Scene.Settings.Section.SpicyZone.Clear") + public static let clear = L10n.tr("Localizable", "Scene.Settings.Section.SpicyZone.Clear", fallback: "Clear Media Cache") /// Sign Out - public static let signout = L10n.tr("Localizable", "Scene.Settings.Section.SpicyZone.Signout") + public static let signout = L10n.tr("Localizable", "Scene.Settings.Section.SpicyZone.Signout", fallback: "Sign Out") /// The Spicy Zone - public static let title = L10n.tr("Localizable", "Scene.Settings.Section.SpicyZone.Title") + public static let title = L10n.tr("Localizable", "Scene.Settings.Section.SpicyZone.Title", fallback: "The Spicy Zone") } } } public enum SuggestionAccount { /// When you follow someone, you’ll see their posts in your home feed. - public static let followExplain = L10n.tr("Localizable", "Scene.SuggestionAccount.FollowExplain") + public static let followExplain = L10n.tr("Localizable", "Scene.SuggestionAccount.FollowExplain", fallback: "When you follow someone, you’ll see their posts in your home feed.") /// Find People to Follow - public static let title = L10n.tr("Localizable", "Scene.SuggestionAccount.Title") + public static let title = L10n.tr("Localizable", "Scene.SuggestionAccount.Title", fallback: "Find People to Follow") } public enum Thread { /// Post - public static let backTitle = L10n.tr("Localizable", "Scene.Thread.BackTitle") + public static let backTitle = L10n.tr("Localizable", "Scene.Thread.BackTitle", fallback: "Post") /// Post from %@ public static func title(_ p1: Any) -> String { - return L10n.tr("Localizable", "Scene.Thread.Title", String(describing: p1)) + return L10n.tr("Localizable", "Scene.Thread.Title", String(describing: p1), fallback: "Post from %@") } } public enum Welcome { /// Get Started - public static let getStarted = L10n.tr("Localizable", "Scene.Welcome.GetStarted") + public static let getStarted = L10n.tr("Localizable", "Scene.Welcome.GetStarted", fallback: "Get Started") /// Log In - public static let logIn = L10n.tr("Localizable", "Scene.Welcome.LogIn") - /// Social networking\nback in your hands. - public static let slogan = L10n.tr("Localizable", "Scene.Welcome.Slogan") + public static let logIn = L10n.tr("Localizable", "Scene.Welcome.LogIn", fallback: "Log In") + /// Social networking + /// back in your hands. + public static let slogan = L10n.tr("Localizable", "Scene.Welcome.Slogan", fallback: "Social networking\nback in your hands.") } public enum Wizard { /// Double tap to dismiss this wizard - public static let accessibilityHint = L10n.tr("Localizable", "Scene.Wizard.AccessibilityHint") + public static let accessibilityHint = L10n.tr("Localizable", "Scene.Wizard.AccessibilityHint", fallback: "Double tap to dismiss this wizard") /// Switch between multiple accounts by holding the profile button. - public static let multipleAccountSwitchIntroDescription = L10n.tr("Localizable", "Scene.Wizard.MultipleAccountSwitchIntroDescription") + public static let multipleAccountSwitchIntroDescription = L10n.tr("Localizable", "Scene.Wizard.MultipleAccountSwitchIntroDescription", fallback: "Switch between multiple accounts by holding the profile button.") /// New in Mastodon - public static let newInMastodon = L10n.tr("Localizable", "Scene.Wizard.NewInMastodon") + public static let newInMastodon = L10n.tr("Localizable", "Scene.Wizard.NewInMastodon", fallback: "New in Mastodon") } } - public enum A11y { public enum Plural { public enum Count { /// Plural format key: "%#@character_count@ left" public static func charactersLeft(_ p1: Int) -> String { - return L10n.tr("Localizable", "a11y.plural.count.characters_left", p1) + return L10n.tr("Localizable", "a11y.plural.count.characters_left", p1, fallback: "Plural format key: \"%#@character_count@ left\"") } /// Plural format key: "Input limit exceeds %#@character_count@" public static func inputLimitExceeds(_ p1: Int) -> String { - return L10n.tr("Localizable", "a11y.plural.count.input_limit_exceeds", p1) + return L10n.tr("Localizable", "a11y.plural.count.input_limit_exceeds", p1, fallback: "Plural format key: \"Input limit exceeds %#@character_count@\"") } /// Plural format key: "Input limit remains %#@character_count@" public static func inputLimitRemains(_ p1: Int) -> String { - return L10n.tr("Localizable", "a11y.plural.count.input_limit_remains", p1) + return L10n.tr("Localizable", "a11y.plural.count.input_limit_remains", p1, fallback: "Plural format key: \"Input limit remains %#@character_count@\"") } public enum Unread { /// Plural format key: "%#@notification_count_unread_notification@" public static func notification(_ p1: Int) -> String { - return L10n.tr("Localizable", "a11y.plural.count.unread.notification", p1) + return L10n.tr("Localizable", "a11y.plural.count.unread.notification", p1, fallback: "Plural format key: \"%#@notification_count_unread_notification@\"") } } } } } - public enum Date { public enum Day { /// Plural format key: "%#@count_day_left@" public static func `left`(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.day.left", p1) + return L10n.tr("Localizable", "date.day.left", p1, fallback: "Plural format key: \"%#@count_day_left@\"") } public enum Ago { /// Plural format key: "%#@count_day_ago_abbr@" public static func abbr(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.day.ago.abbr", p1) + return L10n.tr("Localizable", "date.day.ago.abbr", p1, fallback: "Plural format key: \"%#@count_day_ago_abbr@\"") } } } public enum Hour { /// Plural format key: "%#@count_hour_left@" public static func `left`(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.hour.left", p1) + return L10n.tr("Localizable", "date.hour.left", p1, fallback: "Plural format key: \"%#@count_hour_left@\"") } public enum Ago { /// Plural format key: "%#@count_hour_ago_abbr@" public static func abbr(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.hour.ago.abbr", p1) + return L10n.tr("Localizable", "date.hour.ago.abbr", p1, fallback: "Plural format key: \"%#@count_hour_ago_abbr@\"") } } } public enum Minute { /// Plural format key: "%#@count_minute_left@" public static func `left`(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.minute.left", p1) + return L10n.tr("Localizable", "date.minute.left", p1, fallback: "Plural format key: \"%#@count_minute_left@\"") } public enum Ago { /// Plural format key: "%#@count_minute_ago_abbr@" public static func abbr(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.minute.ago.abbr", p1) + return L10n.tr("Localizable", "date.minute.ago.abbr", p1, fallback: "Plural format key: \"%#@count_minute_ago_abbr@\"") } } } public enum Month { /// Plural format key: "%#@count_month_left@" public static func `left`(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.month.left", p1) + return L10n.tr("Localizable", "date.month.left", p1, fallback: "Plural format key: \"%#@count_month_left@\"") } public enum Ago { /// Plural format key: "%#@count_month_ago_abbr@" public static func abbr(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.month.ago.abbr", p1) + return L10n.tr("Localizable", "date.month.ago.abbr", p1, fallback: "Plural format key: \"%#@count_month_ago_abbr@\"") } } } public enum Second { /// Plural format key: "%#@count_second_left@" public static func `left`(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.second.left", p1) + return L10n.tr("Localizable", "date.second.left", p1, fallback: "Plural format key: \"%#@count_second_left@\"") } public enum Ago { /// Plural format key: "%#@count_second_ago_abbr@" public static func abbr(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.second.ago.abbr", p1) + return L10n.tr("Localizable", "date.second.ago.abbr", p1, fallback: "Plural format key: \"%#@count_second_ago_abbr@\"") } } } public enum Year { /// Plural format key: "%#@count_year_left@" public static func `left`(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.year.left", p1) + return L10n.tr("Localizable", "date.year.left", p1, fallback: "Plural format key: \"%#@count_year_left@\"") } public enum Ago { /// Plural format key: "%#@count_year_ago_abbr@" public static func abbr(_ p1: Int) -> String { - return L10n.tr("Localizable", "date.year.ago.abbr", p1) + return L10n.tr("Localizable", "date.year.ago.abbr", p1, fallback: "Plural format key: \"%#@count_year_ago_abbr@\"") } } } } - public enum Plural { /// Plural format key: "%#@count_people_talking@" public static func peopleTalking(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.people_talking", p1) + return L10n.tr("Localizable", "plural.people_talking", p1, fallback: "Plural format key: \"%#@count_people_talking@\"") } public enum Count { /// Plural format key: "%#@favorite_count@" public static func favorite(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.count.favorite", p1) + return L10n.tr("Localizable", "plural.count.favorite", p1, fallback: "Plural format key: \"%#@favorite_count@\"") } /// Plural format key: "%#@names@%#@count_mutual@" public static func followedByAndMutual(_ p1: Int, _ p2: Int) -> String { - return L10n.tr("Localizable", "plural.count.followed_by_and_mutual", p1, p2) + return L10n.tr("Localizable", "plural.count.followed_by_and_mutual", p1, p2, fallback: "Plural format key: \"%#@names@%#@count_mutual@\"") } /// Plural format key: "%#@count_follower@" public static func follower(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.count.follower", p1) + return L10n.tr("Localizable", "plural.count.follower", p1, fallback: "Plural format key: \"%#@count_follower@\"") } /// Plural format key: "%#@count_following@" public static func following(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.count.following", p1) + return L10n.tr("Localizable", "plural.count.following", p1, fallback: "Plural format key: \"%#@count_following@\"") } /// Plural format key: "%#@media_count@" public static func media(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.count.media", p1) + return L10n.tr("Localizable", "plural.count.media", p1, fallback: "Plural format key: \"%#@media_count@\"") } /// Plural format key: "%#@post_count@" public static func post(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.count.post", p1) + return L10n.tr("Localizable", "plural.count.post", p1, fallback: "Plural format key: \"%#@post_count@\"") } /// Plural format key: "%#@reblog_count@" public static func reblog(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.count.reblog", p1) + return L10n.tr("Localizable", "plural.count.reblog", p1, fallback: "Plural format key: \"%#@reblog_count@\"") } /// Plural format key: "%#@reply_count@" public static func reply(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.count.reply", p1) + return L10n.tr("Localizable", "plural.count.reply", p1, fallback: "Plural format key: \"%#@reply_count@\"") } /// Plural format key: "%#@vote_count@" public static func vote(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.count.vote", p1) + return L10n.tr("Localizable", "plural.count.vote", p1, fallback: "Plural format key: \"%#@vote_count@\"") } /// Plural format key: "%#@voter_count@" public static func voter(_ p1: Int) -> String { - return L10n.tr("Localizable", "plural.count.voter", p1) + return L10n.tr("Localizable", "plural.count.voter", p1, fallback: "Plural format key: \"%#@voter_count@\"") } public enum MetricFormatted { /// Plural format key: "%@ %#@post_count@" public static func post(_ p1: Any, _ p2: Int) -> String { - return L10n.tr("Localizable", "plural.count.metric_formatted.post", String(describing: p1), p2) + return L10n.tr("Localizable", "plural.count.metric_formatted.post", String(describing: p1), p2, fallback: "Plural format key: \"%@ %#@post_count@\"") } } } @@ -1440,8 +1460,8 @@ public enum L10n { // MARK: - Implementation Details extension L10n { - private static func tr(_ table: String, _ key: String, _ args: CVarArg...) -> String { - let format = Bundle.module.localizedString(forKey: key, value: nil, table: table) + private static func tr(_ table: String, _ key: String, _ args: CVarArg..., fallback value: String) -> String { + let format = Bundle.module.localizedString(forKey: key, value: value, table: table) return String(format: format, locale: Locale.current, arguments: args) } } diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.strings new file mode 100644 index 000000000..a352b0526 --- /dev/null +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.strings @@ -0,0 +1,461 @@ +"Common.Alerts.BlockDomain.BlockEntireDomain" = "Block Domain"; +"Common.Alerts.BlockDomain.Title" = "Are you really, really sure you want to block the entire %@? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed."; +"Common.Alerts.CleanCache.Message" = "Successfully cleaned %@ cache."; +"Common.Alerts.CleanCache.Title" = "Clean Cache"; +"Common.Alerts.Common.PleaseTryAgain" = "Please try again."; +"Common.Alerts.Common.PleaseTryAgainLater" = "Please try again later."; +"Common.Alerts.DeletePost.Message" = "Are you sure you want to delete this post?"; +"Common.Alerts.DeletePost.Title" = "Delete Post"; +"Common.Alerts.DiscardPostContent.Message" = "Confirm to discard composed post content."; +"Common.Alerts.DiscardPostContent.Title" = "Discard Draft"; +"Common.Alerts.EditProfileFailure.Message" = "Cannot edit profile. Please try again."; +"Common.Alerts.EditProfileFailure.Title" = "Edit Profile Error"; +"Common.Alerts.PublishPostFailure.AttachmentsMessage.MoreThanOneVideo" = "Cannot attach more than one video."; +"Common.Alerts.PublishPostFailure.AttachmentsMessage.VideoAttachWithPhoto" = "Cannot attach a video to a post that already contains images."; +"Common.Alerts.PublishPostFailure.Message" = "Failed to publish the post. +Please check your internet connection."; +"Common.Alerts.PublishPostFailure.Title" = "Publish Failure"; +"Common.Alerts.SavePhotoFailure.Message" = "Please enable the photo library access permission to save the photo."; +"Common.Alerts.SavePhotoFailure.Title" = "Save Photo Failure"; +"Common.Alerts.ServerError.Title" = "Server Error"; +"Common.Alerts.SignOut.Confirm" = "Sign Out"; +"Common.Alerts.SignOut.Message" = "Are you sure you want to sign out?"; +"Common.Alerts.SignOut.Title" = "Sign Out"; +"Common.Alerts.SignUpFailure.Title" = "Sign Up Failure"; +"Common.Alerts.VoteFailure.PollEnded" = "The poll has ended"; +"Common.Alerts.VoteFailure.Title" = "Vote Failure"; +"Common.Controls.Actions.Add" = "Add"; +"Common.Controls.Actions.Back" = "Back"; +"Common.Controls.Actions.BlockDomain" = "Block %@"; +"Common.Controls.Actions.Cancel" = "Cancel"; +"Common.Controls.Actions.Compose" = "Compose"; +"Common.Controls.Actions.Confirm" = "Confirm"; +"Common.Controls.Actions.Continue" = "Continue"; +"Common.Controls.Actions.CopyPhoto" = "Copy Photo"; +"Common.Controls.Actions.Delete" = "Delete"; +"Common.Controls.Actions.Discard" = "Discard"; +"Common.Controls.Actions.Done" = "Done"; +"Common.Controls.Actions.Edit" = "Edit"; +"Common.Controls.Actions.FindPeople" = "Find people to follow"; +"Common.Controls.Actions.ManuallySearch" = "Manually search instead"; +"Common.Controls.Actions.Next" = "Next"; +"Common.Controls.Actions.Ok" = "OK"; +"Common.Controls.Actions.Open" = "Open"; +"Common.Controls.Actions.OpenInBrowser" = "Open in Browser"; +"Common.Controls.Actions.OpenInSafari" = "Open in Safari"; +"Common.Controls.Actions.Preview" = "Preview"; +"Common.Controls.Actions.Previous" = "Previous"; +"Common.Controls.Actions.Remove" = "Remove"; +"Common.Controls.Actions.Reply" = "Reply"; +"Common.Controls.Actions.ReportUser" = "Report %@"; +"Common.Controls.Actions.Save" = "Save"; +"Common.Controls.Actions.SavePhoto" = "Save Photo"; +"Common.Controls.Actions.SeeMore" = "See More"; +"Common.Controls.Actions.Settings" = "Settings"; +"Common.Controls.Actions.Share" = "Share"; +"Common.Controls.Actions.SharePost" = "Share Post"; +"Common.Controls.Actions.ShareUser" = "Share %@"; +"Common.Controls.Actions.SignIn" = "Sign In"; +"Common.Controls.Actions.SignUp" = "Sign Up"; +"Common.Controls.Actions.Skip" = "Skip"; +"Common.Controls.Actions.TakePhoto" = "Take Photo"; +"Common.Controls.Actions.TryAgain" = "Try Again"; +"Common.Controls.Actions.UnblockDomain" = "Unblock %@"; +"Common.Controls.Friendship.Block" = "Block"; +"Common.Controls.Friendship.BlockDomain" = "Block %@"; +"Common.Controls.Friendship.BlockUser" = "Block %@"; +"Common.Controls.Friendship.Blocked" = "Blocked"; +"Common.Controls.Friendship.EditInfo" = "Edit Info"; +"Common.Controls.Friendship.Follow" = "Follow"; +"Common.Controls.Friendship.Following" = "Following"; +"Common.Controls.Friendship.HideReblogs" = "Hide Reblogs"; +"Common.Controls.Friendship.Mute" = "Mute"; +"Common.Controls.Friendship.MuteUser" = "Mute %@"; +"Common.Controls.Friendship.Muted" = "Muted"; +"Common.Controls.Friendship.Pending" = "Pending"; +"Common.Controls.Friendship.Request" = "Request"; +"Common.Controls.Friendship.ShowReblogs" = "Show Reblogs"; +"Common.Controls.Friendship.Unblock" = "Unblock"; +"Common.Controls.Friendship.UnblockUser" = "Unblock %@"; +"Common.Controls.Friendship.Unmute" = "Unmute"; +"Common.Controls.Friendship.UnmuteUser" = "Unmute %@"; +"Common.Controls.Keyboard.Common.ComposeNewPost" = "Compose New Post"; +"Common.Controls.Keyboard.Common.OpenSettings" = "Open Settings"; +"Common.Controls.Keyboard.Common.ShowFavorites" = "Show Favorites"; +"Common.Controls.Keyboard.Common.SwitchToTab" = "Switch to %@"; +"Common.Controls.Keyboard.SegmentedControl.NextSection" = "Next Section"; +"Common.Controls.Keyboard.SegmentedControl.PreviousSection" = "Previous Section"; +"Common.Controls.Keyboard.Timeline.NextStatus" = "Next Post"; +"Common.Controls.Keyboard.Timeline.OpenAuthorProfile" = "Open Author's Profile"; +"Common.Controls.Keyboard.Timeline.OpenRebloggerProfile" = "Open Reblogger's Profile"; +"Common.Controls.Keyboard.Timeline.OpenStatus" = "Open Post"; +"Common.Controls.Keyboard.Timeline.PreviewImage" = "Preview Image"; +"Common.Controls.Keyboard.Timeline.PreviousStatus" = "Previous Post"; +"Common.Controls.Keyboard.Timeline.ReplyStatus" = "Reply to Post"; +"Common.Controls.Keyboard.Timeline.ToggleContentWarning" = "Toggle Content Warning"; +"Common.Controls.Keyboard.Timeline.ToggleFavorite" = "Toggle Favorite on Post"; +"Common.Controls.Keyboard.Timeline.ToggleReblog" = "Toggle Reblog on Post"; +"Common.Controls.Status.Actions.Favorite" = "Favorite"; +"Common.Controls.Status.Actions.Hide" = "Hide"; +"Common.Controls.Status.Actions.Menu" = "Menu"; +"Common.Controls.Status.Actions.Reblog" = "Reblog"; +"Common.Controls.Status.Actions.Reply" = "Reply"; +"Common.Controls.Status.Actions.ShowGif" = "Show GIF"; +"Common.Controls.Status.Actions.ShowImage" = "Show image"; +"Common.Controls.Status.Actions.ShowVideoPlayer" = "Show video player"; +"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Tap then hold to show menu"; +"Common.Controls.Status.Actions.Unfavorite" = "Unfavorite"; +"Common.Controls.Status.Actions.Unreblog" = "Undo reblog"; +"Common.Controls.Status.ContentWarning" = "Content Warning"; +"Common.Controls.Status.MediaContentWarning" = "Tap anywhere to reveal"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; +"Common.Controls.Status.Poll.Closed" = "Closed"; +"Common.Controls.Status.Poll.Vote" = "Vote"; +"Common.Controls.Status.SensitiveContent" = "Sensitive Content"; +"Common.Controls.Status.ShowPost" = "Show Post"; +"Common.Controls.Status.ShowUserProfile" = "Show user profile"; +"Common.Controls.Status.Tag.Email" = "Email"; +"Common.Controls.Status.Tag.Emoji" = "Emoji"; +"Common.Controls.Status.Tag.Hashtag" = "Hashtag"; +"Common.Controls.Status.Tag.Link" = "Link"; +"Common.Controls.Status.Tag.Mention" = "Mention"; +"Common.Controls.Status.Tag.Url" = "URL"; +"Common.Controls.Status.TapToReveal" = "Tap to reveal"; +"Common.Controls.Status.UserReblogged" = "%@ reblogged"; +"Common.Controls.Status.UserRepliedTo" = "Replied to %@"; +"Common.Controls.Status.Visibility.Direct" = "Only mentioned user can see this post."; +"Common.Controls.Status.Visibility.Private" = "Only their followers can see this post."; +"Common.Controls.Status.Visibility.PrivateFromMe" = "Only my followers can see this post."; +"Common.Controls.Status.Visibility.Unlisted" = "Everyone can see this post but not display in the public timeline."; +"Common.Controls.Tabs.Home" = "Home"; +"Common.Controls.Tabs.Notification" = "Notification"; +"Common.Controls.Tabs.Profile" = "Profile"; +"Common.Controls.Tabs.Search" = "Search"; +"Common.Controls.Timeline.Filtered" = "Filtered"; +"Common.Controls.Timeline.Header.BlockedWarning" = "You can’t view this user’s profile +until they unblock you."; +"Common.Controls.Timeline.Header.BlockingWarning" = "You can’t view this user's profile +until you unblock them. +Your profile looks like this to them."; +"Common.Controls.Timeline.Header.NoStatusFound" = "No Post Found"; +"Common.Controls.Timeline.Header.SuspendedWarning" = "This user has been suspended."; +"Common.Controls.Timeline.Header.UserBlockedWarning" = "You can’t view %@’s profile +until they unblock you."; +"Common.Controls.Timeline.Header.UserBlockingWarning" = "You can’t view %@’s profile +until you unblock them. +Your profile looks like this to them."; +"Common.Controls.Timeline.Header.UserSuspendedWarning" = "%@’s account has been suspended."; +"Common.Controls.Timeline.Loader.LoadMissingPosts" = "Load missing posts"; +"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "Loading missing posts..."; +"Common.Controls.Timeline.Loader.ShowMoreReplies" = "Show more replies"; +"Common.Controls.Timeline.Timestamp.Now" = "Now"; +"Scene.AccountList.AddAccount" = "Add Account"; +"Scene.AccountList.DismissAccountSwitcher" = "Dismiss Account Switcher"; +"Scene.AccountList.TabBarHint" = "Current selected profile: %@. Double tap then hold to show account switcher"; +"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Compose.Accessibility.AppendAttachment" = "Add Attachment"; +"Scene.Compose.Accessibility.AppendPoll" = "Add Poll"; +"Scene.Compose.Accessibility.CustomEmojiPicker" = "Custom Emoji Picker"; +"Scene.Compose.Accessibility.DisableContentWarning" = "Disable Content Warning"; +"Scene.Compose.Accessibility.EnableContentWarning" = "Enable Content Warning"; +"Scene.Compose.Accessibility.PostOptions" = "Post Options"; +"Scene.Compose.Accessibility.PostVisibilityMenu" = "Post Visibility Menu"; +"Scene.Compose.Accessibility.PostingAs" = "Posting as %@"; +"Scene.Compose.Accessibility.RemovePoll" = "Remove Poll"; +"Scene.Compose.Attachment.AttachmentBroken" = "This %@ is broken and can’t be +uploaded to Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not recognize this media attachment"; +"Scene.Compose.Attachment.CompressingState" = "Compressing..."; +"Scene.Compose.Attachment.DescriptionPhoto" = "Describe the photo for the visually-impaired..."; +"Scene.Compose.Attachment.DescriptionVideo" = "Describe the video for the visually-impaired..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; +"Scene.Compose.Attachment.Photo" = "photo"; +"Scene.Compose.Attachment.ServerProcessingState" = "Server Processing..."; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; +"Scene.Compose.Attachment.Video" = "video"; +"Scene.Compose.AutoComplete.SpaceToAdd" = "Space to add"; +"Scene.Compose.ComposeAction" = "Publish"; +"Scene.Compose.ContentInputPlaceholder" = "Type or paste what’s on your mind"; +"Scene.Compose.ContentWarning.Placeholder" = "Write an accurate warning here..."; +"Scene.Compose.Keyboard.AppendAttachmentEntry" = "Add Attachment - %@"; +"Scene.Compose.Keyboard.DiscardPost" = "Discard Post"; +"Scene.Compose.Keyboard.PublishPost" = "Publish Post"; +"Scene.Compose.Keyboard.SelectVisibilityEntry" = "Select Visibility - %@"; +"Scene.Compose.Keyboard.ToggleContentWarning" = "Toggle Content Warning"; +"Scene.Compose.Keyboard.TogglePoll" = "Toggle Poll"; +"Scene.Compose.MediaSelection.Browse" = "Browse"; +"Scene.Compose.MediaSelection.Camera" = "Take Photo"; +"Scene.Compose.MediaSelection.PhotoLibrary" = "Photo Library"; +"Scene.Compose.Poll.DurationTime" = "Duration: %@"; +"Scene.Compose.Poll.OneDay" = "1 Day"; +"Scene.Compose.Poll.OneHour" = "1 Hour"; +"Scene.Compose.Poll.OptionNumber" = "Option %ld"; +"Scene.Compose.Poll.SevenDays" = "7 Days"; +"Scene.Compose.Poll.SixHours" = "6 Hours"; +"Scene.Compose.Poll.ThePollHasEmptyOption" = "The poll has empty option"; +"Scene.Compose.Poll.ThePollIsInvalid" = "The poll is invalid"; +"Scene.Compose.Poll.ThirtyMinutes" = "30 minutes"; +"Scene.Compose.Poll.ThreeDays" = "3 Days"; +"Scene.Compose.ReplyingToUser" = "replying to %@"; +"Scene.Compose.Title.NewPost" = "New Post"; +"Scene.Compose.Title.NewReply" = "New Reply"; +"Scene.Compose.Visibility.Direct" = "Only people I mention"; +"Scene.Compose.Visibility.Private" = "Followers only"; +"Scene.Compose.Visibility.Public" = "Public"; +"Scene.Compose.Visibility.Unlisted" = "Unlisted"; +"Scene.ConfirmEmail.Button.OpenEmailApp" = "Open Email App"; +"Scene.ConfirmEmail.Button.Resend" = "Resend"; +"Scene.ConfirmEmail.DontReceiveEmail.Description" = "Check if your email address is correct as well as your junk folder if you haven’t."; +"Scene.ConfirmEmail.DontReceiveEmail.ResendEmail" = "Resend Email"; +"Scene.ConfirmEmail.DontReceiveEmail.Title" = "Check your email"; +"Scene.ConfirmEmail.OpenEmailApp.Description" = "We just sent you an email. Check your junk folder if you haven’t."; +"Scene.ConfirmEmail.OpenEmailApp.Mail" = "Mail"; +"Scene.ConfirmEmail.OpenEmailApp.OpenEmailClient" = "Open Email Client"; +"Scene.ConfirmEmail.OpenEmailApp.Title" = "Check your inbox."; +"Scene.ConfirmEmail.Subtitle" = "Tap the link we emailed to you to verify your account."; +"Scene.ConfirmEmail.TapTheLinkWeEmailedToYouToVerifyYourAccount" = "Tap the link we emailed to you to verify your account"; +"Scene.ConfirmEmail.Title" = "One last thing."; +"Scene.Discovery.Intro" = "These are the posts gaining traction in your corner of Mastodon."; +"Scene.Discovery.Tabs.Community" = "Community"; +"Scene.Discovery.Tabs.ForYou" = "For You"; +"Scene.Discovery.Tabs.Hashtags" = "Hashtags"; +"Scene.Discovery.Tabs.News" = "News"; +"Scene.Discovery.Tabs.Posts" = "Posts"; +"Scene.Familiarfollowers.FollowedByNames" = "Followed by %@"; +"Scene.Familiarfollowers.Title" = "Followers you familiar"; +"Scene.Favorite.Title" = "Your Favorites"; +"Scene.FavoritedBy.Title" = "Favorited By"; +"Scene.Follower.Footer" = "Followers from other servers are not displayed."; +"Scene.Follower.Title" = "follower"; +"Scene.Following.Footer" = "Follows from other servers are not displayed."; +"Scene.Following.Title" = "following"; +"Scene.HomeTimeline.NavigationBarState.Accessibility.LogoHint" = "Tap to scroll to top and tap again to previous location"; +"Scene.HomeTimeline.NavigationBarState.Accessibility.LogoLabel" = "Logo Button"; +"Scene.HomeTimeline.NavigationBarState.NewPosts" = "See new posts"; +"Scene.HomeTimeline.NavigationBarState.Offline" = "Offline"; +"Scene.HomeTimeline.NavigationBarState.Published" = "Published!"; +"Scene.HomeTimeline.NavigationBarState.Publishing" = "Publishing post..."; +"Scene.HomeTimeline.Title" = "Home"; +"Scene.Notification.FollowRequest.Accept" = "Accept"; +"Scene.Notification.FollowRequest.Accepted" = "Accepted"; +"Scene.Notification.FollowRequest.Reject" = "reject"; +"Scene.Notification.FollowRequest.Rejected" = "Rejected"; +"Scene.Notification.Keyobard.ShowEverything" = "Show Everything"; +"Scene.Notification.Keyobard.ShowMentions" = "Show Mentions"; +"Scene.Notification.NotificationDescription.FavoritedYourPost" = "favorited your post"; +"Scene.Notification.NotificationDescription.FollowedYou" = "followed you"; +"Scene.Notification.NotificationDescription.MentionedYou" = "mentioned you"; +"Scene.Notification.NotificationDescription.PollHasEnded" = "poll has ended"; +"Scene.Notification.NotificationDescription.RebloggedYourPost" = "reblogged your post"; +"Scene.Notification.NotificationDescription.RequestToFollowYou" = "request to follow you"; +"Scene.Notification.Title.Everything" = "Everything"; +"Scene.Notification.Title.Mentions" = "Mentions"; +"Scene.Preview.Keyboard.ClosePreview" = "Close Preview"; +"Scene.Preview.Keyboard.ShowNext" = "Show Next"; +"Scene.Preview.Keyboard.ShowPrevious" = "Show Previous"; +"Scene.Profile.Accessibility.DoubleTapToOpenTheList" = "Double tap to open the list"; +"Scene.Profile.Accessibility.EditAvatarImage" = "Edit avatar image"; +"Scene.Profile.Accessibility.ShowAvatarImage" = "Show avatar image"; +"Scene.Profile.Accessibility.ShowBannerImage" = "Show banner image"; +"Scene.Profile.Dashboard.Followers" = "followers"; +"Scene.Profile.Dashboard.Following" = "following"; +"Scene.Profile.Dashboard.Posts" = "posts"; +"Scene.Profile.Fields.AddRow" = "Add Row"; +"Scene.Profile.Fields.Placeholder.Content" = "Content"; +"Scene.Profile.Fields.Placeholder.Label" = "Label"; +"Scene.Profile.Header.FollowsYou" = "Follows You"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirm to block %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Block Account"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirm to hide reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Hide Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confirm to mute %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Mute Account"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirm to show reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Show Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Confirm to unblock %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Unblock Account"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confirm to unmute %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Title" = "Unmute Account"; +"Scene.Profile.SegmentedControl.About" = "About"; +"Scene.Profile.SegmentedControl.Media" = "Media"; +"Scene.Profile.SegmentedControl.Posts" = "Posts"; +"Scene.Profile.SegmentedControl.PostsAndReplies" = "Posts and Replies"; +"Scene.Profile.SegmentedControl.Replies" = "Replies"; +"Scene.RebloggedBy.Title" = "Reblogged By"; +"Scene.Register.Error.Item.Agreement" = "Agreement"; +"Scene.Register.Error.Item.Email" = "Email"; +"Scene.Register.Error.Item.Locale" = "Locale"; +"Scene.Register.Error.Item.Password" = "Password"; +"Scene.Register.Error.Item.Reason" = "Reason"; +"Scene.Register.Error.Item.Username" = "Username"; +"Scene.Register.Error.Reason.Accepted" = "%@ must be accepted"; +"Scene.Register.Error.Reason.Blank" = "%@ is required"; +"Scene.Register.Error.Reason.Blocked" = "%@ contains a disallowed email provider"; +"Scene.Register.Error.Reason.Inclusion" = "%@ is not a supported value"; +"Scene.Register.Error.Reason.Invalid" = "%@ is invalid"; +"Scene.Register.Error.Reason.Reserved" = "%@ is a reserved keyword"; +"Scene.Register.Error.Reason.Taken" = "%@ is already in use"; +"Scene.Register.Error.Reason.TooLong" = "%@ is too long"; +"Scene.Register.Error.Reason.TooShort" = "%@ is too short"; +"Scene.Register.Error.Reason.Unreachable" = "%@ does not seem to exist"; +"Scene.Register.Error.Special.EmailInvalid" = "This is not a valid email address"; +"Scene.Register.Error.Special.PasswordTooShort" = "Password is too short (must be at least 8 characters)"; +"Scene.Register.Error.Special.UsernameInvalid" = "Username must only contain alphanumeric characters and underscores"; +"Scene.Register.Error.Special.UsernameTooLong" = "Username is too long (can’t be longer than 30 characters)"; +"Scene.Register.Input.Avatar.Delete" = "Delete"; +"Scene.Register.Input.DisplayName.Placeholder" = "display name"; +"Scene.Register.Input.Email.Placeholder" = "email"; +"Scene.Register.Input.Invite.RegistrationUserInviteRequest" = "Why do you want to join?"; +"Scene.Register.Input.Password.Accessibility.Checked" = "checked"; +"Scene.Register.Input.Password.Accessibility.Unchecked" = "unchecked"; +"Scene.Register.Input.Password.CharacterLimit" = "8 characters"; +"Scene.Register.Input.Password.Hint" = "Your password needs at least eight characters"; +"Scene.Register.Input.Password.Placeholder" = "password"; +"Scene.Register.Input.Password.Require" = "Your password needs at least:"; +"Scene.Register.Input.Username.DuplicatePrompt" = "This username is taken."; +"Scene.Register.Input.Username.Placeholder" = "username"; +"Scene.Register.LetsGetYouSetUpOnDomain" = "Let’s get you set up on %@"; +"Scene.Register.Title" = "Let’s get you set up on %@"; +"Scene.Report.Content1" = "Are there any other posts you’d like to add to the report?"; +"Scene.Report.Content2" = "Is there anything the moderators should know about this report?"; +"Scene.Report.ReportSentTitle" = "Thanks for reporting, we’ll look into this."; +"Scene.Report.Reported" = "REPORTED"; +"Scene.Report.Send" = "Send Report"; +"Scene.Report.SkipToSend" = "Send without comment"; +"Scene.Report.Step1" = "Step 1 of 2"; +"Scene.Report.Step2" = "Step 2 of 2"; +"Scene.Report.StepFinal.BlockUser" = "Block %@"; +"Scene.Report.StepFinal.DontWantToSeeThis" = "Don’t want to see this?"; +"Scene.Report.StepFinal.MuteUser" = "Mute %@"; +"Scene.Report.StepFinal.TheyWillNoLongerBeAbleToFollowOrSeeYourPostsButTheyCanSeeIfTheyveBeenBlocked" = "They will no longer be able to follow or see your posts, but they can see if they’ve been blocked."; +"Scene.Report.StepFinal.Unfollow" = "Unfollow"; +"Scene.Report.StepFinal.UnfollowUser" = "Unfollow %@"; +"Scene.Report.StepFinal.Unfollowed" = "Unfollowed"; +"Scene.Report.StepFinal.WhenYouSeeSomethingYouDontLikeOnMastodonYouCanRemoveThePersonFromYourExperience." = "When you see something you don’t like on Mastodon, you can remove the person from your experience."; +"Scene.Report.StepFinal.WhileWeReviewThisYouCanTakeActionAgainstUser" = "While we review this, you can take action against %@"; +"Scene.Report.StepFinal.YouWontSeeTheirPostsOrReblogsInYourHomeFeedTheyWontKnowTheyVeBeenMuted" = "You won’t see their posts or reblogs in your home feed. They won’t know they’ve been muted."; +"Scene.Report.StepFour.IsThereAnythingElseWeShouldKnow" = "Is there anything else we should know?"; +"Scene.Report.StepFour.Step4Of4" = "Step 4 of 4"; +"Scene.Report.StepOne.IDontLikeIt" = "I don’t like it"; +"Scene.Report.StepOne.ItIsNotSomethingYouWantToSee" = "It is not something you want to see"; +"Scene.Report.StepOne.ItViolatesServerRules" = "It violates server rules"; +"Scene.Report.StepOne.ItsSomethingElse" = "It’s something else"; +"Scene.Report.StepOne.ItsSpam" = "It’s spam"; +"Scene.Report.StepOne.MaliciousLinksFakeEngagementOrRepetetiveReplies" = "Malicious links, fake engagement, or repetetive replies"; +"Scene.Report.StepOne.SelectTheBestMatch" = "Select the best match"; +"Scene.Report.StepOne.Step1Of4" = "Step 1 of 4"; +"Scene.Report.StepOne.TheIssueDoesNotFitIntoOtherCategories" = "The issue does not fit into other categories"; +"Scene.Report.StepOne.WhatsWrongWithThisAccount" = "What's wrong with this account?"; +"Scene.Report.StepOne.WhatsWrongWithThisPost" = "What's wrong with this post?"; +"Scene.Report.StepOne.WhatsWrongWithThisUsername" = "What's wrong with %@?"; +"Scene.Report.StepOne.YouAreAwareThatItBreaksSpecificRules" = "You are aware that it breaks specific rules"; +"Scene.Report.StepThree.AreThereAnyPostsThatBackUpThisReport" = "Are there any posts that back up this report?"; +"Scene.Report.StepThree.SelectAllThatApply" = "Select all that apply"; +"Scene.Report.StepThree.Step3Of4" = "Step 3 of 4"; +"Scene.Report.StepTwo.IJustDon’tLikeIt" = "I just don’t like it"; +"Scene.Report.StepTwo.SelectAllThatApply" = "Select all that apply"; +"Scene.Report.StepTwo.Step2Of4" = "Step 2 of 4"; +"Scene.Report.StepTwo.WhichRulesAreBeingViolated" = "Which rules are being violated?"; +"Scene.Report.TextPlaceholder" = "Type or paste additional comments"; +"Scene.Report.Title" = "Report %@"; +"Scene.Report.TitleReport" = "Report"; +"Scene.Search.Recommend.Accounts.Description" = "You may like to follow these accounts"; +"Scene.Search.Recommend.Accounts.Follow" = "Follow"; +"Scene.Search.Recommend.Accounts.Title" = "Accounts you might like"; +"Scene.Search.Recommend.ButtonText" = "See All"; +"Scene.Search.Recommend.HashTag.Description" = "Hashtags that are getting quite a bit of attention"; +"Scene.Search.Recommend.HashTag.PeopleTalking" = "%@ people are talking"; +"Scene.Search.Recommend.HashTag.Title" = "Trending on Mastodon"; +"Scene.Search.SearchBar.Cancel" = "Cancel"; +"Scene.Search.SearchBar.Placeholder" = "Search hashtags and users"; +"Scene.Search.Searching.Clear" = "Clear"; +"Scene.Search.Searching.EmptyState.NoResults" = "No results"; +"Scene.Search.Searching.RecentSearch" = "Recent searches"; +"Scene.Search.Searching.Segment.All" = "All"; +"Scene.Search.Searching.Segment.Hashtags" = "Hashtags"; +"Scene.Search.Searching.Segment.People" = "People"; +"Scene.Search.Searching.Segment.Posts" = "Posts"; +"Scene.Search.Title" = "Search"; +"Scene.ServerPicker.Button.Category.Academia" = "academia"; +"Scene.ServerPicker.Button.Category.Activism" = "activism"; +"Scene.ServerPicker.Button.Category.All" = "All"; +"Scene.ServerPicker.Button.Category.AllAccessiblityDescription" = "Category: All"; +"Scene.ServerPicker.Button.Category.Art" = "art"; +"Scene.ServerPicker.Button.Category.Food" = "food"; +"Scene.ServerPicker.Button.Category.Furry" = "furry"; +"Scene.ServerPicker.Button.Category.Games" = "games"; +"Scene.ServerPicker.Button.Category.General" = "general"; +"Scene.ServerPicker.Button.Category.Journalism" = "journalism"; +"Scene.ServerPicker.Button.Category.Lgbt" = "lgbt"; +"Scene.ServerPicker.Button.Category.Music" = "music"; +"Scene.ServerPicker.Button.Category.Regional" = "regional"; +"Scene.ServerPicker.Button.Category.Tech" = "tech"; +"Scene.ServerPicker.Button.SeeLess" = "See Less"; +"Scene.ServerPicker.Button.SeeMore" = "See More"; +"Scene.ServerPicker.EmptyState.BadNetwork" = "Something went wrong while loading the data. Check your internet connection."; +"Scene.ServerPicker.EmptyState.FindingServers" = "Finding available servers..."; +"Scene.ServerPicker.EmptyState.NoResults" = "No results"; +"Scene.ServerPicker.Input.Placeholder" = "Search servers"; +"Scene.ServerPicker.Input.SearchServersOrEnterUrl" = "Search servers or enter URL"; +"Scene.ServerPicker.Label.Category" = "CATEGORY"; +"Scene.ServerPicker.Label.Language" = "LANGUAGE"; +"Scene.ServerPicker.Label.Users" = "USERS"; +"Scene.ServerPicker.Subtitle" = "Pick a server based on your interests, region, or a general purpose one."; +"Scene.ServerPicker.SubtitleExtend" = "Pick a server based on your interests, region, or a general purpose one. Each server is operated by an entirely independent organization or individual."; +"Scene.ServerPicker.Title" = "Mastodon is made of users in different servers."; +"Scene.ServerRules.Button.Confirm" = "I Agree"; +"Scene.ServerRules.PrivacyPolicy" = "privacy policy"; +"Scene.ServerRules.Prompt" = "By continuing, you’re subject to the terms of service and privacy policy for %@."; +"Scene.ServerRules.Subtitle" = "These are set and enforced by the %@ moderators."; +"Scene.ServerRules.TermsOfService" = "terms of service"; +"Scene.ServerRules.Title" = "Some ground rules."; +"Scene.Settings.Footer.MastodonDescription" = "Mastodon is open source software. You can report issues on GitHub at %@ (%@)"; +"Scene.Settings.Keyboard.CloseSettingsWindow" = "Close Settings Window"; +"Scene.Settings.Section.Appearance.Automatic" = "Automatic"; +"Scene.Settings.Section.Appearance.Dark" = "Always Dark"; +"Scene.Settings.Section.Appearance.Light" = "Always Light"; +"Scene.Settings.Section.Appearance.Title" = "Appearance"; +"Scene.Settings.Section.BoringZone.AccountSettings" = "Account Settings"; +"Scene.Settings.Section.BoringZone.Privacy" = "Privacy Policy"; +"Scene.Settings.Section.BoringZone.Terms" = "Terms of Service"; +"Scene.Settings.Section.BoringZone.Title" = "The Boring Zone"; +"Scene.Settings.Section.LookAndFeel.Light" = "Light"; +"Scene.Settings.Section.LookAndFeel.ReallyDark" = "Really Dark"; +"Scene.Settings.Section.LookAndFeel.SortaDark" = "Sorta Dark"; +"Scene.Settings.Section.LookAndFeel.Title" = "Look and Feel"; +"Scene.Settings.Section.LookAndFeel.UseSystem" = "Use System"; +"Scene.Settings.Section.Notifications.Boosts" = "Reblogs my post"; +"Scene.Settings.Section.Notifications.Favorites" = "Favorites my post"; +"Scene.Settings.Section.Notifications.Follows" = "Follows me"; +"Scene.Settings.Section.Notifications.Mentions" = "Mentions me"; +"Scene.Settings.Section.Notifications.Title" = "Notifications"; +"Scene.Settings.Section.Notifications.Trigger.Anyone" = "anyone"; +"Scene.Settings.Section.Notifications.Trigger.Follow" = "anyone I follow"; +"Scene.Settings.Section.Notifications.Trigger.Follower" = "a follower"; +"Scene.Settings.Section.Notifications.Trigger.Noone" = "no one"; +"Scene.Settings.Section.Notifications.Trigger.Title" = "Notify me when"; +"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "Disable animated avatars"; +"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "Disable animated emojis"; +"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Open links in Mastodon"; +"Scene.Settings.Section.Preference.Title" = "Preferences"; +"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "True black dark mode"; +"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "Use default browser to open links"; +"Scene.Settings.Section.SpicyZone.Clear" = "Clear Media Cache"; +"Scene.Settings.Section.SpicyZone.Signout" = "Sign Out"; +"Scene.Settings.Section.SpicyZone.Title" = "The Spicy Zone"; +"Scene.Settings.Title" = "Settings"; +"Scene.SuggestionAccount.FollowExplain" = "When you follow someone, you’ll see their posts in your home feed."; +"Scene.SuggestionAccount.Title" = "Find People to Follow"; +"Scene.Thread.BackTitle" = "Post"; +"Scene.Thread.Title" = "Post from %@"; +"Scene.Welcome.GetStarted" = "Get Started"; +"Scene.Welcome.LogIn" = "Log In"; +"Scene.Welcome.Slogan" = "Social networking +back in your hands."; +"Scene.Wizard.AccessibilityHint" = "Double tap to dismiss this wizard"; +"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Switch between multiple accounts by holding the profile button."; +"Scene.Wizard.NewInMastodon" = "New in Mastodon"; \ No newline at end of file diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.stringsdict new file mode 100644 index 000000000..cd97825f4 --- /dev/null +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.stringsdict @@ -0,0 +1,631 @@ + + + + + a11y.plural.count.unread.notification + + NSStringLocalizedFormatKey + %#@notification_count_unread_notification@ + notification_count_unread_notification + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + no unread notification + one + 1 unread notification + few + %ld unread notifications + many + %ld unread notification + other + %ld unread notification + + + a11y.plural.count.input_limit_exceeds + + NSStringLocalizedFormatKey + Input limit exceeds %#@character_count@ + character_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 characters + one + 1 character + few + %ld characters + many + %ld characters + other + %ld characters + + + a11y.plural.count.input_limit_remains + + NSStringLocalizedFormatKey + Input limit remains %#@character_count@ + character_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 characters + one + 1 character + few + %ld characters + many + %ld characters + other + %ld characters + + + a11y.plural.count.characters_left + + NSStringLocalizedFormatKey + %#@character_count@ left + character_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + no characters + one + 1 character + few + %ld characters + many + %ld characters + other + %ld characters + + + plural.count.followed_by_and_mutual + + NSStringLocalizedFormatKey + %#@names@%#@count_mutual@ + names + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + other + + + count_mutual + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + Followed by %1$@ + one + Followed by %1$@, and another mutual + few + Followed by %1$@, and %ld mutuals + many + Followed by %1$@, and %ld mutuals + other + Followed by %1$@, and %ld mutuals + + + plural.count.metric_formatted.post + + NSStringLocalizedFormatKey + %@ %#@post_count@ + post_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + posts + one + post + few + posts + many + posts + other + posts + + + plural.count.media + + NSStringLocalizedFormatKey + %#@media_count@ + media_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 media + one + 1 media + few + %ld media + many + %ld media + other + %ld media + + + plural.count.post + + NSStringLocalizedFormatKey + %#@post_count@ + post_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 posts + one + 1 post + few + %ld posts + many + %ld posts + other + %ld posts + + + plural.count.favorite + + NSStringLocalizedFormatKey + %#@favorite_count@ + favorite_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 favorites + one + 1 favorite + few + %ld favorites + many + %ld favorites + other + %ld favorites + + + plural.count.reblog + + NSStringLocalizedFormatKey + %#@reblog_count@ + reblog_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 reblogs + one + 1 reblog + few + %ld reblogs + many + %ld reblogs + other + %ld reblogs + + + plural.count.reply + + NSStringLocalizedFormatKey + %#@reply_count@ + reply_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 replies + one + 1 reply + few + %ld replies + many + %ld replies + other + %ld replies + + + plural.count.vote + + NSStringLocalizedFormatKey + %#@vote_count@ + vote_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 votes + one + 1 vote + few + %ld votes + many + %ld votes + other + %ld votes + + + plural.count.voter + + NSStringLocalizedFormatKey + %#@voter_count@ + voter_count + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 voters + one + 1 voter + few + %ld voters + many + %ld voters + other + %ld voters + + + plural.people_talking + + NSStringLocalizedFormatKey + %#@count_people_talking@ + count_people_talking + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 people talking + one + 1 people talking + few + %ld people talking + many + %ld people talking + other + %ld people talking + + + plural.count.following + + NSStringLocalizedFormatKey + %#@count_following@ + count_following + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 following + one + 1 following + few + %ld following + many + %ld following + other + %ld following + + + plural.count.follower + + NSStringLocalizedFormatKey + %#@count_follower@ + count_follower + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 followers + one + 1 follower + few + %ld followers + many + %ld followers + other + %ld followers + + + date.year.left + + NSStringLocalizedFormatKey + %#@count_year_left@ + count_year_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 years left + one + 1 year left + few + %ld years left + many + %ld years left + other + %ld years left + + + date.month.left + + NSStringLocalizedFormatKey + %#@count_month_left@ + count_month_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 months left + one + 1 months left + few + %ld months left + many + %ld months left + other + %ld months left + + + date.day.left + + NSStringLocalizedFormatKey + %#@count_day_left@ + count_day_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 days left + one + 1 day left + few + %ld days left + many + %ld days left + other + %ld days left + + + date.hour.left + + NSStringLocalizedFormatKey + %#@count_hour_left@ + count_hour_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 hours left + one + 1 hour left + few + %ld hours left + many + %ld hours left + other + %ld hours left + + + date.minute.left + + NSStringLocalizedFormatKey + %#@count_minute_left@ + count_minute_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 minutes left + one + 1 minute left + few + %ld minutes left + many + %ld minutes left + other + %ld minutes left + + + date.second.left + + NSStringLocalizedFormatKey + %#@count_second_left@ + count_second_left + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0 seconds left + one + 1 second left + few + %ld seconds left + many + %ld seconds left + other + %ld seconds left + + + date.year.ago.abbr + + NSStringLocalizedFormatKey + %#@count_year_ago_abbr@ + count_year_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0y ago + one + 1y ago + few + %ldy ago + many + %ldy ago + other + %ldy ago + + + date.month.ago.abbr + + NSStringLocalizedFormatKey + %#@count_month_ago_abbr@ + count_month_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0M ago + one + 1M ago + few + %ldM ago + many + %ldM ago + other + %ldM ago + + + date.day.ago.abbr + + NSStringLocalizedFormatKey + %#@count_day_ago_abbr@ + count_day_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0d ago + one + 1d ago + few + %ldd ago + many + %ldd ago + other + %ldd ago + + + date.hour.ago.abbr + + NSStringLocalizedFormatKey + %#@count_hour_ago_abbr@ + count_hour_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0h ago + one + 1h ago + few + %ldh ago + many + %ldh ago + other + %ldh ago + + + date.minute.ago.abbr + + NSStringLocalizedFormatKey + %#@count_minute_ago_abbr@ + count_minute_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0m ago + one + 1m ago + few + %ldm ago + many + %ldm ago + other + %ldm ago + + + date.second.ago.abbr + + NSStringLocalizedFormatKey + %#@count_second_ago_abbr@ + count_second_ago_abbr + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + zero + 0s ago + one + 1s ago + few + %lds ago + many + %lds ago + other + %lds ago + + + + diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings index 9ecfa450e..943d56a9f 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings @@ -68,13 +68,13 @@ "Common.Controls.Friendship.EditInfo" = "تَحريرُ المَعلُومات"; "Common.Controls.Friendship.Follow" = "مُتابَعَة"; "Common.Controls.Friendship.Following" = "مُتابَع"; -"Common.Controls.Friendship.HideReblogs" = "Hide Reblogs"; +"Common.Controls.Friendship.HideReblogs" = "إخفاء إعادات التدوين"; "Common.Controls.Friendship.Mute" = "كَتم"; "Common.Controls.Friendship.MuteUser" = "كَتمُ %@"; "Common.Controls.Friendship.Muted" = "مكتوم"; "Common.Controls.Friendship.Pending" = "قيد المُراجعة"; "Common.Controls.Friendship.Request" = "إرسال طَلَب"; -"Common.Controls.Friendship.ShowReblogs" = "Show Reblogs"; +"Common.Controls.Friendship.ShowReblogs" = "إظهار إعادات التدوين"; "Common.Controls.Friendship.Unblock" = "رفع الحَظر"; "Common.Controls.Friendship.UnblockUser" = "رفع الحَظر عن %@"; "Common.Controls.Friendship.Unmute" = "رفع الكتم"; @@ -108,6 +108,10 @@ "Common.Controls.Status.Actions.Unreblog" = "التراجُع عن إعادة النشر"; "Common.Controls.Status.ContentWarning" = "تحذير المُحتوى"; "Common.Controls.Status.MediaContentWarning" = "اُنقُر لِلكَشف"; +"Common.Controls.Status.MetaEntity.Email" = "عُنوان البريد الإلكتُروني: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "وَسْم: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "إظهار المِلف التعريفي: %@"; +"Common.Controls.Status.MetaEntity.Url" = "رابِط: %@"; "Common.Controls.Status.Poll.Closed" = "انتهى"; "Common.Controls.Status.Poll.Vote" = "صَوِّت"; "Common.Controls.Status.SensitiveContent" = "مُحتَوى حَسَّاس"; @@ -151,7 +155,7 @@ "Scene.AccountList.AddAccount" = "إضافَةُ حِساب"; "Scene.AccountList.DismissAccountSwitcher" = "تجاهُل مبدِّل الحِساب"; "Scene.AccountList.TabBarHint" = "المِلَفُّ المُحدَّدُ حالِيًّا: %@. اُنقُر نَقرًا مُزدَوَجًا مَعَ الاِستِمرارِ لِإظهارِ مُبدِّلِ الحِساب"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "العَلاماتُ المَرجعيَّة"; "Scene.Compose.Accessibility.AppendAttachment" = "إضافة مُرفَق"; "Scene.Compose.Accessibility.AppendPoll" = "اضافة استطلاع رأي"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "منتقي الرموز التعبيرية المُخصَّص"; @@ -161,9 +165,13 @@ "Scene.Compose.Accessibility.RemovePoll" = "إزالة الاستطلاع"; "Scene.Compose.Attachment.AttachmentBroken" = "هذا ال%@ مُعطَّل ويتعذَّرُ رفعُه إلى ماستودون."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "صِف الصورة للمَكفوفين..."; "Scene.Compose.Attachment.DescriptionVideo" = "صِف المقطع المرئي للمَكفوفين..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "صورة"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "مقطع مرئي"; "Scene.Compose.AutoComplete.SpaceToAdd" = "انقر على مساحة لإضافتِها"; "Scene.Compose.ComposeAction" = "نَشر"; @@ -256,12 +264,12 @@ "Scene.Profile.Header.FollowsYou" = "يُتابِعُك"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "تأكيدُ حَظر %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "حَظرُ الحِساب"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirm to hide reblogs"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Hide Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "التأكيد لِإخفاء إعادات التدوين"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "إخفاء إعادات التدوين"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "تأكيدُ كَتم %@"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "كَتمُ الحِساب"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirm to show reblogs"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Show Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "التأكيد لِإظهار إعادات التدوين"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "إظهار إعادات التدوين"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "تأكيدُ رَفع الحَظرِ عَن %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "رَفعُ الحَظرِ عَنِ الحِساب"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "أكِّد لرفع الكتمْ عن %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings index 1e691f8a9..fca658aef 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings @@ -108,6 +108,10 @@ Comprova la teva connexió a Internet."; "Common.Controls.Status.Actions.Unreblog" = "Desfer l'impuls"; "Common.Controls.Status.ContentWarning" = "Advertència de Contingut"; "Common.Controls.Status.MediaContentWarning" = "Toca qualsevol lloc per a mostrar"; +"Common.Controls.Status.MetaEntity.Email" = "Correu electrònic: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Etiqueta %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Mostra el Perfil: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Enllaç: %@"; "Common.Controls.Status.Poll.Closed" = "Finalitzada"; "Common.Controls.Status.Poll.Vote" = "Vota"; "Common.Controls.Status.SensitiveContent" = "Contingut sensible"; @@ -151,7 +155,7 @@ El teu perfil els sembla així."; "Scene.AccountList.AddAccount" = "Afegir compte"; "Scene.AccountList.DismissAccountSwitcher" = "Descartar el commutador de comptes"; "Scene.AccountList.TabBarHint" = "Perfil actual seleccionat: %@. Toca dues vegades i manté el dit per a mostrar el commutador de comptes"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "Marcadors"; "Scene.Compose.Accessibility.AppendAttachment" = "Afegeix Adjunt"; "Scene.Compose.Accessibility.AppendPoll" = "Afegir enquesta"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "Selector d'Emoji Personalitzat"; @@ -161,9 +165,13 @@ El teu perfil els sembla així."; "Scene.Compose.Accessibility.RemovePoll" = "Eliminar Enquesta"; "Scene.Compose.Attachment.AttachmentBroken" = "Aquest %@ està trencat i no pot ser carregat a Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "El fitxer adjunt és massa gran"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "No es pot reconèixer l'adjunt multimèdia"; "Scene.Compose.Attachment.DescriptionPhoto" = "Descriu la foto per als disminuïts visuals..."; "Scene.Compose.Attachment.DescriptionVideo" = "Descriu el vídeo per als disminuïts visuals..."; +"Scene.Compose.Attachment.LoadFailed" = "Ha fallat la càrrega"; "Scene.Compose.Attachment.Photo" = "foto"; +"Scene.Compose.Attachment.UploadFailed" = "Pujada fallida"; "Scene.Compose.Attachment.Video" = "vídeo"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Espai per afegir"; "Scene.Compose.ComposeAction" = "Publica"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings index 053211f28..05c575520 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings @@ -108,6 +108,10 @@ "Common.Controls.Status.Actions.Unreblog" = "پۆستکردنەکە بگەڕێنەوە"; "Common.Controls.Status.ContentWarning" = "ئاگاداریی ناوەڕۆک"; "Common.Controls.Status.MediaContentWarning" = "دەستی پیا بنێ بۆ نیشاندانی"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "داخراوە"; "Common.Controls.Status.Poll.Vote" = "دەنگ بدە"; "Common.Controls.Status.SensitiveContent" = "ناوەڕۆکی هەستیار"; @@ -160,9 +164,13 @@ "Scene.Compose.Accessibility.PostVisibilityMenu" = "پێڕستی شێوازی دەرکەوتنی پۆست"; "Scene.Compose.Accessibility.RemovePoll" = "دانگدانەکە لابە"; "Scene.Compose.Attachment.AttachmentBroken" = "ئەم %@ـە تێک چووە و ناتوانیت بەرزی بکەیتەوە."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "وێنەکەت بۆ نابیناکان باس بکە..."; "Scene.Compose.Attachment.DescriptionVideo" = "ڤیدیۆکەت بۆ نابیناکان باس بکە..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "وێنە"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "ڤیدیۆ"; "Scene.Compose.AutoComplete.SpaceToAdd" = "بۆشایی دابنێ بۆ زیادکردن"; "Scene.Compose.ComposeAction" = "بڵاوی بکەوە"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings index 0a78adc48..4f9a15906 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings @@ -108,6 +108,10 @@ Bitte überprüfe deine Internetverbindung."; "Common.Controls.Status.Actions.Unreblog" = "Nicht mehr teilen"; "Common.Controls.Status.ContentWarning" = "Inhaltswarnung"; "Common.Controls.Status.MediaContentWarning" = "Tippe irgendwo zum Anzeigen"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Beendet"; "Common.Controls.Status.Poll.Vote" = "Abstimmen"; "Common.Controls.Status.SensitiveContent" = "NSFW-Inhalt"; @@ -151,7 +155,7 @@ Dein Profil sieht für diesen Benutzer auch so aus."; "Scene.AccountList.AddAccount" = "Konto hinzufügen"; "Scene.AccountList.DismissAccountSwitcher" = "Dialog zum Wechseln des Kontos schließen"; "Scene.AccountList.TabBarHint" = "Aktuell ausgewähltes Profil: %@. Doppeltippen dann gedrückt halten, um den Kontoschalter anzuzeigen"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "Lesezeichen"; "Scene.Compose.Accessibility.AppendAttachment" = "Anhang hinzufügen"; "Scene.Compose.Accessibility.AppendPoll" = "Umfrage hinzufügen"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "Benutzerdefinierter Emojiwähler"; @@ -161,9 +165,13 @@ Dein Profil sieht für diesen Benutzer auch so aus."; "Scene.Compose.Accessibility.RemovePoll" = "Umfrage entfernen"; "Scene.Compose.Attachment.AttachmentBroken" = "Dieses %@ scheint defekt zu sein und kann nicht auf Mastodon hochgeladen werden."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Anhang zu groß"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Medienanhang wurde nicht erkannt"; "Scene.Compose.Attachment.DescriptionPhoto" = "Für Menschen mit Sehbehinderung beschreiben..."; "Scene.Compose.Attachment.DescriptionVideo" = "Für Menschen mit Sehbehinderung beschreiben..."; +"Scene.Compose.Attachment.LoadFailed" = "Laden fehlgeschlagen"; "Scene.Compose.Attachment.Photo" = "Foto"; +"Scene.Compose.Attachment.UploadFailed" = "Upload fehlgeschlagen"; "Scene.Compose.Attachment.Video" = "Video"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Leerzeichen um hinzuzufügen"; "Scene.Compose.ComposeAction" = "Veröffentlichen"; @@ -215,9 +223,9 @@ kann nicht auf Mastodon hochgeladen werden."; "Scene.Familiarfollowers.Title" = "Follower, die dir bekannt vorkommen"; "Scene.Favorite.Title" = "Deine Favoriten"; "Scene.FavoritedBy.Title" = "Favorisiert von"; -"Scene.Follower.Footer" = "Follower von anderen Servern werden nicht angezeigt."; +"Scene.Follower.Footer" = "Folger, die nicht auf deinem Server registriert sind, werden nicht angezeigt."; "Scene.Follower.Title" = "Follower"; -"Scene.Following.Footer" = "Wem das Konto folgt wird von anderen Servern werden nicht angezeigt."; +"Scene.Following.Footer" = "Gefolgte, die nicht auf deinem Server registriert sind, werden nicht angezeigt."; "Scene.Following.Title" = "Folgende"; "Scene.HomeTimeline.NavigationBarState.Accessibility.LogoHint" = "Zum Scrollen nach oben tippen und zum vorherigen Ort erneut tippen"; "Scene.HomeTimeline.NavigationBarState.Accessibility.LogoLabel" = "Logo-Button"; @@ -247,7 +255,7 @@ kann nicht auf Mastodon hochgeladen werden."; "Scene.Profile.Accessibility.EditAvatarImage" = "Profilbild bearbeiten"; "Scene.Profile.Accessibility.ShowAvatarImage" = "Profilbild anzeigen"; "Scene.Profile.Accessibility.ShowBannerImage" = "Bannerbild anzeigen"; -"Scene.Profile.Dashboard.Followers" = "Folger"; +"Scene.Profile.Dashboard.Followers" = "Folgende"; "Scene.Profile.Dashboard.Following" = "Gefolgte"; "Scene.Profile.Dashboard.Posts" = "Beiträge"; "Scene.Profile.Fields.AddRow" = "Zeile hinzufügen"; @@ -260,7 +268,7 @@ kann nicht auf Mastodon hochgeladen werden."; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Reblogs ausblenden"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Bestätige %@ stumm zu schalten"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Konto stummschalten"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirm to show reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Bestätigen um Reblogs anzuzeigen"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Reblogs anzeigen"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Bestätige %@ zu entsperren"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Konto entsperren"; @@ -422,7 +430,7 @@ beliebigen Server."; "Scene.Settings.Section.Notifications.Title" = "Benachrichtigungen"; "Scene.Settings.Section.Notifications.Trigger.Anyone" = "jeder"; "Scene.Settings.Section.Notifications.Trigger.Follow" = "ein von mir Gefolgter"; -"Scene.Settings.Section.Notifications.Trigger.Follower" = "ein Folger"; +"Scene.Settings.Section.Notifications.Trigger.Follower" = "ein Folgender"; "Scene.Settings.Section.Notifications.Trigger.Noone" = "niemand"; "Scene.Settings.Section.Notifications.Trigger.Title" = "Benachrichtige mich, wenn"; "Scene.Settings.Section.Preference.DisableAvatarAnimation" = "Animierte Profilbilder deaktivieren"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.stringsdict index c6a8a4297..f60c6b0d7 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.stringsdict +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.stringsdict @@ -248,9 +248,9 @@ NSStringFormatValueTypeKey ld one - 1 Follower + 1 Folgender other - %ld Follower + %ld Folgende date.year.left diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings index 0522c6b8c..07ccd2c1b 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings @@ -109,7 +109,7 @@ Please check your internet connection."; "Common.Controls.Status.ContentWarning" = "Content Warning"; "Common.Controls.Status.MediaContentWarning" = "Tap anywhere to reveal"; "Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; -"Common.Controls.Status.MetaEntity.Hashtag" = "Hastag %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; "Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; "Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Closed"; @@ -167,9 +167,13 @@ Your profile looks like this to them."; "Scene.Compose.Accessibility.RemovePoll" = "Remove Poll"; "Scene.Compose.Attachment.AttachmentBroken" = "This %@ is broken and can’t be uploaded to Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Describe the photo for the visually-impaired..."; "Scene.Compose.Attachment.DescriptionVideo" = "Describe the video for the visually-impaired..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "photo"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "video"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Space to add"; "Scene.Compose.ComposeAction" = "Publish"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings index 47ed11bb9..c16bec6cf 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings @@ -108,6 +108,10 @@ Por favor, revise su conexión a internet."; "Common.Controls.Status.Actions.Unreblog" = "Deshacer reblogueo"; "Common.Controls.Status.ContentWarning" = "Advertencia de Contenido"; "Common.Controls.Status.MediaContentWarning" = "Pulsa en cualquier sitio para mostrar"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Cerrado"; "Common.Controls.Status.Poll.Vote" = "Vota"; "Common.Controls.Status.SensitiveContent" = "Contenido sensible"; @@ -161,9 +165,13 @@ Tu perfil se ve así para él."; "Scene.Compose.Accessibility.RemovePoll" = "Eliminar Encuesta"; "Scene.Compose.Attachment.AttachmentBroken" = "Este %@ está roto y no puede subirse a Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Describe la foto para los usuarios con dificultad visual..."; "Scene.Compose.Attachment.DescriptionVideo" = "Describe el vídeo para los usuarios con dificultad visual..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "foto"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "vídeo"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Espacio para añadir"; "Scene.Compose.ComposeAction" = "Publicar"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings index e2be3068d..aef7a7507 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings @@ -108,6 +108,10 @@ Egiaztatu Interneteko konexioa."; "Common.Controls.Status.Actions.Unreblog" = "Desegin bultzada"; "Common.Controls.Status.ContentWarning" = "Edukiaren abisua"; "Common.Controls.Status.MediaContentWarning" = "Ukitu edonon bistaratzeko"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Itxita"; "Common.Controls.Status.Poll.Vote" = "Bozkatu"; "Common.Controls.Status.SensitiveContent" = "Sensitive Content"; @@ -161,9 +165,13 @@ Zure profilak itxura hau du berarentzat."; "Scene.Compose.Accessibility.RemovePoll" = "Kendu inkesta"; "Scene.Compose.Attachment.AttachmentBroken" = "%@ hondatuta dago eta ezin da Mastodonera igo."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Deskribatu argazkia ikusmen arazoak dituztenentzat..."; "Scene.Compose.Attachment.DescriptionVideo" = "Deskribatu bideoa ikusmen arazoak dituztenentzat..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "argazkia"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "bideoa"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Sakatu zuriunea gehitzeko"; "Scene.Compose.ComposeAction" = "Argitaratu"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings index fbf48fa83..11259ace5 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings @@ -108,6 +108,10 @@ Tarkista internet-yhteytesi."; "Common.Controls.Status.Actions.Unreblog" = "Peru edelleen jako"; "Common.Controls.Status.ContentWarning" = "Sisältövaroitus"; "Common.Controls.Status.MediaContentWarning" = "Napauta mistä tahansa paljastaaksesi"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Suljettu"; "Common.Controls.Status.Poll.Vote" = "Vote"; "Common.Controls.Status.SensitiveContent" = "Sensitive Content"; @@ -161,9 +165,13 @@ Profiilisi näyttää tältä hänelle."; "Scene.Compose.Accessibility.RemovePoll" = "Poista kysely"; "Scene.Compose.Attachment.AttachmentBroken" = "This %@ is broken and can’t be uploaded to Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Kuvaile kuva näkövammaisille..."; "Scene.Compose.Attachment.DescriptionVideo" = "Kuvaile video näkövammaisille..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "kuva"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "video"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Space to add"; "Scene.Compose.ComposeAction" = "Julkaise"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings index 03efc3549..931219c21 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings @@ -108,6 +108,10 @@ Veuillez vérifier votre accès à Internet."; "Common.Controls.Status.Actions.Unreblog" = "Annuler le reblog"; "Common.Controls.Status.ContentWarning" = "Avertissement de contenu"; "Common.Controls.Status.MediaContentWarning" = "Tapotez n’importe où pour révéler la publication"; +"Common.Controls.Status.MetaEntity.Email" = "Adresse e-mail : %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag : %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Afficher le profile : %@"; +"Common.Controls.Status.MetaEntity.Url" = "Lien : %@"; "Common.Controls.Status.Poll.Closed" = "Fermé"; "Common.Controls.Status.Poll.Vote" = "Voter"; "Common.Controls.Status.SensitiveContent" = "Contenu sensible"; @@ -151,7 +155,7 @@ Votre profil ressemble à ça pour lui."; "Scene.AccountList.AddAccount" = "Ajouter un compte"; "Scene.AccountList.DismissAccountSwitcher" = "Rejeter le commutateur de compte"; "Scene.AccountList.TabBarHint" = "Profil sélectionné actuel: %@. Double appui puis maintenez enfoncé pour afficher le changement de compte"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "Favoris"; "Scene.Compose.Accessibility.AppendAttachment" = "Joindre un document"; "Scene.Compose.Accessibility.AppendPoll" = "Ajouter un Sondage"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "Sélecteur d’émojis personnalisés"; @@ -161,9 +165,13 @@ Votre profil ressemble à ça pour lui."; "Scene.Compose.Accessibility.RemovePoll" = "Retirer le sondage"; "Scene.Compose.Attachment.AttachmentBroken" = "Ce %@ est brisé et ne peut pas être téléversé sur Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Décrire cette photo pour les personnes malvoyantes..."; "Scene.Compose.Attachment.DescriptionVideo" = "Décrire cette vidéo pour les personnes malvoyantes..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "photo"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "vidéo"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Espace à ajouter"; "Scene.Compose.ComposeAction" = "Publier"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings index 2d1964d81..ce1764eac 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings @@ -108,6 +108,10 @@ Thoir sùil air a’ cheangal agad ris an eadar-lìon."; "Common.Controls.Status.Actions.Unreblog" = "Na brosnaich tuilleadh"; "Common.Controls.Status.ContentWarning" = "Rabhadh susbainte"; "Common.Controls.Status.MediaContentWarning" = "Thoir gnogag àite sam bith gus a nochdadh"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Dùinte"; "Common.Controls.Status.Poll.Vote" = "Cuir bhòt"; "Common.Controls.Status.SensitiveContent" = "Susbaint fhrionasach"; @@ -161,9 +165,13 @@ Seo an coltas a th’ air a’ phròifil agad dhaibh-san."; "Scene.Compose.Accessibility.RemovePoll" = "Thoir air falbh an cunntas-bheachd"; "Scene.Compose.Attachment.AttachmentBroken" = "Seo %@ a tha briste is cha ghabh a luchdadh suas gu Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Mìnich an dealbh dhan fheadhainn air a bheil cion-lèirsinne…"; "Scene.Compose.Attachment.DescriptionVideo" = "Mìnich a’ video dhan fheadhainn air a bheil cion-lèirsinne…"; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "dealbh"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "video"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Brùth air Space gus a chur ris"; "Scene.Compose.ComposeAction" = "Foillsich"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings index c76089221..3087f33c5 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings @@ -68,13 +68,13 @@ Comproba a conexión a internet."; "Common.Controls.Friendship.EditInfo" = "Editar info"; "Common.Controls.Friendship.Follow" = "Seguir"; "Common.Controls.Friendship.Following" = "Seguindo"; -"Common.Controls.Friendship.HideReblogs" = "Hide Reblogs"; +"Common.Controls.Friendship.HideReblogs" = "Agochar Promocións"; "Common.Controls.Friendship.Mute" = "Acalar"; "Common.Controls.Friendship.MuteUser" = "Acalar a %@"; "Common.Controls.Friendship.Muted" = "Acalada"; "Common.Controls.Friendship.Pending" = "Pendente"; "Common.Controls.Friendship.Request" = "Solicitar"; -"Common.Controls.Friendship.ShowReblogs" = "Show Reblogs"; +"Common.Controls.Friendship.ShowReblogs" = "Mostrar Promocións"; "Common.Controls.Friendship.Unblock" = "Desbloquear"; "Common.Controls.Friendship.UnblockUser" = "Desbloquear a %@"; "Common.Controls.Friendship.Unmute" = "Non Acalar"; @@ -108,6 +108,10 @@ Comproba a conexión a internet."; "Common.Controls.Status.Actions.Unreblog" = "Retirar promoción"; "Common.Controls.Status.ContentWarning" = "Aviso sobre o contido"; "Common.Controls.Status.MediaContentWarning" = "Toca nalgures para mostrar"; +"Common.Controls.Status.MetaEntity.Email" = "Enderezo de email: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Cancelo: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Mostrar Perfil: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Ligazón: %@"; "Common.Controls.Status.Poll.Closed" = "Pechada"; "Common.Controls.Status.Poll.Vote" = "Votar"; "Common.Controls.Status.SensitiveContent" = "Contido sensible"; @@ -151,7 +155,7 @@ Así se ve o teu perfil."; "Scene.AccountList.AddAccount" = "Engadir conta"; "Scene.AccountList.DismissAccountSwitcher" = "Desbotar intercambiador de contas"; "Scene.AccountList.TabBarHint" = "Perfil seleccionado: %@. Dobre toque e manter para mostrar o intercambiador de contas"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "Marcadores"; "Scene.Compose.Accessibility.AppendAttachment" = "Engadir anexo"; "Scene.Compose.Accessibility.AppendPoll" = "Engadir enquisa"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "Selector emoji personalizado"; @@ -161,9 +165,13 @@ Así se ve o teu perfil."; "Scene.Compose.Accessibility.RemovePoll" = "Eliminar enquisa"; "Scene.Compose.Attachment.AttachmentBroken" = "Este %@ está estragado e non pode ser subido a Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Adxunto demasiado grande"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Non se recoñece o tipo de multimedia"; "Scene.Compose.Attachment.DescriptionPhoto" = "Describe a foto para persoas con problemas visuais..."; "Scene.Compose.Attachment.DescriptionVideo" = "Describe o vídeo para persoas con problemas visuais..."; +"Scene.Compose.Attachment.LoadFailed" = "Fallou a carga"; "Scene.Compose.Attachment.Photo" = "foto"; +"Scene.Compose.Attachment.UploadFailed" = "Erro na subida"; "Scene.Compose.Attachment.Video" = "vídeo"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Barra de espazo engade"; "Scene.Compose.ComposeAction" = "Publicar"; @@ -256,12 +264,12 @@ ser subido a Mastodon."; "Scene.Profile.Header.FollowsYou" = "Séguete"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirma o bloqueo de %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bloquear Conta"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirm to hide reblogs"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Hide Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirma para agochar promocións"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Agochar Promocións"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confirma Acalar a %@"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Acalar conta"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirm to show reblogs"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Show Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirma para ver promocións"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Mostrar Promocións"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Confirma o desbloqueo de %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Desbloquear Conta"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confirma restablecer a %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings index c83cb7458..8f99028ed 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings @@ -108,6 +108,10 @@ Per favore verifica la tua connessione internet."; "Common.Controls.Status.Actions.Unreblog" = "Annulla condivisione"; "Common.Controls.Status.ContentWarning" = "Avviso sul contenuto"; "Common.Controls.Status.MediaContentWarning" = "Tocca ovunque per rivelare"; +"Common.Controls.Status.MetaEntity.Email" = "Indirizzo email: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Mostra il profilo: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Collegamento: %@"; "Common.Controls.Status.Poll.Closed" = "Chiuso"; "Common.Controls.Status.Poll.Vote" = "Vota"; "Common.Controls.Status.SensitiveContent" = "Contenuto sensibile"; @@ -151,7 +155,7 @@ Il tuo profilo sembra questo per loro."; "Scene.AccountList.AddAccount" = "Aggiungi account"; "Scene.AccountList.DismissAccountSwitcher" = "Ignora il cambio account"; "Scene.AccountList.TabBarHint" = "Profilo corrente selezionato: %@. Doppio tocco e tieni premuto per mostrare il cambio account"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "Segnalibri"; "Scene.Compose.Accessibility.AppendAttachment" = "Aggiungi allegato"; "Scene.Compose.Accessibility.AppendPoll" = "Aggiungi sondaggio"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "Selettore Emoji personalizzato"; @@ -161,9 +165,13 @@ Il tuo profilo sembra questo per loro."; "Scene.Compose.Accessibility.RemovePoll" = "Elimina sondaggio"; "Scene.Compose.Attachment.AttachmentBroken" = "Questo %@ è rotto e non può essere caricato su Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Allegato troppo grande"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Impossibile riconoscere questo allegato multimediale"; "Scene.Compose.Attachment.DescriptionPhoto" = "Descrivi la foto per gli utenti ipovedenti..."; "Scene.Compose.Attachment.DescriptionVideo" = "Descrivi il filmato per gli utenti ipovedenti..."; +"Scene.Compose.Attachment.LoadFailed" = "Caricamento fallito"; "Scene.Compose.Attachment.Photo" = "foto"; +"Scene.Compose.Attachment.UploadFailed" = "Caricamento fallito"; "Scene.Compose.Attachment.Video" = "filmato"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Spazio da aggiungere"; "Scene.Compose.ComposeAction" = "Pubblica"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings index 080624f06..cad44f531 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings @@ -108,6 +108,10 @@ "Common.Controls.Status.Actions.Unreblog" = "ブーストを戻す"; "Common.Controls.Status.ContentWarning" = "コンテンツ警告"; "Common.Controls.Status.MediaContentWarning" = "どこかをタップして表示"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "終了"; "Common.Controls.Status.Poll.Vote" = "投票"; "Common.Controls.Status.SensitiveContent" = "閲覧注意"; @@ -156,9 +160,13 @@ "Scene.Compose.Accessibility.PostVisibilityMenu" = "投稿の表示メニュー"; "Scene.Compose.Accessibility.RemovePoll" = "投票を消去"; "Scene.Compose.Attachment.AttachmentBroken" = "%@は壊れていてMastodonにアップロードできません。"; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "閲覧が難しいユーザーへの画像説明"; "Scene.Compose.Attachment.DescriptionVideo" = "閲覧が難しいユーザーへの映像説明"; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "写真"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "動画"; "Scene.Compose.AutoComplete.SpaceToAdd" = "スペースを追加"; "Scene.Compose.ComposeAction" = "投稿"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings index 1339af4cf..03108a25a 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings @@ -108,6 +108,10 @@ Ma ulac aɣilif, senqed tuqqna-inek internet."; "Common.Controls.Status.Actions.Unreblog" = "Sefsex allus n usuffeɣ"; "Common.Controls.Status.ContentWarning" = "Alɣu n ugbur"; "Common.Controls.Status.MediaContentWarning" = "Sit anida tebɣiḍ i wakken ad twaliḍ"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Ifukk"; "Common.Controls.Status.Poll.Vote" = "Dɣeṛ"; "Common.Controls.Status.SensitiveContent" = "Agbur amḥulfu"; @@ -161,9 +165,13 @@ Akka i as-d-yettban umaɣnu-inek."; "Scene.Compose.Accessibility.RemovePoll" = "Kkes asenqed"; "Scene.Compose.Attachment.AttachmentBroken" = "%@-a yerreẓ, ur yezmir ara Ad d-yettwasali ɣef Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Glem-d tawlaft i wid yesɛan ugur deg yiẓri..."; "Scene.Compose.Attachment.DescriptionVideo" = "Glem-d tavidyut i wid yesɛan ugur deg yiẓri..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "tawlaft"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "tavidyutt"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Tallunt ara yettwarnun"; "Scene.Compose.ComposeAction" = "Sufeɣ"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings index a72543a3e..10d88488a 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings @@ -68,13 +68,13 @@ Jkx girêdana înternetê xwe kontrol bike."; "Common.Controls.Friendship.EditInfo" = "Zanyariyan serrast bike"; "Common.Controls.Friendship.Follow" = "Bişopîne"; "Common.Controls.Friendship.Following" = "Dişopîne"; -"Common.Controls.Friendship.HideReblogs" = "Hide Reblogs"; +"Common.Controls.Friendship.HideReblogs" = "Bilindkirinan veşêre"; "Common.Controls.Friendship.Mute" = "Bêdeng bike"; "Common.Controls.Friendship.MuteUser" = "%@ bêdeng bike"; "Common.Controls.Friendship.Muted" = "Bêdengkirî"; "Common.Controls.Friendship.Pending" = "Tê nirxandin"; "Common.Controls.Friendship.Request" = "Daxwaz bike"; -"Common.Controls.Friendship.ShowReblogs" = "Show Reblogs"; +"Common.Controls.Friendship.ShowReblogs" = "Bilindkirinan nîşan bide"; "Common.Controls.Friendship.Unblock" = "Astengiyê rake"; "Common.Controls.Friendship.UnblockUser" = "%@ asteng neke"; "Common.Controls.Friendship.Unmute" = "Bêdeng neke"; @@ -108,6 +108,10 @@ Jkx girêdana înternetê xwe kontrol bike."; "Common.Controls.Status.Actions.Unreblog" = "Ji nû ve nivîsandinê vegere"; "Common.Controls.Status.ContentWarning" = "Hişyariya naverokê"; "Common.Controls.Status.MediaContentWarning" = "Ji bo eşkerekirinê li derekî bitikîne"; +"Common.Controls.Status.MetaEntity.Email" = "Navnîşanên e-nameyê: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtagê: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Profîlê nîşan bide: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Girêdan: %@"; "Common.Controls.Status.Poll.Closed" = "Girtî"; "Common.Controls.Status.Poll.Vote" = "Deng bide"; "Common.Controls.Status.SensitiveContent" = "Naveroka hestiyarî"; @@ -151,7 +155,7 @@ Profîla te ji wan ra wiha xuya dike."; "Scene.AccountList.AddAccount" = "Ajimêr tevlî bike"; "Scene.AccountList.DismissAccountSwitcher" = "Guherkera ajimêrê paş guh bike"; "Scene.AccountList.TabBarHint" = "Profîla hilbijartî ya niha: %@. Du caran bitikîne û paşê dest bide ser da ku guhêrbara ajimêr were nîşandan"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "Şûnpel"; "Scene.Compose.Accessibility.AppendAttachment" = "Pêvek tevlî bike"; "Scene.Compose.Accessibility.AppendPoll" = "Rapirsî tevlî bike"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "Hilbijêrê emojî yên kesanekirî"; @@ -161,9 +165,13 @@ Profîla te ji wan ra wiha xuya dike."; "Scene.Compose.Accessibility.RemovePoll" = "Rapirsî rake"; "Scene.Compose.Attachment.AttachmentBroken" = "Ev %@ naxebite û nayê barkirin li ser Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Pêvek pir mezin e"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Nikare ev pêveka medyayê nas bike"; "Scene.Compose.Attachment.DescriptionPhoto" = "Wêneyê ji bo kêmbînên dîtbar bide nasîn..."; "Scene.Compose.Attachment.DescriptionVideo" = "Vîdyoyê ji bo kêmbînên dîtbar bide nasîn..."; +"Scene.Compose.Attachment.LoadFailed" = "Barkirin têk çû"; "Scene.Compose.Attachment.Photo" = "wêne"; +"Scene.Compose.Attachment.UploadFailed" = "Barkirin têk çû"; "Scene.Compose.Attachment.Video" = "vîdyo"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Bicîhkirinê tevlî bike"; "Scene.Compose.ComposeAction" = "Biweşîne"; @@ -257,12 +265,12 @@ girêdanê bitikne da ku ajimêra xwe bidî piştrastkirin."; "Scene.Profile.Header.FollowsYou" = "Te dişopîne"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Ji bo rakirina astengkirinê %@ bipejirîne"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Ajimêr asteng bike"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirm to hide reblogs"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Hide Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Bo veşartina bilindkirinan bipejirîne"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Bilindkirinan veşêre"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Ji bo bêdengkirina %@ bipejirîne"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Ajimêrê bêdeng bike"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirm to show reblogs"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Show Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Bo nîşandana bilindkirinan bipejirîne"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Bilindkirinan nîşan bide"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Ji bo rakirina astengkirinê %@ bipejirîne"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Astengiyê li ser ajimêr rake"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Ji bo vekirina bêdengkirinê %@ bipejirîne"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings index 3bcc33bf5..e719583aa 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings @@ -107,6 +107,10 @@ "Common.Controls.Status.Actions.Unreblog" = "Delen ongedaan maken"; "Common.Controls.Status.ContentWarning" = "Inhoudswaarschuwing"; "Common.Controls.Status.MediaContentWarning" = "Tap hier om te tonen"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Gesloten"; "Common.Controls.Status.Poll.Vote" = "Stemmen"; "Common.Controls.Status.SensitiveContent" = "Gevoelige inhoud"; @@ -155,9 +159,13 @@ Uw profiel ziet er zo uit voor hen."; "Scene.Compose.Accessibility.PostVisibilityMenu" = "Berichtzichtbaarheidsmenu"; "Scene.Compose.Accessibility.RemovePoll" = "Peiling verwijderen"; "Scene.Compose.Attachment.AttachmentBroken" = "Deze %@ is corrupt en kan niet geüpload worden naar Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Omschrijf de foto voor mensen met een visuele beperking..."; "Scene.Compose.Attachment.DescriptionVideo" = "Omschrijf de video voor mensen met een visuele beperking..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "foto"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "video"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Spaties toe te voegen"; "Scene.Compose.ComposeAction" = "Publiceren"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings index 0513a955b..65d4fa65e 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings @@ -108,6 +108,10 @@ "Common.Controls.Status.Actions.Unreblog" = "Убрать продвижение"; "Common.Controls.Status.ContentWarning" = "Предупреждение о содержании"; "Common.Controls.Status.MediaContentWarning" = "Нажмите в любом месте, чтобы показать"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Завершён"; "Common.Controls.Status.Poll.Vote" = "Проголосовать"; "Common.Controls.Status.SensitiveContent" = "Sensitive Content"; @@ -169,9 +173,13 @@ "Scene.Compose.Accessibility.RemovePoll" = "Убрать опрос"; "Scene.Compose.Attachment.AttachmentBroken" = "Это %@ повреждено и не может быть отправлено в Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Опишите фото для людей с нарушениями зрения..."; "Scene.Compose.Attachment.DescriptionVideo" = "Опишите видео для людей с нарушениями зрения..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "изображение"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "видео"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Пробел, чтобы добавить"; "Scene.Compose.ComposeAction" = "Опубликовать"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings index 849d88284..dbba5ddda 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings @@ -68,13 +68,13 @@ Kontrollera din internetanslutning."; "Common.Controls.Friendship.EditInfo" = "Redigera info"; "Common.Controls.Friendship.Follow" = "Följ"; "Common.Controls.Friendship.Following" = "Följer"; -"Common.Controls.Friendship.HideReblogs" = "Dölj puffar"; +"Common.Controls.Friendship.HideReblogs" = "Dölj boostar"; "Common.Controls.Friendship.Mute" = "Tysta"; "Common.Controls.Friendship.MuteUser" = "Tysta %@"; "Common.Controls.Friendship.Muted" = "Tystad"; "Common.Controls.Friendship.Pending" = "Väntande"; "Common.Controls.Friendship.Request" = "Följ"; -"Common.Controls.Friendship.ShowReblogs" = "Visa knuffar"; +"Common.Controls.Friendship.ShowReblogs" = "Visa boostar"; "Common.Controls.Friendship.Unblock" = "Avblockera"; "Common.Controls.Friendship.UnblockUser" = "Avblockera %@"; "Common.Controls.Friendship.Unmute" = "Avtysta"; @@ -87,27 +87,31 @@ Kontrollera din internetanslutning."; "Common.Controls.Keyboard.SegmentedControl.PreviousSection" = "Föregående avsnitt"; "Common.Controls.Keyboard.Timeline.NextStatus" = "Nästa inlägg"; "Common.Controls.Keyboard.Timeline.OpenAuthorProfile" = "Öppna författarens profil"; -"Common.Controls.Keyboard.Timeline.OpenRebloggerProfile" = "Öppna ompostarens profil"; +"Common.Controls.Keyboard.Timeline.OpenRebloggerProfile" = "Öppna boostarens profil"; "Common.Controls.Keyboard.Timeline.OpenStatus" = "Öppna inlägg"; "Common.Controls.Keyboard.Timeline.PreviewImage" = "Förhandsgranska bild"; "Common.Controls.Keyboard.Timeline.PreviousStatus" = "Föregående inlägg"; "Common.Controls.Keyboard.Timeline.ReplyStatus" = "Svara på inlägg"; "Common.Controls.Keyboard.Timeline.ToggleContentWarning" = "Växla innehållsvarning"; "Common.Controls.Keyboard.Timeline.ToggleFavorite" = "Växla favorit på inlägg"; -"Common.Controls.Keyboard.Timeline.ToggleReblog" = "Växla puff på inlägg"; +"Common.Controls.Keyboard.Timeline.ToggleReblog" = "Växla boost på inlägg"; "Common.Controls.Status.Actions.Favorite" = "Favorit"; "Common.Controls.Status.Actions.Hide" = "Dölj"; "Common.Controls.Status.Actions.Menu" = "Meny"; -"Common.Controls.Status.Actions.Reblog" = "Puffa"; +"Common.Controls.Status.Actions.Reblog" = "Boosta"; "Common.Controls.Status.Actions.Reply" = "Svara"; "Common.Controls.Status.Actions.ShowGif" = "Visa GIF"; "Common.Controls.Status.Actions.ShowImage" = "Visa bild"; "Common.Controls.Status.Actions.ShowVideoPlayer" = "Visa videospelare"; "Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Tryck och håll ned för att visa menyn"; "Common.Controls.Status.Actions.Unfavorite" = "Ta bort favorit"; -"Common.Controls.Status.Actions.Unreblog" = "Ångra puff"; +"Common.Controls.Status.Actions.Unreblog" = "Ångra boost"; "Common.Controls.Status.ContentWarning" = "Innehållsvarning"; "Common.Controls.Status.MediaContentWarning" = "Tryck var som helst för att visa"; +"Common.Controls.Status.MetaEntity.Email" = "E-postadress: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Visa profil: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Länk: %@"; "Common.Controls.Status.Poll.Closed" = "Stängd"; "Common.Controls.Status.Poll.Vote" = "Rösta"; "Common.Controls.Status.SensitiveContent" = "Känsligt innehåll"; @@ -120,7 +124,7 @@ Kontrollera din internetanslutning."; "Common.Controls.Status.Tag.Mention" = "Omnämn"; "Common.Controls.Status.Tag.Url" = "URL"; "Common.Controls.Status.TapToReveal" = "Tryck för att visa"; -"Common.Controls.Status.UserReblogged" = "%@ puffade"; +"Common.Controls.Status.UserReblogged" = "%@ boostade"; "Common.Controls.Status.UserRepliedTo" = "Svarade på %@"; "Common.Controls.Status.Visibility.Direct" = "Endast omnämnda användare kan se detta inlägg."; "Common.Controls.Status.Visibility.Private" = "Endast deras följare kan se detta inlägg."; @@ -151,7 +155,7 @@ Din profil ser ut så här för dem."; "Scene.AccountList.AddAccount" = "Lägg till konto"; "Scene.AccountList.DismissAccountSwitcher" = "Stäng kontoväxlare"; "Scene.AccountList.TabBarHint" = "Nuvarande vald profil: %@. Dubbeltryck och håll för att visa kontoväxlare"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "Bokmärken"; "Scene.Compose.Accessibility.AppendAttachment" = "Lägg till bilaga"; "Scene.Compose.Accessibility.AppendPoll" = "Lägg till omröstning"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "Anpassad emoji-väljare"; @@ -161,9 +165,13 @@ Din profil ser ut så här för dem."; "Scene.Compose.Accessibility.RemovePoll" = "Ta bort omröstning"; "Scene.Compose.Attachment.AttachmentBroken" = "Denna %@ är trasig och kan inte laddas upp till Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Bilagan är för stor"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Känner inte igen mediebilagan"; "Scene.Compose.Attachment.DescriptionPhoto" = "Beskriv fotot för synskadade..."; "Scene.Compose.Attachment.DescriptionVideo" = "Beskriv videon för de synskadade..."; +"Scene.Compose.Attachment.LoadFailed" = "Det gick inte att läsa in"; "Scene.Compose.Attachment.Photo" = "foto"; +"Scene.Compose.Attachment.UploadFailed" = "Uppladdning misslyckades"; "Scene.Compose.Attachment.Video" = "video"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Mellanslag för att lägga till"; "Scene.Compose.ComposeAction" = "Publicera"; @@ -236,7 +244,7 @@ laddas upp till Mastodon."; "Scene.Notification.NotificationDescription.FollowedYou" = "följde dig"; "Scene.Notification.NotificationDescription.MentionedYou" = "nämnde dig"; "Scene.Notification.NotificationDescription.PollHasEnded" = "omröstningen har avslutats"; -"Scene.Notification.NotificationDescription.RebloggedYourPost" = "puffade ditt inlägg"; +"Scene.Notification.NotificationDescription.RebloggedYourPost" = "boostade ditt inlägg"; "Scene.Notification.NotificationDescription.RequestToFollowYou" = "begär att följa dig"; "Scene.Notification.Title.Everything" = "Allting"; "Scene.Notification.Title.Mentions" = "Omnämningar"; @@ -256,12 +264,12 @@ laddas upp till Mastodon."; "Scene.Profile.Header.FollowsYou" = "Följer dig"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Bekräfta för att blockera %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Blockera konto"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Bekräfta för att dölja puffar"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Dölj puffar"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Bekräfta för att dölja boostar"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Dölj boostar"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Bekräfta för att tysta %@"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Tysta konto"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Bekräfta för att visa puffar"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Visa puffar"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Bekräfta för att visa boostar"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Visa boostar"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Bekräfta för att avblockera %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Avblockera konto"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Bekräfta för att avtysta %@"; @@ -271,7 +279,7 @@ laddas upp till Mastodon."; "Scene.Profile.SegmentedControl.Posts" = "Inlägg"; "Scene.Profile.SegmentedControl.PostsAndReplies" = "Inlägg och svar"; "Scene.Profile.SegmentedControl.Replies" = "Svar"; -"Scene.RebloggedBy.Title" = "Puffat av"; +"Scene.RebloggedBy.Title" = "Boostat av"; "Scene.Register.Error.Item.Agreement" = "Avtal"; "Scene.Register.Error.Item.Email" = "E-post"; "Scene.Register.Error.Item.Locale" = "Språk"; @@ -323,7 +331,7 @@ laddas upp till Mastodon."; "Scene.Report.StepFinal.Unfollowed" = "Slutade följa"; "Scene.Report.StepFinal.WhenYouSeeSomethingYouDontLikeOnMastodonYouCanRemoveThePersonFromYourExperience." = "När du ser något som du inte gillar på Mastodon kan du ta bort personen från din upplevelse."; "Scene.Report.StepFinal.WhileWeReviewThisYouCanTakeActionAgainstUser" = "Medan vi granskar detta kan du vidta åtgärder mot %@"; -"Scene.Report.StepFinal.YouWontSeeTheirPostsOrReblogsInYourHomeFeedTheyWontKnowTheyVeBeenMuted" = "Du kommer inte att se deras inlägg eller ompostningar i ditt hemflöde. De kommer inte att veta att de har blivit tystade."; +"Scene.Report.StepFinal.YouWontSeeTheirPostsOrReblogsInYourHomeFeedTheyWontKnowTheyVeBeenMuted" = "Du kommer inte att se deras inlägg eller boostar i ditt hemflöde. De kommer inte att veta att de har blivit tystade."; "Scene.Report.StepFour.IsThereAnythingElseWeShouldKnow" = "Finns det något annat vi borde veta?"; "Scene.Report.StepFour.Step4Of4" = "Steg 4 av 4"; "Scene.Report.StepOne.IDontLikeIt" = "Jag tycker inte om det"; @@ -414,7 +422,7 @@ laddas upp till Mastodon."; "Scene.Settings.Section.LookAndFeel.SortaDark" = "Ganska mörk"; "Scene.Settings.Section.LookAndFeel.Title" = "Utseende och känsla"; "Scene.Settings.Section.LookAndFeel.UseSystem" = "Följ systeminställningarna"; -"Scene.Settings.Section.Notifications.Boosts" = "Ompostar mitt inlägg"; +"Scene.Settings.Section.Notifications.Boosts" = "Boostar mitt inlägg"; "Scene.Settings.Section.Notifications.Favorites" = "Favoriserar mitt inlägg"; "Scene.Settings.Section.Notifications.Follows" = "Följer mig"; "Scene.Settings.Section.Notifications.Mentions" = "Nämner mig"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.stringsdict index 048af4732..c7317903d 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.stringsdict +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.stringsdict @@ -152,9 +152,9 @@ NSStringFormatValueTypeKey ld one - %ld puff + %ld boost other - %ld puffar + %ld boostar plural.count.reply diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings index 15514928c..de982308d 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings @@ -68,13 +68,13 @@ "Common.Controls.Friendship.EditInfo" = "แก้ไขข้อมูล"; "Common.Controls.Friendship.Follow" = "ติดตาม"; "Common.Controls.Friendship.Following" = "กำลังติดตาม"; -"Common.Controls.Friendship.HideReblogs" = "Hide Reblogs"; +"Common.Controls.Friendship.HideReblogs" = "ซ่อนการดัน"; "Common.Controls.Friendship.Mute" = "ซ่อน"; "Common.Controls.Friendship.MuteUser" = "ซ่อน %@"; "Common.Controls.Friendship.Muted" = "ซ่อนอยู่"; "Common.Controls.Friendship.Pending" = "รอดำเนินการ"; "Common.Controls.Friendship.Request" = "ขอ"; -"Common.Controls.Friendship.ShowReblogs" = "Show Reblogs"; +"Common.Controls.Friendship.ShowReblogs" = "แสดงการดัน"; "Common.Controls.Friendship.Unblock" = "เลิกปิดกั้น"; "Common.Controls.Friendship.UnblockUser" = "เลิกปิดกั้น %@"; "Common.Controls.Friendship.Unmute" = "เลิกซ่อน"; @@ -108,6 +108,10 @@ "Common.Controls.Status.Actions.Unreblog" = "เลิกทำการดัน"; "Common.Controls.Status.ContentWarning" = "คำเตือนเนื้อหา"; "Common.Controls.Status.MediaContentWarning" = "แตะที่ใดก็ตามเพื่อเปิดเผย"; +"Common.Controls.Status.MetaEntity.Email" = "ที่อยู่อีเมล: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "แฮชแท็ก: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "โปรไฟล์ที่แสดง: %@"; +"Common.Controls.Status.MetaEntity.Url" = "ลิงก์: %@"; "Common.Controls.Status.Poll.Closed" = "ปิดแล้ว"; "Common.Controls.Status.Poll.Vote" = "ลงคะแนน"; "Common.Controls.Status.SensitiveContent" = "เนื้อหาที่ละเอียดอ่อน"; @@ -151,7 +155,7 @@ "Scene.AccountList.AddAccount" = "เพิ่มบัญชี"; "Scene.AccountList.DismissAccountSwitcher" = "ปิดตัวสลับบัญชี"; "Scene.AccountList.TabBarHint" = "โปรไฟล์ที่เลือกในปัจจุบัน: %@ แตะสองครั้งแล้วกดค้างไว้เพื่อแสดงตัวสลับบัญชี"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "ที่คั่นหน้า"; "Scene.Compose.Accessibility.AppendAttachment" = "เพิ่มไฟล์แนบ"; "Scene.Compose.Accessibility.AppendPoll" = "เพิ่มการสำรวจความคิดเห็น"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "ตัวเลือกอีโมจิที่กำหนดเอง"; @@ -161,9 +165,13 @@ "Scene.Compose.Accessibility.RemovePoll" = "เอาการสำรวจความคิดเห็นออก"; "Scene.Compose.Attachment.AttachmentBroken" = "%@ นี้เสียหายและไม่สามารถ อัปโหลดไปยัง Mastodon"; +"Scene.Compose.Attachment.AttachmentTooLarge" = "ไฟล์แนบใหญ่เกินไป"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "อธิบายรูปภาพสำหรับผู้บกพร่องทางการมองเห็น..."; "Scene.Compose.Attachment.DescriptionVideo" = "อธิบายวิดีโอสำหรับผู้บกพร่องทางการมองเห็น..."; +"Scene.Compose.Attachment.LoadFailed" = "การโหลดล้มเหลว"; "Scene.Compose.Attachment.Photo" = "รูปภาพ"; +"Scene.Compose.Attachment.UploadFailed" = "การอัปโหลดล้มเหลว"; "Scene.Compose.Attachment.Video" = "วิดีโอ"; "Scene.Compose.AutoComplete.SpaceToAdd" = "เว้นวรรคเพื่อเพิ่ม"; "Scene.Compose.ComposeAction" = "เผยแพร่"; @@ -256,12 +264,12 @@ "Scene.Profile.Header.FollowsYou" = "ติดตามคุณ"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "ยืนยันเพื่อปิดกั้น %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "ปิดกั้นบัญชี"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirm to hide reblogs"; -"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "Hide Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "ยืนยันเพื่อซ่อนการดัน"; +"Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Title" = "ซ่อนการดัน"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "ยืนยันเพื่อซ่อน %@"; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "ซ่อนบัญชี"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirm to show reblogs"; -"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Show Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "ยืนยันเพื่อแสดงการดัน"; +"Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "แสดงการดัน"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "ยืนยันเพื่อเลิกปิดกั้น %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "เลิกปิดกั้นบัญชี"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "ยืนยันเพื่อเลิกซ่อน %@"; @@ -391,7 +399,7 @@ "Scene.ServerPicker.Label.Language" = "ภาษา"; "Scene.ServerPicker.Label.Users" = "ผู้ใช้"; "Scene.ServerPicker.Subtitle" = "เลือกเซิร์ฟเวอร์ตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ"; -"Scene.ServerPicker.SubtitleExtend" = "เลือกเซิร์ฟเวอร์ตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ แต่ละเซิร์ฟเวอร์ดำเนินการโดยองค์กรหรือบุคคลที่เป็นอิสระโดยสิ้นเชิง"; +"Scene.ServerPicker.SubtitleExtend" = "เลือกเซิร์ฟเวอร์ตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ แต่ละเซิร์ฟเวอร์ได้รับการดำเนินงานโดยองค์กรหรือบุคคลที่เป็นอิสระโดยสิ้นเชิง"; "Scene.ServerPicker.Title" = "Mastodon ประกอบด้วยผู้ใช้ในเซิร์ฟเวอร์ต่าง ๆ"; "Scene.ServerRules.Button.Confirm" = "ฉันเห็นด้วย"; "Scene.ServerRules.PrivacyPolicy" = "นโยบายความเป็นส่วนตัว"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings index eec4a2940..614ea6dc5 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings @@ -107,6 +107,10 @@ "Common.Controls.Status.Actions.Unreblog" = "Yeniden paylaşımı geri al"; "Common.Controls.Status.ContentWarning" = "İçerik Uyarısı"; "Common.Controls.Status.MediaContentWarning" = "Göstermek için herhangi bir yere basın"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Kapandı"; "Common.Controls.Status.Poll.Vote" = "Oy ver"; "Common.Controls.Status.SensitiveContent" = "Hassas İçerik"; @@ -160,9 +164,13 @@ Bu kişiye göre profiliniz böyle gözüküyor."; "Scene.Compose.Accessibility.RemovePoll" = "Anketi Kaldır"; "Scene.Compose.Attachment.AttachmentBroken" = "Bu %@ bozuk ve Mastodon'a yüklenemiyor."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Görme engelliler için fotoğrafı tarif edin..."; "Scene.Compose.Attachment.DescriptionVideo" = "Görme engelliler için videoyu tarif edin..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "fotoğraf"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "video"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Eklemek için boşluk tuşuna basın"; "Scene.Compose.ComposeAction" = "Yayınla"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings index 14f36c7e7..41ac9aa20 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings @@ -108,6 +108,10 @@ Vui lòng kiểm tra kết nối mạng."; "Common.Controls.Status.Actions.Unreblog" = "Hủy đăng lại"; "Common.Controls.Status.ContentWarning" = "Nội dung ẩn"; "Common.Controls.Status.MediaContentWarning" = "Nhấn để hiển thị"; +"Common.Controls.Status.MetaEntity.Email" = "Email: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Hiện hồ sơ: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "Kết thúc"; "Common.Controls.Status.Poll.Vote" = "Bình chọn"; "Common.Controls.Status.SensitiveContent" = "Nội dung nhạy cảm"; @@ -151,7 +155,7 @@ Họ sẽ thấy trang của bạn như thế này."; "Scene.AccountList.AddAccount" = "Thêm tài khoản"; "Scene.AccountList.DismissAccountSwitcher" = "Bỏ qua chuyển đổi tài khoản"; "Scene.AccountList.TabBarHint" = "Đang dùng tài khoản: %@. Nhấn hai lần và giữ để đổi sang tài khoản khác"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "Tút đã lưu"; "Scene.Compose.Accessibility.AppendAttachment" = "Thêm media"; "Scene.Compose.Accessibility.AppendPoll" = "Tạo bình chọn"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "Chọn emoji"; @@ -161,9 +165,13 @@ Họ sẽ thấy trang của bạn như thế này."; "Scene.Compose.Accessibility.RemovePoll" = "Xóa bình chọn"; "Scene.Compose.Attachment.AttachmentBroken" = "%@ này bị lỗi và không thể tải lên Mastodon."; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "Mô tả hình ảnh cho người khiếm thị..."; "Scene.Compose.Attachment.DescriptionVideo" = "Mô tả video cho người khiếm thị..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "ảnh"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "video"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Khoảng cách để thêm"; "Scene.Compose.ComposeAction" = "Đăng"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings index 8e5de6b52..3883e30df 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings @@ -108,6 +108,10 @@ "Common.Controls.Status.Actions.Unreblog" = "取消转发"; "Common.Controls.Status.ContentWarning" = "内容警告"; "Common.Controls.Status.MediaContentWarning" = "点击任意位置显示"; +"Common.Controls.Status.MetaEntity.Email" = "Email address: %@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "Hashtag: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "Show Profile: %@"; +"Common.Controls.Status.MetaEntity.Url" = "Link: %@"; "Common.Controls.Status.Poll.Closed" = "已关闭"; "Common.Controls.Status.Poll.Vote" = "投票"; "Common.Controls.Status.SensitiveContent" = "敏感内容"; @@ -161,9 +165,13 @@ "Scene.Compose.Accessibility.RemovePoll" = "移除投票"; "Scene.Compose.Attachment.AttachmentBroken" = "%@已损坏 无法上传到 Mastodon"; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "为视觉障碍人士添加照片的文字说明..."; "Scene.Compose.Attachment.DescriptionVideo" = "为视觉障碍人士添加视频的文字说明..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "照片"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "视频"; "Scene.Compose.AutoComplete.SpaceToAdd" = "输入空格键入"; "Scene.Compose.ComposeAction" = "发送"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings index f97926795..34e59a582 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings @@ -108,6 +108,10 @@ "Common.Controls.Status.Actions.Unreblog" = "取消轉嘟"; "Common.Controls.Status.ContentWarning" = "內容警告"; "Common.Controls.Status.MediaContentWarning" = "輕觸任何地方以顯示"; +"Common.Controls.Status.MetaEntity.Email" = "電子郵件地址:%@"; +"Common.Controls.Status.MetaEntity.Hashtag" = "主題標籤: %@"; +"Common.Controls.Status.MetaEntity.Mention" = "顯示個人檔案:%@"; +"Common.Controls.Status.MetaEntity.Url" = "連結:%@"; "Common.Controls.Status.Poll.Closed" = "已關閉"; "Common.Controls.Status.Poll.Vote" = "投票"; "Common.Controls.Status.SensitiveContent" = "敏感內容"; @@ -147,7 +151,7 @@ "Scene.AccountList.AddAccount" = "新增帳號"; "Scene.AccountList.DismissAccountSwitcher" = "關閉帳號切換器"; "Scene.AccountList.TabBarHint" = "目前已選擇的個人檔案:%@。點兩下然後按住以顯示帳號切換器"; -"Scene.Bookmark.Title" = "Bookmarks"; +"Scene.Bookmark.Title" = "書籤"; "Scene.Compose.Accessibility.AppendAttachment" = "新增附件"; "Scene.Compose.Accessibility.AppendPoll" = "新增投票"; "Scene.Compose.Accessibility.CustomEmojiPicker" = "自訂 emoji 選擇器"; @@ -156,9 +160,13 @@ "Scene.Compose.Accessibility.PostVisibilityMenu" = "嘟文可見性選單"; "Scene.Compose.Accessibility.RemovePoll" = "移除投票"; "Scene.Compose.Attachment.AttachmentBroken" = "此 %@ 已損毀,並無法被上傳至 Mastodon。"; +"Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; +"Scene.Compose.Attachment.CanNotRecognizeThisMediaAttachment" = "Can not regonize this media attachment"; "Scene.Compose.Attachment.DescriptionPhoto" = "為視障人士提供圖片說明..."; "Scene.Compose.Attachment.DescriptionVideo" = "為視障人士提供影片說明..."; +"Scene.Compose.Attachment.LoadFailed" = "Load Failed"; "Scene.Compose.Attachment.Photo" = "照片"; +"Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; "Scene.Compose.Attachment.Video" = "影片"; "Scene.Compose.AutoComplete.SpaceToAdd" = "添加的空白"; "Scene.Compose.ComposeAction" = "嘟出去"; diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentView.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentView.swift index a2567d0b6..9346c3bee 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentView.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentView.swift @@ -65,7 +65,7 @@ public struct AttachmentView: View { if viewModel.output == nil, let error = viewModel.error { VisualEffectView(effect: blurEffect) VStack { - Text("Load Failed") // TODO: i18n + Text(L10n.Scene.Compose.Attachment.loadFailed) .font(.system(size: 13, weight: .semibold)) Text(error.localizedDescription) .font(.system(size: 12, weight: .regular)) @@ -123,7 +123,7 @@ public struct AttachmentView: View { case .remove: switch viewModel.uploadState { case .compressing: - return "Comporessing..." // TODO: i18n + return L10n.Scene.Compose.Attachment.compressingState default: if viewModel.fractionCompleted < 0.9 { let totalSizeInByte = viewModel.outputSizeInByte @@ -132,11 +132,11 @@ public struct AttachmentView: View { let upload = viewModel.byteCountFormatter.string(fromByteCount: Int64(uploadSizeInByte)) return "\(upload) / \(total)" } else { - return "Server Processing..." // TODO: i18n + return L10n.Scene.Compose.Attachment.serverProcessingState } } case .retry: - return "Upload Failed" // TODO: i18n + return L10n.Scene.Compose.Attachment.uploadFailed } }() let subtitle: String = { diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel.swift index 9a0f58f47..18da157c5 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel.swift @@ -11,6 +11,7 @@ import Combine import PhotosUI import Kingfisher import MastodonCore +import MastodonLocalization import func QuartzCore.CACurrentMediaTime public protocol AttachmentViewModelDelegate: AnyObject { @@ -48,9 +49,7 @@ final public class AttachmentViewModel: NSObject, ObservableObject, Identifiable public let authContext: AuthContext public let input: Input @Published var caption = "" - @Published var sizeLimit = SizeLimit() - - // var compressVideoTask: Task? + // @Published var sizeLimit = SizeLimit() // output @Published public private(set) var output: Output? @@ -263,15 +262,16 @@ extension AttachmentViewModel { } } + // not in using public struct SizeLimit { public let image: Int public let gif: Int public let video: Int public init( - image: Int = 5 * 1024 * 1024, // 5 MiB, - gif: Int = 15 * 1024 * 1024, // 15 MiB, - video: Int = 512 * 1024 * 1024 // 512 MiB + image: Int = 10 * 1024 * 1024, // 10 MiB + gif: Int = 40 * 1024 * 1024, // 40 MiB + video: Int = 40 * 1024 * 1024 // 40 MiB ) { self.image = image self.gif = gif @@ -286,9 +286,9 @@ extension AttachmentViewModel { public var errorDescription: String? { switch self { case .invalidAttachmentType: - return "Can not regonize this media attachment" // TODO: i18n + return L10n.Scene.Compose.Attachment.canNotRecognizeThisMediaAttachment case .attachmentTooLarge: - return "Attachment too large" + return L10n.Scene.Compose.Attachment.attachmentTooLarge } } } diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/AutoComplete/AutoCompleteViewModel.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/AutoComplete/AutoCompleteViewModel.swift index 7459f68d1..d8fa06db6 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/AutoComplete/AutoCompleteViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/AutoComplete/AutoCompleteViewModel.swift @@ -73,7 +73,7 @@ final class AutoCompleteViewModel { inputText .removeDuplicates() - .receive(on: DispatchQueue.main) + .throttle(for: .milliseconds(200), scheduler: DispatchQueue.main, latest: true) .sink { [weak self] inputText in guard let self = self else { return } self.stateMachine.enter(State.Loading.self) diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewController.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewController.swift index ea6a0136a..b84b47385 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewController.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewController.swift @@ -55,20 +55,20 @@ public final class ComposeContentViewController: UIViewController { return configuration } - private(set) lazy var photoLibraryPicker: PHPickerViewController = { + public private(set) lazy var photoLibraryPicker: PHPickerViewController = { let imagePicker = PHPickerViewController(configuration: ComposeContentViewController.createPhotoLibraryPickerConfiguration()) imagePicker.delegate = self return imagePicker }() - private(set) lazy var imagePickerController: UIImagePickerController = { + public private(set) lazy var imagePickerController: UIImagePickerController = { let imagePickerController = UIImagePickerController() imagePickerController.sourceType = .camera imagePickerController.delegate = self return imagePickerController }() - private(set) lazy var documentPickerController: UIDocumentPickerViewController = { + public private(set) lazy var documentPickerController: UIDocumentPickerViewController = { let documentPickerController = UIDocumentPickerViewController(forOpeningContentTypes: [.image, .movie]) documentPickerController.delegate = self return documentPickerController @@ -334,9 +334,22 @@ extension ComposeContentViewController { viewModel.$isPollActive.assign(to: &composeContentToolbarViewModel.$isPollActive) viewModel.$isEmojiActive.assign(to: &composeContentToolbarViewModel.$isEmojiActive) viewModel.$isContentWarningActive.assign(to: &composeContentToolbarViewModel.$isContentWarningActive) + viewModel.$visibility.assign(to: &composeContentToolbarViewModel.$visibility) viewModel.$maxTextInputLimit.assign(to: &composeContentToolbarViewModel.$maxTextInputLimit) viewModel.$contentWeightedLength.assign(to: &composeContentToolbarViewModel.$contentWeightedLength) viewModel.$contentWarningWeightedLength.assign(to: &composeContentToolbarViewModel.$contentWarningWeightedLength) + + // bind back to source due to visibility not update via delegate + composeContentToolbarViewModel.$visibility + .dropFirst() + .receive(on: DispatchQueue.main) + .sink { [weak self] visibility in + guard let self = self else { return } + if self.viewModel.visibility != visibility { + self.viewModel.visibility = visibility + } + } + .store(in: &disposeBag) } private func updateAutoCompleteViewControllerLayout() { diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewModel.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewModel.swift index 2bf4e26ff..06d84566b 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewModel.swift @@ -91,7 +91,7 @@ public final class ComposeContentViewModel: NSObject, ObservableObject { // @Published public internal(set) var isMediaValid = true // poll - @Published var isPollActive = false + @Published public var isPollActive = false @Published public var pollOptions: [PollComposeItem.Option] = { // initial with 2 options var options: [PollComposeItem.Option] = [] @@ -111,7 +111,7 @@ public final class ComposeContentViewModel: NSObject, ObservableObject { @Published var isLoadingCustomEmoji = false // visibility - @Published var visibility: Mastodon.Entity.Status.Visibility + @Published public var visibility: Mastodon.Entity.Status.Visibility // UI & UX @Published var replyToCellFrame: CGRect = .zero @@ -229,6 +229,32 @@ public final class ComposeContentViewModel: NSObject, ObservableObject { break } + // set limit + let _configuration: Mastodon.Entity.Instance.Configuration? = { + var configuration: Mastodon.Entity.Instance.Configuration? = nil + context.managedObjectContext.performAndWait { + guard let authentication = authContext.mastodonAuthenticationBox.authenticationRecord.object(in: context.managedObjectContext) + else { return } + configuration = authentication.instance?.configuration + } + return configuration + }() + if let configuration = _configuration { + // set character limit + if let maxCharacters = configuration.statuses?.maxCharacters { + maxTextInputLimit = maxCharacters + } + // set media limit + if let maxMediaAttachments = configuration.statuses?.maxMediaAttachments { + maxMediaAttachmentLimit = maxMediaAttachments + } + // set poll option limit + if let maxOptions = configuration.polls?.maxOptions { + maxPollOptionLimit = maxOptions + } + // TODO: more limit + } + bind() } @@ -453,14 +479,14 @@ extension ComposeContentViewModel { public var errorDescription: String? { switch self { case .pollHasEmptyOption: - return "The post poll is invalid" // TODO: i18n + return L10n.Scene.Compose.Poll.thePollIsInvalid } } public var failureReason: String? { switch self { case .pollHasEmptyOption: - return "The poll has empty option" // TODO: i18n + return L10n.Scene.Compose.Poll.thePollHasEmptyOption } } } diff --git a/Podfile b/Podfile index 596aec62b..4df2d4d7c 100644 --- a/Podfile +++ b/Podfile @@ -11,7 +11,7 @@ target 'Mastodon' do pod 'XLPagerTabStrip', '~> 9.0.0' # misc - pod 'SwiftGen', '~> 6.4.0' + pod 'SwiftGen', '~> 6.6.2' pod 'DateToolsSwift', '~> 5.0.0' pod 'Kanna', '~> 5.2.2' pod 'Sourcery', '~> 1.6.1' diff --git a/Podfile.lock b/Podfile.lock index 3b9928a0b..c7220b00a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -5,7 +5,7 @@ PODS: - Sourcery (1.6.1): - Sourcery/CLI-Only (= 1.6.1) - Sourcery/CLI-Only (1.6.1) - - SwiftGen (6.4.0) + - SwiftGen (6.6.2) - XLPagerTabStrip (9.0.0) DEPENDENCIES: @@ -13,7 +13,7 @@ DEPENDENCIES: - FLEX (~> 4.4.0) - Kanna (~> 5.2.2) - Sourcery (~> 1.6.1) - - SwiftGen (~> 6.4.0) + - SwiftGen (~> 6.6.2) - XLPagerTabStrip (~> 9.0.0) SPEC REPOS: @@ -30,9 +30,9 @@ SPEC CHECKSUMS: FLEX: 7ca2c8cd3a435ff501ff6d2f2141e9bdc934eaab Kanna: 01cfbddc127f5ff0963692f285fcbc8a9d62d234 Sourcery: f3759f803bd0739f74fc92a4341eed0473ce61ac - SwiftGen: 67860cc7c3cfc2ed25b9b74cfd55495fc89f9108 + SwiftGen: 1366a7f71aeef49954ca5a63ba4bef6b0f24138c XLPagerTabStrip: 61c57fd61f611ee5f01ff1495ad6fbee8bf496c5 -PODFILE CHECKSUM: 8fddf46611e09d2eb1a5d67c464c236884a08e80 +PODFILE CHECKSUM: 7499a197793f73c4dcf1d16a315434baaa688873 COCOAPODS: 1.11.3 diff --git a/swiftgen.yml b/swiftgen.yml index e9c21260a..967abe370 100644 --- a/swiftgen.yml +++ b/swiftgen.yml @@ -1,7 +1,7 @@ strings: inputs: - - MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings - - MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.stringsdict + - MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.strings + - MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.stringsdict outputs: - templateName: structured-swift5 output: MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift diff --git a/update_localization.sh b/update_localization.sh index 09cfc21d6..87477bdaa 100755 --- a/update_localization.sh +++ b/update_localization.sh @@ -7,15 +7,28 @@ PODS_ROOT='Pods' echo ${SRCROOT} -# task 1 generate strings file +# Task 1 +# here we use the template source as input to +# generate strings so we could use new strings +# before sync to Crowdin + +# clean Base.lproj +rm -rf ${SRCROOT}/Localization/StringsConvertor/input/Base.lproj +# copy tempate sources +mkdir ${SRCROOT}/Localization/StringsConvertor/input/Base.lproj +cp ${SRCROOT}/Localization/app.json ${SRCROOT}/Localization/StringsConvertor/input/Base.lproj/app.json +cp ${SRCROOT}/Localization/ios-infoPlist.json ${SRCROOT}/Localization/StringsConvertor/input/Base.lproj/ios-infoPlist.json +cp ${SRCROOT}/Localization/Localizable.stringsdict ${SRCROOT}/Localization/StringsConvertor/input/Base.lproj/Localizable.stringsdict + +# Task 2 generate strings file cd ${SRCROOT}/Localization/StringsConvertor sh ./scripts/build.sh -# task 2 copy strings file +# Task 3 copy strings file cp -R ${SRCROOT}/Localization/StringsConvertor/output/module/ ${SRCROOT}/MastodonSDK/Sources/MastodonLocalization/Resources cp -R ${SRCROOT}/Localization/StringsConvertor/Intents/output/ ${SRCROOT}/MastodonIntent -# task 3 swiftgen +# Task 4 swiftgen cd ${SRCROOT} echo "${PODS_ROOT}/SwiftGen/bin/swiftgen" if [[ -f "${PODS_ROOT}/SwiftGen/bin/swiftgen" ]] then @@ -24,6 +37,6 @@ else echo "Run 'bundle exec pod install' or update your CocoaPods installation." fi -#task 4 clean temp file +# Task 5 clean temp file rm -rf ${SRCROOT}/Localization/StringsConvertor/output rm -rf ${SRCROOT}/Localization/StringsConvertor/intents/output