diff --git a/Localization/StringsConvertor/Intents/input/hy.lproj/Intents.strings b/Localization/StringsConvertor/Intents/input/hy.lproj/Intents.strings index 6877490ba..ca95b1316 100644 --- a/Localization/StringsConvertor/Intents/input/hy.lproj/Intents.strings +++ b/Localization/StringsConvertor/Intents/input/hy.lproj/Intents.strings @@ -12,15 +12,15 @@ "RHxKOw" = "Send Post with text content"; -"RxSqsb" = "Post"; +"RxSqsb" = "Գրառում"; "WCIR3D" = "Post ${content} on Mastodon"; -"ZKJSNu" = "Post"; +"ZKJSNu" = "Գրառում"; "ZS1XaK" = "${content}"; -"ZbSjzC" = "Visibility"; +"ZbSjzC" = "Տեսանելիութիւն"; "Zo4jgJ" = "Post Visibility"; @@ -34,7 +34,7 @@ "dUyuGg" = "Post on Mastodon"; -"dYQ5NN" = "Public"; +"dYQ5NN" = "Հրապարակային"; "ehFLjY" = "Followers Only"; diff --git a/Localization/StringsConvertor/Intents/input/hy.lproj/Intents.stringsdict b/Localization/StringsConvertor/Intents/input/hy.lproj/Intents.stringsdict index 18422c772..384826506 100644 --- a/Localization/StringsConvertor/Intents/input/hy.lproj/Intents.stringsdict +++ b/Localization/StringsConvertor/Intents/input/hy.lproj/Intents.stringsdict @@ -29,9 +29,9 @@ NSStringFormatValueTypeKey %ld one - 1 option + 1 տարբերակ other - %ld options + %ld տարբերակ diff --git a/Localization/StringsConvertor/Intents/input/ko.lproj/Intents.strings b/Localization/StringsConvertor/Intents/input/ko.lproj/Intents.strings index 5ea6fd363..3552cb1c0 100644 --- a/Localization/StringsConvertor/Intents/input/ko.lproj/Intents.strings +++ b/Localization/StringsConvertor/Intents/input/ko.lproj/Intents.strings @@ -1,14 +1,14 @@ -"16wxgf" = "Post on Mastodon"; +"16wxgf" = "Mastodon에 게시하기"; "751xkl" = "Text Content"; -"CsR7G2" = "Post on Mastodon"; +"CsR7G2" = "Mastodon에 게시하기"; "HZSGTr" = "What content to post?"; -"HdGikU" = "Posting failed"; +"HdGikU" = "게시 실패"; -"KDNTJ4" = "Failure Reason"; +"KDNTJ4" = "실패 원인"; "RHxKOw" = "Send Post with text content"; @@ -16,7 +16,7 @@ "WCIR3D" = "Post ${content} on Mastodon"; -"ZKJSNu" = "Post"; +"ZKJSNu" = "게시"; "ZS1XaK" = "${content}"; diff --git a/Localization/StringsConvertor/input/Base.lproj/app.json b/Localization/StringsConvertor/input/Base.lproj/app.json index 734169df0..9d8ce91b4 100644 --- a/Localization/StringsConvertor/input/Base.lproj/app.json +++ b/Localization/StringsConvertor/input/Base.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pending", "block": "Block", "block_user": "Block %s", - "block_domain": "Block %s", + "block_domain": "Block domain %s", "unblock": "Unblock", "unblock_user": "Unblock %s", "blocked": "Blocked", + "domain_blocked": "Domain Blocked", "mute": "Mute", "mute_user": "Mute %s", "unmute": "Unmute", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/an.lproj/app.json b/Localization/StringsConvertor/input/an.lproj/app.json index 4a4aa869e..e6150308c 100644 --- a/Localization/StringsConvertor/input/an.lproj/app.json +++ b/Localization/StringsConvertor/input/an.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pendient", "block": "Blocar", "block_user": "Blocar a %s", - "block_domain": "Blocar a %s", + "block_domain": "Block domain %s", "unblock": "Desbloquiar", "unblock_user": "Desbloquiar a %s", "blocked": "Blocau", + "domain_blocked": "Domain Blocked", "mute": "Silenciar", "mute_user": "Silenciar a %s", "unmute": "Desmutear", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Amagar los reblogs", "message": "Comfirmar pa amagar los reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/ar.lproj/app.json b/Localization/StringsConvertor/input/ar.lproj/app.json index f5084e6e5..6f6d7d48a 100644 --- a/Localization/StringsConvertor/input/ar.lproj/app.json +++ b/Localization/StringsConvertor/input/ar.lproj/app.json @@ -222,10 +222,11 @@ "pending": "قيد المُراجعة", "block": "حظر", "block_user": "حَظرُ %s", - "block_domain": "حظر %s", + "block_domain": "Block domain %s", "unblock": "رفع الحَظر", "unblock_user": "رفع الحَظر عن %s", "blocked": "محظور", + "domain_blocked": "Domain Blocked", "mute": "كَتم", "mute_user": "كَتمُ %s", "unmute": "رفع الكتم", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "إخفاء إعادات التدوين", "message": "التأكيد لِإخفاء إعادات التدوين" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/be.lproj/app.json b/Localization/StringsConvertor/input/be.lproj/app.json index 2f5d3b1f1..e8d0e9308 100644 --- a/Localization/StringsConvertor/input/be.lproj/app.json +++ b/Localization/StringsConvertor/input/be.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Чакаецца", "block": "Заблакіраваць", "block_user": "Заблакіраваць %s", - "block_domain": "Заблакіраваць %s", + "block_domain": "Заблакіраваць дамен %s", "unblock": "Разблакіраваць", "unblock_user": "Разблакіраваць %s", "blocked": "Заблакіраваны", + "domain_blocked": "Дамен заблакіраваны", "mute": "Ігнараваць", "mute_user": "Ігнараваць %s", "unmute": "Не ігнараваць", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Схаваць пашырэнні", "message": "Пацвердзіце, каб схаваць пашырэнні" + }, + "confirm_block_domain": { + "title": "Заблакіраваць дамен", + "message": "Заблакіраваць дамен %s?" + }, + "confirm_unblock_domain": { + "title": "Разблакіраваць дамен", + "message": "Разблакіраваць дамен %s?" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/ca.lproj/app.json b/Localization/StringsConvertor/input/ca.lproj/app.json index 071f035fb..1063ea7e9 100644 --- a/Localization/StringsConvertor/input/ca.lproj/app.json +++ b/Localization/StringsConvertor/input/ca.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pendent", "block": "Bloca", "block_user": "Bloca %s", - "block_domain": "Bloca %s", + "block_domain": "Block domain %s", "unblock": "Desbloca", "unblock_user": "Desbloca %s", "blocked": "Blocat", + "domain_blocked": "Domain Blocked", "mute": "Silencia", "mute_user": "Silencia %s", "unmute": "Deixa de silenciar", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Amaga Impulsos", "message": "Confirma per a amagar els impulsos" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/ckb.lproj/app.json b/Localization/StringsConvertor/input/ckb.lproj/app.json index 15765918b..6481f9f98 100644 --- a/Localization/StringsConvertor/input/ckb.lproj/app.json +++ b/Localization/StringsConvertor/input/ckb.lproj/app.json @@ -222,10 +222,11 @@ "pending": "داوات کردووە", "block": "ئاستەنگی بکە", "block_user": "%s ئاستەنگ بکە", - "block_domain": "%s ئاستەنگ بکە", + "block_domain": "Block domain %s", "unblock": "ئاستەنگی مەکە", "unblock_user": "%s ئاستەنگ مەکە", "blocked": "ئاستەنگ کراوە", + "domain_blocked": "Domain Blocked", "mute": "بێدەنگی بکە", "mute_user": "%s بێدەنگە", "unmute": "بێدەنگی مەکە", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/cs.lproj/app.json b/Localization/StringsConvertor/input/cs.lproj/app.json index 3c5615608..57946b09f 100644 --- a/Localization/StringsConvertor/input/cs.lproj/app.json +++ b/Localization/StringsConvertor/input/cs.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Čekající", "block": "Blokovat", "block_user": "Blokovat %s", - "block_domain": "Blokovat %s", + "block_domain": "Block domain %s", "unblock": "Odblokovat", "unblock_user": "Odblokovat %s", "blocked": "Blokovaný", + "domain_blocked": "Domain Blocked", "mute": "Skrýt", "mute_user": "Skrýt %s", "unmute": "Odkrýt", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Skrýt Reblogy", "message": "Potvrďte skrytí reblogů" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/cy.lproj/app.json b/Localization/StringsConvertor/input/cy.lproj/app.json index cc816434e..71327e59d 100644 --- a/Localization/StringsConvertor/input/cy.lproj/app.json +++ b/Localization/StringsConvertor/input/cy.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Yn aros", "block": "Blocio", "block_user": "Blocio %s", - "block_domain": "Blocio %s", + "block_domain": "Block domain %s", "unblock": "Dadflocio", "unblock_user": "Dadflocio %s", "blocked": "Wedi blocio", + "domain_blocked": "Domain Blocked", "mute": "Anwybyddu", "mute_user": "Anwybyddu %s", "unmute": "Dad-anwybyddu", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Cuddio Ailflogiau", "message": "Cadarnhau i guddio ailflogiau" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/da.lproj/app.json b/Localization/StringsConvertor/input/da.lproj/app.json index 7bdd27796..294e65cfd 100644 --- a/Localization/StringsConvertor/input/da.lproj/app.json +++ b/Localization/StringsConvertor/input/da.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pending", "block": "Block", "block_user": "Block %s", - "block_domain": "Block %s", + "block_domain": "Block domain %s", "unblock": "Unblock", "unblock_user": "Unblock %s", "blocked": "Blocked", + "domain_blocked": "Domain Blocked", "mute": "Mute", "mute_user": "Mute %s", "unmute": "Unmute", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/de.lproj/app.json b/Localization/StringsConvertor/input/de.lproj/app.json index 8d661dade..2fb2ce27f 100644 --- a/Localization/StringsConvertor/input/de.lproj/app.json +++ b/Localization/StringsConvertor/input/de.lproj/app.json @@ -222,10 +222,11 @@ "pending": "In Warteschlange", "block": "Blockieren", "block_user": "%s blockieren", - "block_domain": "%s blockieren", + "block_domain": "Domain %s sperren", "unblock": "Blockierung aufheben", "unblock_user": "Blockierung von %s aufheben", "blocked": "Blockiert", + "domain_blocked": "Domain gesperrt", "mute": "Stummschalten", "mute_user": "%s stummschalten", "unmute": "Nicht mehr stummschalten", @@ -504,8 +505,8 @@ "option_number": "Auswahlmöglichkeit %ld", "the_poll_is_invalid": "Die Umfrage ist ungültig", "the_poll_has_empty_option": "Die Umfrage hat eine leere Option", - "add_option": "Add Option", - "remove_option": "Remove Option", + "add_option": "Option hinzufügen", + "remove_option": "Option entfernen", "move_up": "Nach oben", "move_down": "Nach unten" }, @@ -542,7 +543,7 @@ }, "language": { "title": "Beitragssprache", - "suggested": "Suggested", + "suggested": "Empfohlen", "recent": "Kürzlich", "other": "Andere Sprache…" } @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Teilen ausblenden", "message": "Bestätigen, um Teilen auszublenden" + }, + "confirm_block_domain": { + "title": "Domain sperren", + "message": "Bestätigen, um die Domain %s zu sperren" + }, + "confirm_unblock_domain": { + "title": "Domain entsperren", + "message": "Bestätigen, um die Sperre der Domäne %s aufzuheben" } }, "accessibility": { @@ -656,8 +665,8 @@ "url": "URL in Mastodon öffnen", "hashtag": "Wechseln zu #%s", "no_user": { - "title": "No User Account Found", - "message": "There's no Useraccount \"%s\" on %s" + "title": "Kein Benutzerkonto gefunden", + "message": "Es gibt kein Benutzerkonto „%s” auf %s" }, "empty_state": { "no_results": "Keine Ergebnisse" @@ -711,17 +720,17 @@ "settings": { "overview": { "title": "Einstellungen", - "general": "General", - "notifications": "Notifications", + "general": "Allgemein", + "notifications": "Benachrichtigungen", "support_mastodon": "Mastodon unterstützen", - "about_mastodon": "About Mastodon", - "server_details": "Server Details", - "logout": "Logout %@" + "about_mastodon": "Über Mastodon", + "server_details": "Serverdetails", + "logout": "%@ abmelden" }, "about_mastodon": { "title": "Über", "more_settings": "Noch mehr Einstellungen", - "contribute_to_mastodon": "Contribute to Mastodon", + "contribute_to_mastodon": "Zu Mastodon beitragen", "privacy_policy": "Datenschutzerklärung", "clear_media_storage": "Clear Media Storage" }, @@ -735,12 +744,12 @@ } }, "general": { - "title": "General", + "title": "Allgemein", "appearance": { - "section_title": "Appearance", - "dark": "Dark", - "light": "Light", - "system": "Use Device Appearance" + "section_title": "Farbschema", + "dark": "Dunkel", + "light": "Hell", + "system": "Einstellungen des Geräts übernehmen" }, "design": { "section_title": "Design", @@ -748,18 +757,18 @@ }, "links": { "section_title": "Links", - "open_in_mastodon": "Open in Mastodon", - "open_in_browser": "Open in Browser" + "open_in_mastodon": "In Mastodon öffnen", + "open_in_browser": "Im Browser öffnen" } }, "notifications": { - "title": "Notifications", + "title": "Mitteilungen", "policy": { - "title": "Get Notifications from", - "anyone": "Anyone", + "title": "Mitteilungen erhalten von", + "anyone": "Jeder", "followers": "People who follow you", "follow": "People you follow", - "noone": "No one" + "noone": "Niemand" }, "alert": { "mentions_and_replies": "Mentions & Replies", diff --git a/Localization/StringsConvertor/input/el.lproj/app.json b/Localization/StringsConvertor/input/el.lproj/app.json index 359dc2b9d..c12ca6783 100644 --- a/Localization/StringsConvertor/input/el.lproj/app.json +++ b/Localization/StringsConvertor/input/el.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Εκκρεμεί", "block": "Αποκλεισμός", "block_user": "Αποκλεισμός %s", - "block_domain": "Αποκλεισμός %s", + "block_domain": "Αποκλεισμός τομέα %s", "unblock": "Άρση αποκλεισμού", "unblock_user": "Άρση αποκλεισμού %s", "blocked": "Αποκλείστηκε", + "domain_blocked": "Ο Τομέας αποκλείστηκε", "mute": "Σίγαση", "mute_user": "Σίγαση %s", "unmute": "Κατάργηση σίγασης", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Απόκρυψη Αναδημοσιεύσεων", "message": "Επιβεβαίωση απόκρυψης αναδημοσιεύσεων" + }, + "confirm_block_domain": { + "title": "Αποκλεισμός τομέα", + "message": "Επιβεβαίωση αποκλεισμού τομέα %s" + }, + "confirm_unblock_domain": { + "title": "Άρση αποκλεισμού τομέα", + "message": "Επιβεβαίωση άρσης αποκλεισμού τομέα %s" } }, "accessibility": { @@ -656,8 +665,8 @@ "url": "Άνοιγμα URL στο Mastodon", "hashtag": "Μετάβαση στο #%s", "no_user": { - "title": "No User Account Found", - "message": "There's no Useraccount \"%s\" on %s" + "title": "Δεν Βρέθηκε Λογαριασμός Χρήστη", + "message": "Δεν υπάρχει λογαριασμός χρήστη \"%s\" στο %s" }, "empty_state": { "no_results": "Κανένα αποτέλεσμα" @@ -710,66 +719,66 @@ }, "settings": { "overview": { - "title": "Settings", - "general": "General", - "notifications": "Notifications", - "support_mastodon": "Support Mastodon", - "about_mastodon": "About Mastodon", - "server_details": "Server Details", - "logout": "Logout %@" + "title": "Ρυθμίσεις", + "general": "Γενικά", + "notifications": "Ειδοποιήσεις", + "support_mastodon": "Υποστήριξε το Mastodon", + "about_mastodon": "Σχετικά με το Mastodon", + "server_details": "Λεπτομέρειες Διακομιστή", + "logout": "Αποσύνδεση %@" }, "about_mastodon": { - "title": "About", - "more_settings": "Even More Settings", - "contribute_to_mastodon": "Contribute to Mastodon", - "privacy_policy": "Privacy Policy", - "clear_media_storage": "Clear Media Storage" + "title": "Σχετικά", + "more_settings": "Ακόμα Περισσότερες Ρυθμίσεις", + "contribute_to_mastodon": "Συνείσφερε στο Mastodon", + "privacy_policy": "Πολιτική Απορρήτου", + "clear_media_storage": "Εκκαθάριση Χώρου Αποθήκευσης Πολυμέσων" }, "server_details": { - "about": "About", - "rules": "Rules", + "about": "Σχετικά", + "rules": "Κανόνες", "about_instance": { - "title": "Administrator", - "message_admin": "Message Admin", - "legal_notice": "A legal notice" + "title": "Διαχειριστής", + "message_admin": "Στείλε μήνυμα σε διαχειριστή", + "legal_notice": "Μια νομική ειδοποίηση" } }, "general": { - "title": "General", + "title": "Γενικά", "appearance": { - "section_title": "Appearance", - "dark": "Dark", - "light": "Light", - "system": "Use Device Appearance" + "section_title": "Εμφάνιση", + "dark": "Σκοτεινό", + "light": "Φωτεινό", + "system": "Χρήση Εμφάνισης Συσκευής" }, "design": { - "section_title": "Design", - "show_animations": "Play Animated Avatars and Emoji" + "section_title": "Σχεδίαση", + "show_animations": "Αναπαραγωγή κινούμενων Avatars και Emoji" }, "links": { - "section_title": "Links", - "open_in_mastodon": "Open in Mastodon", - "open_in_browser": "Open in Browser" + "section_title": "Σύνδεσμοι", + "open_in_mastodon": "Άνοιγμα στο Mastodon", + "open_in_browser": "Άνοιγμα στον Περιηγητή" } }, "notifications": { - "title": "Notifications", + "title": "Ειδοποιήσεις", "policy": { - "title": "Get Notifications from", - "anyone": "Anyone", - "followers": "People who follow you", - "follow": "People you follow", - "noone": "No one" + "title": "Λήψη Ειδοποιήσεων από", + "anyone": "Οποιοσδήποτε", + "followers": "Άτομα που σε ακολουθούν", + "follow": "Άτομα που ακολουθείς", + "noone": "Κανένας" }, "alert": { - "mentions_and_replies": "Mentions & Replies", - "boosts": "Boosts", - "favorites": "Favorites", - "new_followers": "New Followers" + "mentions_and_replies": "Αναφορές & Απαντήσεις", + "boosts": "Ενισχύσεις", + "favorites": "Αγαπημένα", + "new_followers": "Νέοι Ακόλουθοι" }, "disabled": { - "notification_hint": "Turn on notifications from your device settings to see updates on your lock screen.", - "go_to_settings": "Go to Notification Settings" + "notification_hint": "Ενεργοποίησε τις ειδοποιήσεις από τις ρυθμίσεις της συσκευής σου για να βλέπεις ενημερώσεις στην οθόνη κλειδώματος.", + "go_to_settings": "Μετάβαση στις Ρυθμίσεις Ειδοποιήσεων" } } }, diff --git a/Localization/StringsConvertor/input/en-US.lproj/app.json b/Localization/StringsConvertor/input/en-US.lproj/app.json index 6fd239f37..495c7ee8f 100644 --- a/Localization/StringsConvertor/input/en-US.lproj/app.json +++ b/Localization/StringsConvertor/input/en-US.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pending", "block": "Block", "block_user": "Block %s", - "block_domain": "Block %s", + "block_domain": "Block domain %s", "unblock": "Unblock", "unblock_user": "Unblock %s", "blocked": "Blocked", + "domain_blocked": "Domain Blocked", "mute": "Mute", "mute_user": "Mute %s", "unmute": "Unmute", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/en.lproj/app.json b/Localization/StringsConvertor/input/en.lproj/app.json index 6fd239f37..809e38b13 100644 --- a/Localization/StringsConvertor/input/en.lproj/app.json +++ b/Localization/StringsConvertor/input/en.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pending", "block": "Block", "block_user": "Block %s", - "block_domain": "Block %s", + "block_domain": "Domain blokkolása: %s", "unblock": "Unblock", "unblock_user": "Unblock %s", "blocked": "Blocked", + "domain_blocked": "Domain blokkolva", "mute": "Mute", "mute_user": "Mute %s", "unmute": "Unmute", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Domain blokkolása", + "message": "Megerősíti a domain blokkolását? %s" + }, + "confirm_unblock_domain": { + "title": "Domain blokkolás feloldása", + "message": "Megerősíti a domain blokk feloldását? %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/es-AR.lproj/app.json b/Localization/StringsConvertor/input/es-AR.lproj/app.json index 91dc468e0..521d85a8b 100644 --- a/Localization/StringsConvertor/input/es-AR.lproj/app.json +++ b/Localization/StringsConvertor/input/es-AR.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pendientes", "block": "Bloquear", "block_user": "Bloquear a %s", - "block_domain": "Bloquear %s", + "block_domain": "Bloquear dominio %s", "unblock": "Desbloquear", "unblock_user": "Desbloquear a %s", "blocked": "Bloqueado", + "domain_blocked": "Dominio bloqueado", "mute": "Silenciar", "mute_user": "Silenciar a %s", "unmute": "Dejar de silenciar", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Ocultar adhesiones", "message": "Confirmá para ocultar adhesiones" + }, + "confirm_block_domain": { + "title": "Bloquear dominio", + "message": "Confirmar para bloquear el dominio %s" + }, + "confirm_unblock_domain": { + "title": "Desbloquear dominio", + "message": "Confirmar para desbloquear el dominio %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/es.lproj/app.json b/Localization/StringsConvertor/input/es.lproj/app.json index 3660e7da6..19b701196 100644 --- a/Localization/StringsConvertor/input/es.lproj/app.json +++ b/Localization/StringsConvertor/input/es.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pendiente", "block": "Bloquear", "block_user": "Bloquear a %s", - "block_domain": "Bloquear a %s", + "block_domain": "Block domain %s", "unblock": "Desbloquear", "unblock_user": "Desbloquear a %s", "blocked": "Bloqueado", + "domain_blocked": "Domain Blocked", "mute": "Silenciar", "mute_user": "Silenciar a %s", "unmute": "Desmutear", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Ocultar reblogs", "message": "Confirmar para ocultar reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/eu.lproj/app.json b/Localization/StringsConvertor/input/eu.lproj/app.json index bc10c5484..5cf0797b3 100644 --- a/Localization/StringsConvertor/input/eu.lproj/app.json +++ b/Localization/StringsConvertor/input/eu.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Zain", "block": "Blokeatu", "block_user": "Blokeatu %s", - "block_domain": "Blokeatu %s", + "block_domain": "Block domain %s", "unblock": "Desblokeatu", "unblock_user": "Desblokeatu %s", "blocked": "Blokeatuta", + "domain_blocked": "Domain Blocked", "mute": "Mututu", "mute_user": "Mututu %s", "unmute": "Desmututu", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Ezkutatu bultzadak", "message": "Berretsi birbidalketak ezkutatzea" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/fi.lproj/app.json b/Localization/StringsConvertor/input/fi.lproj/app.json index 5ce81cbb7..c15bdd1eb 100644 --- a/Localization/StringsConvertor/input/fi.lproj/app.json +++ b/Localization/StringsConvertor/input/fi.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pyydetty", "block": "Estä", "block_user": "Estä %s", - "block_domain": "Estä %s", + "block_domain": "Block domain %s", "unblock": "Poista esto", "unblock_user": "Poista käyttäjän %s esto", "blocked": "Estetty", + "domain_blocked": "Domain Blocked", "mute": "Mykistä", "mute_user": "Mykistä %s", "unmute": "Poista mykistys", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Piilota edelleenjulkaisut", "message": "Vahvista edelleenjulkaisujen piilotus" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/fr.lproj/app.json b/Localization/StringsConvertor/input/fr.lproj/app.json index aae942632..a2247082a 100644 --- a/Localization/StringsConvertor/input/fr.lproj/app.json +++ b/Localization/StringsConvertor/input/fr.lproj/app.json @@ -222,10 +222,11 @@ "pending": "En attente", "block": "Bloquer", "block_user": "Bloquer %s", - "block_domain": "Bloquer %s", + "block_domain": "Block domain %s", "unblock": "Débloquer", "unblock_user": "Débloquer %s", "blocked": "Bloqué", + "domain_blocked": "Domain Blocked", "mute": "Masquer", "mute_user": "Ignorer %s", "unmute": "Ne plus ignorer", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Masquer les Reblogs", "message": "Confirmer pour masquer les reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/gd.lproj/app.json b/Localization/StringsConvertor/input/gd.lproj/app.json index 0da7572fa..f353c77a0 100644 --- a/Localization/StringsConvertor/input/gd.lproj/app.json +++ b/Localization/StringsConvertor/input/gd.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Ri dhèiligeadh", "block": "Bac", "block_user": "Bac %s", - "block_domain": "Bac %s", + "block_domain": "Block domain %s", "unblock": "Dì-bhac", "unblock_user": "Dì-bhac %s", "blocked": "’Ga bhacadh", + "domain_blocked": "Domain Blocked", "mute": "Mùch", "mute_user": "Mùch %s", "unmute": "Dì-mhùch", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Falaich na brosnachaidhean", "message": "Dearbh falach nam brosnachaidhean" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/gl.lproj/app.json b/Localization/StringsConvertor/input/gl.lproj/app.json index 06e327747..a8fc5b98f 100644 --- a/Localization/StringsConvertor/input/gl.lproj/app.json +++ b/Localization/StringsConvertor/input/gl.lproj/app.json @@ -2,7 +2,7 @@ "common": { "alerts": { "common": { - "please_try_again": "Inténtao de novo.", + "please_try_again": "Téntao de novo.", "please_try_again_later": "Inténtao de novo máis tarde." }, "sign_up_failure": { @@ -222,10 +222,11 @@ "pending": "Pendente", "block": "Bloquear", "block_user": "Bloquear a %s", - "block_domain": "Bloquear a %s", + "block_domain": "Bloquear dominio %s", "unblock": "Desbloquear", "unblock_user": "Desbloquear a %s", "blocked": "Bloqueada", + "domain_blocked": "Dominio bloqueado", "mute": "Acalar", "mute_user": "Acalar a %s", "unmute": "Non Acalar", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Agochar Promocións", "message": "Confirma para agochar promocións" + }, + "confirm_block_domain": { + "title": "Bloquear dominio", + "message": "Confirmar o bloqueo do dominio %s" + }, + "confirm_unblock_domain": { + "title": "Desbloquear dominio", + "message": "Confirmar o desbloqueo de %s" } }, "accessibility": { @@ -656,8 +665,8 @@ "url": "Abrir URL en Mastodon", "hashtag": "Ir a #%s", "no_user": { - "title": "No User Account Found", - "message": "There's no Useraccount \"%s\" on %s" + "title": "Non se atopou ningunha conta", + "message": "Non hai contas con \"%s\" en %s" }, "empty_state": { "no_results": "Sen resultados" @@ -710,66 +719,66 @@ }, "settings": { "overview": { - "title": "Settings", - "general": "General", - "notifications": "Notifications", - "support_mastodon": "Support Mastodon", - "about_mastodon": "About Mastodon", - "server_details": "Server Details", - "logout": "Logout %@" + "title": "Axustes", + "general": "Xeral", + "notifications": "Notificacións", + "support_mastodon": "Apoia a Mastodon", + "about_mastodon": "Acerca de Mastodon", + "server_details": "Detalles do servidor", + "logout": "Pechar sesión %@" }, "about_mastodon": { - "title": "About", - "more_settings": "Even More Settings", - "contribute_to_mastodon": "Contribute to Mastodon", - "privacy_policy": "Privacy Policy", - "clear_media_storage": "Clear Media Storage" + "title": "Acerca de", + "more_settings": "Máis axustes", + "contribute_to_mastodon": "Colaborar con Mastodon", + "privacy_policy": "Política de Privacidade", + "clear_media_storage": "Limpar Almacenaxe Multimedia" }, "server_details": { - "about": "About", - "rules": "Rules", + "about": "Acerca de", + "rules": "Regras", "about_instance": { - "title": "Administrator", - "message_admin": "Message Admin", - "legal_notice": "A legal notice" + "title": "Administración", + "message_admin": "Mensaxe a Admin", + "legal_notice": "Aviso Legal" } }, "general": { - "title": "General", + "title": "Xeral", "appearance": { - "section_title": "Appearance", - "dark": "Dark", - "light": "Light", - "system": "Use Device Appearance" + "section_title": "Aparencia", + "dark": "Escuro", + "light": "Claro", + "system": "Seguir ao dispositivo" }, "design": { - "section_title": "Design", - "show_animations": "Play Animated Avatars and Emoji" + "section_title": "Deseño", + "show_animations": "Reproducir avatares e emoji animados" }, "links": { - "section_title": "Links", - "open_in_mastodon": "Open in Mastodon", - "open_in_browser": "Open in Browser" + "section_title": "Ligazóns", + "open_in_mastodon": "Abrir en Mastodon", + "open_in_browser": "Abrir no navegador" } }, "notifications": { - "title": "Notifications", + "title": "Notificacións", "policy": { - "title": "Get Notifications from", - "anyone": "Anyone", - "followers": "People who follow you", - "follow": "People you follow", - "noone": "No one" + "title": "Recibir notificacións de", + "anyone": "Calquera", + "followers": "Persoas que te seguen", + "follow": "Persoas que segues", + "noone": "Ninguén" }, "alert": { - "mentions_and_replies": "Mentions & Replies", - "boosts": "Boosts", - "favorites": "Favorites", - "new_followers": "New Followers" + "mentions_and_replies": "Mencións e respostas", + "boosts": "Promocións", + "favorites": "Favoritos", + "new_followers": "Novas seguidoras" }, "disabled": { - "notification_hint": "Turn on notifications from your device settings to see updates on your lock screen.", - "go_to_settings": "Go to Notification Settings" + "notification_hint": "Activar notificacións nos axustes do dispositivo para ver novidades na pantalla de bloqueo.", + "go_to_settings": "Ir aos axustes das notificacións" } } }, diff --git a/Localization/StringsConvertor/input/he.lproj/app.json b/Localization/StringsConvertor/input/he.lproj/app.json index f66a431e9..6bb411948 100644 --- a/Localization/StringsConvertor/input/he.lproj/app.json +++ b/Localization/StringsConvertor/input/he.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pending", "block": "Block", "block_user": "Block %s", - "block_domain": "Block %s", + "block_domain": "Block domain %s", "unblock": "Unblock", "unblock_user": "Unblock %s", "blocked": "Blocked", + "domain_blocked": "Domain Blocked", "mute": "Mute", "mute_user": "Mute %s", "unmute": "Unmute", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/hi.lproj/app.json b/Localization/StringsConvertor/input/hi.lproj/app.json index 93a3394a3..ecee3a97d 100644 --- a/Localization/StringsConvertor/input/hi.lproj/app.json +++ b/Localization/StringsConvertor/input/hi.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pending", "block": "Block", "block_user": "Block %s", - "block_domain": "Block %s", + "block_domain": "Block domain %s", "unblock": "Unblock", "unblock_user": "Unblock %s", "blocked": "Blocked", + "domain_blocked": "Domain Blocked", "mute": "Mute", "mute_user": "Mute %s", "unmute": "Unmute", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/hy.lproj/Localizable.stringsdict b/Localization/StringsConvertor/input/hy.lproj/Localizable.stringsdict index 2b09ee004..e605dbf61 100644 --- a/Localization/StringsConvertor/input/hy.lproj/Localizable.stringsdict +++ b/Localization/StringsConvertor/input/hy.lproj/Localizable.stringsdict @@ -104,9 +104,9 @@ NSStringFormatValueTypeKey ld one - post + գրառում other - posts + գրառումներ plural.count.media @@ -136,9 +136,9 @@ NSStringFormatValueTypeKey ld one - 1 post + 1 գրառում other - %ld posts + %ld գրառում plural.count.favorite diff --git a/Localization/StringsConvertor/input/hy.lproj/app.json b/Localization/StringsConvertor/input/hy.lproj/app.json index 1b2da050d..fd26a7006 100644 --- a/Localization/StringsConvertor/input/hy.lproj/app.json +++ b/Localization/StringsConvertor/input/hy.lproj/app.json @@ -97,20 +97,20 @@ "title": "Translate from %s", "unknown_language": "Unknown" }, - "edit_post": "Edit", - "bookmark": "Bookmark", - "remove_bookmark": "Remove Bookmark", - "follow": "Follow %s", - "unfollow": "Unfollow %s" + "edit_post": "Խմբագրել", + "bookmark": "Էջանիշ", + "remove_bookmark": "Հեռացնել էջանիշը", + "follow": "Հետեւել %s-ին", + "unfollow": "Չհետեւել %s-ին" }, "tabs": { - "home": "Home", + "home": "Հիմնական", "search_and_explore": "Search and Explore", - "notifications": "Notifications", - "profile": "Profile", + "notifications": "Ծանուցումներ", + "profile": "Հաշիւ", "a11y": { - "search": "Search", - "explore": "Explore" + "search": "Որոնել", + "explore": "Բացայայտել" } }, "keyboard": { @@ -118,12 +118,12 @@ "switch_to_tab": "Switch to %s", "compose_new_post": "Compose New Post", "show_favorites": "Show Favorites", - "open_settings": "Open Settings" + "open_settings": "Բացել կարգաւորումները" }, "timeline": { "previous_status": "Previous Post", - "next_status": "Next Post", - "open_status": "Open Post", + "next_status": "Յաջորդ գրառումը", + "open_status": "Բացել գրառումը", "open_author_profile": "Open Author's Profile", "open_reblogger_profile": "Open Reblogger's Profile", "reply_status": "Reply to Post", @@ -140,17 +140,17 @@ "status": { "user_reblogged": "%s reblogged", "user_replied_to": "Replied to %s", - "show_post": "Show Post", - "show_user_profile": "Show user profile", + "show_post": "Ցուցադրել գրառումը", + "show_user_profile": "Ցուցադրել օգտատիրոջ էջը", "content_warning": "Content Warning", - "sensitive_content": "Sensitive Content", + "sensitive_content": "Զգայուն բովանդակություն", "media_content_warning": "Tap anywhere to reveal", "tap_to_reveal": "Tap to reveal", "load_embed": "Load Embed", "link_via_user": "%s via %s", "poll": { "vote": "Քուէարկել", - "closed": "Closed" + "closed": "Փակ" }, "meta_entity": { "url": "Link: %s", @@ -160,14 +160,14 @@ }, "actions": { "reply": "Պատասխանել", - "reblog": "Reblog", - "unreblog": "Undo reblog", - "favorite": "Favorite", - "unfavorite": "Unfavorite", + "reblog": "Տարածել", + "unreblog": "Չտարածել", + "favorite": "Հավանել", + "unfavorite": "Չհաւանել", "menu": "Ցանկ", "hide": "Թաքցնել", - "show_image": "Show image", - "show_gif": "Show GIF", + "show_image": "Ցոյց տալ նկարը", + "show_gif": "Ցոյց տալ գիֆը", "show_video_player": "Show video player", "share_link_in_post": "Share Link in Post", "tap_then_hold_to_show_menu": "Tap then hold to show menu", @@ -192,9 +192,9 @@ }, "translation": { "translated_from": "Translated from %s using %s", - "unknown_language": "Unknown", - "unknown_provider": "Unknown", - "show_original": "Show Original" + "unknown_language": "Անյայտ", + "unknown_provider": "Անյայտ", + "show_original": "Ցոյց տալ բնօրինակը" }, "media": { "accessibility_label": "%s, attachment %d of %d", @@ -204,8 +204,8 @@ }, "posted_via_application": "%s via %s", "buttons": { - "reblogs_title": "Reblogs", - "favorites_title": "Favorites", + "reblogs_title": "Տարածել", + "favorites_title": "Հաւանածներ", "edit_history_title": "Խմբագրման պատմութիւնը", "edit_history_detail": "Last edit %s" }, @@ -217,21 +217,22 @@ }, "friendship": { "follow": "Հետեւել", - "following": "Following", - "request": "Request", - "pending": "Pending", - "block": "Block", + "following": "Հետեւած", + "request": "Հարցում", + "pending": "Սպասուող", + "block": "Արգելափակել", "block_user": "Block %s", - "block_domain": "Block %s", - "unblock": "Unblock", - "unblock_user": "Unblock %s", - "blocked": "Blocked", + "block_domain": "Block domain %s", + "unblock": "Արգելաբացել", + "unblock_user": "Արգելաբացել %s-ին", + "blocked": "Արգելափակուած", + "domain_blocked": "Domain Blocked", "mute": "Լռեցնել", "mute_user": "Լռեցնել %s֊ին", "unmute": "Unmute", "unmute_user": "Unmute %s", "muted": "Լռեցուած", - "edit_info": "Edit Info", + "edit_info": "Խմբագրել", "show_reblogs": "Show Reblogs", "hide_reblogs": "Hide Reblogs" }, @@ -257,7 +258,7 @@ } }, "user_list": { - "no_verified_link": "No verified link", + "no_verified_link": "Չկայ հաստատուած յղում", "followers_count": "%@ followers" } }, @@ -296,25 +297,25 @@ "server_picker": { "title": "Pick Server", "button": { - "language": "Language", + "language": "Լեզու", "signup_speed": "Sign-up Speed", "category": { - "all": "All", + "all": "Բոլորը", "all_accessiblity_description": "Category: All", "academia": "academia", "activism": "activism", - "food": "food", + "food": "ուտելիք", "furry": "furry", - "games": "games", - "general": "general", - "journalism": "journalism", - "lgbt": "lgbt", - "regional": "regional", - "art": "art", - "music": "music", - "tech": "tech" + "games": "խաղեր", + "general": "ընդհանուր", + "journalism": "լրագրութիւն", + "lgbt": "լգբտ", + "regional": "կրօնական", + "art": "արուեստ", + "music": "երաժշտութիւն", + "tech": "տեխնոլոգիա" }, - "see_less": "See Less", + "see_less": "Տեսնել քիչ", "see_more": "Տեսնել աւելին" }, "label": { @@ -344,11 +345,11 @@ "no_server_selected_hint": "We’ll pick a server based on your language if you continue without making a selection." }, "privacy": { - "title": "Privacy", + "title": "Գաղտնիութիւն", "description": "Although the Mastodon app does not collect any data, the server you sign up through may have a different policy. Take a minute to review and agree to the Mastodon app privacy policy and your server’s privacy policy.", "policy": { "ios": "Privacy Policy - Mastodon for iOS", - "server": "Privacy Policy - %s" + "server": "Գաղտնիութեան քաղաքականութիւն - %s" }, "button": { "confirm": "Համաձայն եմ" @@ -358,7 +359,7 @@ "title": "Ստեղծել հաշիւ", "input": { "avatar": { - "delete": "Delete" + "delete": "Ջնջել" }, "username": { "placeholder": "մուտքանուն", @@ -375,7 +376,7 @@ "placeholder": "գաղտնաբառ", "confirmation_placeholder": "Հաստատել գաղտնաբառը", "require": "Your password needs at least:", - "character_limit": "8 characters", + "character_limit": "8 նիշ", "accessibility": { "checked": "checked", "unchecked": "unchecked" @@ -392,7 +393,7 @@ "email": "Էլ. փոստ", "password": "Գաղտնաբառ", "agreement": "Agreement", - "locale": "Locale", + "locale": "Տեղանք", "reason": "Պատճառ" }, "reason": { @@ -420,24 +421,24 @@ "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", + "privacy_policy": "գաղտնիութեան քաղաքականութիւն", "button": { - "confirm": "I Agree" + "confirm": "Համաձայն եմ" } }, "confirm_email": { - "title": "Check Your Inbox", + "title": "Ստուգիր էլ. փոստդ", "tap_the_link_we_emailed_to_you_to_verify_your_account": "Tap the link we sent you to verify %@. We’ll wait right here.", "button": { - "resend": "Resend" + "resend": "Ուղարկել նորից" }, "dont_receive_email": { - "title": "Check your Email", + "title": "Ստուգիր էլ. հասցէդ!", "description": "Check if your email address is correct as well as your junk folder if you haven’t.", "resend_email": "Նորից ուղարկել էլ. նամակ" }, "open_email_app": { - "title": "Check your Inbox.", + "title": "Ստուգիր էլ. փոստդ.", "description": "We just sent you an email. Check your junk folder if you haven’t.", "mail": "Փոստ", "open_email_client": "Open Email Client" @@ -452,36 +453,36 @@ "title": "Հիմնական", "navigation_bar_state": { "offline": "Անցանց", - "new_posts": "See new posts", - "published": "Published!", + "new_posts": "Տեսնել նորերը", + "published": "Հրատարակուած է", "Publishing": "Publishing post...", "accessibility": { - "logo_label": "Mastodon", + "logo_label": "Մաստոդոն", "logo_hint": "Tap to scroll to top and tap again to previous location" } } }, "suggestion_account": { "title": "Popular on Mastodon", - "follow_all": "Follow all" + "follow_all": "Հետեւել բոլորին" }, "compose": { "title": { - "new_post": "New Post", - "new_reply": "New Reply", - "edit_post": "Edit Post" + "new_post": "Նոր գրառում", + "new_reply": "Նոր պատասխան", + "edit_post": "Խմբագրել գրառումը" }, "media_selection": { - "camera": "Take Photo", - "photo_library": "Photo Library", - "browse": "Browse" + "camera": "Լուսանկարել", + "photo_library": "Ֆոտոդարան", + "browse": "Դիտել" }, "content_input_placeholder": "Type or paste what’s on your mind", "compose_action": "Հրապարակել", "replying_to_user": "replying to %s", "attachment": { - "photo": "photo", - "video": "video", + "photo": "նկար", + "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...", @@ -493,38 +494,38 @@ "server_processing_state": "Server Processing..." }, "poll": { - "title": "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", + "title": "Հարցում", + "duration_time": "Տեւողությունը՝ %s", + "thirty_minutes": "30 րոպէ", + "one_hour": "1 ժամ", + "six_hours": "6 ժամ", + "one_day": "1 օր", + "three_days": "3 օր", + "seven_days": "7 օր", + "option_number": "Տարբերակ %ld", "the_poll_is_invalid": "The poll is invalid", "the_poll_has_empty_option": "The poll has empty option", "add_option": "Add Option", "remove_option": "Remove Option", - "move_up": "Move Up", - "move_down": "Move Down" + "move_up": "Բարձրացնել", + "move_down": "Իջեցնել" }, "content_warning": { "placeholder": "Write an accurate warning here..." }, "visibility": { - "public": "Public", - "unlisted": "Unlisted", - "private": "Followers only", - "direct": "Only people I mention" + "public": "Հրապարակային", + "unlisted": "Ծածուկ", + "private": "Միայն հետեւողներին", + "direct": "Միայն նշած մարդկանց" }, "auto_complete": { "space_to_add": "Space to add" }, "accessibility": { "append_attachment": "Add Attachment", - "append_poll": "Add Poll", - "remove_poll": "Remove Poll", + "append_poll": "Աւելացնել հարցում", + "remove_poll": "Հեռացնել հարցումը", "custom_emoji_picker": "Custom Emoji Picker", "enable_content_warning": "Enable Content Warning", "disable_content_warning": "Disable Content Warning", @@ -541,31 +542,31 @@ "select_visibility_entry": "Select Visibility - %s" }, "language": { - "title": "Post Language", + "title": "Հրապարակման լեզու", "suggested": "Suggested", - "recent": "Recent", + "recent": "Վերջին", "other": "Other Language…" } }, "profile": { "header": { - "follows_you": "Follows You" + "follows_you": "Հետեւում է քեզ" }, "dashboard": { - "my_posts": "posts", - "my_following": "following", - "my_followers": "followers", - "other_posts": "posts", - "other_following": "following", - "other_followers": "followers", + "my_posts": "գրառումներ", + "my_following": "հետեւած", + "my_followers": "հետեւորդ", + "other_posts": "գրառումներ", + "other_following": "հետեւած", + "other_followers": "հետեւորդ", "familiar_followers": "mutuals" }, "fields": { - "joined": "Joined", + "joined": "Միացել է", "add_row": "Add Row", "placeholder": { - "label": "Label", - "content": "Content" + "label": "Պիտակ", + "content": "Բովանդակութիւն" }, "verified": { "short": "Verified on %s", @@ -574,9 +575,9 @@ }, "segmented_control": { "posts": "Գրառումներ", - "replies": "Replies", + "replies": "Արձագանքներ", "posts_and_replies": "Posts and Replies", - "media": "Media", + "media": "Մեդիա", "about": "Մասին" }, "relationship_action_alert": { @@ -589,7 +590,7 @@ "message": "Confirm to unmute %s" }, "confirm_block_user": { - "title": "Block Account", + "title": "Արգելափակել հաշիւը", "message": "Confirm to block %s" }, "confirm_unblock_user": { @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { @@ -613,11 +622,11 @@ } }, "follower": { - "title": "follower", + "title": "հետեւորդ", "footer": "Followers from other servers are not displayed." }, "following": { - "title": "following", + "title": "հետեւած", "footer": "Follows from other servers are not displayed." }, "familiarFollowers": { @@ -631,13 +640,13 @@ "title": "Reblogged By" }, "search": { - "title": "Search", + "title": "Որոնել", "search_bar": { "placeholder": "Search hashtags and users", - "cancel": "Cancel" + "cancel": "Չեղարկել" }, "recommend": { - "button_text": "See All", + "button_text": "Տեսնել բոլորը", "hash_tag": { "title": "Trending on Mastodon", "description": "Hashtags that are getting quite a bit of attention", @@ -646,7 +655,7 @@ "accounts": { "title": "Accounts you might like", "description": "You may like to follow these accounts", - "follow": "Follow" + "follow": "Հետեւել" } }, "searching": { @@ -663,27 +672,27 @@ "no_results": "No results" }, "recent_search": "Recent searches", - "clear_all": "Clear all", - "clear": "Clear" + "clear_all": "Մաքրել բոլորը", + "clear": "Մաքրել" } }, "discovery": { "tabs": { - "posts": "Posts", - "hashtags": "Hashtags", - "news": "News", - "community": "Community", - "for_you": "For You" + "posts": "Գրառումներ", + "hashtags": "Պիտակներ", + "news": "Նորութիւններ", + "community": "Համայնք", + "for_you": "Քեզ համար" }, "intro": "These are the posts gaining traction in your corner of Mastodon." }, "favorite": { - "title": "Favorites" + "title": "Հաւանածներ" }, "notification": { "title": { - "Everything": "Everything", - "Mentions": "Mentions" + "Everything": "Ամեն ինչ", + "Mentions": "Յիշատակումներ" }, "notification_description": { "followed_you": "followed you", @@ -698,74 +707,74 @@ "show_mentions": "Show Mentions" }, "follow_request": { - "accept": "Accept", - "accepted": "Accepted", - "reject": "reject", - "rejected": "Rejected" + "accept": "Ընդունել", + "accepted": "Ընդունուած", + "reject": "մերժել", + "rejected": "Մերժուած" } }, "thread": { - "back_title": "Post", - "title": "Post from %s" + "back_title": "Գրառում", + "title": "%s-ի գրառումը" }, "settings": { "overview": { - "title": "Settings", - "general": "General", - "notifications": "Notifications", + "title": "Կարգաւորումներ", + "general": "Ընդհանուր", + "notifications": "Ծանուցումներ", "support_mastodon": "Support Mastodon", - "about_mastodon": "About Mastodon", + "about_mastodon": "Մաստոդոնի մասին", "server_details": "Server Details", "logout": "Logout %@" }, "about_mastodon": { - "title": "About", + "title": "Մասին", "more_settings": "Even More Settings", "contribute_to_mastodon": "Contribute to Mastodon", "privacy_policy": "Privacy Policy", "clear_media_storage": "Clear Media Storage" }, "server_details": { - "about": "About", - "rules": "Rules", + "about": "Մասին", + "rules": "Կանոններ", "about_instance": { - "title": "Administrator", + "title": "Ադմինիստրատոր", "message_admin": "Message Admin", "legal_notice": "A legal notice" } }, "general": { - "title": "General", + "title": "Ընդհանուր", "appearance": { - "section_title": "Appearance", - "dark": "Dark", - "light": "Light", + "section_title": "Տեսք", + "dark": "Մուգ", + "light": "Բաց", "system": "Use Device Appearance" }, "design": { - "section_title": "Design", + "section_title": "Ոճ", "show_animations": "Play Animated Avatars and Emoji" }, "links": { - "section_title": "Links", + "section_title": "Յղումներ", "open_in_mastodon": "Open in Mastodon", "open_in_browser": "Open in Browser" } }, "notifications": { - "title": "Notifications", + "title": "Ծանուցումներ", "policy": { "title": "Get Notifications from", - "anyone": "Anyone", - "followers": "People who follow you", - "follow": "People you follow", - "noone": "No one" + "anyone": "Բոլորը", + "followers": "Մարդիկ, որոնք ձեզ հետեւում են", + "follow": "Մարդիկ, որոնց դու հետեւում ես", + "noone": "Ոչ ոք" }, "alert": { "mentions_and_replies": "Mentions & Replies", - "boosts": "Boosts", - "favorites": "Favorites", - "new_followers": "New Followers" + "boosts": "Տարածումներ", + "favorites": "Հաւանածներ", + "new_followers": "Նոր հետեւողներ" }, "disabled": { "notification_hint": "Turn on notifications from your device settings to see updates on your lock screen.", @@ -818,7 +827,7 @@ "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", + "unfollow": "Ապահետեւել", "unfollowed": "Unfollowed", "unfollow_user": "Unfollow %s", "mute_user": "Mute %s", @@ -838,21 +847,21 @@ "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" + "add_account": "Աւելացնել հաշիւ" }, "bookmark": { - "title": "Bookmarks" + "title": "Էջանիշեր" }, "followed_tags": { "title": "Followed Tags", "header": { - "posts": "posts", + "posts": "գրառումներ", "participants": "participants", "posts_today": "posts today" }, "actions": { - "follow": "Follow", - "unfollow": "Unfollow" + "follow": "Հետեւել", + "unfollow": "Ապահետեւել" } } }, @@ -867,7 +876,7 @@ "user_not_logged_in": "Please open Mastodon to log in to an Account." }, "followers_count": { - "configuration_display_name": "Followers", + "configuration_display_name": "Հետեւորդ", "configuration_description": "Show number of followers.", "title": "FOLLOWERS", "followers_today": "%s followers today" @@ -888,7 +897,7 @@ }, "hashtag": { "configuration": { - "display_name": "Hashtag", + "display_name": "Պիտակ", "description": "Shows a recent post with the selected hashtag." }, "not_found": { diff --git a/Localization/StringsConvertor/input/hy.lproj/ios-infoPlist.json b/Localization/StringsConvertor/input/hy.lproj/ios-infoPlist.json index c6db73de0..4494a2b20 100644 --- a/Localization/StringsConvertor/input/hy.lproj/ios-infoPlist.json +++ b/Localization/StringsConvertor/input/hy.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" + "NewPostShortcutItemTitle": "Նոր գրառում", + "SearchShortcutItemTitle": "Որոնել" } diff --git a/Localization/StringsConvertor/input/id.lproj/app.json b/Localization/StringsConvertor/input/id.lproj/app.json index 7645dca29..47d8a19bf 100644 --- a/Localization/StringsConvertor/input/id.lproj/app.json +++ b/Localization/StringsConvertor/input/id.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Tertunda", "block": "Blokir", "block_user": "Blokir %s", - "block_domain": "Blokir %s", + "block_domain": "Block domain %s", "unblock": "Berhenti memblokir", "unblock_user": "Berhenti memblokir %s", "blocked": "Diblokir", + "domain_blocked": "Domain Blocked", "mute": "Bisukan", "mute_user": "Bisukan %s", "unmute": "Berhenti membisukan", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/is.lproj/app.json b/Localization/StringsConvertor/input/is.lproj/app.json index 5c8eacb5e..94d3f89a8 100644 --- a/Localization/StringsConvertor/input/is.lproj/app.json +++ b/Localization/StringsConvertor/input/is.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Í bið", "block": "Útilokun", "block_user": "Útiloka %s", - "block_domain": "Útiloka %s", + "block_domain": "Útiloka lénið %s", "unblock": "Aflétta útilokun", "unblock_user": "Opna á %s", "blocked": "Útilokað", + "domain_blocked": "Lén útilokað", "mute": "Þagga niður", "mute_user": "Þagga niður í %s", "unmute": "Afþagga", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Fela endurbirtingar", "message": "Staðfestu til að fela endurbirtingar" + }, + "confirm_block_domain": { + "title": "Útiloka lén", + "message": "Staðfestu útilokun lénsins %s" + }, + "confirm_unblock_domain": { + "title": "Aflétta útilokun léns", + "message": "Staðfestu afléttingu á útilokun lénsins %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/it.lproj/app.json b/Localization/StringsConvertor/input/it.lproj/app.json index af33d4547..ca898ed9c 100644 --- a/Localization/StringsConvertor/input/it.lproj/app.json +++ b/Localization/StringsConvertor/input/it.lproj/app.json @@ -222,10 +222,11 @@ "pending": "In attesa", "block": "Blocca", "block_user": "Blocca %s", - "block_domain": "Blocca %s", + "block_domain": "Blocca il dominio %s", "unblock": "Sblocca", "unblock_user": "Sblocca %s", "blocked": "Bloccato", + "domain_blocked": "Dominio bloccato", "mute": "Silenzia", "mute_user": "Silenzia %s", "unmute": "Riattiva", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Nascondi le condivisioni", "message": "Conferma di nascondere le condivisioni" + }, + "confirm_block_domain": { + "title": "Blocca il dominio", + "message": "Conferma per bloccare il dominio %s" + }, + "confirm_unblock_domain": { + "title": "Sblocca il dominio", + "message": "Conferma per sbloccare il dominio %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/ja.lproj/app.json b/Localization/StringsConvertor/input/ja.lproj/app.json index 093494d5e..db2e27fb4 100644 --- a/Localization/StringsConvertor/input/ja.lproj/app.json +++ b/Localization/StringsConvertor/input/ja.lproj/app.json @@ -222,10 +222,11 @@ "pending": "保留", "block": "ブロック", "block_user": "%sをブロック", - "block_domain": "%sをブロック", + "block_domain": "%s全体をブロック", "unblock": "ブロックを解除", "unblock_user": "%sのブロックを解除", "blocked": "ブロック済み", + "domain_blocked": "ドメインブロック中", "mute": "ミュート", "mute_user": "%sをミュート", "unmute": "ミュートを解除", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "ブーストを非表示", "message": "ブーストを非表示にしますか?" + }, + "confirm_block_domain": { + "title": "ドメインのブロック", + "message": "%sのドメイン全体をブロックしてよいですか?" + }, + "confirm_unblock_domain": { + "title": "ドメインのブロックを解除", + "message": "%sのブロックを解除してよいですか?" } }, "accessibility": { @@ -656,8 +665,8 @@ "url": "URL を Mastodon で開く", "hashtag": "#%s へ移動", "no_user": { - "title": "No User Account Found", - "message": "There's no Useraccount \"%s\" on %s" + "title": "ユーザーアカウントが見つかりませんでした", + "message": "\"%s\"というユーザーは%sには見つかりませんでした" }, "empty_state": { "no_results": "なし" @@ -710,66 +719,66 @@ }, "settings": { "overview": { - "title": "Settings", - "general": "General", - "notifications": "Notifications", - "support_mastodon": "Support Mastodon", - "about_mastodon": "About Mastodon", - "server_details": "Server Details", - "logout": "Logout %@" + "title": "設定", + "general": "一般", + "notifications": "通知", + "support_mastodon": "Mastodonを支援する", + "about_mastodon": "Mastodonについて", + "server_details": "サーバーの詳細", + "logout": "%@ をログアウト" }, "about_mastodon": { - "title": "About", - "more_settings": "Even More Settings", - "contribute_to_mastodon": "Contribute to Mastodon", - "privacy_policy": "Privacy Policy", - "clear_media_storage": "Clear Media Storage" + "title": "Mastodonについて", + "more_settings": "さらに詳しい設定", + "contribute_to_mastodon": "Mastodonに貢献する", + "privacy_policy": "プライバシーポリシー", + "clear_media_storage": "メディアキャッシュの削除" }, "server_details": { - "about": "About", - "rules": "Rules", + "about": "このサーバーについて", + "rules": "ルール", "about_instance": { - "title": "Administrator", - "message_admin": "Message Admin", - "legal_notice": "A legal notice" + "title": "管理者", + "message_admin": "管理者にメッセージを送信", + "legal_notice": "法的通知" } }, "general": { - "title": "General", + "title": "一般", "appearance": { - "section_title": "Appearance", - "dark": "Dark", - "light": "Light", - "system": "Use Device Appearance" + "section_title": "テーマ", + "dark": "ダーク", + "light": "ライト", + "system": "端末の設定に合わせる" }, "design": { - "section_title": "Design", - "show_animations": "Play Animated Avatars and Emoji" + "section_title": "アニメーション", + "show_animations": "アニメーションアイコンと絵文字を再生" }, "links": { - "section_title": "Links", - "open_in_mastodon": "Open in Mastodon", - "open_in_browser": "Open in Browser" + "section_title": "Webブラウザ", + "open_in_mastodon": "アプリ内ブラウザアプリで開く", + "open_in_browser": "ブラウザアプリで開く" } }, "notifications": { - "title": "Notifications", + "title": "通知", "policy": { - "title": "Get Notifications from", - "anyone": "Anyone", - "followers": "People who follow you", - "follow": "People you follow", - "noone": "No one" + "title": "通知を送信する人", + "anyone": "誰でも", + "followers": "あなたのフォロワーのみ", + "follow": "あなたがフォローしている人のみ", + "noone": "誰にも許可しない" }, "alert": { - "mentions_and_replies": "Mentions & Replies", - "boosts": "Boosts", - "favorites": "Favorites", - "new_followers": "New Followers" + "mentions_and_replies": "メンションと返信", + "boosts": "ブースト", + "favorites": "お気に入り", + "new_followers": "新しいフォロワー" }, "disabled": { - "notification_hint": "Turn on notifications from your device settings to see updates on your lock screen.", - "go_to_settings": "Go to Notification Settings" + "notification_hint": "プッシュ通知を受け取るには、端末の設定から通知を許可しましょう。", + "go_to_settings": "端末の通知設定を開く" } } }, diff --git a/Localization/StringsConvertor/input/kab.lproj/app.json b/Localization/StringsConvertor/input/kab.lproj/app.json index 191c7a6ff..c84c2b819 100644 --- a/Localization/StringsConvertor/input/kab.lproj/app.json +++ b/Localization/StringsConvertor/input/kab.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Yegguni", "block": "Sewḥel", "block_user": "Sewḥel %s", - "block_domain": "Sewḥel %s", + "block_domain": "Block domain %s", "unblock": "Serreḥ", "unblock_user": "Serreḥ i %s", "blocked": "Yettusewḥel", + "domain_blocked": "Domain Blocked", "mute": "Sgugem", "mute_user": "Sgugem %s", "unmute": "Kkes asgugem", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/kmr.lproj/app.json b/Localization/StringsConvertor/input/kmr.lproj/app.json index 7da3e866e..1b2d78250 100644 --- a/Localization/StringsConvertor/input/kmr.lproj/app.json +++ b/Localization/StringsConvertor/input/kmr.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Tê nirxandin", "block": "Asteng bike", "block_user": "%s asteng bike", - "block_domain": "%s asteng bike", + "block_domain": "Block domain %s", "unblock": "Astengiyê rake", "unblock_user": "%s asteng neke", "blocked": "Astengkirî", + "domain_blocked": "Domain Blocked", "mute": "Bêdeng bike", "mute_user": "%s bêdeng bike", "unmute": "Bêdeng neke", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Bilindkirinan veşêre", "message": "Bo veşartina bilindkirinan bipejirîne" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/ko.lproj/Localizable.stringsdict b/Localization/StringsConvertor/input/ko.lproj/Localizable.stringsdict index 37ae2a461..27a7bb4e5 100644 --- a/Localization/StringsConvertor/input/ko.lproj/Localizable.stringsdict +++ b/Localization/StringsConvertor/input/ko.lproj/Localizable.stringsdict @@ -19,7 +19,7 @@ a11y.plural.count.input_limit_exceeds NSStringLocalizedFormatKey - Input limit exceeds %#@character_count@ + 글자 입력 제한 초과 %#@character_count@ character_count NSStringFormatSpecTypeKey @@ -33,7 +33,7 @@ a11y.plural.count.input_limit_remains NSStringLocalizedFormatKey - Input limit remains %#@character_count@ + 남은 글자 입력 수 %#@character_count@ character_count NSStringFormatSpecTypeKey @@ -61,7 +61,7 @@ plural.count.followed_by_and_mutual NSStringLocalizedFormatKey - %#@names@%#@count_mutual@ + %#@names@ 외 %#@count_mutual@ 명이 팔로우합니다. names NSStringFormatSpecTypeKey @@ -162,7 +162,7 @@ NSStringFormatValueTypeKey ld other - %ld re-blogs + %ld 개의 리블로그 plural.count.reply diff --git a/Localization/StringsConvertor/input/ko.lproj/app.json b/Localization/StringsConvertor/input/ko.lproj/app.json index 98668debc..000b3f8e3 100644 --- a/Localization/StringsConvertor/input/ko.lproj/app.json +++ b/Localization/StringsConvertor/input/ko.lproj/app.json @@ -33,24 +33,24 @@ "confirm": "로그아웃" }, "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": "정말로 %s 전체를 차단하시겠습니까? 대부분의 경우 개별 차단이나 뮤트로 충분합니다. 모든 공개 타임라인과 알림에서 해당 도메인에서 작성된 콘텐츠를 보지 못합니다. 해당 도메인에 속한 팔로워와의 관계가 사라집니다.", "block_entire_domain": "도메인 차단" }, "save_photo_failure": { "title": "사진 저장 실패", - "message": "Please enable the photo library access permission to save the photo." + "message": "사진을 저장하기 위해 사진 접근 권한을 허용해 주세요." }, "delete_post": { "title": "정말로 이 게시물을 삭제하시겠습니까?", - "message": "Are you sure you want to delete this post?" + "message": "정말로 이 게시물을 삭제하시겠습니까?" }, "clean_cache": { "title": "캐시 삭제", - "message": "Successfully cleaned %s cache." + "message": "%s의 캐시를 성공적으로 청소하였습니다." }, "translation_failed": { "title": "노트", - "message": "Translation failed. Maybe the administrator has not enabled translations on this server or this server is running an older version of Mastodon where translations are not yet supported.", + "message": "번역에 실패했습니다. 관리자가 번역 기능을 활성화시키지 않았거나 번역 기능을 지원하지 않는 Mastodon의 버전을 사용하는 것일 수 있습니다.", "button": "확인" } }, @@ -98,10 +98,10 @@ "unknown_language": "알 수 없음" }, "edit_post": "수정", - "bookmark": "Bookmark", - "remove_bookmark": "Remove Bookmark", - "follow": "Follow %s", - "unfollow": "Unfollow %s" + "bookmark": "북마크", + "remove_bookmark": "북마크 삭제", + "follow": "%s 팔로우하기", + "unfollow": "%s 언팔로우하기" }, "tabs": { "home": "홈", @@ -169,11 +169,11 @@ "show_image": "이미지 표시", "show_gif": "GIF 보기", "show_video_player": "비디오 플레이어 보기", - "share_link_in_post": "Share Link in Post", + "share_link_in_post": "게시글 안의 링크 공유", "tap_then_hold_to_show_menu": "Tap then hold to show menu", "a11y_labels": { - "reblog": "Re-blog", - "unreblog": "Undo re-blog" + "reblog": "리블로그", + "unreblog": "리블로그 취소" } }, "tag": { @@ -194,7 +194,7 @@ "translated_from": "%s에서 %s를 사용해 번역됨", "unknown_language": "알 수 없음", "unknown_provider": "알 수 없음", - "show_original": "Show Original" + "show_original": "원본 보기" }, "media": { "accessibility_label": "%s, attachment %d of %d", @@ -205,7 +205,7 @@ "posted_via_application": "%s via %s", "buttons": { "reblogs_title": "Reblogs", - "favorites_title": "Favorites", + "favorites_title": "즐겨찾기", "edit_history_title": "Edit History", "edit_history_detail": "Last edit %s" }, @@ -222,10 +222,11 @@ "pending": "대기중", "block": "차단", "block_user": "%s 차단", - "block_domain": "%s 차단", + "block_domain": "Block domain %s", "unblock": "차단 해제", "unblock_user": "%s 차단 해제", "blocked": "차단됨", + "domain_blocked": "Domain Blocked", "mute": "뮤트", "mute_user": "%s 뮤트", "unmute": "뮤트 해제", @@ -258,7 +259,7 @@ }, "user_list": { "no_verified_link": "No verified link", - "followers_count": "%@ followers" + "followers_count": "%@ 팔로잉" } }, "scene": { @@ -266,22 +267,22 @@ "log_in": "로그인", "learn_more": "Learn more", "join_default_server": "Join %@", - "pick_server": "Pick another server", + "pick_server": "다른 서버 선택하기", "separator": { - "or": "or" + "or": "또는" }, "education": { "mastodon": { - "title": "Welcome to Mastodon", + "title": "Mastodon에 오신 것을 환영합니다", "description": "Mastodon is a decentralized social network, meaning no single company controls it. It’s made up of many independently-run servers, all connected together." }, "servers": { - "title": "What are servers?", + "title": "서버는 무엇인가요?", "description": "Every Mastodon account is hosted on a server — each with its own values, rules, & admins. No matter which one you pick, you can follow and interact with people on any server." }, "a11y": { "what_is_mastodon": { - "title": "What is Mastodon?" + "title": "Mastodon이란?" } } } @@ -294,9 +295,9 @@ } }, "server_picker": { - "title": "Pick Server", + "title": "서버 선택하기", "button": { - "language": "Language", + "language": "언어", "signup_speed": "Sign-up Speed", "category": { "all": "모두", @@ -327,28 +328,28 @@ }, "empty_state": { "finding_servers": "사용 가능한 서버를 찾는 중입니다...", - "bad_network": "Something went wrong while loading the data. Check your internet connection.", + "bad_network": "데이터를 로딩하는 과정에서 문제가 발생했습니다. 인터넷 연결 상태를 확인해주세요.", "no_results": "결과 없음" }, "signup_speed": { - "all": "All", - "instant": "Instant Sign-up", - "manually_reviewed": "Manual Review" + "all": "모두", + "instant": "바로 가입", + "manually_reviewed": "수동 심사" }, "language": { - "all": "All" + "all": "모두" }, "search": { - "placeholder": "Search name or URL" + "placeholder": "이름 또는 URL 검색" }, "no_server_selected_hint": "아무 것도 고르지 않은 경우, 당신의 언어에 따라 서버를 골라드립니다." }, "privacy": { - "title": "Privacy", + "title": "개인 정보", "description": "마스토돈 앱은 아무런 데이터도 수집하지 않지만, 가입한 서버의 정책은 다를 수도 있습니다. 잠시 시간을 들여 마스토돈 앱과 서버의 개인정보 정책을 확인한 후 동의해 주세요.", "policy": { - "ios": "Privacy Policy - Mastodon for iOS", - "server": "Privacy Policy - %s" + "ios": "개인정보처리방침 - Mastodon iOS", + "server": "개인정보처리방침 - %s" }, "button": { "confirm": "동의합니다" @@ -373,7 +374,7 @@ }, "password": { "placeholder": "암호", - "confirmation_placeholder": "Confirm Password", + "confirmation_placeholder": "비밀번호 확인", "require": "암호의 최소 요구사항:", "character_limit": "8글자", "accessibility": { @@ -420,13 +421,13 @@ "subtitle": "다음은 %s의 중재자들에 의해 설정되고 적용되는 규칙들입니다.", "prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.", "terms_of_service": "이용약관", - "privacy_policy": "개인정보 정책", + "privacy_policy": "개인정보처리방침", "button": { "confirm": "동의합니다" } }, "confirm_email": { - "title": "Check Your Inbox", + "title": "받은 편지함을 확인하세요", "tap_the_link_we_emailed_to_you_to_verify_your_account": "Tap the link we sent you to verify %@. We’ll wait right here.", "button": { "resend": "재전송" @@ -444,8 +445,8 @@ }, "didnt_get_link": { "prefix": "링크를 못 받으셨나요?", - "resend_in": "Resend (%@)", - "resend_now": "Resend now." + "resend_in": "재전송(%@)", + "resend_now": "재전송됨" } }, "home_timeline": { @@ -462,14 +463,14 @@ } }, "suggestion_account": { - "title": "Popular on Mastodon", - "follow_all": "Follow all" + "title": "마스토돈 속 인기", + "follow_all": "모두 팔로우" }, "compose": { "title": { "new_post": "새 게시물", "new_reply": "새 답글", - "edit_post": "Edit Post" + "edit_post": "게시물 편집" }, "media_selection": { "camera": "사진 촬영", @@ -489,11 +490,11 @@ "upload_failed": "업로드 실패", "can_not_recognize_this_media_attachment": "Can not recognize this media attachment", "attachment_too_large": "첨부파일이 너무 큽니다", - "compressing_state": "Compressing...", + "compressing_state": "압축…", "server_processing_state": "Server Processing..." }, "poll": { - "title": "Poll", + "title": "투표", "duration_time": "기간: %s", "thirty_minutes": "30분", "one_hour": "1시간", @@ -541,23 +542,23 @@ "select_visibility_entry": "Select Visibility - %s" }, "language": { - "title": "Post Language", - "suggested": "Suggested", - "recent": "Recent", - "other": "Other Language…" + "title": "게시물 언어", + "suggested": "추천", + "recent": "최근", + "other": "다른 언어" } }, "profile": { "header": { - "follows_you": "Follows You" + "follows_you": "나를 팔로우 합니다" }, "dashboard": { - "my_posts": "posts", - "my_following": "following", - "my_followers": "followers", - "other_posts": "posts", - "other_following": "following", - "other_followers": "followers", + "my_posts": "게시물", + "my_following": "팔로잉", + "my_followers": "팔로워", + "other_posts": "게시물", + "other_following": "팔로잉", + "other_followers": "팔로워", "familiar_followers": "mutuals" }, "fields": { @@ -575,14 +576,14 @@ "segmented_control": { "posts": "게시물", "replies": "답글", - "posts_and_replies": "Posts and Replies", + "posts_and_replies": "게시물과 답장", "media": "미디어", "about": "정보" }, "relationship_action_alert": { "confirm_mute_user": { - "title": "Mute Account", - "message": "Confirm to mute %s" + "title": "계정 뮤트", + "message": "%s 뮤트 확인" }, "confirm_unmute_user": { "title": "계정 뮤트 해제", @@ -590,11 +591,11 @@ }, "confirm_block_user": { "title": "계정 차단", - "message": "Confirm to block %s" + "message": "%s 차단 확인" }, "confirm_unblock_user": { "title": "계정 차단 해제", - "message": "Confirm to unblock %s" + "message": "%s 차단 해제 확인" }, "confirm_show_reblogs": { "title": "리블로그 보기", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "리블로그 가리기", "message": "리블로그를 가리기 전 확인" + }, + "confirm_block_domain": { + "title": "도메인 차단", + "message": "%s 도메인 차단 확인" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { @@ -710,7 +719,7 @@ }, "settings": { "overview": { - "title": "Settings", + "title": "설정", "general": "General", "notifications": "Notifications", "support_mastodon": "Support Mastodon", @@ -722,7 +731,7 @@ "title": "About", "more_settings": "Even More Settings", "contribute_to_mastodon": "Contribute to Mastodon", - "privacy_policy": "Privacy Policy", + "privacy_policy": "개인정보처리방침", "clear_media_storage": "Clear Media Storage" }, "server_details": { @@ -748,24 +757,24 @@ }, "links": { "section_title": "Links", - "open_in_mastodon": "Open in Mastodon", - "open_in_browser": "Open in Browser" + "open_in_mastodon": "Mastodon으로 열기", + "open_in_browser": "브라우저로 열기" } }, "notifications": { - "title": "Notifications", + "title": "알림", "policy": { "title": "Get Notifications from", - "anyone": "Anyone", - "followers": "People who follow you", - "follow": "People you follow", - "noone": "No one" + "anyone": "모두", + "followers": "나를 팔로우하는 사람들", + "follow": "내가 팔로우하는 사람들", + "noone": "알림 받지않기" }, "alert": { "mentions_and_replies": "Mentions & Replies", "boosts": "Boosts", - "favorites": "Favorites", - "new_followers": "New Followers" + "favorites": "즐겨찾기", + "new_followers": "새 팔로워" }, "disabled": { "notification_hint": "Turn on notifications from your device settings to see updates on your lock screen.", @@ -841,7 +850,7 @@ "add_account": "계정 추가" }, "bookmark": { - "title": "Bookmarks" + "title": "북마크" }, "followed_tags": { "title": "팔로우한 태그", @@ -867,7 +876,7 @@ "user_not_logged_in": "Please open Mastodon to log in to an Account." }, "followers_count": { - "configuration_display_name": "Followers", + "configuration_display_name": "팔로워", "configuration_description": "Show number of followers.", "title": "FOLLOWERS", "followers_today": "%s followers today" diff --git a/Localization/StringsConvertor/input/lv.lproj/app.json b/Localization/StringsConvertor/input/lv.lproj/app.json index efb83221e..85fff3b21 100644 --- a/Localization/StringsConvertor/input/lv.lproj/app.json +++ b/Localization/StringsConvertor/input/lv.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Gaida", "block": "Bloķēt", "block_user": "Bloķēt %s", - "block_domain": "Bloķēt %s", + "block_domain": "Block domain %s", "unblock": "Atbloķēt", "unblock_user": "Atbloķēt %s", "blocked": "Bloķēts", + "domain_blocked": "Domain Blocked", "mute": "Apklusināt", "mute_user": "Aplusināt %s", "unmute": "Noņemt apklusinājumu", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Paslēpt Reblogus", "message": "Apstiprināt, lai slēptu reblogus" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/my.lproj/app.json b/Localization/StringsConvertor/input/my.lproj/app.json index d56cc05f2..b2410d53a 100644 --- a/Localization/StringsConvertor/input/my.lproj/app.json +++ b/Localization/StringsConvertor/input/my.lproj/app.json @@ -222,10 +222,11 @@ "pending": "ဆိုင်းငံ့ထားသည်", "block": "ဘလော့လုပ်ရန်", "block_user": "%s ကို ဘလော့လုပ်ရန်", - "block_domain": "%s ကို ဘလော့လုပ်ရန်", + "block_domain": "Block domain %s", "unblock": "ဘလော့ဖြုတ်ရန်", "unblock_user": "%s ကို ဘလော့ဖြုတ်ရန်", "blocked": "ဘလော့ထားသည်", + "domain_blocked": "Domain Blocked", "mute": "ပိတ်ထားရန်", "mute_user": "%s ကို ပိတ်ထားရန်", "unmute": "ပြန်ဖွင့်ရန်", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/nl.lproj/app.json b/Localization/StringsConvertor/input/nl.lproj/app.json index de76fa8b2..7bc4c487d 100644 --- a/Localization/StringsConvertor/input/nl.lproj/app.json +++ b/Localization/StringsConvertor/input/nl.lproj/app.json @@ -222,10 +222,11 @@ "pending": "In afwachting", "block": "Blokkeren", "block_user": "%s blokkeren", - "block_domain": "%s blokkeren", + "block_domain": "Block domain %s", "unblock": "Deblokkeren", "unblock_user": "%s deblokkeren", "blocked": "Geblokkeerd", + "domain_blocked": "Domain Blocked", "mute": "Negeren", "mute_user": "Negeer %s", "unmute": "Niet langer negeren", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Boosts verbergen", "message": "Verbergen van boosts bevestigen" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/pl.lproj/app.json b/Localization/StringsConvertor/input/pl.lproj/app.json index 6a8f1f37a..78b7f7c31 100644 --- a/Localization/StringsConvertor/input/pl.lproj/app.json +++ b/Localization/StringsConvertor/input/pl.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Oczekujący", "block": "Zablokuj", "block_user": "Zablokuj %s", - "block_domain": "Zablokuj %s", + "block_domain": "Block domain %s", "unblock": "Odblokuj", "unblock_user": "Odblokuj %s", "blocked": "Zablokowany", + "domain_blocked": "Domain Blocked", "mute": "Wycisz", "mute_user": "Wycisz %s", "unmute": "Cofnij wyciszenie", @@ -355,7 +356,7 @@ } }, "register": { - "title": "Create Account", + "title": "Utwórz konto", "input": { "avatar": { "delete": "Usuń" @@ -419,8 +420,8 @@ "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", + "terms_of_service": "zasady użytkowania", + "privacy_policy": "polityka prywatności", "button": { "confirm": "I Agree" } @@ -429,7 +430,7 @@ "title": "Check Your Inbox", "tap_the_link_we_emailed_to_you_to_verify_your_account": "Tap the link we sent you to verify %@. We’ll wait right here.", "button": { - "resend": "Resend" + "resend": "Wyślij ponownie" }, "dont_receive_email": { "title": "Check your Email", @@ -444,7 +445,7 @@ }, "didnt_get_link": { "prefix": "Didn’t get a link?", - "resend_in": "Resend (%@)", + "resend_in": "Wyślij ponownie (%@)", "resend_now": "Resend now." } }, @@ -472,12 +473,12 @@ "edit_post": "Edit Post" }, "media_selection": { - "camera": "Take Photo", - "photo_library": "Photo Library", + "camera": "Zrób zdjęcie", + "photo_library": "Biblioteka zdjęć", "browse": "Browse" }, "content_input_placeholder": "Type or paste what’s on your mind", - "compose_action": "Publish", + "compose_action": "Publikuj", "replying_to_user": "odpowiadanie %s", "attachment": { "photo": "zdjęcie", @@ -513,18 +514,18 @@ "placeholder": "Write an accurate warning here..." }, "visibility": { - "public": "Public", + "public": "Publiczny", "unlisted": "Unlisted", - "private": "Followers only", - "direct": "Only people I mention" + "private": "Tylko dla obserwujących", + "direct": "Tylko wspomniane osoby" }, "auto_complete": { "space_to_add": "Space to add" }, "accessibility": { - "append_attachment": "Add Attachment", - "append_poll": "Add Poll", - "remove_poll": "Remove Poll", + "append_attachment": "Dodaj załącznik", + "append_poll": "Dodaj ankietę", + "remove_poll": "Usuń ankietę", "custom_emoji_picker": "Custom Emoji Picker", "enable_content_warning": "Enable Content Warning", "disable_content_warning": "Disable Content Warning", @@ -561,11 +562,11 @@ "familiar_followers": "mutuals" }, "fields": { - "joined": "Joined", + "joined": "Dołączył(a)", "add_row": "Add Row", "placeholder": { - "label": "Label", - "content": "Content" + "label": "Etykieta", + "content": "Zawartość" }, "verified": { "short": "Verified on %s", @@ -574,19 +575,19 @@ }, "segmented_control": { "posts": "Posts", - "replies": "Replies", + "replies": "Odpowiedzi", "posts_and_replies": "Posts and Replies", "media": "Media", "about": "About" }, "relationship_action_alert": { "confirm_mute_user": { - "title": "Mute Account", - "message": "Confirm to mute %s" + "title": "Wycisz konto", + "message": "Potwierdź wyciszenie %s" }, "confirm_unmute_user": { - "title": "Unmute Account", - "message": "Confirm to unmute %s" + "title": "Cofnij wyciszenie konta", + "message": "Potwierdź cofnięcie wyciszenia %s" }, "confirm_block_user": { "title": "Block Account", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { @@ -634,7 +643,7 @@ "title": "Search", "search_bar": { "placeholder": "Search hashtags and users", - "cancel": "Cancel" + "cancel": "Anuluj" }, "recommend": { "button_text": "See All", @@ -646,23 +655,23 @@ "accounts": { "title": "Accounts you might like", "description": "You may like to follow these accounts", - "follow": "Follow" + "follow": "Obserwuj" } }, "searching": { "posts": "Posts matching \"%s\"", "people": "People matching \"%s\"", "profile": "Go to @%s@%s", - "url": "Open URL in Mastodon", + "url": "Otwórz adres URL w Mastodonie", "hashtag": "Go to #%s", "no_user": { "title": "No User Account Found", "message": "There's no Useraccount \"%s\" on %s" }, "empty_state": { - "no_results": "No results" + "no_results": "Brak wyników" }, - "recent_search": "Recent searches", + "recent_search": "Ostatnie wyszukiwania", "clear_all": "Clear all", "clear": "Clear" } @@ -678,12 +687,12 @@ "intro": "These are the posts gaining traction in your corner of Mastodon." }, "favorite": { - "title": "Favorites" + "title": "Ulubione" }, "notification": { "title": { - "Everything": "Everything", - "Mentions": "Mentions" + "Everything": "Wszystko", + "Mentions": "Wspomnienia" }, "notification_description": { "followed_you": "followed you", @@ -698,10 +707,10 @@ "show_mentions": "Show Mentions" }, "follow_request": { - "accept": "Accept", - "accepted": "Accepted", - "reject": "reject", - "rejected": "Rejected" + "accept": "Zaakceptuj", + "accepted": "Zaakceptowano", + "reject": "odrzuć", + "rejected": "Odrzucono" } }, "thread": { @@ -737,9 +746,9 @@ "general": { "title": "General", "appearance": { - "section_title": "Appearance", - "dark": "Dark", - "light": "Light", + "section_title": "Wygląd", + "dark": "Ciemny", + "light": "Jasny", "system": "Use Device Appearance" }, "design": { @@ -753,7 +762,7 @@ } }, "notifications": { - "title": "Notifications", + "title": "Powiadomienia", "policy": { "title": "Get Notifications from", "anyone": "Anyone", @@ -791,13 +800,13 @@ "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", + "i_dont_like_it": "Nie lubię tego", "it_is_not_something_you_want_to_see": "It is not something you want to see", - "its_spam": "It’s spam", + "its_spam": "To spam", "malicious_links_fake_engagement_or_repetetive_replies": "Malicious links, fake engagement, or repetetive replies", - "it_violates_server_rules": "It violates server rules", + "it_violates_server_rules": "To narusza zasady serwera", "you_are_aware_that_it_breaks_specific_rules": "You are aware that it breaks specific rules", - "its_something_else": "It’s something else", + "its_something_else": "To coś innego", "the_issue_does_not_fit_into_other_categories": "The issue does not fit into other categories" }, "step_two": { @@ -838,10 +847,10 @@ "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" + "add_account": "Dodaj konto" }, "bookmark": { - "title": "Bookmarks" + "title": "Zakładki" }, "followed_tags": { "title": "Followed Tags", @@ -851,7 +860,7 @@ "posts_today": "posts today" }, "actions": { - "follow": "Follow", + "follow": "Obserwuj", "unfollow": "Unfollow" } } diff --git a/Localization/StringsConvertor/input/pt-BR.lproj/app.json b/Localization/StringsConvertor/input/pt-BR.lproj/app.json index c20316b37..42f727e84 100644 --- a/Localization/StringsConvertor/input/pt-BR.lproj/app.json +++ b/Localization/StringsConvertor/input/pt-BR.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pendente", "block": "Bloquear", "block_user": "Bloquear %s", - "block_domain": "Bloquear %s", + "block_domain": "Block domain %s", "unblock": "Desbloquear", "unblock_user": "Desbloquear %s", "blocked": "Bloqueado", + "domain_blocked": "Domain Blocked", "mute": "Silenciar", "mute_user": "Silenciar %s", "unmute": "Remover silenciado", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Ocultar reblogs", "message": "Confirmar para ocultar reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/pt.lproj/app.json b/Localization/StringsConvertor/input/pt.lproj/app.json index ef0c50ce7..26777d47a 100644 --- a/Localization/StringsConvertor/input/pt.lproj/app.json +++ b/Localization/StringsConvertor/input/pt.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pending", "block": "Block", "block_user": "Block %s", - "block_domain": "Block %s", + "block_domain": "Block domain %s", "unblock": "Unblock", "unblock_user": "Unblock %s", "blocked": "Blocked", + "domain_blocked": "Domain Blocked", "mute": "Mute", "mute_user": "Mute %s", "unmute": "Unmute", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/ro.lproj/app.json b/Localization/StringsConvertor/input/ro.lproj/app.json index da56f992f..8604f9d88 100644 --- a/Localization/StringsConvertor/input/ro.lproj/app.json +++ b/Localization/StringsConvertor/input/ro.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pending", "block": "Block", "block_user": "Block %s", - "block_domain": "Block %s", + "block_domain": "Block domain %s", "unblock": "Unblock", "unblock_user": "Unblock %s", "blocked": "Blocked", + "domain_blocked": "Domain Blocked", "mute": "Mute", "mute_user": "Mute %s", "unmute": "Unmute", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/ru.lproj/app.json b/Localization/StringsConvertor/input/ru.lproj/app.json index 3a2eb456c..c8776e4e6 100644 --- a/Localization/StringsConvertor/input/ru.lproj/app.json +++ b/Localization/StringsConvertor/input/ru.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Отправлен", "block": "Заблокировать", "block_user": "Заблокировать %s", - "block_domain": "Заблокировать %s", + "block_domain": "Block domain %s", "unblock": "Разблокировать", "unblock_user": "Разблокировать %s", "blocked": "В заблокированных", + "domain_blocked": "Domain Blocked", "mute": "Игнорировать", "mute_user": "Игнорировать %s", "unmute": "Убрать из игнорируемых", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/si.lproj/app.json b/Localization/StringsConvertor/input/si.lproj/app.json index aa66be125..2d6b9809f 100644 --- a/Localization/StringsConvertor/input/si.lproj/app.json +++ b/Localization/StringsConvertor/input/si.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Pending", "block": "අවහිර", "block_user": "%s අවහිර", - "block_domain": "%s අවහිර", + "block_domain": "Block domain %s", "unblock": "අනවහිර", "unblock_user": "Unblock %s", "blocked": "Blocked", + "domain_blocked": "Domain Blocked", "mute": "Mute", "mute_user": "Mute %s", "unmute": "Unmute", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Hide Reblogs", "message": "Confirm to hide reblogs" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/sl.lproj/app.json b/Localization/StringsConvertor/input/sl.lproj/app.json index 8e79c8cdb..0e0c163fb 100644 --- a/Localization/StringsConvertor/input/sl.lproj/app.json +++ b/Localization/StringsConvertor/input/sl.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Na čakanju", "block": "Blokiraj", "block_user": "Blokiraj %s", - "block_domain": "Blokiraj %s", + "block_domain": "Blokiraj domeno %s", "unblock": "Odblokiraj", "unblock_user": "Odblokiraj %s", "blocked": "Blokirano", + "domain_blocked": "Domena blokirana", "mute": "Utišaj", "mute_user": "Utišaj %s", "unmute": "Odtišaj", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Skrij poobjave", "message": "Potrdite, da poobjave ne bodo prikazane" + }, + "confirm_block_domain": { + "title": "Blokiraj domeno", + "message": "Potrdite blokado domene %s" + }, + "confirm_unblock_domain": { + "title": "Odblokiraj domeno", + "message": "Potrdite umik blokade domene %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/sv.lproj/app.json b/Localization/StringsConvertor/input/sv.lproj/app.json index c4f312ca4..1ea0c19f6 100644 --- a/Localization/StringsConvertor/input/sv.lproj/app.json +++ b/Localization/StringsConvertor/input/sv.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Väntande", "block": "Blockera", "block_user": "Blockera %s", - "block_domain": "Blockera %s", + "block_domain": "Block domain %s", "unblock": "Avblockera", "unblock_user": "Avblockera %s", "blocked": "Blockerad", + "domain_blocked": "Domain Blocked", "mute": "Tysta", "mute_user": "Tysta %s", "unmute": "Avtysta", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Dölj boostar", "message": "Bekräfta för att dölja boostar" + }, + "confirm_block_domain": { + "title": "Blockera domän", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/th.lproj/app.json b/Localization/StringsConvertor/input/th.lproj/app.json index 72b58c9eb..7a8047f37 100644 --- a/Localization/StringsConvertor/input/th.lproj/app.json +++ b/Localization/StringsConvertor/input/th.lproj/app.json @@ -79,9 +79,9 @@ "see_more": "ดูเพิ่มเติม", "preview": "แสดงตัวอย่าง", "copy": "คัดลอก", - "share": "แบ่งปัน", - "share_user": "แบ่งปัน %s", - "share_post": "แบ่งปันโพสต์", + "share": "แชร์", + "share_user": "แชร์ %s", + "share_post": "แชร์โพสต์", "open_in_safari": "เปิดใน Safari", "open_in_browser": "เปิดในเบราว์เซอร์", "find_people": "ค้นหาผู้คนที่จะติดตาม", @@ -169,7 +169,7 @@ "show_image": "แสดงภาพ", "show_gif": "แสดง GIF", "show_video_player": "แสดงตัวเล่นวิดีโอ", - "share_link_in_post": "แบ่งปันลิงก์ในโพสต์", + "share_link_in_post": "แชร์ลิงก์ในโพสต์", "tap_then_hold_to_show_menu": "แตะค้างไว้เพื่อแสดงเมนู", "a11y_labels": { "reblog": "ดัน", @@ -222,10 +222,11 @@ "pending": "รอดำเนินการ", "block": "ปิดกั้น", "block_user": "ปิดกั้น %s", - "block_domain": "ปิดกั้น %s", + "block_domain": "ปิดกั้นโดเมน %s", "unblock": "เลิกปิดกั้น", "unblock_user": "เลิกปิดกั้น %s", "blocked": "ปิดกั้นอยู่", + "domain_blocked": "ปิดกั้นโดเมนอยู่", "mute": "ซ่อน", "mute_user": "ซ่อน %s", "unmute": "เลิกซ่อน", @@ -277,7 +278,7 @@ }, "servers": { "title": "เซิร์ฟเวอร์คืออะไร?", - "description": "ทุกบัญชี Mastodon ได้รับการโฮสต์ในเซิร์ฟเวอร์ — แต่ละแห่งมีค่า, กฎ และผู้ดูแลของเซิร์ฟเวอร์เอง ไม่ว่าคุณจะเลือกเซิร์ฟเวอร์ใด คุณสามารถติดตามและโต้ตอบกับผู้คนในเซิร์ฟเวอร์ใด ๆ" + "description": "ทุกบัญชี Mastodon จะถูกโฮสต์ในเซิร์ฟเวอร์ ซึ่งแต่ละแห่งมีค่านิยม, กฎ และผู้ดูแลของเซิร์ฟเวอร์เอง ไม่ว่าคุณจะเลือกเซิร์ฟเวอร์ใด คุณสามารถติดตามและโต้ตอบกับผู้คนในเซิร์ฟเวอร์ใดก็ได้" }, "a11y": { "what_is_mastodon": { @@ -288,7 +289,7 @@ }, "login": { "title": "ยินดีต้อนรับกลับมา", - "subtitle": "นำคุณเข้าสู่ระบบในเซิร์ฟเวอร์ที่คุณได้สร้างบัญชีของคุณไว้ใน", + "subtitle": "นำคุณเข้าสู่ระบบในเซิร์ฟเวอร์ที่คุณได้สร้างบัญชีของคุณไว้", "server_search_field": { "placeholder": "ป้อน URL หรือค้นหาสำหรับเซิร์ฟเวอร์ของคุณ" } @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "ซ่อนการดัน", "message": "ยืนยันเพื่อซ่อนการดัน" + }, + "confirm_block_domain": { + "title": "ปิดกั้นโดเมน", + "message": "ยืนยันเพื่อปิดกั้นโดเมน %s" + }, + "confirm_unblock_domain": { + "title": "เลิกปิดกั้นโดเมน", + "message": "ยืนยันเพื่อเลิกปิดกั้นโดเมน %s" } }, "accessibility": { @@ -825,7 +834,7 @@ "you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "คุณจะไม่เห็นโพสต์หรือการดันของเขาในฟีดหน้าแรกของคุณ เขาจะไม่ทราบว่ามีการซ่อนเขา", "block_user": "ปิดกั้น %s", "they_will_no_longer_be_able_to_follow_or_see_your_posts_but_they_can_see_if_theyve_been_blocked": "เขาจะไม่สามารถติดตามหรือเห็นโพสต์ของคุณได้อีกต่อไป แต่เขาสามารถเห็นว่ามีการปิดกั้นเขาหรือไม่", - "while_we_review_this_you_can_take_action_against_user": "ขณะที่เราตรวจทานสิ่งนี้ คุณสามารถดำเนินการกับ %s" + "while_we_review_this_you_can_take_action_against_user": "ขณะที่เราตรวจทานสิ่งนี้ คุณสามารถใช้การกระทำต่อ %s" } }, "preview": { diff --git a/Localization/StringsConvertor/input/tr.lproj/app.json b/Localization/StringsConvertor/input/tr.lproj/app.json index ba24533f1..a98e342aa 100644 --- a/Localization/StringsConvertor/input/tr.lproj/app.json +++ b/Localization/StringsConvertor/input/tr.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Bekliyor", "block": "Engelle", "block_user": "%s kişisini engelle", - "block_domain": "%s kişisini engelle", + "block_domain": "Block domain %s", "unblock": "Engeli kaldır", "unblock_user": "%s kişisinin engelini kaldır", "blocked": "Engellendi", + "domain_blocked": "Domain Blocked", "mute": "Sessize al", "mute_user": "Sustur %s", "unmute": "Susturmayı kaldır", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Yeniden Paylaşımları Gizle", "message": "Yeniden paylaşımları gizlemeyi onayla" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/uk.lproj/app.json b/Localization/StringsConvertor/input/uk.lproj/app.json index b18d60b19..1203c584e 100644 --- a/Localization/StringsConvertor/input/uk.lproj/app.json +++ b/Localization/StringsConvertor/input/uk.lproj/app.json @@ -222,10 +222,11 @@ "pending": "Очікується", "block": "Заблокувати", "block_user": "Блокувати %s", - "block_domain": "Блокувати %s", + "block_domain": "Block domain %s", "unblock": "Розблокувати", "unblock_user": "Розблокувати %s", "blocked": "Заблоковано", + "domain_blocked": "Domain Blocked", "mute": "Заглушити", "mute_user": "Заглушити %s", "unmute": "Сповіщати", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Сховати реблоги", "message": "Підтвердити, щоб приховати реблоги" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/vi.lproj/app.json b/Localization/StringsConvertor/input/vi.lproj/app.json index b45bea939..915ebee75 100644 --- a/Localization/StringsConvertor/input/vi.lproj/app.json +++ b/Localization/StringsConvertor/input/vi.lproj/app.json @@ -104,7 +104,7 @@ "unfollow": "Bỏ theo dõi %s" }, "tabs": { - "home": "Trang chính", + "home": "Trang chủ", "search_and_explore": "Tìm và Khám Phá", "notifications": "Thông báo", "profile": "Trang hồ sơ", @@ -226,6 +226,7 @@ "unblock": "Bỏ chặn", "unblock_user": "Bỏ chặn %s", "blocked": "Đã chặn", + "domain_blocked": "Máy chủ chặn", "mute": "Ẩn", "mute_user": "Ẩn %s", "unmute": "Bỏ ẩn", @@ -449,7 +450,7 @@ } }, "home_timeline": { - "title": "Trang chính", + "title": "Trang chủ", "navigation_bar_state": { "offline": "Ngoại tuyến", "new_posts": "Đọc những tút mới", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "Ẩn đăng lại", "message": "Xác nhận ẩn đăng lại" + }, + "confirm_block_domain": { + "title": "Chặn máy chủ", + "message": "Bạn muốn chặn %s?" + }, + "confirm_unblock_domain": { + "title": "Bỏ chặn máy chủ", + "message": "Bạn muốn bỏ chặn %s?" } }, "accessibility": { diff --git a/Localization/StringsConvertor/input/zh-Hans.lproj/app.json b/Localization/StringsConvertor/input/zh-Hans.lproj/app.json index f12bd1ae5..08bd34dc6 100644 --- a/Localization/StringsConvertor/input/zh-Hans.lproj/app.json +++ b/Localization/StringsConvertor/input/zh-Hans.lproj/app.json @@ -222,10 +222,11 @@ "pending": "待确认", "block": "屏蔽", "block_user": "屏蔽 %s", - "block_domain": "屏蔽 %s", + "block_domain": "Block domain %s", "unblock": "解除屏蔽", "unblock_user": "解除屏蔽 %s", "blocked": "已屏蔽", + "domain_blocked": "Domain Blocked", "mute": "静音", "mute_user": "静音 %s", "unmute": "取消静音", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "隐藏转发", "message": "确认隐藏转发" + }, + "confirm_block_domain": { + "title": "Block domain", + "message": "Confirm to block domain %s" + }, + "confirm_unblock_domain": { + "title": "Unblock domain", + "message": "Confirm to unblock domain %s" } }, "accessibility": { @@ -650,20 +659,20 @@ } }, "searching": { - "posts": "Posts matching \"%s\"", - "people": "People matching \"%s\"", - "profile": "Go to @%s@%s", - "url": "Open URL in Mastodon", - "hashtag": "Go to #%s", + "posts": "匹配 %s 的嘟文", + "people": "匹配 %s 的用户", + "profile": "转到 @%s@%s", + "url": "在 Mastodon 中打开 URL", + "hashtag": "转到 #%s", "no_user": { - "title": "No User Account Found", - "message": "There's no Useraccount \"%s\" on %s" + "title": "找不到账户", + "message": "找不到用户 %s(在服务器 %s 上)" }, "empty_state": { "no_results": "无结果" }, "recent_search": "最近搜索", - "clear_all": "Clear all", + "clear_all": "清除", "clear": "清除" } }, @@ -710,66 +719,66 @@ }, "settings": { "overview": { - "title": "Settings", - "general": "General", - "notifications": "Notifications", - "support_mastodon": "Support Mastodon", - "about_mastodon": "About Mastodon", - "server_details": "Server Details", - "logout": "Logout %@" + "title": "设置", + "general": "通用", + "notifications": "通知", + "support_mastodon": "支持 Mastodon", + "about_mastodon": "关于 Mastodon", + "server_details": "服务器详情", + "logout": "登出 %@" }, "about_mastodon": { - "title": "About", - "more_settings": "Even More Settings", - "contribute_to_mastodon": "Contribute to Mastodon", - "privacy_policy": "Privacy Policy", - "clear_media_storage": "Clear Media Storage" + "title": "关于", + "more_settings": "更多设置", + "contribute_to_mastodon": "贡献给Mastodon", + "privacy_policy": "隐私政策", + "clear_media_storage": "清楚媒体缓存" }, "server_details": { - "about": "About", - "rules": "Rules", + "about": "关于", + "rules": "规则", "about_instance": { - "title": "Administrator", - "message_admin": "Message Admin", - "legal_notice": "A legal notice" + "title": "管理员", + "message_admin": "联系管理员", + "legal_notice": "法律声明" } }, "general": { - "title": "General", + "title": "通用", "appearance": { - "section_title": "Appearance", - "dark": "Dark", - "light": "Light", - "system": "Use Device Appearance" + "section_title": "外观", + "dark": "深色", + "light": "浅色", + "system": "跟随系统" }, "design": { - "section_title": "Design", - "show_animations": "Play Animated Avatars and Emoji" + "section_title": "设计", + "show_animations": "播放动态头像和表情" }, "links": { - "section_title": "Links", - "open_in_mastodon": "Open in Mastodon", - "open_in_browser": "Open in Browser" + "section_title": "链接", + "open_in_mastodon": "在 Mastodon 中打开", + "open_in_browser": "在浏览器中打开" } }, "notifications": { - "title": "Notifications", + "title": "通知", "policy": { - "title": "Get Notifications from", - "anyone": "Anyone", - "followers": "People who follow you", - "follow": "People you follow", - "noone": "No one" + "title": "通知接收范围", + "anyone": "任何人", + "followers": "关注你的人", + "follow": "你关注的人", + "noone": "关闭通知" }, "alert": { - "mentions_and_replies": "Mentions & Replies", - "boosts": "Boosts", - "favorites": "Favorites", - "new_followers": "New Followers" + "mentions_and_replies": "提及与回复", + "boosts": "转嘟", + "favorites": "喜欢", + "new_followers": "新关注者" }, "disabled": { - "notification_hint": "Turn on notifications from your device settings to see updates on your lock screen.", - "go_to_settings": "Go to Notification Settings" + "notification_hint": "在系统设置中打开通知来随时获取新动态。", + "go_to_settings": "转到通知设置" } } }, diff --git a/Localization/StringsConvertor/input/zh-Hant.lproj/app.json b/Localization/StringsConvertor/input/zh-Hant.lproj/app.json index 36ea70d9c..c90872b7e 100644 --- a/Localization/StringsConvertor/input/zh-Hant.lproj/app.json +++ b/Localization/StringsConvertor/input/zh-Hant.lproj/app.json @@ -222,10 +222,11 @@ "pending": "等待中", "block": "封鎖", "block_user": "封鎖 %s", - "block_domain": "封鎖 %s", + "block_domain": "封鎖網域 %s", "unblock": "解除封鎖", "unblock_user": "解除封鎖 %s", "blocked": "已封鎖", + "domain_blocked": "已封鎖網域", "mute": "靜音", "mute_user": "靜音 %s", "unmute": "取消靜音", @@ -603,6 +604,14 @@ "confirm_hide_reblogs": { "title": "隱藏轉嘟", "message": "確認隱藏轉嘟" + }, + "confirm_block_domain": { + "title": "封鎖網域", + "message": "確認將網域 %s 封鎖" + }, + "confirm_unblock_domain": { + "title": "解除封鎖網域", + "message": "確認將網域 %s 解除封鎖" } }, "accessibility": { diff --git a/Mastodon.xcodeproj/project.pbxproj b/Mastodon.xcodeproj/project.pbxproj index 4b20158d7..ce71fb64e 100644 --- a/Mastodon.xcodeproj/project.pbxproj +++ b/Mastodon.xcodeproj/project.pbxproj @@ -29,6 +29,7 @@ 2A3D9B7E29A8F33A00F30313 /* StatusHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3D9B7D29A8F33A00F30313 /* StatusHistoryView.swift */; }; 2A3F6FE3292ECB5E002E6DA7 /* FollowedTagsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3F6FE2292ECB5E002E6DA7 /* FollowedTagsViewModel.swift */; }; 2A3F6FE5292F6E44002E6DA7 /* FollowedTagsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3F6FE4292F6E44002E6DA7 /* FollowedTagsTableViewCell.swift */; }; + 2A409F832B5955290044E472 /* MastodonStatusThreadViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A409F822B5955290044E472 /* MastodonStatusThreadViewModel+State.swift */; }; 2A506CF4292CD85800059C37 /* FollowedTagsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A506CF3292CD85800059C37 /* FollowedTagsViewController.swift */; }; 2A506CF6292D040100059C37 /* HashtagTimelineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A506CF5292D040100059C37 /* HashtagTimelineHeaderView.swift */; }; 2A64515E29642A8A00CD8B8A /* UniformTypeIdentifiers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A6451022964223800CD8B8A /* UniformTypeIdentifiers.framework */; }; @@ -638,6 +639,7 @@ 2A3D9B7D29A8F33A00F30313 /* StatusHistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusHistoryView.swift; sourceTree = ""; }; 2A3F6FE2292ECB5E002E6DA7 /* FollowedTagsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsViewModel.swift; sourceTree = ""; }; 2A3F6FE4292F6E44002E6DA7 /* FollowedTagsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsTableViewCell.swift; sourceTree = ""; }; + 2A409F822B5955290044E472 /* MastodonStatusThreadViewModel+State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MastodonStatusThreadViewModel+State.swift"; sourceTree = ""; }; 2A506CF3292CD85800059C37 /* FollowedTagsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsViewController.swift; sourceTree = ""; }; 2A506CF5292D040100059C37 /* HashtagTimelineHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagTimelineHeaderView.swift; sourceTree = ""; }; 2A6451022964223800CD8B8A /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = SDKROOT; }; @@ -2671,6 +2673,7 @@ DB938F0E2624119800E5B6C1 /* ThreadViewModel+LoadThreadState.swift */, DB938F0826240F3C00E5B6C1 /* RemoteThreadViewModel.swift */, DB0FCB7F27968F70006C02E2 /* MastodonStatusThreadViewModel.swift */, + 2A409F822B5955290044E472 /* MastodonStatusThreadViewModel+State.swift */, ); path = Thread; sourceTree = ""; @@ -3994,6 +3997,7 @@ 0FB3D31E25E534C700AAD544 /* PickServerCategoryCollectionViewCell.swift in Sources */, DB0FCB882796BDA9006C02E2 /* SearchItem.swift in Sources */, DB6180ED26391C6C0018D199 /* TransitioningMath.swift in Sources */, + 2A409F832B5955290044E472 /* MastodonStatusThreadViewModel+State.swift in Sources */, 2D6DE40026141DF600A63F6A /* SearchViewModel.swift in Sources */, D886FBD329DF710F00272017 /* WelcomeSeparatorView.swift in Sources */, DB0617FD27855BFE0030EE79 /* ServerRuleItem.swift in Sources */, diff --git a/Mastodon/Diffable/Status/StatusItem.swift b/Mastodon/Diffable/Status/StatusItem.swift index 938e51eb2..d5c049fc9 100644 --- a/Mastodon/Diffable/Status/StatusItem.swift +++ b/Mastodon/Diffable/Status/StatusItem.swift @@ -26,11 +26,39 @@ extension StatusItem { case leaf(context: Context) public var record: MastodonStatus { - switch self { - case .root(let threadContext), - .reply(let threadContext), - .leaf(let threadContext): - return threadContext.status + get { + switch self { + case .root(let threadContext), + .reply(let threadContext), + .leaf(let threadContext): + return threadContext.status + } + } + + set { + switch self { + case let .root(threadContext): + self = .root(context: .init( + status: newValue, + displayUpperConversationLink: threadContext.displayUpperConversationLink, + displayBottomConversationLink: threadContext.displayBottomConversationLink) + ) + + case let .reply(threadContext): + self = .reply(context: .init( + status: newValue, + displayUpperConversationLink: threadContext.displayUpperConversationLink, + displayBottomConversationLink: threadContext.displayBottomConversationLink) + ) + + case let .leaf(threadContext): + self = .leaf(context: .init( + status: newValue, + displayUpperConversationLink: threadContext.displayUpperConversationLink, + displayBottomConversationLink: threadContext.displayBottomConversationLink) + ) + + } } } } diff --git a/Mastodon/Protocol/Provider/DataSourceFacade+Bookmark.swift b/Mastodon/Protocol/Provider/DataSourceFacade+Bookmark.swift index 0bc0c9099..5433eb543 100644 --- a/Mastodon/Protocol/Provider/DataSourceFacade+Bookmark.swift +++ b/Mastodon/Protocol/Provider/DataSourceFacade+Bookmark.swift @@ -12,12 +12,13 @@ import MastodonCore import MastodonSDK extension DataSourceFacade { + @MainActor public static func responseToStatusBookmarkAction( provider: NeedsDependency & AuthContextProvider & DataSourceProvider, status: MastodonStatus ) async throws { - let selectionFeedbackGenerator = await UISelectionFeedbackGenerator() - await selectionFeedbackGenerator.selectionChanged() + let selectionFeedbackGenerator = UISelectionFeedbackGenerator() + selectionFeedbackGenerator.selectionChanged() let updatedStatus = try await provider.context.apiService.bookmark( record: status, @@ -27,6 +28,6 @@ extension DataSourceFacade { let newStatus: MastodonStatus = .fromEntity(updatedStatus) newStatus.isSensitiveToggled = status.isSensitiveToggled - provider.update(status: newStatus) + provider.update(status: newStatus, intent: .bookmark(updatedStatus.bookmarked == true)) } } diff --git a/Mastodon/Protocol/Provider/DataSourceFacade+Favorite.swift b/Mastodon/Protocol/Provider/DataSourceFacade+Favorite.swift index 8e96e28fa..8e55198eb 100644 --- a/Mastodon/Protocol/Provider/DataSourceFacade+Favorite.swift +++ b/Mastodon/Protocol/Provider/DataSourceFacade+Favorite.swift @@ -11,12 +11,13 @@ import MastodonSDK import MastodonCore extension DataSourceFacade { + @MainActor public static func responseToStatusFavoriteAction( provider: DataSourceProvider & AuthContextProvider, status: MastodonStatus ) async throws { - let selectionFeedbackGenerator = await UISelectionFeedbackGenerator() - await selectionFeedbackGenerator.selectionChanged() + let selectionFeedbackGenerator = UISelectionFeedbackGenerator() + selectionFeedbackGenerator.selectionChanged() let updatedStatus = try await provider.context.apiService.favorite( status: status, @@ -26,6 +27,6 @@ extension DataSourceFacade { let newStatus: MastodonStatus = .fromEntity(updatedStatus) newStatus.isSensitiveToggled = status.isSensitiveToggled - provider.update(status: newStatus) + provider.update(status: newStatus, intent: .favorite(updatedStatus.favourited == true)) } } diff --git a/Mastodon/Protocol/Provider/DataSourceFacade+Reblog.swift b/Mastodon/Protocol/Provider/DataSourceFacade+Reblog.swift index f8fa3d5f3..b10fb0e44 100644 --- a/Mastodon/Protocol/Provider/DataSourceFacade+Reblog.swift +++ b/Mastodon/Protocol/Provider/DataSourceFacade+Reblog.swift @@ -11,12 +11,13 @@ import MastodonUI import MastodonSDK extension DataSourceFacade { + @MainActor static func responseToStatusReblogAction( provider: DataSourceProvider & AuthContextProvider, status: MastodonStatus ) async throws { - let selectionFeedbackGenerator = await UISelectionFeedbackGenerator() - await selectionFeedbackGenerator.selectionChanged() + let selectionFeedbackGenerator = UISelectionFeedbackGenerator() + selectionFeedbackGenerator.selectionChanged() let updatedStatus = try await provider.context.apiService.reblog( status: status, @@ -27,6 +28,6 @@ extension DataSourceFacade { newStatus.reblog?.isSensitiveToggled = status.isSensitiveToggled newStatus.isSensitiveToggled = status.isSensitiveToggled - provider.update(status: newStatus) + provider.update(status: newStatus, intent: .reblog(updatedStatus.reblogged == true)) } } diff --git a/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift b/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift index c13906f4a..3a9a45f46 100644 --- a/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift +++ b/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift @@ -28,7 +28,7 @@ extension DataSourceFacade { authenticationBox: dependency.authContext.mastodonAuthenticationBox ).value.asMastodonStatus - dependency.delete(status: deletedStatus) + dependency.update(status: deletedStatus, intent: .delete) } } @@ -375,7 +375,7 @@ extension DataSourceFacade { if context.isBlocking { title = L10n.Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.title message = L10n.Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.message(context.domain) - actionTitle = L10n.Common.Controls.Friendship.unblockDomain(context.domain) + actionTitle = L10n.Common.Controls.Actions.unblockDomain(context.domain) } else { title = L10n.Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.title message = L10n.Common.Alerts.BlockDomain.title(context.domain) @@ -406,7 +406,7 @@ extension DataSourceFacade { } extension DataSourceFacade { - + @MainActor static func responseToToggleSensitiveAction( dependency: NeedsDependency & DataSourceProvider, status: MastodonStatus @@ -416,7 +416,7 @@ extension DataSourceFacade { let newStatus: MastodonStatus = .fromEntity(_status.entity) newStatus.isSensitiveToggled = !_status.isSensitiveToggled - dependency.update(status: newStatus) + dependency.update(status: newStatus, intent: .toggleSensitive(newStatus.isSensitiveToggled)) } } diff --git a/Mastodon/Protocol/Provider/DataSourceProvider+NotificationTableViewCellDelegate.swift b/Mastodon/Protocol/Provider/DataSourceProvider+NotificationTableViewCellDelegate.swift index 6a56fca29..c7b769f4c 100644 --- a/Mastodon/Protocol/Provider/DataSourceProvider+NotificationTableViewCellDelegate.swift +++ b/Mastodon/Protocol/Provider/DataSourceProvider+NotificationTableViewCellDelegate.swift @@ -98,6 +98,7 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider & Aut // MARK: - Follow Request extension NotificationTableViewCellDelegate where Self: DataSourceProvider & AuthContextProvider { + @MainActor func tableViewCell( _ cell: UITableViewCell, notificationView: NotificationView, @@ -113,7 +114,8 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider & Aut assertionFailure("only works for status data provider") return } - + + try await DataSourceFacade.responseToUserFollowRequestAction( dependency: self, notification: notification, @@ -123,6 +125,7 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider & Aut } } + @MainActor func tableViewCell( _ cell: UITableViewCell, notificationView: NotificationView, @@ -138,7 +141,7 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider & Aut assertionFailure("only works for status data provider") return } - + try await DataSourceFacade.responseToUserFollowRequestAction( dependency: self, notification: notification, @@ -147,7 +150,6 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider & Aut ) } } - } // MARK: - Status Content diff --git a/Mastodon/Protocol/Provider/DataSourceProvider.swift b/Mastodon/Protocol/Provider/DataSourceProvider.swift index e8e58dd17..fe886800e 100644 --- a/Mastodon/Protocol/Provider/DataSourceProvider.swift +++ b/Mastodon/Protocol/Provider/DataSourceProvider.swift @@ -37,6 +37,5 @@ extension DataSourceItem { protocol DataSourceProvider: ViewControllerWithDependencies { func item(from source: DataSourceItem.Source) async -> DataSourceItem? - func update(status: MastodonStatus) - func delete(status: MastodonStatus) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) } diff --git a/Mastodon/Resources/hy.lproj/InfoPlist.strings b/Mastodon/Resources/hy.lproj/InfoPlist.strings index 710865573..25b0c7fa9 100644 --- a/Mastodon/Resources/hy.lproj/InfoPlist.strings +++ b/Mastodon/Resources/hy.lproj/InfoPlist.strings @@ -1,4 +1,4 @@ "NSCameraUsageDescription" = "Used to take photo for post status"; "NSPhotoLibraryAddUsageDescription" = "Used to save photo into the Photo Library"; -"NewPostShortcutItemTitle" = "New Post"; -"SearchShortcutItemTitle" = "Search"; \ No newline at end of file +"NewPostShortcutItemTitle" = "Նոր գրառում"; +"SearchShortcutItemTitle" = "Որոնել"; \ No newline at end of file diff --git a/Mastodon/Scene/Discovery/Community/DiscoveryCommunityViewController+DataSourceProvider.swift b/Mastodon/Scene/Discovery/Community/DiscoveryCommunityViewController+DataSourceProvider.swift index ea3b573e2..6f284faf9 100644 --- a/Mastodon/Scene/Discovery/Community/DiscoveryCommunityViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Discovery/Community/DiscoveryCommunityViewController+DataSourceProvider.swift @@ -28,16 +28,10 @@ extension DiscoveryCommunityViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - viewModel.dataController.update(status: status) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + viewModel.dataController.update(status: status, intent: intent) } - - func delete(status: MastodonStatus) { - viewModel.dataController.setRecords( - viewModel.dataController.records.filter { $0.id != status.id } - ) - } - + @MainActor private func indexPath(for cell: UITableViewCell) async -> IndexPath? { return tableView.indexPath(for: cell) diff --git a/Mastodon/Scene/Discovery/Posts/DiscoveryPostsViewController+DataSourceProvider.swift b/Mastodon/Scene/Discovery/Posts/DiscoveryPostsViewController+DataSourceProvider.swift index 09c92009e..b6982a4ad 100644 --- a/Mastodon/Scene/Discovery/Posts/DiscoveryPostsViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Discovery/Posts/DiscoveryPostsViewController+DataSourceProvider.swift @@ -28,16 +28,10 @@ extension DiscoveryPostsViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - viewModel.dataController.update(status: status) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + viewModel.dataController.update(status: status, intent: intent) } - - func delete(status: MastodonStatus) { - viewModel.dataController.setRecords( - viewModel.dataController.records.filter { $0.id != status.id } - ) - } - + @MainActor private func indexPath(for cell: UITableViewCell) async -> IndexPath? { return tableView.indexPath(for: cell) diff --git a/Mastodon/Scene/HashtagTimeline/HashtagTimelineViewController+DataSourceProvider.swift b/Mastodon/Scene/HashtagTimeline/HashtagTimelineViewController+DataSourceProvider.swift index 8c7885017..dfa09d9c0 100644 --- a/Mastodon/Scene/HashtagTimeline/HashtagTimelineViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/HashtagTimeline/HashtagTimelineViewController+DataSourceProvider.swift @@ -28,14 +28,10 @@ extension HashtagTimelineViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - viewModel.dataController.update(status: status) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + viewModel.dataController.update(status: status, intent: intent) } - - func delete(status: MastodonStatus) { - viewModel.dataController.deleteRecord(status) - } - + @MainActor private func indexPath(for cell: UITableViewCell) async -> IndexPath? { return tableView.indexPath(for: cell) diff --git a/Mastodon/Scene/HomeTimeline/HomeTimelineViewController+DataSourceProvider.swift b/Mastodon/Scene/HomeTimeline/HomeTimelineViewController+DataSourceProvider.swift index 94a587f79..47a844b28 100644 --- a/Mastodon/Scene/HomeTimeline/HomeTimelineViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/HomeTimeline/HomeTimelineViewController+DataSourceProvider.swift @@ -33,14 +33,10 @@ extension HomeTimelineViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - viewModel.dataController.update(status: status) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + viewModel.dataController.update(status: status, intent: intent) } - - func delete(status: MastodonStatus) { - viewModel.dataController.records = viewModel.dataController.records.filter { $0.id != status.id } - } - + @MainActor private func indexPath(for cell: UITableViewCell) async -> IndexPath? { return tableView.indexPath(for: cell) diff --git a/Mastodon/Scene/HomeTimeline/HomeTimelineViewController.swift b/Mastodon/Scene/HomeTimeline/HomeTimelineViewController.swift index 4d0a2613e..06e1b2d8e 100644 --- a/Mastodon/Scene/HomeTimeline/HomeTimelineViewController.swift +++ b/Mastodon/Scene/HomeTimeline/HomeTimelineViewController.swift @@ -168,9 +168,10 @@ extension HomeTimelineViewController { } .store(in: &disposeBag) - context.publisherService.statusPublishResult.sink { result in - if case .success(.edit) = result { + context.publisherService.statusPublishResult.receive(on: DispatchQueue.main).sink { result in + if case .success(.edit(let status)) = result { self.viewModel.hasPendingStatusEditReload = true + self.viewModel.dataController.update(status: .fromEntity(status.value), intent: .edit) } }.store(in: &disposeBag) diff --git a/Mastodon/Scene/HomeTimeline/HomeTimelineViewModel+LoadLatestState.swift b/Mastodon/Scene/HomeTimeline/HomeTimelineViewModel+LoadLatestState.swift index d2adcfb39..ff24f74bd 100644 --- a/Mastodon/Scene/HomeTimeline/HomeTimelineViewModel+LoadLatestState.swift +++ b/Mastodon/Scene/HomeTimeline/HomeTimelineViewModel+LoadLatestState.swift @@ -88,7 +88,7 @@ extension HomeTimelineViewModel.LoadLatestState { Task { let latestStatusIDs: [Status.ID] = latestFeedRecords.compactMap { record in - return record.status?.id + return record.status?.reblog?.id ?? record.status?.id } do { @@ -104,7 +104,7 @@ extension HomeTimelineViewModel.LoadLatestState { // stop refresher if no new statuses let statuses = response.value - let newStatuses = statuses.filter { !latestStatusIDs.contains($0.id) } + let newStatuses = statuses.filter { status in !latestStatusIDs.contains(where: { $0 == status.reblog?.id || $0 == status.id }) } if newStatuses.isEmpty { viewModel.didLoadLatest.send() @@ -113,10 +113,10 @@ extension HomeTimelineViewModel.LoadLatestState { viewModel.homeTimelineNavigationBarTitleViewModel.newPostsIncoming() } - var newRecords: [MastodonFeed] = newStatuses.map { - MastodonFeed.fromStatus(.fromEntity($0), kind: .home) - } viewModel.dataController.records = { + var newRecords: [MastodonFeed] = newStatuses.map { + MastodonFeed.fromStatus(.fromEntity($0), kind: .home) + } var oldRecords = viewModel.dataController.records for (i, record) in newRecords.enumerated() { if let index = oldRecords.firstIndex(where: { $0.status?.reblog?.id == record.id || $0.status?.id == record.id }) { diff --git a/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewController+DataSourceProvider.swift b/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewController+DataSourceProvider.swift index 42061d9bc..c6de4b6ad 100644 --- a/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewController+DataSourceProvider.swift @@ -39,12 +39,10 @@ extension NotificationTimelineViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - viewModel.dataController.update(status: status) - } - - func delete(status: MastodonStatus) { - viewModel.dataController.delete(status: status) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + Task { + await viewModel.loadLatest() + } } @MainActor diff --git a/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewModel+Diffable.swift b/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewModel+Diffable.swift index 0598ae006..2e3df3d2b 100644 --- a/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewModel+Diffable.swift +++ b/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewModel+Diffable.swift @@ -44,7 +44,7 @@ extension NotificationTimelineViewModel { } var snapshot = NSDiffableDataSourceSnapshot() snapshot.appendSections([.main]) - snapshot.appendItems(newItems, toSection: .main) + snapshot.appendItems(newItems.removingDuplicates(), toSection: .main) return snapshot }() diff --git a/Mastodon/Scene/Profile/Bookmark/BookmarkViewController+DataSourceProvider.swift b/Mastodon/Scene/Profile/Bookmark/BookmarkViewController+DataSourceProvider.swift index 642f3605b..e396e3aba 100644 --- a/Mastodon/Scene/Profile/Bookmark/BookmarkViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Profile/Bookmark/BookmarkViewController+DataSourceProvider.swift @@ -28,14 +28,8 @@ extension BookmarkViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - viewModel.dataController.update(status: status) - } - - func delete(status: MastodonStatus) { - viewModel.dataController.setRecords( - viewModel.dataController.records.filter { $0.id != status.id } - ) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + viewModel.dataController.update(status: status, intent: intent) } @MainActor diff --git a/Mastodon/Scene/Profile/FamiliarFollowers/FamiliarFollowersViewController.swift b/Mastodon/Scene/Profile/FamiliarFollowers/FamiliarFollowersViewController.swift index 5db16d519..ef8b2b229 100644 --- a/Mastodon/Scene/Profile/FamiliarFollowers/FamiliarFollowersViewController.swift +++ b/Mastodon/Scene/Profile/FamiliarFollowers/FamiliarFollowersViewController.swift @@ -103,11 +103,7 @@ extension FamiliarFollowersViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - assertionFailure("Not required") - } - - func delete(status: MastodonStatus) { + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { assertionFailure("Not required") } diff --git a/Mastodon/Scene/Profile/Favorite/FavoriteViewController+DataSourceProvider.swift b/Mastodon/Scene/Profile/Favorite/FavoriteViewController+DataSourceProvider.swift index ad2f06ef2..86a33622e 100644 --- a/Mastodon/Scene/Profile/Favorite/FavoriteViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Profile/Favorite/FavoriteViewController+DataSourceProvider.swift @@ -28,16 +28,10 @@ extension FavoriteViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - viewModel.dataController.update(status: status) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + viewModel.dataController.update(status: status, intent: intent) } - - func delete(status: MastodonStatus) { - viewModel.dataController.setRecords( - viewModel.dataController.records.filter { $0.id != status.id } - ) - } - + @MainActor private func indexPath(for cell: UITableViewCell) async -> IndexPath? { return tableView.indexPath(for: cell) diff --git a/Mastodon/Scene/Profile/Follower/FollowerListViewController.swift b/Mastodon/Scene/Profile/Follower/FollowerListViewController.swift index 404eae6fa..19ff325dc 100644 --- a/Mastodon/Scene/Profile/Follower/FollowerListViewController.swift +++ b/Mastodon/Scene/Profile/Follower/FollowerListViewController.swift @@ -154,11 +154,7 @@ extension FollowerListViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - assertionFailure("Not required") - } - - func delete(status: MastodonStatus) { + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { assertionFailure("Not required") } diff --git a/Mastodon/Scene/Profile/Following/FollowingListViewController.swift b/Mastodon/Scene/Profile/Following/FollowingListViewController.swift index f1bd37ae7..8db8178e5 100644 --- a/Mastodon/Scene/Profile/Following/FollowingListViewController.swift +++ b/Mastodon/Scene/Profile/Following/FollowingListViewController.swift @@ -150,11 +150,7 @@ extension FollowingListViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - assertionFailure("Not required") - } - - func delete(status: MastodonStatus) { + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { assertionFailure("Not required") } diff --git a/Mastodon/Scene/Profile/ProfileViewController.swift b/Mastodon/Scene/Profile/ProfileViewController.swift index f3999bff6..baa846bce 100644 --- a/Mastodon/Scene/Profile/ProfileViewController.swift +++ b/Mastodon/Scene/Profile/ProfileViewController.swift @@ -256,6 +256,12 @@ extension ProfileViewController { } .store(in: &disposeBag) + context.publisherService.statusPublishResult.sink { [weak self] result in + if case .success(.edit(let status)) = result { + self?.updateViewModelsWithDataControllers(status: .fromEntity(status.value), intent: .edit) + } + }.store(in: &disposeBag) + addChild(tabBarPagerController) tabBarPagerController.view.translatesAutoresizingMaskIntoConstraints = false view.addSubview(tabBarPagerController.view) @@ -800,7 +806,7 @@ extension ProfileViewController: ProfileHeaderViewControllerDelegate { preferredStyle: .alert ) - let unblockAction = UIAlertAction(title: L10n.Common.Controls.Friendship.unblockDomain(domain), style: .default) { [weak self] _ in + let unblockAction = UIAlertAction(title: L10n.Common.Controls.Actions.unblockDomain(domain), style: .default) { [weak self] _ in guard let self else { return } Task { _ = try await DataSourceFacade.responseToDomainBlockAction( @@ -973,11 +979,13 @@ extension ProfileViewController: DataSourceProvider { return nil } - func update(status: MastodonStatus) { - assertionFailure("Not required") + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + updateViewModelsWithDataControllers(status: status, intent: intent) } - func delete(status: MastodonStatus) { - assertionFailure("Not required") + func updateViewModelsWithDataControllers(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + viewModel.postsUserTimelineViewModel.dataController.update(status: status, intent: intent) + viewModel.repliesUserTimelineViewModel.dataController.update(status: status, intent: intent) + viewModel.mediaUserTimelineViewModel.dataController.update(status: status, intent: intent) } } diff --git a/Mastodon/Scene/Profile/Timeline/UserTimelineViewController+DataSourceProvider.swift b/Mastodon/Scene/Profile/Timeline/UserTimelineViewController+DataSourceProvider.swift index d161c60e9..8442be102 100644 --- a/Mastodon/Scene/Profile/Timeline/UserTimelineViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Profile/Timeline/UserTimelineViewController+DataSourceProvider.swift @@ -28,14 +28,10 @@ extension UserTimelineViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - viewModel.dataController.update(status: status) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + viewModel.dataController.update(status: status, intent: intent) } - - func delete(status: MastodonStatus) { - viewModel.dataController.deleteRecord(status) - } - + @MainActor private func indexPath(for cell: UITableViewCell) async -> IndexPath? { return tableView.indexPath(for: cell) diff --git a/Mastodon/Scene/Profile/UserList/FavoritedBy/FavoritedByViewController+DataSourceProvider.swift b/Mastodon/Scene/Profile/UserList/FavoritedBy/FavoritedByViewController+DataSourceProvider.swift index c027f39f3..cf2d20b3d 100644 --- a/Mastodon/Scene/Profile/UserList/FavoritedBy/FavoritedByViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Profile/UserList/FavoritedBy/FavoritedByViewController+DataSourceProvider.swift @@ -28,14 +28,10 @@ extension FavoritedByViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { assertionFailure("Not required") } - - func delete(status: MastodonStatus) { - assertionFailure("Not required") - } - + @MainActor private func indexPath(for cell: UITableViewCell) async -> IndexPath? { return tableView.indexPath(for: cell) diff --git a/Mastodon/Scene/Profile/UserList/RebloggedBy/RebloggedByViewController+DataSourceProvider.swift b/Mastodon/Scene/Profile/UserList/RebloggedBy/RebloggedByViewController+DataSourceProvider.swift index 7cd22c292..5b885aab3 100644 --- a/Mastodon/Scene/Profile/UserList/RebloggedBy/RebloggedByViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Profile/UserList/RebloggedBy/RebloggedByViewController+DataSourceProvider.swift @@ -29,11 +29,7 @@ extension RebloggedByViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - assertionFailure("Not required") - } - - func delete(status: MastodonStatus) { + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { assertionFailure("Not required") } diff --git a/Mastodon/Scene/Search/SearchDetail/SearchHistory/SearchHistoryViewController+DataSourceProvider.swift b/Mastodon/Scene/Search/SearchDetail/SearchHistory/SearchHistoryViewController+DataSourceProvider.swift index 1e1a03d5f..1a4bb65cd 100644 --- a/Mastodon/Scene/Search/SearchDetail/SearchHistory/SearchHistoryViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Search/SearchDetail/SearchHistory/SearchHistoryViewController+DataSourceProvider.swift @@ -29,14 +29,10 @@ extension SearchHistoryViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { assertionFailure("Not required") } - - func delete(status: MastodonStatus) { - assertionFailure("Not required") - } - + @MainActor private func indexPath(for cell: UICollectionViewCell) async -> IndexPath? { return collectionView.indexPath(for: cell) diff --git a/Mastodon/Scene/Search/SearchDetail/SearchResult/SearchResultViewController+DataSourceProvider.swift b/Mastodon/Scene/Search/SearchDetail/SearchResult/SearchResultViewController+DataSourceProvider.swift index 638ad9a15..ff1eab32b 100644 --- a/Mastodon/Scene/Search/SearchDetail/SearchResult/SearchResultViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Search/SearchDetail/SearchResult/SearchResultViewController+DataSourceProvider.swift @@ -33,12 +33,8 @@ extension SearchResultViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { - viewModel.dataController.update(status: status) - } - - func delete(status: MastodonStatus) { - viewModel.dataController.deleteRecord(status) + func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + viewModel.dataController.update(status: status, intent: intent) } @MainActor diff --git a/Mastodon/Scene/Share/ViewModel/ListBatchFetchViewModel.swift b/Mastodon/Scene/Share/ViewModel/ListBatchFetchViewModel.swift index 78eaf6ae3..4aae9d0a6 100644 --- a/Mastodon/Scene/Share/ViewModel/ListBatchFetchViewModel.swift +++ b/Mastodon/Scene/Share/ViewModel/ListBatchFetchViewModel.swift @@ -14,7 +14,7 @@ final class ListBatchFetchViewModel { var disposeBag = Set() // timer running on `common` mode - let timerPublisher = Timer.publish(every: 1.0, on: .main, in: .common) + let timerPublisher = Timer.publish(every: 30.0, on: .main, in: .common) .autoconnect() .share() .eraseToAnyPublisher() diff --git a/Mastodon/Scene/Thread/MastodonStatusThreadViewModel+State.swift b/Mastodon/Scene/Thread/MastodonStatusThreadViewModel+State.swift new file mode 100644 index 000000000..4a00165da --- /dev/null +++ b/Mastodon/Scene/Thread/MastodonStatusThreadViewModel+State.swift @@ -0,0 +1,165 @@ +// Copyright © 2024 Mastodon gGmbH. All rights reserved. + +import Foundation +import MastodonSDK + +extension MastodonStatusThreadViewModel { + // Bookmark + func handleBookmark(_ status: MastodonStatus) { + ancestors = handleBookmark(status, items: ancestors) + descendants = handleBookmark(status, items: descendants) + } + + private func handleBookmark(_ status: MastodonStatus, items: [StatusItem]) -> [StatusItem] { + var newRecords = Array(items) + guard let index = newRecords.firstIndex(where: { $0.mastodonStatus?.id == status.id }) else { + return items + } + var newRecord = newRecords[index] + newRecord.mastodonStatus = status + newRecords[index] = newRecord + return newRecords + } + + // Favorite + func handleFavorite(_ status: MastodonStatus) { + ancestors = handleFavorite(status, items: ancestors) + descendants = handleFavorite(status, items: descendants) + } + + private func handleFavorite(_ status: MastodonStatus, items: [StatusItem]) -> [StatusItem] { + var newRecords = Array(items) + guard let index = newRecords.firstIndex(where: { $0.mastodonStatus?.id == status.id }) else { + return items + } + var newRecord = newRecords[index] + newRecord.mastodonStatus = status + newRecords[index] = newRecord + return newRecords + } + + // Reblog + func handleReblog(_ status: MastodonStatus, _ isReblogged: Bool) { + ancestors = handleReblog(status, isReblogged, items: ancestors) + descendants = handleReblog(status, isReblogged, items: descendants) + } + + private func handleReblog(_ status: MastodonStatus, _ isReblogged: Bool, items: [StatusItem]) -> [StatusItem] { + var newRecords = Array(items) + + switch isReblogged { + case true: + let index: Int + if let idx = newRecords.firstIndex(where: { $0.mastodonStatus?.reblog?.id == status.reblog?.id }) { + index = idx + } else if let idx = newRecords.firstIndex(where: { $0.mastodonStatus?.id == status.reblog?.id }) { + index = idx + } else { + logger.warning("\(Self.entryNotFoundMessage)") + return newRecords + } + var newRecord = newRecords[index] + newRecord.mastodonStatus = status.inheritSensitivityToggled(from: newRecord.mastodonStatus) + newRecords[index] = newRecord + case false: + let index: Int + if let idx = newRecords.firstIndex(where: { $0.mastodonStatus?.reblog?.id == status.id }) { + index = idx + } else if let idx = newRecords.firstIndex(where: { $0.mastodonStatus?.id == status.id }) { + index = idx + } else { + logger.warning("\(Self.entryNotFoundMessage)") + return newRecords + } + var newRecord = newRecords[index] + newRecord.mastodonStatus = status.inheritSensitivityToggled(from: newRecord.mastodonStatus) + newRecords[index] = newRecord + } + + return newRecords + } + + // Sensitive + func handleSensitive(_ status: MastodonStatus, _ isVisible: Bool) { + ancestors = handleSensitive(status, isVisible, ancestors) + descendants = handleSensitive(status, isVisible, descendants) + } + + private func handleSensitive(_ status: MastodonStatus, _ isVisible: Bool, _ items: [StatusItem]) -> [StatusItem] { + var newRecords = Array(items) + guard let index = newRecords.firstIndex(where: { $0.mastodonStatus?.id == status.id }) else { + return items + } + var newRecord = newRecords[index] + newRecord.mastodonStatus = status + newRecords[index] = newRecord + return newRecords + } + + // Edit + func handleEdit(_ status: MastodonStatus) { + ancestors = handleEdit(status, items: ancestors) + descendants = handleEdit(status, items: descendants) + } + + private func handleEdit(_ status: MastodonStatus, items: [StatusItem]) -> [StatusItem] { + var newRecords = Array(items) + guard let index = newRecords.firstIndex(where: { $0.mastodonStatus?.id == status.id }) else { + return items + } + var newRecord = newRecords[index] + newRecord.mastodonStatus = status + newRecords[index] = newRecord + return newRecords + } + + // Delete + func handleDelete(_ status: MastodonStatus) { + ancestors = handleDelete(status, ancestors) + descendants = handleDelete(status, descendants) + } + + private func handleDelete(_ status: MastodonStatus, _ items: [StatusItem]) -> [StatusItem] { + var newRecords = Array(items) + newRecords.removeAll(where: { $0.mastodonStatus?.id == status.id }) + return newRecords + } +} + + +private extension StatusItem { + var mastodonStatus: MastodonStatus? { + get { + switch self { + case .feed(let record): + return record.status + case .feedLoader(let record): + return record.status + case .status(let record): + return record + case .thread(let thread): + return thread.record + case .topLoader, .bottomLoader: + return nil + } + } + + set { + guard let status = newValue else { return } + switch self { + case .feed(let record): + self = .feed(record: .fromStatus(status, kind: record.kind)) + case .feedLoader(let record): + self = .feedLoader(record: .fromStatus(status, kind: record.kind)) + case .status: + self = .status(record: status) + case let .thread(thread): + var newThread = thread + newThread.record = status + self = .thread(newThread) + case .topLoader, .bottomLoader: + break + } + } + } +} diff --git a/Mastodon/Scene/Thread/MastodonStatusThreadViewModel.swift b/Mastodon/Scene/Thread/MastodonStatusThreadViewModel.swift index 34151e4a6..2e096da9f 100644 --- a/Mastodon/Scene/Thread/MastodonStatusThreadViewModel.swift +++ b/Mastodon/Scene/Thread/MastodonStatusThreadViewModel.swift @@ -13,9 +13,12 @@ import CoreDataStack import MastodonSDK import MastodonCore import MastodonMeta +import os.log final class MastodonStatusThreadViewModel { - + let logger = Logger(subsystem: "MastodonStatusThreadViewModel", category: "Data") + static let entryNotFoundMessage = "Failed to find suitable record. Depending on the context this might result in errors (data not being updated) or can be discarded (e.g. when there are mixed data sources where an entry might or might not exist)." + var disposeBag = Set() // input diff --git a/Mastodon/Scene/Thread/ThreadViewController+DataSourceProvider.swift b/Mastodon/Scene/Thread/ThreadViewController+DataSourceProvider.swift index f3373340b..f8b972440 100644 --- a/Mastodon/Scene/Thread/ThreadViewController+DataSourceProvider.swift +++ b/Mastodon/Scene/Thread/ThreadViewController+DataSourceProvider.swift @@ -29,121 +29,63 @@ extension ThreadViewController: DataSourceProvider { } } - func update(status: MastodonStatus) { + func update(status _status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + let status = _status.reblog ?? _status + if case MastodonStatus.UpdateIntent.delete = intent { + return handleDelete(status) + } + switch viewModel.root { case let .root(context): if context.status.id == status.id { viewModel.root = .root(context: .init(status: status)) } else { - handle(status: status) + handleUpdate(status: status, viewModel: viewModel.mastodonStatusThreadViewModel, intent: intent) } case let .reply(context): if context.status.id == status.id { viewModel.root = .reply(context: .init(status: status)) } else { - handle(status: status) + handleUpdate(status: status, viewModel: viewModel.mastodonStatusThreadViewModel, intent: intent) } case let .leaf(context): if context.status.id == status.id { viewModel.root = .leaf(context: .init(status: status)) } else { - handle(status: status) + handleUpdate(status: status, viewModel: viewModel.mastodonStatusThreadViewModel, intent: intent) } case .none: assertionFailure("This should not have happened") } } - - private func handle(status: MastodonStatus) { - viewModel.mastodonStatusThreadViewModel.ancestors.handleUpdate(status: status, for: viewModel) - viewModel.mastodonStatusThreadViewModel.descendants.handleUpdate(status: status, for: viewModel) - } - - func delete(status: MastodonStatus) { + + private func handleDelete(_ status: MastodonStatus) { if viewModel.root?.record.id == status.id { viewModel.root = nil viewModel.onDismiss.send(status) } - viewModel.mastodonStatusThreadViewModel.ancestors.handleDelete(status: status, for: viewModel) - viewModel.mastodonStatusThreadViewModel.descendants.handleDelete(status: status, for: viewModel) + viewModel.mastodonStatusThreadViewModel.handleDelete(status) } @MainActor private func indexPath(for cell: UITableViewCell) async -> IndexPath? { return tableView.indexPath(for: cell) } -} - -private extension [StatusItem] { - mutating func handleUpdate(status: MastodonStatus, for viewModel: ThreadViewModel) { - for (index, ancestor) in enumerated() { - switch ancestor { - case let .feed(record): - if record.status?.id == status.id { - self[index] = .feed(record: .fromStatus(status, kind: record.kind)) - } - case let.feedLoader(record): - if record.status?.id == status.id { - self[index] = .feedLoader(record: .fromStatus(status, kind: record.kind)) - } - case let .status(record): - if record.id == status.id { - self[index] = .status(record: status) - } - case let .thread(thread): - switch thread { - case let .root(context): - if context.status.id == status.id { - self[index] = .thread(.root(context: .init(status: status))) - } - case let .reply(context): - if context.status.id == status.id { - self[index] = .thread(.reply(context: .init(status: status))) - } - case let .leaf(context): - if context.status.id == status.id { - self[index] = .thread(.leaf(context: .init(status: status))) - } - } - case .bottomLoader, .topLoader: - break - } - } - } - mutating func handleDelete(status: MastodonStatus, for viewModel: ThreadViewModel) { - for (index, ancestor) in enumerated() { - switch ancestor { - case let .feed(record): - if record.status?.id == status.id { - self.remove(at: index) - } - case let.feedLoader(record): - if record.status?.id == status.id { - self.remove(at: index) - } - case let .status(record): - if record.id == status.id { - self.remove(at: index) - } - case let .thread(thread): - switch thread { - case let .root(context): - if context.status.id == status.id { - self.remove(at: index) - } - case let .reply(context): - if context.status.id == status.id { - self.remove(at: index) - } - case let .leaf(context): - if context.status.id == status.id { - self.remove(at: index) - } - } - case .bottomLoader, .topLoader: - break - } + private func handleUpdate(status: MastodonStatus, viewModel: MastodonStatusThreadViewModel, intent: MastodonStatus.UpdateIntent) { + switch intent { + case .bookmark: + viewModel.handleBookmark(status) + case let .reblog(isReblogged): + viewModel.handleReblog(status, isReblogged) + case .favorite: + viewModel.handleFavorite(status) + case let .toggleSensitive(isVisible): + viewModel.handleSensitive(status, isVisible) + case .edit: + viewModel.handleEdit(status) + case .delete: + break // this case has already been handled } } } diff --git a/Mastodon/Scene/Thread/ThreadViewController.swift b/Mastodon/Scene/Thread/ThreadViewController.swift index ed8808b32..8912df753 100644 --- a/Mastodon/Scene/Thread/ThreadViewController.swift +++ b/Mastodon/Scene/Thread/ThreadViewController.swift @@ -82,7 +82,7 @@ extension ThreadViewController { viewModel.onEdit .receive(on: DispatchQueue.main) .sink(receiveValue: { [weak self] status in - self?.navigationController?.notifyChildrenAboutStatusUpdate(status) + self?.navigationController?.notifyChildrenAboutStatusEdit(status) }) .store(in: &disposeBag) @@ -202,13 +202,13 @@ extension ThreadViewController: StatusTableViewControllerNavigateable { extension UINavigationController { func notifyChildrenAboutStatusDeletion(_ status: MastodonStatus) { viewControllers.compactMap { $0 as? DataSourceProvider }.forEach { provider in - provider?.delete(status: status ) + provider?.update(status: status, intent: .delete) } } - func notifyChildrenAboutStatusUpdate(_ status: MastodonStatus) { + func notifyChildrenAboutStatusEdit(_ status: MastodonStatus) { viewControllers.compactMap { $0 as? DataSourceProvider }.forEach { provider in - provider?.update(status: status ) + provider?.update(status: status, intent: .edit) } } } diff --git a/MastodonIntent/hy.lproj/Intents.strings b/MastodonIntent/hy.lproj/Intents.strings index 6877490ba..ca95b1316 100644 --- a/MastodonIntent/hy.lproj/Intents.strings +++ b/MastodonIntent/hy.lproj/Intents.strings @@ -12,15 +12,15 @@ "RHxKOw" = "Send Post with text content"; -"RxSqsb" = "Post"; +"RxSqsb" = "Գրառում"; "WCIR3D" = "Post ${content} on Mastodon"; -"ZKJSNu" = "Post"; +"ZKJSNu" = "Գրառում"; "ZS1XaK" = "${content}"; -"ZbSjzC" = "Visibility"; +"ZbSjzC" = "Տեսանելիութիւն"; "Zo4jgJ" = "Post Visibility"; @@ -34,7 +34,7 @@ "dUyuGg" = "Post on Mastodon"; -"dYQ5NN" = "Public"; +"dYQ5NN" = "Հրապարակային"; "ehFLjY" = "Followers Only"; diff --git a/MastodonSDK/Sources/MastodonCore/DataController/FeedDataController.swift b/MastodonSDK/Sources/MastodonCore/DataController/FeedDataController.swift index ebc511d4d..6bf2dcf05 100644 --- a/MastodonSDK/Sources/MastodonCore/DataController/FeedDataController.swift +++ b/MastodonSDK/Sources/MastodonCore/DataController/FeedDataController.swift @@ -2,8 +2,11 @@ import Foundation import UIKit import Combine import MastodonSDK +import os.log final public class FeedDataController { + private let logger = Logger(subsystem: "FeedDataController", category: "Data") + private static let entryNotFoundMessage = "Failed to find suitable record. Depending on the context this might result in errors (data not being updated) or can be discarded (e.g. when there are mixed data sources where an entry might or might not exist)." @Published public var records: [MastodonFeed] = [] @@ -17,7 +20,7 @@ final public class FeedDataController { public func loadInitial(kind: MastodonFeed.Kind) { Task { - records = try await load(kind: kind, sinceId: nil) + records = try await load(kind: kind, maxID: nil) } } @@ -26,64 +29,152 @@ final public class FeedDataController { guard let lastId = records.last?.status?.id else { return loadInitial(kind: kind) } - - records = try await load(kind: kind, sinceId: lastId) + + records += try await load(kind: kind, maxID: lastId) } } - public func update(status: MastodonStatus) { + @MainActor + public func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + switch intent { + case .delete: + delete(status) + case .edit: + updateEdited(status) + case let .bookmark(isBookmarked): + updateBookmarked(status, isBookmarked) + case let .favorite(isFavorited): + updateFavorited(status, isFavorited) + case let .reblog(isReblogged): + updateReblogged(status, isReblogged) + case let .toggleSensitive(isVisible): + updateSensitive(status, isVisible) + } + } + + @MainActor + private func delete(_ status: MastodonStatus) { + records.removeAll { $0.id == status.id } + } + + @MainActor + private func updateEdited(_ status: MastodonStatus) { var newRecords = Array(records) - for (i, record) in newRecords.enumerated() { - if record.status?.id == status.id { - newRecords[i] = .fromStatus(status, kind: record.kind) - } else if let reblog = status.reblog, reblog.id == record.status?.id { - newRecords[i] = .fromStatus(status, kind: record.kind) - } else if let reblog = record.status?.reblog, reblog.id == status.id { - // Handle reblogged state - let isRebloggedByAnyOne: Bool = records[i].status!.reblog != nil - - let newStatus: MastodonStatus - if isRebloggedByAnyOne { - // if status was previously reblogged by me: remove reblogged status - if records[i].status!.entity.reblogged == true && status.entity.reblogged == false { - newStatus = .fromEntity(status.entity) - } else { - newStatus = .fromEntity(records[i].status!.entity) - } - - } else { - newStatus = .fromEntity(status.entity) - } - - newStatus.isSensitiveToggled = status.isSensitiveToggled - newStatus.reblog = isRebloggedByAnyOne ? .fromEntity(status.entity) : nil - - newRecords[i] = .fromStatus(newStatus, kind: record.kind) - - } else if let reblog = record.status?.reblog, reblog.id == status.reblog?.id { - // Handle re-reblogged state - newRecords[i] = .fromStatus(status, kind: record.kind) + guard let index = newRecords.firstIndex(where: { $0.id == status.id }) else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + let existingRecord = newRecords[index] + let newStatus = status.inheritSensitivityToggled(from: existingRecord.status) + newRecords[index] = .fromStatus(newStatus, kind: existingRecord.kind) + records = newRecords + } + + @MainActor + private func updateBookmarked(_ status: MastodonStatus, _ isBookmarked: Bool) { + var newRecords = Array(records) + guard let index = newRecords.firstIndex(where: { $0.id == status.id }) else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + let existingRecord = newRecords[index] + let newStatus = status.inheritSensitivityToggled(from: existingRecord.status) + newRecords[index] = .fromStatus(newStatus, kind: existingRecord.kind) + records = newRecords + } + + @MainActor + private func updateFavorited(_ status: MastodonStatus, _ isFavorited: Bool) { + var newRecords = Array(records) + if let index = newRecords.firstIndex(where: { $0.id == status.id }) { + // Replace old status entity + let existingRecord = newRecords[index] + let newStatus = status.inheritSensitivityToggled(from: existingRecord.status).withOriginal(status: existingRecord.status?.originalStatus) + newRecords[index] = .fromStatus(newStatus, kind: existingRecord.kind) + } else if let index = newRecords.firstIndex(where: { $0.status?.reblog?.id == status.id }) { + // Replace reblogged entity of old "parent" status + let newStatus: MastodonStatus + if let existingEntity = newRecords[index].status?.entity { + newStatus = .fromEntity(existingEntity) + newStatus.originalStatus = newRecords[index].status?.originalStatus + newStatus.reblog = status + } else { + newStatus = status } + newRecords[index] = .fromStatus(newStatus, kind: newRecords[index].kind) + } else { + logger.warning("\(Self.entryNotFoundMessage)") } records = newRecords } - public func delete(status: MastodonStatus) { - self.records.removeAll { $0.id == status.id } + @MainActor + private func updateReblogged(_ status: MastodonStatus, _ isReblogged: Bool) { + var newRecords = Array(records) + + switch isReblogged { + case true: + let index: Int + if let idx = newRecords.firstIndex(where: { $0.status?.reblog?.id == status.reblog?.id }) { + index = idx + } else if let idx = newRecords.firstIndex(where: { $0.id == status.reblog?.id }) { + index = idx + } else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + let existingRecord = newRecords[index] + newRecords[index] = .fromStatus(status.withOriginal(status: existingRecord.status), kind: existingRecord.kind) + case false: + let index: Int + if let idx = newRecords.firstIndex(where: { $0.status?.reblog?.id == status.id }) { + index = idx + } else if let idx = newRecords.firstIndex(where: { $0.status?.id == status.id }) { + index = idx + } else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + let existingRecord = newRecords[index] + let newStatus = existingRecord.status?.originalStatus ?? status.inheritSensitivityToggled(from: existingRecord.status) + newRecords[index] = .fromStatus(newStatus, kind: existingRecord.kind) + } + records = newRecords + } + + @MainActor + private func updateSensitive(_ status: MastodonStatus, _ isVisible: Bool) { + var newRecords = Array(records) + if let index = newRecords.firstIndex(where: { $0.status?.reblog?.id == status.id }), let existingEntity = newRecords[index].status?.entity { + let existingRecord = newRecords[index] + let newStatus: MastodonStatus = .fromEntity(existingEntity) + newStatus.reblog = status + newRecords[index] = .fromStatus(newStatus, kind: existingRecord.kind) + } else if let index = newRecords.firstIndex(where: { $0.id == status.id }), let existingEntity = newRecords[index].status?.entity { + let existingRecord = newRecords[index] + let newStatus: MastodonStatus = .fromEntity(existingEntity) + .inheritSensitivityToggled(from: status) + newRecords[index] = .fromStatus(newStatus, kind: existingRecord.kind) + } else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + records = newRecords } } private extension FeedDataController { - func load(kind: MastodonFeed.Kind, sinceId: MastodonStatus.ID?) async throws -> [MastodonFeed] { + func load(kind: MastodonFeed.Kind, maxID: MastodonStatus.ID?) async throws -> [MastodonFeed] { switch kind { - case .home: - await context.authenticationService.authenticationServiceProvider.fetchAccounts(apiService: context.apiService) - return try await context.apiService.homeTimeline(sinceID: sinceId, authenticationBox: authContext.mastodonAuthenticationBox) - .value.map { .fromStatus(.fromEntity($0), kind: .home) } - case .notificationAll: - return try await getFeeds(with: .everything) - case .notificationMentions: - return try await getFeeds(with: .mentions) + case .home: + await context.authenticationService.authenticationServiceProvider.fetchAccounts(apiService: context.apiService) + return try await context.apiService.homeTimeline(maxID: maxID, authenticationBox: authContext.mastodonAuthenticationBox) + .value.map { .fromStatus(.fromEntity($0), kind: .home) } + case .notificationAll: + return try await getFeeds(with: .everything) + case .notificationMentions: + return try await getFeeds(with: .mentions) + } } diff --git a/MastodonSDK/Sources/MastodonCore/FetchedResultsController/StatusDataController.swift b/MastodonSDK/Sources/MastodonCore/FetchedResultsController/StatusDataController.swift index 13ae313a7..eb6001b42 100644 --- a/MastodonSDK/Sources/MastodonCore/FetchedResultsController/StatusDataController.swift +++ b/MastodonSDK/Sources/MastodonCore/FetchedResultsController/StatusDataController.swift @@ -3,8 +3,12 @@ import Combine import CoreData import CoreDataStack import MastodonSDK +import os.log public final class StatusDataController { + private let logger = Logger(subsystem: "StatusDataController", category: "Data") + private static let entryNotFoundMessage = "Failed to find suitable record. Depending on the context this might result in errors (data not being updated) or can be discarded (e.g. when there are mixed data sources where an entry might or might not exist)." + @MainActor @Published public private(set) var records: [MastodonStatus] = [] @@ -35,39 +39,118 @@ public final class StatusDataController { } @MainActor - public func update(status: MastodonStatus) { + public func update(status: MastodonStatus, intent: MastodonStatus.UpdateIntent) { + switch intent { + case .delete: + deleteRecord(status) + case .edit: + updateEdited(status) + case let .bookmark(isBookmarked): + updateBookmarked(status, isBookmarked) + case let .favorite(isFavorited): + updateFavorited(status, isFavorited) + case let .reblog(isReblogged): + updateReblogged(status, isReblogged) + case let .toggleSensitive(isVisible): + updateSensitive(status, isVisible) + } + } + + @MainActor + private func updateEdited(_ status: MastodonStatus) { var newRecords = Array(records) - for (i, record) in newRecords.enumerated() { - if record.id == status.id { - newRecords[i] = status - } else if let reblog = status.reblog, reblog.id == record.id { - newRecords[i] = status - } else if let reblog = record.reblog, reblog.id == status.id { - // Handle reblogged state - let isRebloggedByAnyOne: Bool = records[i].reblog != nil - - let newStatus: MastodonStatus - if isRebloggedByAnyOne { - // if status was previously reblogged by me: remove reblogged status - if records[i].entity.reblogged == true && status.entity.reblogged == false { - newStatus = .fromEntity(status.entity) - } else { - newStatus = .fromEntity(records[i].entity) - } - - } else { - newStatus = .fromEntity(status.entity) - } - - newStatus.isSensitiveToggled = status.isSensitiveToggled - newStatus.reblog = isRebloggedByAnyOne ? .fromEntity(status.entity) : nil - - newRecords[i] = newStatus - } else if let reblog = record.reblog, reblog.id == status.reblog?.id { - // Handle re-reblogged state - newRecords[i] = status - } + guard let index = newRecords.firstIndex(where: { $0.id == status.id }) else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + newRecords[index] = status.inheritSensitivityToggled(from: newRecords[index]) + records = newRecords + } + + @MainActor + private func updateBookmarked(_ status: MastodonStatus, _ isBookmarked: Bool) { + var newRecords = Array(records) + guard let index = newRecords.firstIndex(where: { $0.id == status.id }) else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + newRecords[index] = status.inheritSensitivityToggled(from: newRecords[index]) + records = newRecords + } + + @MainActor + private func updateFavorited(_ status: MastodonStatus, _ isFavorited: Bool) { + var newRecords = Array(records) + if let index = newRecords.firstIndex(where: { $0.id == status.id }) { + // Replace old status entity + let existingRecord = newRecords[index] + let newStatus = status.inheritSensitivityToggled(from: existingRecord) + .withOriginal(status: existingRecord) + newRecords[index] = newStatus + } else if let index = newRecords.firstIndex(where: { $0.reblog?.id == status.id }) { + // Replace reblogged entity of old "parent" status + let existingRecord = newRecords[index] + let newStatus = status.inheritSensitivityToggled(from: existingRecord) + .withOriginal(status: existingRecord) + newStatus.reblog = status + newRecords[index] = newStatus + } else { + logger.warning("\(Self.entryNotFoundMessage)") } records = newRecords } + + @MainActor + private func updateReblogged(_ status: MastodonStatus, _ isReblogged: Bool) { + var newRecords = Array(records) + + switch isReblogged { + case true: + let index: Int + if let idx = newRecords.firstIndex(where: { $0.reblog?.id == status.reblog?.id }) { + index = idx + } else if let idx = newRecords.firstIndex(where: { $0.id == status.reblog?.id }) { + index = idx + } else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + let existingStatus = newRecords[index] + newRecords[index] = status.withOriginal(status: existingStatus) + case false: + let index: Int + if let idx = newRecords.firstIndex(where: { $0.reblog?.id == status.id }) { + index = idx + } else if let idx = newRecords.firstIndex(where: { $0.id == status.id }) { + index = idx + } else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + let existingRecord = newRecords[index] + let newStatus = existingRecord.originalStatus ?? status.inheritSensitivityToggled(from: existingRecord) + newRecords[index] = newStatus + } + + records = newRecords + } + + @MainActor + private func updateSensitive(_ status: MastodonStatus, _ isVisible: Bool) { + var newRecords = Array(records) + if let index = newRecords.firstIndex(where: { $0.reblog?.id == status.id }) { + let newStatus: MastodonStatus = .fromEntity(newRecords[index].entity) + newStatus.reblog = status + newRecords[index] = newStatus + } else if let index = newRecords.firstIndex(where: { $0.id == status.id }) { + let newStatus: MastodonStatus = .fromEntity(newRecords[index].entity) + .inheritSensitivityToggled(from: status) + newRecords[index] = newStatus + } else { + logger.warning("\(Self.entryNotFoundMessage)") + return + } + records = newRecords + } + } diff --git a/MastodonSDK/Sources/MastodonCore/Service/API/APIService+Status+History.swift b/MastodonSDK/Sources/MastodonCore/Service/API/APIService+Status+History.swift index 46ec1b9d4..3ce5905ea 100644 --- a/MastodonSDK/Sources/MastodonCore/Service/API/APIService+Status+History.swift +++ b/MastodonSDK/Sources/MastodonCore/Service/API/APIService+Status+History.swift @@ -50,13 +50,6 @@ extension APIService { domain: domain, authorization: authorization).singleOutput() - _ = try await Mastodon.API.Statuses.editHistory( - forStatusID: statusID, - session: session, - domain: domain, - authorization: authorization - ).singleOutput() - return response } } diff --git a/MastodonSDK/Sources/MastodonCore/Service/AuthenticationService.swift b/MastodonSDK/Sources/MastodonCore/Service/AuthenticationService.swift index d2a0b2ed1..dde021705 100644 --- a/MastodonSDK/Sources/MastodonCore/Service/AuthenticationService.swift +++ b/MastodonSDK/Sources/MastodonCore/Service/AuthenticationService.swift @@ -95,6 +95,7 @@ public final class AuthenticationService: NSObject { super.init() $mastodonAuthenticationBoxes + .throttle(for: 3, scheduler: DispatchQueue.main, latest: true) .sink { [weak self] boxes in Task { [weak self] in for authBox in boxes { diff --git a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift index fae0ddc50..71fbac7c4 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift +++ b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift @@ -206,9 +206,9 @@ public enum L10n { public enum Friendship { /// Block public static let block = L10n.tr("Localizable", "Common.Controls.Friendship.Block", fallback: "Block") - /// Block %@ + /// Block domain %@ public static func blockDomain(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Friendship.BlockDomain", String(describing: p1), fallback: "Block %@") + return L10n.tr("Localizable", "Common.Controls.Friendship.BlockDomain", String(describing: p1), fallback: "Block domain %@") } /// Blocked public static let blocked = L10n.tr("Localizable", "Common.Controls.Friendship.Blocked", fallback: "Blocked") @@ -243,10 +243,6 @@ public enum L10n { /// Unblock public static let unblock = L10n.tr("Localizable", "Common.Controls.Friendship.Unblock", fallback: "Unblock") /// Unblock %@ - public static func unblockDomain(_ p1: Any) -> String { - return L10n.tr("Localizable", "Common.Controls.Friendship.UnblockDomain", String(describing: p1), fallback: "Unblock %@") - } - /// Unblock %@ public static func unblockUser(_ p1: Any) -> String { return L10n.tr("Localizable", "Common.Controls.Friendship.UnblockUser", String(describing: p1), fallback: "Unblock %@") } @@ -960,8 +956,12 @@ public enum L10n { } public enum RelationshipActionAlert { public enum ConfirmBlockDomain { - /// Block Domain - public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title", fallback: "Block Domain") + /// Confirm to block domain %@ + public static func message(_ p1: Any) -> String { + return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message", String(describing: p1), fallback: "Confirm to block domain %@") + } + /// Block domain + public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title", fallback: "Block domain") } public enum ConfirmBlockUser { /// Confirm to block %@ @@ -996,8 +996,8 @@ public enum L10n { public static func message(_ p1: Any) -> String { return L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message", String(describing: p1), fallback: "Confirm to unblock domain %@") } - /// Unblock Domain - public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title", fallback: "Unblock Domain") + /// Unblock domain + public static let title = L10n.tr("Localizable", "Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title", fallback: "Unblock domain") } public enum ConfirmUnblockUser { /// Confirm to unblock %@ diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.strings index bd1bfc949..ed725a9d5 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/Base.lproj/Localizable.strings @@ -70,7 +70,7 @@ Please check your internet connection."; "Common.Controls.Actions.UnblockDomain" = "Unblock %@"; "Common.Controls.Actions.Unfollow" = "Unfollow %@"; "Common.Controls.Friendship.Block" = "Block"; -"Common.Controls.Friendship.BlockDomain" = "Block %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Block %@"; "Common.Controls.Friendship.Blocked" = "Blocked"; "Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; @@ -86,7 +86,6 @@ Please check your internet connection."; "Common.Controls.Friendship.ShowReblogs" = "Show Reblogs"; "Common.Controls.Friendship.Unblock" = "Unblock"; "Common.Controls.Friendship.UnblockUser" = "Unblock %@"; -"Common.Controls.Friendship.UnblockDomain" = "Unblock %@"; "Common.Controls.Friendship.Unmute" = "Unmute"; "Common.Controls.Friendship.UnmuteUser" = "Unmute %@"; "Common.Controls.Keyboard.Common.ComposeNewPost" = "Compose New Post"; @@ -336,17 +335,18 @@ uploaded to Mastodon."; "Scene.Profile.Fields.Verified.Long" = "Ownership of this link was checked on %@"; "Scene.Profile.Fields.Verified.Short" = "Verified on %@"; "Scene.Profile.Header.FollowsYou" = "Follows You"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirm to block %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Block Account"; -"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block Domain"; -"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; -"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock Domain"; "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.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Confirm to unblock %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Unblock Account"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confirm to unmute %@"; @@ -568,4 +568,4 @@ uploaded to Mastodon."; "Widget.MultipleFollowers.ConfigurationDescription" = "Show number of followers for multiple accounts."; "Widget.MultipleFollowers.ConfigurationDisplayName" = "Multiple followers"; "Widget.MultipleFollowers.MockUser.AccountName" = "another@follower.social"; -"Widget.MultipleFollowers.MockUser.DisplayName" = "Another follower"; +"Widget.MultipleFollowers.MockUser.DisplayName" = "Another follower"; \ No newline at end of file diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings index 40cadeb95..72fa3802c 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings @@ -70,9 +70,10 @@ "Common.Controls.Actions.UnblockDomain" = "رفع الحظر عن %@"; "Common.Controls.Actions.Unfollow" = "ألغِ متابعة %@"; "Common.Controls.Friendship.Block" = "حظر"; -"Common.Controls.Friendship.BlockDomain" = "حظر %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "حَظرُ %@"; "Common.Controls.Friendship.Blocked" = "محظور"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "تَحريرُ المَعلُومات"; "Common.Controls.Friendship.Follow" = "مُتابَعَة"; "Common.Controls.Friendship.Following" = "مُتابَع"; @@ -334,6 +335,8 @@ "Scene.Profile.Fields.Verified.Long" = "تمَّ التَّحقق مِن مِلكية هذا الرابِطِ بِتاريخ %@"; "Scene.Profile.Fields.Verified.Short" = "تمَّ التَّحقق بِتاريخ %@"; "Scene.Profile.Header.FollowsYou" = "يُتابِعُك"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "تأكيدُ حَظر %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "حَظرُ الحِساب"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "التأكيد لِإخفاء إعادات التدوين"; @@ -342,6 +345,8 @@ "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "كَتمُ الحِساب"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "التأكيد لِإظهار إعادات التدوين"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "إظهار إعادات التدوين"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "تأكيدُ رَفع الحَظرِ عَن %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "رَفعُ الحَظرِ عَنِ الحِساب"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "أكِّد لرفع الكتمْ عن %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/be.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/be.lproj/Localizable.strings index 7716d67e3..2d524cc85 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/be.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/be.lproj/Localizable.strings @@ -70,9 +70,10 @@ "Common.Controls.Actions.UnblockDomain" = "Разблакіраваць %@"; "Common.Controls.Actions.Unfollow" = "Адпісацца ад %@"; "Common.Controls.Friendship.Block" = "Заблакіраваць"; -"Common.Controls.Friendship.BlockDomain" = "Заблакіраваць %@"; +"Common.Controls.Friendship.BlockDomain" = "Заблакіраваць дамен %@"; "Common.Controls.Friendship.BlockUser" = "Заблакіраваць %@"; "Common.Controls.Friendship.Blocked" = "Заблакіраваны"; +"Common.Controls.Friendship.DomainBlocked" = "Дамен заблакіраваны"; "Common.Controls.Friendship.EditInfo" = "Рэдагаваць інфармацыю"; "Common.Controls.Friendship.Follow" = "Падпісацца"; "Common.Controls.Friendship.Following" = "Падпісаны"; @@ -334,6 +335,8 @@ "Scene.Profile.Fields.Verified.Long" = "Права ўласнасці на гэтую спасылку праверана %@"; "Scene.Profile.Fields.Verified.Short" = "Спраўджана %@"; "Scene.Profile.Header.FollowsYou" = "Падпісаны(-а) на вас"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Заблакіраваць дамен %@?"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Заблакіраваць дамен"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Заблакіраваць %@?"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Заблакіраваць уліковы запіс"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Пацвердзіце, каб схаваць пашырэнні"; @@ -342,6 +345,8 @@ "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Ігнараваць уліковы запіс"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Пацвердзіце, каб паказаць пашырэнні"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Паказаць пашырэнні"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Разблакіраваць дамен %@?"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.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 a2b259084..9babb81f5 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings @@ -70,9 +70,10 @@ Comprova la connexió a Internet."; "Common.Controls.Actions.UnblockDomain" = "Desbloca %@"; "Common.Controls.Actions.Unfollow" = "Deixa de seguir %@"; "Common.Controls.Friendship.Block" = "Bloca"; -"Common.Controls.Friendship.BlockDomain" = "Bloca %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Bloca %@"; "Common.Controls.Friendship.Blocked" = "Blocat"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Edita"; "Common.Controls.Friendship.Follow" = "Segueix"; "Common.Controls.Friendship.Following" = "Seguint"; @@ -334,6 +335,8 @@ carregat a Mastodon."; "Scene.Profile.Fields.Verified.Long" = "La propietat d'aquest enllaç es va verificar el dia %@"; "Scene.Profile.Fields.Verified.Short" = "Verificat a %@"; "Scene.Profile.Header.FollowsYou" = "Et segueix"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirma per a blocar %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bloca el Compte"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirma per a amagar els impulsos"; @@ -342,6 +345,8 @@ carregat a Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Silencia el Compte"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirma per a mostrar els impulsos"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Mostra els Impulsos"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Confirma per a desblocar %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Desbloca el Compte"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confirma deixar de silenciar a %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings index fc5d7a3a2..1490041c1 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings @@ -70,9 +70,10 @@ "Common.Controls.Actions.UnblockDomain" = "%@ ئاستەنگ مەکە"; "Common.Controls.Actions.Unfollow" = "Unfollow %@"; "Common.Controls.Friendship.Block" = "ئاستەنگی بکە"; -"Common.Controls.Friendship.BlockDomain" = "%@ ئاستەنگ بکە"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "%@ ئاستەنگ بکە"; "Common.Controls.Friendship.Blocked" = "ئاستەنگ کراوە"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "دەستکاری"; "Common.Controls.Friendship.Follow" = "شوێنی بکەوە"; "Common.Controls.Friendship.Following" = "شوێنی دەکەویت"; @@ -333,6 +334,8 @@ "Scene.Profile.Fields.Verified.Long" = "Ownership of this link was checked on %@"; "Scene.Profile.Fields.Verified.Short" = "Verified on %@"; "Scene.Profile.Header.FollowsYou" = "Follows You"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "دڵنیا ببەوە بۆ ئاستەنگکردنی %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "ئاستەنگی بکە"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirm to hide reblogs"; @@ -341,6 +344,8 @@ "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "بێدەنگی بکە"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirm to show reblogs"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Show Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "دڵنیا ببەوە بۆ لابردنی ئاستەنگی %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "ئاستەنگی مەکە"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "دڵنیا ببەوە بۆ بێدەنگنەکردنی %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/cs.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/cs.lproj/Localizable.strings index ed43f8b27..9eb9dea0a 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/cs.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/cs.lproj/Localizable.strings @@ -70,9 +70,10 @@ Zkontrolujte prosím připojení k internetu."; "Common.Controls.Actions.UnblockDomain" = "Odblokovat %@"; "Common.Controls.Actions.Unfollow" = "Přestat sledovat %@"; "Common.Controls.Friendship.Block" = "Blokovat"; -"Common.Controls.Friendship.BlockDomain" = "Blokovat %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Blokovat %@"; "Common.Controls.Friendship.Blocked" = "Blokovaný"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Upravit informace"; "Common.Controls.Friendship.Follow" = "Sledovat"; "Common.Controls.Friendship.Following" = "Sleduji"; @@ -330,6 +331,8 @@ nahrán do Mastodonu."; "Scene.Profile.Fields.Verified.Long" = "Vlastnictví tohoto odkazu bylo zkontrolováno na %@"; "Scene.Profile.Fields.Verified.Short" = "Ověřeno na %@"; "Scene.Profile.Header.FollowsYou" = "Sleduje vás"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Potvrdit blokování %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Blokovat účet"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Potvrďte skrytí reblogů"; @@ -338,6 +341,8 @@ nahrán do Mastodonu."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Skrýt účet"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Potvrdit zobrazení reblogů"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Zobrazit Reblogy"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Potvrďte odblokování %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Odblokovat účet"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Potvrďte zrušení ztlumení %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings index 57bfa63b3..5d0ed4c4a 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings @@ -70,9 +70,10 @@ Bitte überprüfe deine Internetverbindung."; "Common.Controls.Actions.UnblockDomain" = "Blockierung von %@ aufheben"; "Common.Controls.Actions.Unfollow" = "%@ entfolgen"; "Common.Controls.Friendship.Block" = "Blockieren"; -"Common.Controls.Friendship.BlockDomain" = "%@ blockieren"; +"Common.Controls.Friendship.BlockDomain" = "Domain %@ sperren"; "Common.Controls.Friendship.BlockUser" = "%@ blockieren"; "Common.Controls.Friendship.Blocked" = "Blockiert"; +"Common.Controls.Friendship.DomainBlocked" = "Domain gesperrt"; "Common.Controls.Friendship.EditInfo" = "Information bearbeiten"; "Common.Controls.Friendship.Follow" = "Folgen"; "Common.Controls.Friendship.Following" = "Gefolgt"; @@ -223,19 +224,19 @@ kann nicht auf Mastodon hochgeladen werden."; "Scene.Compose.Keyboard.TogglePoll" = "Umfrage umschalten"; "Scene.Compose.Language.Other" = "Andere Sprache…"; "Scene.Compose.Language.Recent" = "Kürzlich"; -"Scene.Compose.Language.Suggested" = "Suggested"; +"Scene.Compose.Language.Suggested" = "Empfohlen"; "Scene.Compose.Language.Title" = "Beitragssprache"; "Scene.Compose.MediaSelection.Browse" = "Durchsuchen"; "Scene.Compose.MediaSelection.Camera" = "Foto aufnehmen"; "Scene.Compose.MediaSelection.PhotoLibrary" = "Fotobibliothek"; -"Scene.Compose.Poll.AddOption" = "Add Option"; +"Scene.Compose.Poll.AddOption" = "Option hinzufügen"; "Scene.Compose.Poll.DurationTime" = "Dauer: %@"; "Scene.Compose.Poll.MoveDown" = "Nach unten"; "Scene.Compose.Poll.MoveUp" = "Nach oben"; "Scene.Compose.Poll.OneDay" = "1 Tag"; "Scene.Compose.Poll.OneHour" = "1 Stunde"; "Scene.Compose.Poll.OptionNumber" = "Auswahlmöglichkeit %ld"; -"Scene.Compose.Poll.RemoveOption" = "Remove Option"; +"Scene.Compose.Poll.RemoveOption" = "Option entfernen"; "Scene.Compose.Poll.SevenDays" = "7 Tage"; "Scene.Compose.Poll.SixHours" = "6 Stunden"; "Scene.Compose.Poll.ThePollHasEmptyOption" = "Die Umfrage hat eine leere Option"; @@ -334,6 +335,8 @@ kann nicht auf Mastodon hochgeladen werden."; "Scene.Profile.Fields.Verified.Long" = "Besitz des Links wurde überprüft am %@"; "Scene.Profile.Fields.Verified.Short" = "Überprüft am %@"; "Scene.Profile.Header.FollowsYou" = "Folgt dir"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Bestätigen, um die Domain %@ zu sperren"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Domain sperren"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Bestätige %@ zu blockieren"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Konto blockieren"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Bestätigen, um Teilen auszublenden"; @@ -342,6 +345,8 @@ kann nicht auf Mastodon hochgeladen werden."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Konto stummschalten"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Bestätigen, um Teilen anzuzeigen"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Teilen anzeigen"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Bestätigen, um die Sperre der Domäne %@ aufzuheben"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Domain entsperren"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Bestätige %@ zu entsperren"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Konto entsperren"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Bestätige um %@ nicht mehr stummzuschalten"; @@ -443,8 +448,8 @@ kann nicht auf Mastodon hochgeladen werden."; "Scene.Search.Searching.ClearAll" = "Alles löschen"; "Scene.Search.Searching.EmptyState.NoResults" = "Keine Ergebnisse"; "Scene.Search.Searching.Hashtag" = "Wechseln zu #%@"; -"Scene.Search.Searching.NoUser.Message" = "There's no Useraccount \"%@\" on %@"; -"Scene.Search.Searching.NoUser.Title" = "No User Account Found"; +"Scene.Search.Searching.NoUser.Message" = "Es gibt kein Benutzerkonto „%@” auf %@"; +"Scene.Search.Searching.NoUser.Title" = "Kein Benutzerkonto gefunden"; "Scene.Search.Searching.People" = "People matching \"%@\""; "Scene.Search.Searching.Posts" = "Posts matching \"%@\""; "Scene.Search.Searching.Profile" = "Go to @%@@%@"; @@ -490,37 +495,37 @@ kann nicht auf Mastodon hochgeladen werden."; "Scene.ServerRules.TermsOfService" = "Nutzungsbedingungen"; "Scene.ServerRules.Title" = "Einige Grundregeln."; "Scene.Settings.AboutMastodon.ClearMediaStorage" = "Clear Media Storage"; -"Scene.Settings.AboutMastodon.ContributeToMastodon" = "Contribute to Mastodon"; +"Scene.Settings.AboutMastodon.ContributeToMastodon" = "Zu Mastodon beitragen"; "Scene.Settings.AboutMastodon.MoreSettings" = "Noch mehr Einstellungen"; "Scene.Settings.AboutMastodon.PrivacyPolicy" = "Datenschutzerklärung"; "Scene.Settings.AboutMastodon.Title" = "Über"; -"Scene.Settings.General.Appearance.Dark" = "Dark"; -"Scene.Settings.General.Appearance.Light" = "Light"; -"Scene.Settings.General.Appearance.SectionTitle" = "Appearance"; -"Scene.Settings.General.Appearance.System" = "Use Device Appearance"; +"Scene.Settings.General.Appearance.Dark" = "Dunkel"; +"Scene.Settings.General.Appearance.Light" = "Hell"; +"Scene.Settings.General.Appearance.SectionTitle" = "Farbschema"; +"Scene.Settings.General.Appearance.System" = "Einstellungen des Geräts übernehmen"; "Scene.Settings.General.Design.SectionTitle" = "Design"; "Scene.Settings.General.Design.ShowAnimations" = "Play Animated Avatars and Emoji"; -"Scene.Settings.General.Links.OpenInBrowser" = "Open in Browser"; -"Scene.Settings.General.Links.OpenInMastodon" = "Open in Mastodon"; +"Scene.Settings.General.Links.OpenInBrowser" = "Im Browser öffnen"; +"Scene.Settings.General.Links.OpenInMastodon" = "In Mastodon öffnen"; "Scene.Settings.General.Links.SectionTitle" = "Links"; -"Scene.Settings.General.Title" = "General"; +"Scene.Settings.General.Title" = "Allgemein"; "Scene.Settings.Notifications.Alert.Boosts" = "Boosts"; "Scene.Settings.Notifications.Alert.Favorites" = "Favorites"; "Scene.Settings.Notifications.Alert.MentionsAndReplies" = "Mentions & Replies"; "Scene.Settings.Notifications.Alert.NewFollowers" = "New Followers"; "Scene.Settings.Notifications.Disabled.GoToSettings" = "Go to Notification Settings"; "Scene.Settings.Notifications.Disabled.NotificationHint" = "Turn on notifications from your device settings to see updates on your lock screen."; -"Scene.Settings.Notifications.Policy.Anyone" = "Anyone"; +"Scene.Settings.Notifications.Policy.Anyone" = "Jeder"; "Scene.Settings.Notifications.Policy.Follow" = "People you follow"; "Scene.Settings.Notifications.Policy.Followers" = "People who follow you"; -"Scene.Settings.Notifications.Policy.Noone" = "No one"; -"Scene.Settings.Notifications.Policy.Title" = "Get Notifications from"; -"Scene.Settings.Notifications.Title" = "Notifications"; -"Scene.Settings.Overview.AboutMastodon" = "About Mastodon"; -"Scene.Settings.Overview.General" = "General"; -"Scene.Settings.Overview.Logout" = "Logout %@"; -"Scene.Settings.Overview.Notifications" = "Notifications"; -"Scene.Settings.Overview.ServerDetails" = "Server Details"; +"Scene.Settings.Notifications.Policy.Noone" = "Niemand"; +"Scene.Settings.Notifications.Policy.Title" = "Mitteilungen erhalten von"; +"Scene.Settings.Notifications.Title" = "Mitteilungen"; +"Scene.Settings.Overview.AboutMastodon" = "Über Mastodon"; +"Scene.Settings.Overview.General" = "Allgemein"; +"Scene.Settings.Overview.Logout" = "%@ abmelden"; +"Scene.Settings.Overview.Notifications" = "Benachrichtigungen"; +"Scene.Settings.Overview.ServerDetails" = "Serverdetails"; "Scene.Settings.Overview.SupportMastodon" = "Mastodon unterstützen"; "Scene.Settings.Overview.Title" = "Einstellungen"; "Scene.Settings.ServerDetails.About" = "Über"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/el.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/el.lproj/Localizable.strings index 1cd570cab..43310aa43 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/el.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/el.lproj/Localizable.strings @@ -70,9 +70,10 @@ "Common.Controls.Actions.UnblockDomain" = "Άρση αποκλεισμού %@"; "Common.Controls.Actions.Unfollow" = "Κατάργηση ακολούθησης του %@"; "Common.Controls.Friendship.Block" = "Αποκλεισμός"; -"Common.Controls.Friendship.BlockDomain" = "Αποκλεισμός %@"; +"Common.Controls.Friendship.BlockDomain" = "Αποκλεισμός τομέα %@"; "Common.Controls.Friendship.BlockUser" = "Αποκλεισμός %@"; "Common.Controls.Friendship.Blocked" = "Αποκλείστηκε"; +"Common.Controls.Friendship.DomainBlocked" = "Ο Τομέας αποκλείστηκε"; "Common.Controls.Friendship.EditInfo" = "Επεξεργασία Πληροφοριών"; "Common.Controls.Friendship.Follow" = "Ακολούθησε"; "Common.Controls.Friendship.Following" = "Ακολουθείς"; @@ -334,6 +335,8 @@ "Scene.Profile.Fields.Verified.Long" = "Η ιδιοκτησία αυτού του συνδέσμου ελέχθηκε στις %@"; "Scene.Profile.Fields.Verified.Short" = "Επαληθεύτηκε στις %@"; "Scene.Profile.Header.FollowsYou" = "Σε Ακολουθεί"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Επιβεβαίωση αποκλεισμού τομέα %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Αποκλεισμός τομέα"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Επιβεβαίωση αποκλεισμού %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Αποκλεισμός Λογαριασμού"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Επιβεβαίωση απόκρυψης αναδημοσιεύσεων"; @@ -342,6 +345,8 @@ "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Σίγαση Λογαριασμού"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Επιβεβαίωση εμφάνισης αναδημοσιεύσεων"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Εμφάνιση Αναδημοσιεύσεων"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Επιβεβαίωση άρσης αποκλεισμού τομέα %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Άρση αποκλεισμού τομέα"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Επιβεβαίωση άρσης αποκλεισμού %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Άρση Αποκλεισμού Λογαριασμού"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Επιβεβαίωσε για άρση σίγασης %@"; @@ -443,8 +448,8 @@ "Scene.Search.Searching.ClearAll" = "Εκκαθάριση όλων"; "Scene.Search.Searching.EmptyState.NoResults" = "Κανένα αποτέλεσμα"; "Scene.Search.Searching.Hashtag" = "Μετάβαση στο #%@"; -"Scene.Search.Searching.NoUser.Message" = "There's no Useraccount \"%@\" on %@"; -"Scene.Search.Searching.NoUser.Title" = "No User Account Found"; +"Scene.Search.Searching.NoUser.Message" = "Δεν υπάρχει λογαριασμός χρήστη \"%@\" στο %@"; +"Scene.Search.Searching.NoUser.Title" = "Δεν Βρέθηκε Λογαριασμός Χρήστη"; "Scene.Search.Searching.People" = "Άτομα που ταιριάζουν με «%@»"; "Scene.Search.Searching.Posts" = "Αναρτήσεις που ταιριάζουν με «%@»"; "Scene.Search.Searching.Profile" = "Μετάβαση στο @%@@%@"; @@ -489,45 +494,45 @@ "Scene.ServerRules.Subtitle" = "Αυτά ορίζονται και επιβάλλονται από τους συντονιστές %@."; "Scene.ServerRules.TermsOfService" = "όροι υπηρεσίας"; "Scene.ServerRules.Title" = "Ορισμένοι βασικοί κανόνες."; -"Scene.Settings.AboutMastodon.ClearMediaStorage" = "Clear Media Storage"; -"Scene.Settings.AboutMastodon.ContributeToMastodon" = "Contribute to Mastodon"; -"Scene.Settings.AboutMastodon.MoreSettings" = "Even More Settings"; -"Scene.Settings.AboutMastodon.PrivacyPolicy" = "Privacy Policy"; -"Scene.Settings.AboutMastodon.Title" = "About"; -"Scene.Settings.General.Appearance.Dark" = "Dark"; -"Scene.Settings.General.Appearance.Light" = "Light"; -"Scene.Settings.General.Appearance.SectionTitle" = "Appearance"; -"Scene.Settings.General.Appearance.System" = "Use Device Appearance"; -"Scene.Settings.General.Design.SectionTitle" = "Design"; -"Scene.Settings.General.Design.ShowAnimations" = "Play Animated Avatars and Emoji"; -"Scene.Settings.General.Links.OpenInBrowser" = "Open in Browser"; -"Scene.Settings.General.Links.OpenInMastodon" = "Open in Mastodon"; -"Scene.Settings.General.Links.SectionTitle" = "Links"; -"Scene.Settings.General.Title" = "General"; -"Scene.Settings.Notifications.Alert.Boosts" = "Boosts"; -"Scene.Settings.Notifications.Alert.Favorites" = "Favorites"; -"Scene.Settings.Notifications.Alert.MentionsAndReplies" = "Mentions & Replies"; -"Scene.Settings.Notifications.Alert.NewFollowers" = "New Followers"; -"Scene.Settings.Notifications.Disabled.GoToSettings" = "Go to Notification Settings"; -"Scene.Settings.Notifications.Disabled.NotificationHint" = "Turn on notifications from your device settings to see updates on your lock screen."; -"Scene.Settings.Notifications.Policy.Anyone" = "Anyone"; -"Scene.Settings.Notifications.Policy.Follow" = "People you follow"; -"Scene.Settings.Notifications.Policy.Followers" = "People who follow you"; -"Scene.Settings.Notifications.Policy.Noone" = "No one"; -"Scene.Settings.Notifications.Policy.Title" = "Get Notifications from"; -"Scene.Settings.Notifications.Title" = "Notifications"; -"Scene.Settings.Overview.AboutMastodon" = "About Mastodon"; -"Scene.Settings.Overview.General" = "General"; -"Scene.Settings.Overview.Logout" = "Logout %@"; -"Scene.Settings.Overview.Notifications" = "Notifications"; -"Scene.Settings.Overview.ServerDetails" = "Server Details"; -"Scene.Settings.Overview.SupportMastodon" = "Support Mastodon"; -"Scene.Settings.Overview.Title" = "Settings"; -"Scene.Settings.ServerDetails.About" = "About"; -"Scene.Settings.ServerDetails.AboutInstance.LegalNotice" = "A legal notice"; -"Scene.Settings.ServerDetails.AboutInstance.MessageAdmin" = "Message Admin"; -"Scene.Settings.ServerDetails.AboutInstance.Title" = "Administrator"; -"Scene.Settings.ServerDetails.Rules" = "Rules"; +"Scene.Settings.AboutMastodon.ClearMediaStorage" = "Εκκαθάριση Χώρου Αποθήκευσης Πολυμέσων"; +"Scene.Settings.AboutMastodon.ContributeToMastodon" = "Συνείσφερε στο Mastodon"; +"Scene.Settings.AboutMastodon.MoreSettings" = "Ακόμα Περισσότερες Ρυθμίσεις"; +"Scene.Settings.AboutMastodon.PrivacyPolicy" = "Πολιτική Απορρήτου"; +"Scene.Settings.AboutMastodon.Title" = "Σχετικά"; +"Scene.Settings.General.Appearance.Dark" = "Σκοτεινό"; +"Scene.Settings.General.Appearance.Light" = "Φωτεινό"; +"Scene.Settings.General.Appearance.SectionTitle" = "Εμφάνιση"; +"Scene.Settings.General.Appearance.System" = "Χρήση Εμφάνισης Συσκευής"; +"Scene.Settings.General.Design.SectionTitle" = "Σχεδίαση"; +"Scene.Settings.General.Design.ShowAnimations" = "Αναπαραγωγή κινούμενων Avatars και Emoji"; +"Scene.Settings.General.Links.OpenInBrowser" = "Άνοιγμα στον Περιηγητή"; +"Scene.Settings.General.Links.OpenInMastodon" = "Άνοιγμα στο Mastodon"; +"Scene.Settings.General.Links.SectionTitle" = "Σύνδεσμοι"; +"Scene.Settings.General.Title" = "Γενικά"; +"Scene.Settings.Notifications.Alert.Boosts" = "Ενισχύσεις"; +"Scene.Settings.Notifications.Alert.Favorites" = "Αγαπημένα"; +"Scene.Settings.Notifications.Alert.MentionsAndReplies" = "Αναφορές & Απαντήσεις"; +"Scene.Settings.Notifications.Alert.NewFollowers" = "Νέοι Ακόλουθοι"; +"Scene.Settings.Notifications.Disabled.GoToSettings" = "Μετάβαση στις Ρυθμίσεις Ειδοποιήσεων"; +"Scene.Settings.Notifications.Disabled.NotificationHint" = "Ενεργοποίησε τις ειδοποιήσεις από τις ρυθμίσεις της συσκευής σου για να βλέπεις ενημερώσεις στην οθόνη κλειδώματος."; +"Scene.Settings.Notifications.Policy.Anyone" = "Οποιοσδήποτε"; +"Scene.Settings.Notifications.Policy.Follow" = "Άτομα που ακολουθείς"; +"Scene.Settings.Notifications.Policy.Followers" = "Άτομα που σε ακολουθούν"; +"Scene.Settings.Notifications.Policy.Noone" = "Κανένας"; +"Scene.Settings.Notifications.Policy.Title" = "Λήψη Ειδοποιήσεων από"; +"Scene.Settings.Notifications.Title" = "Ειδοποιήσεις"; +"Scene.Settings.Overview.AboutMastodon" = "Σχετικά με το Mastodon"; +"Scene.Settings.Overview.General" = "Γενικά"; +"Scene.Settings.Overview.Logout" = "Αποσύνδεση %@"; +"Scene.Settings.Overview.Notifications" = "Ειδοποιήσεις"; +"Scene.Settings.Overview.ServerDetails" = "Λεπτομέρειες Διακομιστή"; +"Scene.Settings.Overview.SupportMastodon" = "Υποστήριξε το Mastodon"; +"Scene.Settings.Overview.Title" = "Ρυθμίσεις"; +"Scene.Settings.ServerDetails.About" = "Σχετικά"; +"Scene.Settings.ServerDetails.AboutInstance.LegalNotice" = "Μια νομική ειδοποίηση"; +"Scene.Settings.ServerDetails.AboutInstance.MessageAdmin" = "Στείλε μήνυμα σε διαχειριστή"; +"Scene.Settings.ServerDetails.AboutInstance.Title" = "Διαχειριστής"; +"Scene.Settings.ServerDetails.Rules" = "Κανόνες"; "Scene.SuggestionAccount.FollowAll" = "Ακολούθησε τους όλους"; "Scene.SuggestionAccount.Title" = "Δημοφιλή στο Mastodon"; "Scene.Thread.BackTitle" = "Ανάρτηση"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings index 2faf5ebb7..ab1b0bc15 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings @@ -70,9 +70,10 @@ Please check your internet connection."; "Common.Controls.Actions.UnblockDomain" = "Unblock %@"; "Common.Controls.Actions.Unfollow" = "Unfollow %@"; "Common.Controls.Friendship.Block" = "Block"; -"Common.Controls.Friendship.BlockDomain" = "Block %@"; +"Common.Controls.Friendship.BlockDomain" = "Domain blokkolása: %@"; "Common.Controls.Friendship.BlockUser" = "Block %@"; "Common.Controls.Friendship.Blocked" = "Blocked"; +"Common.Controls.Friendship.DomainBlocked" = "Domain blokkolva"; "Common.Controls.Friendship.EditInfo" = "Edit Info"; "Common.Controls.Friendship.Follow" = "Follow"; "Common.Controls.Friendship.Following" = "Following"; @@ -334,6 +335,8 @@ uploaded to Mastodon."; "Scene.Profile.Fields.Verified.Long" = "Ownership of this link was checked on %@"; "Scene.Profile.Fields.Verified.Short" = "Verified on %@"; "Scene.Profile.Header.FollowsYou" = "Follows You"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Megerősíti a domain blokkolását? %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Domain blokkolása"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirm to block %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Block Account"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirm to hide reblogs"; @@ -342,6 +345,8 @@ uploaded to Mastodon."; "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.ConfirmUnblockDomain.Message" = "Megerősíti a domain blokk feloldását? %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Domain blokkolás feloldása"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Confirm to unblock %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Unblock Account"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confirm to unmute %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings index a80e5352c..6d889b892 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings @@ -70,9 +70,10 @@ Por favor, revise su conexión a internet."; "Common.Controls.Actions.UnblockDomain" = "Desbloquear %@"; "Common.Controls.Actions.Unfollow" = "Unfollow %@"; "Common.Controls.Friendship.Block" = "Bloquear"; -"Common.Controls.Friendship.BlockDomain" = "Bloquear a %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Bloquear a %@"; "Common.Controls.Friendship.Blocked" = "Bloqueado"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Editar Info"; "Common.Controls.Friendship.Follow" = "Seguir"; "Common.Controls.Friendship.Following" = "Siguiendo"; @@ -334,6 +335,8 @@ subirse a Mastodon."; "Scene.Profile.Fields.Verified.Long" = "La propiedad de este enlace fue verificada el %@"; "Scene.Profile.Fields.Verified.Short" = "Verificado en %@"; "Scene.Profile.Header.FollowsYou" = "Te sigue"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirmar para bloquear a %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bloquear cuenta"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirmar para ocultar reblogs"; @@ -342,6 +345,8 @@ subirse a Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Silenciar cuenta"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirmar para mostrar reblogs"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Mostrar reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Confirmar para desbloquear a %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Desbloquear cuenta"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confirmar para dejar de silenciar a %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings index 6964e20aa..f2155d4ef 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings @@ -70,9 +70,10 @@ Egiaztatu Interneteko konexioa."; "Common.Controls.Actions.UnblockDomain" = "Desblokeatu %@"; "Common.Controls.Actions.Unfollow" = "Unfollow %@"; "Common.Controls.Friendship.Block" = "Blokeatu"; -"Common.Controls.Friendship.BlockDomain" = "Blokeatu %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Blokeatu %@"; "Common.Controls.Friendship.Blocked" = "Blokeatuta"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Editatu informazioa"; "Common.Controls.Friendship.Follow" = "Jarraitu"; "Common.Controls.Friendship.Following" = "Jarraitzen"; @@ -334,6 +335,8 @@ Mastodonera igo."; "Scene.Profile.Fields.Verified.Long" = "Esteka honen jabetzaren egiaztaketa data: %@"; "Scene.Profile.Fields.Verified.Short" = "Verified on %@"; "Scene.Profile.Header.FollowsYou" = "Jarraitzen zaitu"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Berretsi %@ blokeatzea"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Blokeatu kontua"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Berretsi birbidalketak ezkutatzea"; @@ -342,6 +345,8 @@ Mastodonera igo."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Mututu kontua"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Berretsi birbidalketak ikustea"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Ikusi bultzadak"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Berretsi %@ desblokeatzea"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Desblokeatu kontua"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Berretsi %@ desmututzea"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings index db127af26..7515526cb 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings @@ -70,9 +70,10 @@ Tarkista internet-yhteytesi."; "Common.Controls.Actions.UnblockDomain" = "Poista esto %@"; "Common.Controls.Actions.Unfollow" = "Lopeta käyttäjän %@ seuraaminen"; "Common.Controls.Friendship.Block" = "Estä"; -"Common.Controls.Friendship.BlockDomain" = "Estä %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Estä %@"; "Common.Controls.Friendship.Blocked" = "Estetty"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Muokkaa profiilia"; "Common.Controls.Friendship.Follow" = "Seuraa"; "Common.Controls.Friendship.Following" = "Seurataan"; @@ -334,6 +335,8 @@ kopioida Mastodoniin."; "Scene.Profile.Fields.Verified.Long" = "Linkin omistajuus on tarkastettu %@"; "Scene.Profile.Fields.Verified.Short" = "Vahvistettu %@"; "Scene.Profile.Header.FollowsYou" = "Seuraa sinua"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Vahvista käyttäjän %@ esto"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Estä tili"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Vahvista edelleenjulkaisujen piilotus"; @@ -342,6 +345,8 @@ kopioida Mastodoniin."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Mykistä tili"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Vahvista edelleenjulkaisujen näyttö"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Näytä uudelleenjulkaisut"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Vahvista tilin %@ eston poisto"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Poista tilin esto"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Vahvista, että haluat poistaa mykistyksen tililtä %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings index 4b4c13312..92b61805e 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings @@ -70,9 +70,10 @@ Veuillez vérifier votre accès à Internet."; "Common.Controls.Actions.UnblockDomain" = "Débloquer %@"; "Common.Controls.Actions.Unfollow" = "Se désabonner de %@"; "Common.Controls.Friendship.Block" = "Bloquer"; -"Common.Controls.Friendship.BlockDomain" = "Bloquer %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Bloquer %@"; "Common.Controls.Friendship.Blocked" = "Bloqué"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Éditer les infos"; "Common.Controls.Friendship.Follow" = "Suivre"; "Common.Controls.Friendship.Following" = "Suivi"; @@ -334,6 +335,8 @@ téléversé sur Mastodon."; "Scene.Profile.Fields.Verified.Long" = "La propriété de ce lien a été vérifiée le %@"; "Scene.Profile.Fields.Verified.Short" = "Vérifié le %@"; "Scene.Profile.Header.FollowsYou" = "Vous suit"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirmer le blocage de %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bloquer le compte"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirmer pour masquer les reblogs"; @@ -342,6 +345,8 @@ téléversé sur Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Masquer le compte"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirmer pour afficher les reblogs"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Afficher les Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Confirmer le déblocage de %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Débloquer le compte"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Êtes-vous sûr de vouloir désactiver la sourdine de %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings index a18dc45c0..cc52b4e8b 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings @@ -70,9 +70,10 @@ Thoir sùil air a’ cheangal agad ris an eadar-lìon."; "Common.Controls.Actions.UnblockDomain" = "Dì-bhac %@"; "Common.Controls.Actions.Unfollow" = "Na lean %@ tuilleadh"; "Common.Controls.Friendship.Block" = "Bac"; -"Common.Controls.Friendship.BlockDomain" = "Bac %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Bac %@"; "Common.Controls.Friendship.Blocked" = "’Ga bhacadh"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Deasaich"; "Common.Controls.Friendship.Follow" = "Lean"; "Common.Controls.Friendship.Following" = "’Ga leantainn"; @@ -334,6 +335,8 @@ a luchdadh suas gu Mastodon."; "Scene.Profile.Fields.Verified.Long" = "Chaidh dearbhadh cò leis a tha an ceangal seo %@"; "Scene.Profile.Fields.Verified.Short" = "Air a dhearbhadh %@"; "Scene.Profile.Header.FollowsYou" = "’Gad leantainn"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Dearbh bacadh %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bac an cunntas"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Dearbh falach nam brosnachaidhean"; @@ -342,6 +345,8 @@ a luchdadh suas gu Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Mùch an cunntas"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Dearbh sealladh nam brosnachaidhean"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Seall na brosnachaidhean"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Dearbh dì-bhacadh %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Dì-bhac an cunntas"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Dearbh dì-mhùchadh %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings index 8ad2efbd5..3958de54e 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings @@ -2,7 +2,7 @@ "Common.Alerts.BlockDomain.Title" = "Tes a certeza de querer bloquear todo de %@? Na meirande parte dos casos uns bloqueos ou silenciados específicos son suficientes e preferibles. Non verás máis o contido deste dominio en ningunha cronoloxía pública e as túas seguidoras deste dominio serán eliminadas."; "Common.Alerts.CleanCache.Message" = "Baleirouse %@ da caché correctamente."; "Common.Alerts.CleanCache.Title" = "Limpar caché"; -"Common.Alerts.Common.PleaseTryAgain" = "Inténtao de novo."; +"Common.Alerts.Common.PleaseTryAgain" = "Téntao de novo."; "Common.Alerts.Common.PleaseTryAgainLater" = "Inténtao de novo máis tarde."; "Common.Alerts.DeletePost.Message" = "Tes a certeza de querer eliminar esta publicación?"; "Common.Alerts.DeletePost.Title" = "Eliminar publicación"; @@ -70,9 +70,10 @@ Comproba a conexión a internet."; "Common.Controls.Actions.UnblockDomain" = "Desbloquear a %@"; "Common.Controls.Actions.Unfollow" = "Deixa de seguir a %@"; "Common.Controls.Friendship.Block" = "Bloquear"; -"Common.Controls.Friendship.BlockDomain" = "Bloquear a %@"; +"Common.Controls.Friendship.BlockDomain" = "Bloquear dominio %@"; "Common.Controls.Friendship.BlockUser" = "Bloquear a %@"; "Common.Controls.Friendship.Blocked" = "Bloqueada"; +"Common.Controls.Friendship.DomainBlocked" = "Dominio bloqueado"; "Common.Controls.Friendship.EditInfo" = "Editar info"; "Common.Controls.Friendship.Follow" = "Seguir"; "Common.Controls.Friendship.Following" = "Seguindo"; @@ -334,6 +335,8 @@ ser subido a Mastodon."; "Scene.Profile.Fields.Verified.Long" = "A propiedade desta ligazón foi verificada o %@"; "Scene.Profile.Fields.Verified.Short" = "Verificada en %@"; "Scene.Profile.Header.FollowsYou" = "Séguete"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirmar o bloqueo do dominio %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Bloquear dominio"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirma o bloqueo de %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bloquear Conta"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirma para agochar promocións"; @@ -342,6 +345,8 @@ ser subido a Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Acalar conta"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirma para ver promocións"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Mostrar Promocións"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirmar o desbloqueo de %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Desbloquear dominio"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Confirma o desbloqueo de %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Desbloquear Conta"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confirma restablecer a %@"; @@ -443,8 +448,8 @@ ser subido a Mastodon."; "Scene.Search.Searching.ClearAll" = "Limpar todo"; "Scene.Search.Searching.EmptyState.NoResults" = "Sen resultados"; "Scene.Search.Searching.Hashtag" = "Ir a #%@"; -"Scene.Search.Searching.NoUser.Message" = "There's no Useraccount \"%@\" on %@"; -"Scene.Search.Searching.NoUser.Title" = "No User Account Found"; +"Scene.Search.Searching.NoUser.Message" = "Non hai contas con \"%@\" en %@"; +"Scene.Search.Searching.NoUser.Title" = "Non se atopou ningunha conta"; "Scene.Search.Searching.People" = "Perfís coincidentes con \"%@\""; "Scene.Search.Searching.Posts" = "Publicacións coincidentes con \"%@\""; "Scene.Search.Searching.Profile" = "Ir a @%@@%@"; @@ -489,45 +494,45 @@ ser subido a Mastodon."; "Scene.ServerRules.Subtitle" = "Son establecidas e aplicadas pola moderación de %@."; "Scene.ServerRules.TermsOfService" = "termos do servizo"; "Scene.ServerRules.Title" = "Algunhas regras básicas."; -"Scene.Settings.AboutMastodon.ClearMediaStorage" = "Clear Media Storage"; -"Scene.Settings.AboutMastodon.ContributeToMastodon" = "Contribute to Mastodon"; -"Scene.Settings.AboutMastodon.MoreSettings" = "Even More Settings"; -"Scene.Settings.AboutMastodon.PrivacyPolicy" = "Privacy Policy"; -"Scene.Settings.AboutMastodon.Title" = "About"; -"Scene.Settings.General.Appearance.Dark" = "Dark"; -"Scene.Settings.General.Appearance.Light" = "Light"; -"Scene.Settings.General.Appearance.SectionTitle" = "Appearance"; -"Scene.Settings.General.Appearance.System" = "Use Device Appearance"; -"Scene.Settings.General.Design.SectionTitle" = "Design"; -"Scene.Settings.General.Design.ShowAnimations" = "Play Animated Avatars and Emoji"; -"Scene.Settings.General.Links.OpenInBrowser" = "Open in Browser"; -"Scene.Settings.General.Links.OpenInMastodon" = "Open in Mastodon"; -"Scene.Settings.General.Links.SectionTitle" = "Links"; -"Scene.Settings.General.Title" = "General"; -"Scene.Settings.Notifications.Alert.Boosts" = "Boosts"; -"Scene.Settings.Notifications.Alert.Favorites" = "Favorites"; -"Scene.Settings.Notifications.Alert.MentionsAndReplies" = "Mentions & Replies"; -"Scene.Settings.Notifications.Alert.NewFollowers" = "New Followers"; -"Scene.Settings.Notifications.Disabled.GoToSettings" = "Go to Notification Settings"; -"Scene.Settings.Notifications.Disabled.NotificationHint" = "Turn on notifications from your device settings to see updates on your lock screen."; -"Scene.Settings.Notifications.Policy.Anyone" = "Anyone"; -"Scene.Settings.Notifications.Policy.Follow" = "People you follow"; -"Scene.Settings.Notifications.Policy.Followers" = "People who follow you"; -"Scene.Settings.Notifications.Policy.Noone" = "No one"; -"Scene.Settings.Notifications.Policy.Title" = "Get Notifications from"; -"Scene.Settings.Notifications.Title" = "Notifications"; -"Scene.Settings.Overview.AboutMastodon" = "About Mastodon"; -"Scene.Settings.Overview.General" = "General"; -"Scene.Settings.Overview.Logout" = "Logout %@"; -"Scene.Settings.Overview.Notifications" = "Notifications"; -"Scene.Settings.Overview.ServerDetails" = "Server Details"; -"Scene.Settings.Overview.SupportMastodon" = "Support Mastodon"; -"Scene.Settings.Overview.Title" = "Settings"; -"Scene.Settings.ServerDetails.About" = "About"; -"Scene.Settings.ServerDetails.AboutInstance.LegalNotice" = "A legal notice"; -"Scene.Settings.ServerDetails.AboutInstance.MessageAdmin" = "Message Admin"; -"Scene.Settings.ServerDetails.AboutInstance.Title" = "Administrator"; -"Scene.Settings.ServerDetails.Rules" = "Rules"; +"Scene.Settings.AboutMastodon.ClearMediaStorage" = "Limpar Almacenaxe Multimedia"; +"Scene.Settings.AboutMastodon.ContributeToMastodon" = "Colaborar con Mastodon"; +"Scene.Settings.AboutMastodon.MoreSettings" = "Máis axustes"; +"Scene.Settings.AboutMastodon.PrivacyPolicy" = "Política de Privacidade"; +"Scene.Settings.AboutMastodon.Title" = "Acerca de"; +"Scene.Settings.General.Appearance.Dark" = "Escuro"; +"Scene.Settings.General.Appearance.Light" = "Claro"; +"Scene.Settings.General.Appearance.SectionTitle" = "Aparencia"; +"Scene.Settings.General.Appearance.System" = "Seguir ao dispositivo"; +"Scene.Settings.General.Design.SectionTitle" = "Deseño"; +"Scene.Settings.General.Design.ShowAnimations" = "Reproducir avatares e emoji animados"; +"Scene.Settings.General.Links.OpenInBrowser" = "Abrir no navegador"; +"Scene.Settings.General.Links.OpenInMastodon" = "Abrir en Mastodon"; +"Scene.Settings.General.Links.SectionTitle" = "Ligazóns"; +"Scene.Settings.General.Title" = "Xeral"; +"Scene.Settings.Notifications.Alert.Boosts" = "Promocións"; +"Scene.Settings.Notifications.Alert.Favorites" = "Favoritos"; +"Scene.Settings.Notifications.Alert.MentionsAndReplies" = "Mencións e respostas"; +"Scene.Settings.Notifications.Alert.NewFollowers" = "Novas seguidoras"; +"Scene.Settings.Notifications.Disabled.GoToSettings" = "Ir aos axustes das notificacións"; +"Scene.Settings.Notifications.Disabled.NotificationHint" = "Activar notificacións nos axustes do dispositivo para ver novidades na pantalla de bloqueo."; +"Scene.Settings.Notifications.Policy.Anyone" = "Calquera"; +"Scene.Settings.Notifications.Policy.Follow" = "Persoas que segues"; +"Scene.Settings.Notifications.Policy.Followers" = "Persoas que te seguen"; +"Scene.Settings.Notifications.Policy.Noone" = "Ninguén"; +"Scene.Settings.Notifications.Policy.Title" = "Recibir notificacións de"; +"Scene.Settings.Notifications.Title" = "Notificacións"; +"Scene.Settings.Overview.AboutMastodon" = "Acerca de Mastodon"; +"Scene.Settings.Overview.General" = "Xeral"; +"Scene.Settings.Overview.Logout" = "Pechar sesión %@"; +"Scene.Settings.Overview.Notifications" = "Notificacións"; +"Scene.Settings.Overview.ServerDetails" = "Detalles do servidor"; +"Scene.Settings.Overview.SupportMastodon" = "Apoia a Mastodon"; +"Scene.Settings.Overview.Title" = "Axustes"; +"Scene.Settings.ServerDetails.About" = "Acerca de"; +"Scene.Settings.ServerDetails.AboutInstance.LegalNotice" = "Aviso Legal"; +"Scene.Settings.ServerDetails.AboutInstance.MessageAdmin" = "Mensaxe a Admin"; +"Scene.Settings.ServerDetails.AboutInstance.Title" = "Administración"; +"Scene.Settings.ServerDetails.Rules" = "Regras"; "Scene.SuggestionAccount.FollowAll" = "Seguir a todas"; "Scene.SuggestionAccount.Title" = "Popular en Mastodon"; "Scene.Thread.BackTitle" = "Publicación"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/hy.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/hy.lproj/Localizable.strings index 336c46f11..767a01b80 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/hy.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/hy.lproj/Localizable.strings @@ -28,7 +28,7 @@ Please check your internet connection."; "Common.Controls.Actions.Add" = "Աւելացնել"; "Common.Controls.Actions.Back" = "Ետ"; "Common.Controls.Actions.BlockDomain" = "Block %@"; -"Common.Controls.Actions.Bookmark" = "Bookmark"; +"Common.Controls.Actions.Bookmark" = "Էջանիշ"; "Common.Controls.Actions.Cancel" = "Չեղարկել"; "Common.Controls.Actions.Compose" = "Compose"; "Common.Controls.Actions.Confirm" = "Հաստատել"; @@ -39,9 +39,9 @@ Please check your internet connection."; "Common.Controls.Actions.Discard" = "Չեղարկել"; "Common.Controls.Actions.Done" = "Աւարտել"; "Common.Controls.Actions.Edit" = "Խմբագրել"; -"Common.Controls.Actions.EditPost" = "Edit"; +"Common.Controls.Actions.EditPost" = "Խմբագրել"; "Common.Controls.Actions.FindPeople" = "Find people to follow"; -"Common.Controls.Actions.Follow" = "Follow %@"; +"Common.Controls.Actions.Follow" = "Հետեւել %@-ին"; "Common.Controls.Actions.ManuallySearch" = "Manually search instead"; "Common.Controls.Actions.Next" = "Յաջորդ"; "Common.Controls.Actions.Ok" = "Լաւ"; @@ -51,7 +51,7 @@ Please check your internet connection."; "Common.Controls.Actions.Preview" = "Նախադիտում"; "Common.Controls.Actions.Previous" = "Նախորդ"; "Common.Controls.Actions.Remove" = "Ջնջել"; -"Common.Controls.Actions.RemoveBookmark" = "Remove Bookmark"; +"Common.Controls.Actions.RemoveBookmark" = "Հեռացնել էջանիշը"; "Common.Controls.Actions.Reply" = "Reply"; "Common.Controls.Actions.ReportUser" = "Report %@"; "Common.Controls.Actions.Save" = "Պահպանել"; @@ -68,35 +68,36 @@ Please check your internet connection."; "Common.Controls.Actions.TranslatePost.UnknownLanguage" = "Unknown"; "Common.Controls.Actions.TryAgain" = "Կրկին փորձիր"; "Common.Controls.Actions.UnblockDomain" = "Unblock %@"; -"Common.Controls.Actions.Unfollow" = "Unfollow %@"; -"Common.Controls.Friendship.Block" = "Block"; -"Common.Controls.Friendship.BlockDomain" = "Block %@"; +"Common.Controls.Actions.Unfollow" = "Չհետեւել %@-ին"; +"Common.Controls.Friendship.Block" = "Արգելափակել"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Block %@"; -"Common.Controls.Friendship.Blocked" = "Blocked"; -"Common.Controls.Friendship.EditInfo" = "Edit Info"; +"Common.Controls.Friendship.Blocked" = "Արգելափակուած"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; +"Common.Controls.Friendship.EditInfo" = "Խմբագրել"; "Common.Controls.Friendship.Follow" = "Հետեւել"; -"Common.Controls.Friendship.Following" = "Following"; +"Common.Controls.Friendship.Following" = "Հետեւած"; "Common.Controls.Friendship.HideReblogs" = "Hide Reblogs"; "Common.Controls.Friendship.Mute" = "Լռեցնել"; "Common.Controls.Friendship.MuteUser" = "Լռեցնել %@֊ին"; "Common.Controls.Friendship.Muted" = "Լռեցուած"; -"Common.Controls.Friendship.Pending" = "Pending"; -"Common.Controls.Friendship.Request" = "Request"; +"Common.Controls.Friendship.Pending" = "Սպասուող"; +"Common.Controls.Friendship.Request" = "Հարցում"; "Common.Controls.Friendship.ShowReblogs" = "Show Reblogs"; -"Common.Controls.Friendship.Unblock" = "Unblock"; -"Common.Controls.Friendship.UnblockUser" = "Unblock %@"; +"Common.Controls.Friendship.Unblock" = "Արգելաբացել"; +"Common.Controls.Friendship.UnblockUser" = "Արգելաբացել %@-ին"; "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.OpenSettings" = "Բացել կարգաւորումները"; "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.NextStatus" = "Յաջորդ գրառումը"; "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.OpenStatus" = "Բացել գրառումը"; "Common.Controls.Keyboard.Timeline.PreviewImage" = "Preview Image"; "Common.Controls.Keyboard.Timeline.PreviousStatus" = "Previous Post"; "Common.Controls.Keyboard.Timeline.ReplyStatus" = "Reply to Post"; @@ -105,22 +106,22 @@ Please check your internet connection."; "Common.Controls.Keyboard.Timeline.ToggleReblog" = "Toggle Reblog on Post"; "Common.Controls.Status.Actions.A11YLabels.Reblog" = "Re-blog"; "Common.Controls.Status.Actions.A11YLabels.Unreblog" = "Undo re-blog"; -"Common.Controls.Status.Actions.Favorite" = "Favorite"; +"Common.Controls.Status.Actions.Favorite" = "Հավանել"; "Common.Controls.Status.Actions.Hide" = "Թաքցնել"; "Common.Controls.Status.Actions.Menu" = "Ցանկ"; -"Common.Controls.Status.Actions.Reblog" = "Reblog"; +"Common.Controls.Status.Actions.Reblog" = "Տարածել"; "Common.Controls.Status.Actions.Reply" = "Պատասխանել"; "Common.Controls.Status.Actions.ShareLinkInPost" = "Share Link in Post"; -"Common.Controls.Status.Actions.ShowGif" = "Show GIF"; -"Common.Controls.Status.Actions.ShowImage" = "Show image"; +"Common.Controls.Status.Actions.ShowGif" = "Ցոյց տալ գիֆը"; +"Common.Controls.Status.Actions.ShowImage" = "Ցոյց տալ նկարը"; "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.Actions.Unfavorite" = "Չհաւանել"; +"Common.Controls.Status.Actions.Unreblog" = "Չտարածել"; "Common.Controls.Status.Buttons.EditHistoryDetail" = "Last edit %@"; "Common.Controls.Status.Buttons.EditHistoryTitle" = "Խմբագրման պատմութիւնը"; -"Common.Controls.Status.Buttons.FavoritesTitle" = "Favorites"; -"Common.Controls.Status.Buttons.ReblogsTitle" = "Reblogs"; +"Common.Controls.Status.Buttons.FavoritesTitle" = "Հաւանածներ"; +"Common.Controls.Status.Buttons.ReblogsTitle" = "Տարածել"; "Common.Controls.Status.ContentWarning" = "Content Warning"; "Common.Controls.Status.EditHistory.OriginalPost" = "Original Post · %@"; "Common.Controls.Status.EditHistory.Title" = "Խմբագրման պատմութիւնը"; @@ -136,12 +137,12 @@ Please check your internet connection."; "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.Closed" = "Փակ"; "Common.Controls.Status.Poll.Vote" = "Քուէարկել"; "Common.Controls.Status.PostedViaApplication" = "%@ via %@"; -"Common.Controls.Status.SensitiveContent" = "Sensitive Content"; -"Common.Controls.Status.ShowPost" = "Show Post"; -"Common.Controls.Status.ShowUserProfile" = "Show user profile"; +"Common.Controls.Status.SensitiveContent" = "Զգայուն բովանդակություն"; +"Common.Controls.Status.ShowPost" = "Ցուցադրել գրառումը"; +"Common.Controls.Status.ShowUserProfile" = "Ցուցադրել օգտատիրոջ էջը"; "Common.Controls.Status.Tag.Email" = "Էլ. փոստ"; "Common.Controls.Status.Tag.Emoji" = "Զմայլիկ"; "Common.Controls.Status.Tag.Hashtag" = "Պիտակ"; @@ -149,21 +150,21 @@ Please check your internet connection."; "Common.Controls.Status.Tag.Mention" = "Նշել"; "Common.Controls.Status.Tag.Url" = "URL"; "Common.Controls.Status.TapToReveal" = "Tap to reveal"; -"Common.Controls.Status.Translation.ShowOriginal" = "Show Original"; +"Common.Controls.Status.Translation.ShowOriginal" = "Ցոյց տալ բնօրինակը"; "Common.Controls.Status.Translation.TranslatedFrom" = "Translated from %@ using %@"; -"Common.Controls.Status.Translation.UnknownLanguage" = "Unknown"; -"Common.Controls.Status.Translation.UnknownProvider" = "Unknown"; +"Common.Controls.Status.Translation.UnknownLanguage" = "Անյայտ"; +"Common.Controls.Status.Translation.UnknownProvider" = "Անյայտ"; "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.A11Y.Explore" = "Explore"; -"Common.Controls.Tabs.A11Y.Search" = "Search"; -"Common.Controls.Tabs.Home" = "Home"; -"Common.Controls.Tabs.Notifications" = "Notifications"; -"Common.Controls.Tabs.Profile" = "Profile"; +"Common.Controls.Tabs.A11Y.Explore" = "Բացայայտել"; +"Common.Controls.Tabs.A11Y.Search" = "Որոնել"; +"Common.Controls.Tabs.Home" = "Հիմնական"; +"Common.Controls.Tabs.Notifications" = "Ծանուցումներ"; +"Common.Controls.Tabs.Profile" = "Հաշիւ"; "Common.Controls.Tabs.SearchAndExplore" = "Search and Explore"; "Common.Controls.Timeline.Filtered" = "Զտուած"; "Common.Controls.Timeline.Header.BlockedWarning" = "You can’t view this user’s profile @@ -184,21 +185,21 @@ Your profile looks like this to them."; "Common.Controls.Timeline.Loader.ShowMoreReplies" = "Ցուցադրել պատասխանները"; "Common.Controls.Timeline.Timestamp.Now" = "Հիմա"; "Common.UserList.FollowersCount" = "%@ followers"; -"Common.UserList.NoVerifiedLink" = "No verified link"; +"Common.UserList.NoVerifiedLink" = "Չկայ հաստատուած յղում"; "Extension.OpenIn.InvalidLinkError" = "This doesn't seem to be a valid Mastodon link."; -"Scene.AccountList.AddAccount" = "Add Account"; +"Scene.AccountList.AddAccount" = "Աւելացնել հաշիւ"; "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.Bookmark.Title" = "Էջանիշեր"; "Scene.Compose.Accessibility.AppendAttachment" = "Add Attachment"; -"Scene.Compose.Accessibility.AppendPoll" = "Add Poll"; +"Scene.Compose.Accessibility.AppendPoll" = "Աւելացնել հարցում"; "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.Accessibility.RemovePoll" = "Հեռացնել հարցումը"; "Scene.Compose.Attachment.AttachmentBroken" = "This %@ is broken and can’t be uploaded to Mastodon."; "Scene.Compose.Attachment.AttachmentTooLarge" = "Attachment too large"; @@ -207,10 +208,10 @@ uploaded to Mastodon."; "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.Photo" = "նկար"; "Scene.Compose.Attachment.ServerProcessingState" = "Server Processing..."; "Scene.Compose.Attachment.UploadFailed" = "Upload Failed"; -"Scene.Compose.Attachment.Video" = "video"; +"Scene.Compose.Attachment.Video" = "տեսանիւթ"; "Scene.Compose.AutoComplete.SpaceToAdd" = "Space to add"; "Scene.Compose.ComposeAction" = "Հրապարակել"; "Scene.Compose.ContentInputPlaceholder" = "Type or paste what’s on your mind"; @@ -222,82 +223,82 @@ uploaded to Mastodon."; "Scene.Compose.Keyboard.ToggleContentWarning" = "Toggle Content Warning"; "Scene.Compose.Keyboard.TogglePoll" = "Toggle Poll"; "Scene.Compose.Language.Other" = "Other Language…"; -"Scene.Compose.Language.Recent" = "Recent"; +"Scene.Compose.Language.Recent" = "Վերջին"; "Scene.Compose.Language.Suggested" = "Suggested"; -"Scene.Compose.Language.Title" = "Post Language"; -"Scene.Compose.MediaSelection.Browse" = "Browse"; -"Scene.Compose.MediaSelection.Camera" = "Take Photo"; -"Scene.Compose.MediaSelection.PhotoLibrary" = "Photo Library"; +"Scene.Compose.Language.Title" = "Հրապարակման լեզու"; +"Scene.Compose.MediaSelection.Browse" = "Դիտել"; +"Scene.Compose.MediaSelection.Camera" = "Լուսանկարել"; +"Scene.Compose.MediaSelection.PhotoLibrary" = "Ֆոտոդարան"; "Scene.Compose.Poll.AddOption" = "Add Option"; -"Scene.Compose.Poll.DurationTime" = "Duration: %@"; -"Scene.Compose.Poll.MoveDown" = "Move Down"; -"Scene.Compose.Poll.MoveUp" = "Move Up"; -"Scene.Compose.Poll.OneDay" = "1 Day"; -"Scene.Compose.Poll.OneHour" = "1 Hour"; -"Scene.Compose.Poll.OptionNumber" = "Option %ld"; +"Scene.Compose.Poll.DurationTime" = "Տեւողությունը՝ %@"; +"Scene.Compose.Poll.MoveDown" = "Իջեցնել"; +"Scene.Compose.Poll.MoveUp" = "Բարձրացնել"; +"Scene.Compose.Poll.OneDay" = "1 օր"; +"Scene.Compose.Poll.OneHour" = "1 ժամ"; +"Scene.Compose.Poll.OptionNumber" = "Տարբերակ %ld"; "Scene.Compose.Poll.RemoveOption" = "Remove Option"; -"Scene.Compose.Poll.SevenDays" = "7 Days"; -"Scene.Compose.Poll.SixHours" = "6 Hours"; +"Scene.Compose.Poll.SevenDays" = "7 օր"; +"Scene.Compose.Poll.SixHours" = "6 ժամ"; "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.Poll.Title" = "Poll"; +"Scene.Compose.Poll.ThirtyMinutes" = "30 րոպէ"; +"Scene.Compose.Poll.ThreeDays" = "3 օր"; +"Scene.Compose.Poll.Title" = "Հարցում"; "Scene.Compose.ReplyingToUser" = "replying to %@"; -"Scene.Compose.Title.EditPost" = "Edit Post"; -"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.Resend" = "Resend"; +"Scene.Compose.Title.EditPost" = "Խմբագրել գրառումը"; +"Scene.Compose.Title.NewPost" = "Նոր գրառում"; +"Scene.Compose.Title.NewReply" = "Նոր պատասխան"; +"Scene.Compose.Visibility.Direct" = "Միայն նշած մարդկանց"; +"Scene.Compose.Visibility.Private" = "Միայն հետեւողներին"; +"Scene.Compose.Visibility.Public" = "Հրապարակային"; +"Scene.Compose.Visibility.Unlisted" = "Ծածուկ"; +"Scene.ConfirmEmail.Button.Resend" = "Ուղարկել նորից"; "Scene.ConfirmEmail.DidntGetLink.Prefix" = "Didn’t get a link?"; "Scene.ConfirmEmail.DidntGetLink.ResendIn" = "Resend (%@)"; "Scene.ConfirmEmail.DidntGetLink.ResendNow" = "Resend now."; "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" = "Նորից ուղարկել էլ. նամակ"; -"Scene.ConfirmEmail.DontReceiveEmail.Title" = "Check your Email"; +"Scene.ConfirmEmail.DontReceiveEmail.Title" = "Ստուգիր էլ. հասցէդ!"; "Scene.ConfirmEmail.OpenEmailApp.Description" = "We just sent you an email. Check your junk folder if you haven’t."; "Scene.ConfirmEmail.OpenEmailApp.Mail" = "Փոստ"; "Scene.ConfirmEmail.OpenEmailApp.OpenEmailClient" = "Open Email Client"; -"Scene.ConfirmEmail.OpenEmailApp.Title" = "Check your Inbox."; +"Scene.ConfirmEmail.OpenEmailApp.Title" = "Ստուգիր էլ. փոստդ."; "Scene.ConfirmEmail.TapTheLinkWeEmailedToYouToVerifyYourAccount" = "Tap the link we sent you to verify %@. We’ll wait right here."; -"Scene.ConfirmEmail.Title" = "Check Your Inbox"; +"Scene.ConfirmEmail.Title" = "Ստուգիր էլ. փոստդ"; "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.Discovery.Tabs.Community" = "Համայնք"; +"Scene.Discovery.Tabs.ForYou" = "Քեզ համար"; +"Scene.Discovery.Tabs.Hashtags" = "Պիտակներ"; +"Scene.Discovery.Tabs.News" = "Նորութիւններ"; +"Scene.Discovery.Tabs.Posts" = "Գրառումներ"; "Scene.Familiarfollowers.FollowedByNames" = "Followed by %@"; "Scene.Familiarfollowers.Title" = "Followers you familiar"; -"Scene.Favorite.Title" = "Favorites"; +"Scene.Favorite.Title" = "Հաւանածներ"; "Scene.FavoritedBy.Title" = "Favorited By"; -"Scene.FollowedTags.Actions.Follow" = "Follow"; -"Scene.FollowedTags.Actions.Unfollow" = "Unfollow"; +"Scene.FollowedTags.Actions.Follow" = "Հետեւել"; +"Scene.FollowedTags.Actions.Unfollow" = "Ապահետեւել"; "Scene.FollowedTags.Header.Participants" = "participants"; -"Scene.FollowedTags.Header.Posts" = "posts"; +"Scene.FollowedTags.Header.Posts" = "գրառումներ"; "Scene.FollowedTags.Header.PostsToday" = "posts today"; "Scene.FollowedTags.Title" = "Followed Tags"; "Scene.Follower.Footer" = "Followers from other servers are not displayed."; -"Scene.Follower.Title" = "follower"; +"Scene.Follower.Title" = "հետեւորդ"; "Scene.Following.Footer" = "Follows from other servers are not displayed."; -"Scene.Following.Title" = "following"; +"Scene.Following.Title" = "հետեւած"; "Scene.HomeTimeline.NavigationBarState.Accessibility.LogoHint" = "Tap to scroll to top and tap again to previous location"; -"Scene.HomeTimeline.NavigationBarState.Accessibility.LogoLabel" = "Mastodon"; -"Scene.HomeTimeline.NavigationBarState.NewPosts" = "See new posts"; +"Scene.HomeTimeline.NavigationBarState.Accessibility.LogoLabel" = "Մաստոդոն"; +"Scene.HomeTimeline.NavigationBarState.NewPosts" = "Տեսնել նորերը"; "Scene.HomeTimeline.NavigationBarState.Offline" = "Անցանց"; -"Scene.HomeTimeline.NavigationBarState.Published" = "Published!"; +"Scene.HomeTimeline.NavigationBarState.Published" = "Հրատարակուած է"; "Scene.HomeTimeline.NavigationBarState.Publishing" = "Publishing post..."; "Scene.HomeTimeline.Title" = "Հիմնական"; "Scene.Login.ServerSearchField.Placeholder" = "Enter URL or search for your server"; "Scene.Login.Subtitle" = "Log you in on the server you created your account on."; "Scene.Login.Title" = "Բարի վերադարձ"; -"Scene.Notification.FollowRequest.Accept" = "Accept"; -"Scene.Notification.FollowRequest.Accepted" = "Accepted"; -"Scene.Notification.FollowRequest.Reject" = "reject"; -"Scene.Notification.FollowRequest.Rejected" = "Rejected"; +"Scene.Notification.FollowRequest.Accept" = "Ընդունել"; +"Scene.Notification.FollowRequest.Accepted" = "Ընդունուած"; +"Scene.Notification.FollowRequest.Reject" = "մերժել"; +"Scene.Notification.FollowRequest.Rejected" = "Մերժուած"; "Scene.Notification.Keyobard.ShowEverything" = "Show Everything"; "Scene.Notification.Keyobard.ShowMentions" = "Show Mentions"; "Scene.Notification.NotificationDescription.FavoritedYourPost" = "favorited your post"; @@ -306,55 +307,59 @@ uploaded to Mastodon."; "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.Notification.Title.Everything" = "Ամեն ինչ"; +"Scene.Notification.Title.Mentions" = "Յիշատակումներ"; "Scene.Preview.Keyboard.ClosePreview" = "Close Preview"; "Scene.Preview.Keyboard.ShowNext" = "Show Next"; "Scene.Preview.Keyboard.ShowPrevious" = "Show Previous"; "Scene.Privacy.Button.Confirm" = "Համաձայն եմ"; "Scene.Privacy.Description" = "Although the Mastodon app does not collect any data, the server you sign up through may have a different policy. Take a minute to review and agree to the Mastodon app privacy policy and your server’s privacy policy."; "Scene.Privacy.Policy.Ios" = "Privacy Policy - Mastodon for iOS"; -"Scene.Privacy.Policy.Server" = "Privacy Policy - %@"; -"Scene.Privacy.Title" = "Privacy"; +"Scene.Privacy.Policy.Server" = "Գաղտնիութեան քաղաքականութիւն - %@"; +"Scene.Privacy.Title" = "Գաղտնիութիւն"; "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.FamiliarFollowers" = "mutuals"; -"Scene.Profile.Dashboard.MyFollowers" = "followers"; -"Scene.Profile.Dashboard.MyFollowing" = "following"; -"Scene.Profile.Dashboard.MyPosts" = "posts"; -"Scene.Profile.Dashboard.OtherFollowers" = "followers"; -"Scene.Profile.Dashboard.OtherFollowing" = "following"; -"Scene.Profile.Dashboard.OtherPosts" = "posts"; +"Scene.Profile.Dashboard.MyFollowers" = "հետեւորդ"; +"Scene.Profile.Dashboard.MyFollowing" = "հետեւած"; +"Scene.Profile.Dashboard.MyPosts" = "գրառումներ"; +"Scene.Profile.Dashboard.OtherFollowers" = "հետեւորդ"; +"Scene.Profile.Dashboard.OtherFollowing" = "հետեւած"; +"Scene.Profile.Dashboard.OtherPosts" = "գրառումներ"; "Scene.Profile.Fields.AddRow" = "Add Row"; -"Scene.Profile.Fields.Joined" = "Joined"; -"Scene.Profile.Fields.Placeholder.Content" = "Content"; -"Scene.Profile.Fields.Placeholder.Label" = "Label"; +"Scene.Profile.Fields.Joined" = "Միացել է"; +"Scene.Profile.Fields.Placeholder.Content" = "Բովանդակութիւն"; +"Scene.Profile.Fields.Placeholder.Label" = "Պիտակ"; "Scene.Profile.Fields.Verified.Long" = "Ownership of this link was checked on %@"; "Scene.Profile.Fields.Verified.Short" = "Verified on %@"; -"Scene.Profile.Header.FollowsYou" = "Follows You"; +"Scene.Profile.Header.FollowsYou" = "Հետեւում է քեզ"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirm to block %@"; -"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Block Account"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Արգելափակել հաշիւը"; "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.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "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" = "Մասին"; -"Scene.Profile.SegmentedControl.Media" = "Media"; +"Scene.Profile.SegmentedControl.Media" = "Մեդիա"; "Scene.Profile.SegmentedControl.Posts" = "Գրառումներ"; "Scene.Profile.SegmentedControl.PostsAndReplies" = "Posts and Replies"; -"Scene.Profile.SegmentedControl.Replies" = "Replies"; +"Scene.Profile.SegmentedControl.Replies" = "Արձագանքներ"; "Scene.RebloggedBy.Title" = "Reblogged By"; "Scene.Register.Error.Item.Agreement" = "Agreement"; "Scene.Register.Error.Item.Email" = "Էլ. փոստ"; -"Scene.Register.Error.Item.Locale" = "Locale"; +"Scene.Register.Error.Item.Locale" = "Տեղանք"; "Scene.Register.Error.Item.Password" = "Գաղտնաբառ"; "Scene.Register.Error.Item.Reason" = "Պատճառ"; "Scene.Register.Error.Item.Username" = "Մուտքանուն"; @@ -372,13 +377,13 @@ uploaded to Mastodon."; "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.Avatar.Delete" = "Ջնջել"; "Scene.Register.Input.DisplayName.Placeholder" = "ցուցադրուող անուն"; "Scene.Register.Input.Email.Placeholder" = "էլ. փոստ"; "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.CharacterLimit" = "8 նիշ"; "Scene.Register.Input.Password.ConfirmationPlaceholder" = "Հաստատել գաղտնաբառը"; "Scene.Register.Input.Password.Hint" = "Your password needs at least eight characters"; "Scene.Register.Input.Password.Placeholder" = "գաղտնաբառ"; @@ -399,7 +404,7 @@ uploaded to Mastodon."; "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.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."; @@ -431,16 +436,16 @@ uploaded to Mastodon."; "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.Follow" = "Հետեւել"; "Scene.Search.Recommend.Accounts.Title" = "Accounts you might like"; -"Scene.Search.Recommend.ButtonText" = "See All"; +"Scene.Search.Recommend.ButtonText" = "Տեսնել բոլորը"; "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.Cancel" = "Չեղարկել"; "Scene.Search.SearchBar.Placeholder" = "Search hashtags and users"; -"Scene.Search.Searching.Clear" = "Clear"; -"Scene.Search.Searching.ClearAll" = "Clear all"; +"Scene.Search.Searching.Clear" = "Մաքրել"; +"Scene.Search.Searching.ClearAll" = "Մաքրել բոլորը"; "Scene.Search.Searching.EmptyState.NoResults" = "No results"; "Scene.Search.Searching.Hashtag" = "Go to #%@"; "Scene.Search.Searching.NoUser.Message" = "There's no Useraccount \"%@\" on %@"; @@ -450,23 +455,23 @@ uploaded to Mastodon."; "Scene.Search.Searching.Profile" = "Go to @%@@%@"; "Scene.Search.Searching.RecentSearch" = "Recent searches"; "Scene.Search.Searching.Url" = "Open URL in Mastodon"; -"Scene.Search.Title" = "Search"; +"Scene.Search.Title" = "Որոնել"; "Scene.ServerPicker.Button.Category.Academia" = "academia"; "Scene.ServerPicker.Button.Category.Activism" = "activism"; -"Scene.ServerPicker.Button.Category.All" = "All"; +"Scene.ServerPicker.Button.Category.All" = "Բոլորը"; "Scene.ServerPicker.Button.Category.AllAccessiblityDescription" = "Category: All"; -"Scene.ServerPicker.Button.Category.Art" = "art"; -"Scene.ServerPicker.Button.Category.Food" = "food"; +"Scene.ServerPicker.Button.Category.Art" = "արուեստ"; +"Scene.ServerPicker.Button.Category.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.Language" = "Language"; -"Scene.ServerPicker.Button.SeeLess" = "See Less"; +"Scene.ServerPicker.Button.Category.Games" = "խաղեր"; +"Scene.ServerPicker.Button.Category.General" = "ընդհանուր"; +"Scene.ServerPicker.Button.Category.Journalism" = "լրագրութիւն"; +"Scene.ServerPicker.Button.Category.Lgbt" = "լգբտ"; +"Scene.ServerPicker.Button.Category.Music" = "երաժշտութիւն"; +"Scene.ServerPicker.Button.Category.Regional" = "կրօնական"; +"Scene.ServerPicker.Button.Category.Tech" = "տեխնոլոգիա"; +"Scene.ServerPicker.Button.Language" = "Լեզու"; +"Scene.ServerPicker.Button.SeeLess" = "Տեսնել քիչ"; "Scene.ServerPicker.Button.SeeMore" = "Տեսնել աւելին"; "Scene.ServerPicker.Button.SignupSpeed" = "Sign-up Speed"; "Scene.ServerPicker.EmptyState.BadNetwork" = "Something went wrong while loading the data. Check your internet connection."; @@ -483,8 +488,8 @@ uploaded to Mastodon."; "Scene.ServerPicker.SignupSpeed.Instant" = "Instant Sign-up"; "Scene.ServerPicker.SignupSpeed.ManuallyReviewed" = "Manual Review"; "Scene.ServerPicker.Title" = "Pick Server"; -"Scene.ServerRules.Button.Confirm" = "I Agree"; -"Scene.ServerRules.PrivacyPolicy" = "privacy policy"; +"Scene.ServerRules.Button.Confirm" = "Համաձայն եմ"; +"Scene.ServerRules.PrivacyPolicy" = "գաղտնիութեան քաղաքականութիւն"; "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"; @@ -493,45 +498,45 @@ uploaded to Mastodon."; "Scene.Settings.AboutMastodon.ContributeToMastodon" = "Contribute to Mastodon"; "Scene.Settings.AboutMastodon.MoreSettings" = "Even More Settings"; "Scene.Settings.AboutMastodon.PrivacyPolicy" = "Privacy Policy"; -"Scene.Settings.AboutMastodon.Title" = "About"; -"Scene.Settings.General.Appearance.Dark" = "Dark"; -"Scene.Settings.General.Appearance.Light" = "Light"; -"Scene.Settings.General.Appearance.SectionTitle" = "Appearance"; +"Scene.Settings.AboutMastodon.Title" = "Մասին"; +"Scene.Settings.General.Appearance.Dark" = "Մուգ"; +"Scene.Settings.General.Appearance.Light" = "Բաց"; +"Scene.Settings.General.Appearance.SectionTitle" = "Տեսք"; "Scene.Settings.General.Appearance.System" = "Use Device Appearance"; -"Scene.Settings.General.Design.SectionTitle" = "Design"; +"Scene.Settings.General.Design.SectionTitle" = "Ոճ"; "Scene.Settings.General.Design.ShowAnimations" = "Play Animated Avatars and Emoji"; "Scene.Settings.General.Links.OpenInBrowser" = "Open in Browser"; "Scene.Settings.General.Links.OpenInMastodon" = "Open in Mastodon"; -"Scene.Settings.General.Links.SectionTitle" = "Links"; -"Scene.Settings.General.Title" = "General"; -"Scene.Settings.Notifications.Alert.Boosts" = "Boosts"; -"Scene.Settings.Notifications.Alert.Favorites" = "Favorites"; +"Scene.Settings.General.Links.SectionTitle" = "Յղումներ"; +"Scene.Settings.General.Title" = "Ընդհանուր"; +"Scene.Settings.Notifications.Alert.Boosts" = "Տարածումներ"; +"Scene.Settings.Notifications.Alert.Favorites" = "Հաւանածներ"; "Scene.Settings.Notifications.Alert.MentionsAndReplies" = "Mentions & Replies"; -"Scene.Settings.Notifications.Alert.NewFollowers" = "New Followers"; +"Scene.Settings.Notifications.Alert.NewFollowers" = "Նոր հետեւողներ"; "Scene.Settings.Notifications.Disabled.GoToSettings" = "Go to Notification Settings"; "Scene.Settings.Notifications.Disabled.NotificationHint" = "Turn on notifications from your device settings to see updates on your lock screen."; -"Scene.Settings.Notifications.Policy.Anyone" = "Anyone"; -"Scene.Settings.Notifications.Policy.Follow" = "People you follow"; -"Scene.Settings.Notifications.Policy.Followers" = "People who follow you"; -"Scene.Settings.Notifications.Policy.Noone" = "No one"; +"Scene.Settings.Notifications.Policy.Anyone" = "Բոլորը"; +"Scene.Settings.Notifications.Policy.Follow" = "Մարդիկ, որոնց դու հետեւում ես"; +"Scene.Settings.Notifications.Policy.Followers" = "Մարդիկ, որոնք ձեզ հետեւում են"; +"Scene.Settings.Notifications.Policy.Noone" = "Ոչ ոք"; "Scene.Settings.Notifications.Policy.Title" = "Get Notifications from"; -"Scene.Settings.Notifications.Title" = "Notifications"; -"Scene.Settings.Overview.AboutMastodon" = "About Mastodon"; -"Scene.Settings.Overview.General" = "General"; +"Scene.Settings.Notifications.Title" = "Ծանուցումներ"; +"Scene.Settings.Overview.AboutMastodon" = "Մաստոդոնի մասին"; +"Scene.Settings.Overview.General" = "Ընդհանուր"; "Scene.Settings.Overview.Logout" = "Logout %@"; -"Scene.Settings.Overview.Notifications" = "Notifications"; +"Scene.Settings.Overview.Notifications" = "Ծանուցումներ"; "Scene.Settings.Overview.ServerDetails" = "Server Details"; "Scene.Settings.Overview.SupportMastodon" = "Support Mastodon"; -"Scene.Settings.Overview.Title" = "Settings"; -"Scene.Settings.ServerDetails.About" = "About"; +"Scene.Settings.Overview.Title" = "Կարգաւորումներ"; +"Scene.Settings.ServerDetails.About" = "Մասին"; "Scene.Settings.ServerDetails.AboutInstance.LegalNotice" = "A legal notice"; "Scene.Settings.ServerDetails.AboutInstance.MessageAdmin" = "Message Admin"; -"Scene.Settings.ServerDetails.AboutInstance.Title" = "Administrator"; -"Scene.Settings.ServerDetails.Rules" = "Rules"; -"Scene.SuggestionAccount.FollowAll" = "Follow all"; +"Scene.Settings.ServerDetails.AboutInstance.Title" = "Ադմինիստրատոր"; +"Scene.Settings.ServerDetails.Rules" = "Կանոններ"; +"Scene.SuggestionAccount.FollowAll" = "Հետեւել բոլորին"; "Scene.SuggestionAccount.Title" = "Popular on Mastodon"; -"Scene.Thread.BackTitle" = "Post"; -"Scene.Thread.Title" = "Post from %@"; +"Scene.Thread.BackTitle" = "Գրառում"; +"Scene.Thread.Title" = "%@-ի գրառումը"; "Scene.Welcome.Education.A11Y.WhatIsMastodon.Title" = "What is Mastodon?"; "Scene.Welcome.Education.Mastodon.Description" = "Mastodon is a decentralized social network, meaning no single company controls it. It’s made up of many independently-run servers, all connected together."; "Scene.Welcome.Education.Mastodon.Title" = "Բարի գալուստ Մաստոդոն"; @@ -545,11 +550,11 @@ uploaded to Mastodon."; "Widget.Common.UnsupportedWidgetFamily" = "Sorry but this Widget family is unsupported."; "Widget.Common.UserNotLoggedIn" = "Please open Mastodon to log in to an Account."; "Widget.FollowersCount.ConfigurationDescription" = "Show number of followers."; -"Widget.FollowersCount.ConfigurationDisplayName" = "Followers"; +"Widget.FollowersCount.ConfigurationDisplayName" = "Հետեւորդ"; "Widget.FollowersCount.FollowersToday" = "%@ followers today"; "Widget.FollowersCount.Title" = "FOLLOWERS"; "Widget.Hashtag.Configuration.Description" = "Shows a recent post with the selected hashtag."; -"Widget.Hashtag.Configuration.DisplayName" = "Hashtag"; +"Widget.Hashtag.Configuration.DisplayName" = "Պիտակ"; "Widget.Hashtag.NotFound.Account" = "@johnMastodon@no-such.account"; "Widget.Hashtag.NotFound.AccountName" = "John Mastodon"; "Widget.Hashtag.NotFound.Content" = "Sorry, we couldn’t find any posts with the hashtag #%@. Please try a #DifferentHashtag or check the widget settings."; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/hy.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/hy.lproj/Localizable.stringsdict index 2b09ee004..e605dbf61 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/hy.lproj/Localizable.stringsdict +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/hy.lproj/Localizable.stringsdict @@ -104,9 +104,9 @@ NSStringFormatValueTypeKey ld one - post + գրառում other - posts + գրառումներ plural.count.media @@ -136,9 +136,9 @@ NSStringFormatValueTypeKey ld one - 1 post + 1 գրառում other - %ld posts + %ld գրառում plural.count.favorite diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings index e3aa276dc..f1de333c8 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings @@ -70,9 +70,10 @@ Per favore verifica la tua connessione internet."; "Common.Controls.Actions.UnblockDomain" = "Sblocca %@"; "Common.Controls.Actions.Unfollow" = "Smetti di seguire %@"; "Common.Controls.Friendship.Block" = "Blocca"; -"Common.Controls.Friendship.BlockDomain" = "Blocca %@"; +"Common.Controls.Friendship.BlockDomain" = "Blocca il dominio %@"; "Common.Controls.Friendship.BlockUser" = "Blocca %@"; "Common.Controls.Friendship.Blocked" = "Bloccato"; +"Common.Controls.Friendship.DomainBlocked" = "Dominio bloccato"; "Common.Controls.Friendship.EditInfo" = "Modifica info"; "Common.Controls.Friendship.Follow" = "Segui"; "Common.Controls.Friendship.Following" = "Stai seguendo"; @@ -334,6 +335,8 @@ caricato su Mastodon."; "Scene.Profile.Fields.Verified.Long" = "La proprietà di questo collegamento è stata verificata il %@"; "Scene.Profile.Fields.Verified.Short" = "Verificato il %@"; "Scene.Profile.Header.FollowsYou" = "Ti segue"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Conferma per bloccare il dominio %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Blocca il dominio"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confermi di bloccare %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Blocca account"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Conferma di nascondere le condivisioni"; @@ -342,6 +345,8 @@ caricato su Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Silenzia account"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Conferma di mostrare le condivisioni"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Mostra le condivisioni"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Conferma per sbloccare il dominio %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Sblocca il dominio"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Conferma per sbloccare %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Sblocca account"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confermi di riattivare %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings index cd9b1bcee..ca57dce3c 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings @@ -70,9 +70,10 @@ "Common.Controls.Actions.UnblockDomain" = "%@のブロックを解除"; "Common.Controls.Actions.Unfollow" = "%@をフォロー解除"; "Common.Controls.Friendship.Block" = "ブロック"; -"Common.Controls.Friendship.BlockDomain" = "%@をブロック"; +"Common.Controls.Friendship.BlockDomain" = "%@全体をブロック"; "Common.Controls.Friendship.BlockUser" = "%@をブロック"; "Common.Controls.Friendship.Blocked" = "ブロック済み"; +"Common.Controls.Friendship.DomainBlocked" = "ドメインブロック中"; "Common.Controls.Friendship.EditInfo" = "編集"; "Common.Controls.Friendship.Follow" = "フォロー"; "Common.Controls.Friendship.Following" = "フォロー中"; @@ -329,6 +330,8 @@ "Scene.Profile.Fields.Verified.Long" = "このリンクの所有権は %@ に確認されました"; "Scene.Profile.Fields.Verified.Short" = "%@ で確認しました"; "Scene.Profile.Header.FollowsYou" = "フォローされています"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "%@のドメイン全体をブロックしてよいですか?"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "ドメインのブロック"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "%@をブロックしますか?"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "アカウントをブロック"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "ブーストを非表示にしますか?"; @@ -337,6 +340,8 @@ "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "アカウントをミュート"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "ブーストを表示しますか?"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "ブーストを表示"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "%@のブロックを解除してよいですか?"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "ドメインのブロックを解除"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "%@のブロックを解除しますか?"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "アカウントのブロックを解除"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "%@をミュートしますか?"; @@ -438,8 +443,8 @@ "Scene.Search.Searching.ClearAll" = "すべて消去"; "Scene.Search.Searching.EmptyState.NoResults" = "なし"; "Scene.Search.Searching.Hashtag" = "#%@ へ移動"; -"Scene.Search.Searching.NoUser.Message" = "There's no Useraccount \"%@\" on %@"; -"Scene.Search.Searching.NoUser.Title" = "No User Account Found"; +"Scene.Search.Searching.NoUser.Message" = "\"%@\"というユーザーは%@には見つかりませんでした"; +"Scene.Search.Searching.NoUser.Title" = "ユーザーアカウントが見つかりませんでした"; "Scene.Search.Searching.People" = "「%@」に一致するアカウント"; "Scene.Search.Searching.Posts" = "「%@」に一致する投稿"; "Scene.Search.Searching.Profile" = "@%@@%@ へ移動"; @@ -484,45 +489,45 @@ "Scene.ServerRules.Subtitle" = "これらのルールは、%@の管理者によって設定されています。"; "Scene.ServerRules.TermsOfService" = "利用規約"; "Scene.ServerRules.Title" = "いくつかのルールがあります。"; -"Scene.Settings.AboutMastodon.ClearMediaStorage" = "Clear Media Storage"; -"Scene.Settings.AboutMastodon.ContributeToMastodon" = "Contribute to Mastodon"; -"Scene.Settings.AboutMastodon.MoreSettings" = "Even More Settings"; -"Scene.Settings.AboutMastodon.PrivacyPolicy" = "Privacy Policy"; -"Scene.Settings.AboutMastodon.Title" = "About"; -"Scene.Settings.General.Appearance.Dark" = "Dark"; -"Scene.Settings.General.Appearance.Light" = "Light"; -"Scene.Settings.General.Appearance.SectionTitle" = "Appearance"; -"Scene.Settings.General.Appearance.System" = "Use Device Appearance"; -"Scene.Settings.General.Design.SectionTitle" = "Design"; -"Scene.Settings.General.Design.ShowAnimations" = "Play Animated Avatars and Emoji"; -"Scene.Settings.General.Links.OpenInBrowser" = "Open in Browser"; -"Scene.Settings.General.Links.OpenInMastodon" = "Open in Mastodon"; -"Scene.Settings.General.Links.SectionTitle" = "Links"; -"Scene.Settings.General.Title" = "General"; -"Scene.Settings.Notifications.Alert.Boosts" = "Boosts"; -"Scene.Settings.Notifications.Alert.Favorites" = "Favorites"; -"Scene.Settings.Notifications.Alert.MentionsAndReplies" = "Mentions & Replies"; -"Scene.Settings.Notifications.Alert.NewFollowers" = "New Followers"; -"Scene.Settings.Notifications.Disabled.GoToSettings" = "Go to Notification Settings"; -"Scene.Settings.Notifications.Disabled.NotificationHint" = "Turn on notifications from your device settings to see updates on your lock screen."; -"Scene.Settings.Notifications.Policy.Anyone" = "Anyone"; -"Scene.Settings.Notifications.Policy.Follow" = "People you follow"; -"Scene.Settings.Notifications.Policy.Followers" = "People who follow you"; -"Scene.Settings.Notifications.Policy.Noone" = "No one"; -"Scene.Settings.Notifications.Policy.Title" = "Get Notifications from"; -"Scene.Settings.Notifications.Title" = "Notifications"; -"Scene.Settings.Overview.AboutMastodon" = "About Mastodon"; -"Scene.Settings.Overview.General" = "General"; -"Scene.Settings.Overview.Logout" = "Logout %@"; -"Scene.Settings.Overview.Notifications" = "Notifications"; -"Scene.Settings.Overview.ServerDetails" = "Server Details"; -"Scene.Settings.Overview.SupportMastodon" = "Support Mastodon"; -"Scene.Settings.Overview.Title" = "Settings"; -"Scene.Settings.ServerDetails.About" = "About"; -"Scene.Settings.ServerDetails.AboutInstance.LegalNotice" = "A legal notice"; -"Scene.Settings.ServerDetails.AboutInstance.MessageAdmin" = "Message Admin"; -"Scene.Settings.ServerDetails.AboutInstance.Title" = "Administrator"; -"Scene.Settings.ServerDetails.Rules" = "Rules"; +"Scene.Settings.AboutMastodon.ClearMediaStorage" = "メディアキャッシュの削除"; +"Scene.Settings.AboutMastodon.ContributeToMastodon" = "Mastodonに貢献する"; +"Scene.Settings.AboutMastodon.MoreSettings" = "さらに詳しい設定"; +"Scene.Settings.AboutMastodon.PrivacyPolicy" = "プライバシーポリシー"; +"Scene.Settings.AboutMastodon.Title" = "Mastodonについて"; +"Scene.Settings.General.Appearance.Dark" = "ダーク"; +"Scene.Settings.General.Appearance.Light" = "ライト"; +"Scene.Settings.General.Appearance.SectionTitle" = "テーマ"; +"Scene.Settings.General.Appearance.System" = "端末の設定に合わせる"; +"Scene.Settings.General.Design.SectionTitle" = "アニメーション"; +"Scene.Settings.General.Design.ShowAnimations" = "アニメーションアイコンと絵文字を再生"; +"Scene.Settings.General.Links.OpenInBrowser" = "ブラウザアプリで開く"; +"Scene.Settings.General.Links.OpenInMastodon" = "アプリ内ブラウザアプリで開く"; +"Scene.Settings.General.Links.SectionTitle" = "Webブラウザ"; +"Scene.Settings.General.Title" = "一般"; +"Scene.Settings.Notifications.Alert.Boosts" = "ブースト"; +"Scene.Settings.Notifications.Alert.Favorites" = "お気に入り"; +"Scene.Settings.Notifications.Alert.MentionsAndReplies" = "メンションと返信"; +"Scene.Settings.Notifications.Alert.NewFollowers" = "新しいフォロワー"; +"Scene.Settings.Notifications.Disabled.GoToSettings" = "端末の通知設定を開く"; +"Scene.Settings.Notifications.Disabled.NotificationHint" = "プッシュ通知を受け取るには、端末の設定から通知を許可しましょう。"; +"Scene.Settings.Notifications.Policy.Anyone" = "誰でも"; +"Scene.Settings.Notifications.Policy.Follow" = "あなたがフォローしている人のみ"; +"Scene.Settings.Notifications.Policy.Followers" = "あなたのフォロワーのみ"; +"Scene.Settings.Notifications.Policy.Noone" = "誰にも許可しない"; +"Scene.Settings.Notifications.Policy.Title" = "通知を送信する人"; +"Scene.Settings.Notifications.Title" = "通知"; +"Scene.Settings.Overview.AboutMastodon" = "Mastodonについて"; +"Scene.Settings.Overview.General" = "一般"; +"Scene.Settings.Overview.Logout" = "%@ をログアウト"; +"Scene.Settings.Overview.Notifications" = "通知"; +"Scene.Settings.Overview.ServerDetails" = "サーバーの詳細"; +"Scene.Settings.Overview.SupportMastodon" = "Mastodonを支援する"; +"Scene.Settings.Overview.Title" = "設定"; +"Scene.Settings.ServerDetails.About" = "このサーバーについて"; +"Scene.Settings.ServerDetails.AboutInstance.LegalNotice" = "法的通知"; +"Scene.Settings.ServerDetails.AboutInstance.MessageAdmin" = "管理者にメッセージを送信"; +"Scene.Settings.ServerDetails.AboutInstance.Title" = "管理者"; +"Scene.Settings.ServerDetails.Rules" = "ルール"; "Scene.SuggestionAccount.FollowAll" = "すべてフォロー"; "Scene.SuggestionAccount.Title" = "人気のアカウント"; "Scene.Thread.BackTitle" = "投稿"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings index f84af63f1..ea5efbbd2 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings @@ -70,9 +70,10 @@ Ma ulac aɣilif, senqed tuqqna-inek internet."; "Common.Controls.Actions.UnblockDomain" = "Serreḥ i %@"; "Common.Controls.Actions.Unfollow" = "Unfollow %@"; "Common.Controls.Friendship.Block" = "Sewḥel"; -"Common.Controls.Friendship.BlockDomain" = "Sewḥel %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Sewḥel %@"; "Common.Controls.Friendship.Blocked" = "Yettusewḥel"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Ẓreg talɣut"; "Common.Controls.Friendship.Follow" = "Ḍfeṛ"; "Common.Controls.Friendship.Following" = "Yettwaḍfar"; @@ -334,6 +335,8 @@ Ad d-yettwasali ɣef Mastodon."; "Scene.Profile.Fields.Verified.Long" = "Ownership of this link was checked on %@"; "Scene.Profile.Fields.Verified.Short" = "Verified on %@"; "Scene.Profile.Header.FollowsYou" = "Yeṭṭafaṛ-ik•im"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Sentem asewḥel n %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Sewḥel amiḍan"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirm to hide reblogs"; @@ -342,6 +345,8 @@ Ad d-yettwasali ɣef Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Sgugem amiḍan"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Confirm to show reblogs"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Show Reblogs"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Sentem tukksa n usgugem i %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Kkes asewḥel i umiḍan"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Sentem tukksa n usgugem i %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings index 3c57a6e2a..50c0c0eb3 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings @@ -70,9 +70,10 @@ Jkx girêdana înternetê xwe kontrol bike."; "Common.Controls.Actions.UnblockDomain" = "%@ asteng neke"; "Common.Controls.Actions.Unfollow" = "Unfollow %@"; "Common.Controls.Friendship.Block" = "Asteng bike"; -"Common.Controls.Friendship.BlockDomain" = "%@ asteng bike"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "%@ asteng bike"; "Common.Controls.Friendship.Blocked" = "Astengkirî"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Zanyariyan serrast bike"; "Common.Controls.Friendship.Follow" = "Bişopîne"; "Common.Controls.Friendship.Following" = "Dişopîne"; @@ -334,6 +335,8 @@ Profîla te ji wan ra wiha xuya dike."; "Scene.Profile.Fields.Verified.Long" = "Xwedaniya li vê girêdanê di %@ de hatiye kontrolkirin"; "Scene.Profile.Fields.Verified.Short" = "Hate piştrastkirin li ser %@"; "Scene.Profile.Header.FollowsYou" = "Te dişopîne"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "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" = "Bo veşartina bilindkirinan bipejirîne"; @@ -342,6 +345,8 @@ Profîla te ji wan ra wiha xuya dike."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Ajimêrê bêdeng bike"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Bo nîşandana bilindkirinan bipejirîne"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Bilindkirinan nîşan bide"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "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 4a9d1a344..d2c2857de 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings @@ -69,9 +69,10 @@ "Common.Controls.Actions.UnblockDomain" = "%@ deblokkeren"; "Common.Controls.Actions.Unfollow" = "Ontvolg %@"; "Common.Controls.Friendship.Block" = "Blokkeren"; -"Common.Controls.Friendship.BlockDomain" = "%@ blokkeren"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "%@ blokkeren"; "Common.Controls.Friendship.Blocked" = "Geblokkeerd"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Bewerken"; "Common.Controls.Friendship.Follow" = "Volgen"; "Common.Controls.Friendship.Following" = "Volgend"; @@ -328,6 +329,8 @@ Jouw profiel ziet er zo uit voor hen."; "Scene.Profile.Fields.Verified.Long" = "Eigendom van deze link is gecontroleerd op %@"; "Scene.Profile.Fields.Verified.Short" = "Geverifieerd op %@"; "Scene.Profile.Header.FollowsYou" = "Volgt jou"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Het blokkeren van %@ bevestigen"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Het negeren van %@ bevestigen"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Verbergen van boosts bevestigen"; @@ -336,6 +339,8 @@ Jouw profiel ziet er zo uit voor hen."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Account negeren"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Tonen van boosts bevestigen"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Boosts tonen"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Het deblokkeren van %@ bevestigen"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Account deblokkeren"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Het niet langer negeren van %@ bevestigen"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings index 9257b22d4..7ea7670fa 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings @@ -70,9 +70,10 @@ "Common.Controls.Actions.UnblockDomain" = "Разблокировать %@"; "Common.Controls.Actions.Unfollow" = "Unfollow %@"; "Common.Controls.Friendship.Block" = "Заблокировать"; -"Common.Controls.Friendship.BlockDomain" = "Заблокировать %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Заблокировать %@"; "Common.Controls.Friendship.Blocked" = "В заблокированных"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Изменить"; "Common.Controls.Friendship.Follow" = "Подписаться"; "Common.Controls.Friendship.Following" = "В подписках"; @@ -342,6 +343,8 @@ "Scene.Profile.Fields.Verified.Long" = "Ownership of this link was checked on %@"; "Scene.Profile.Fields.Verified.Short" = "Verified on %@"; "Scene.Profile.Header.FollowsYou" = "Подписан(а) на вас"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirm to block %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Block Account"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Confirm to hide reblogs"; @@ -350,6 +353,8 @@ "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.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Confirm to unblock %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Unblock Account"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Убрать %@ из игнорируемых?"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/sl.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/sl.lproj/Localizable.strings index 5872f330a..c35c21d8d 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/sl.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/sl.lproj/Localizable.strings @@ -70,9 +70,10 @@ Preverite svojo internetno povezavo."; "Common.Controls.Actions.UnblockDomain" = "Odblokiraj %@"; "Common.Controls.Actions.Unfollow" = "Prenehaj slediti %@"; "Common.Controls.Friendship.Block" = "Blokiraj"; -"Common.Controls.Friendship.BlockDomain" = "Blokiraj %@"; +"Common.Controls.Friendship.BlockDomain" = "Blokiraj domeno %@"; "Common.Controls.Friendship.BlockUser" = "Blokiraj %@"; "Common.Controls.Friendship.Blocked" = "Blokirano"; +"Common.Controls.Friendship.DomainBlocked" = "Domena blokirana"; "Common.Controls.Friendship.EditInfo" = "Uredi podatke"; "Common.Controls.Friendship.Follow" = "Sledi"; "Common.Controls.Friendship.Following" = "Sledi"; @@ -334,6 +335,8 @@ možno naložiti v Mastodon."; "Scene.Profile.Fields.Verified.Long" = "Lastništvo te povezave je bilo preverjeno %@"; "Scene.Profile.Fields.Verified.Short" = "Preverjeno %@"; "Scene.Profile.Header.FollowsYou" = "Vam sledi"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Potrdite blokado domene %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Blokiraj domeno"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Potrdite za blokado %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Blokiraj račun"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Potrdite, da poobjave ne bodo prikazane"; @@ -342,6 +345,8 @@ možno naložiti v Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Utišaj račun"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Potrdite, da bodo poobjave prikazane"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Pokaži poobjave"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Potrdite umik blokade domene %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Odblokiraj domeno"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Potrdite za umik blokade %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Odblokiraj račun"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Potrdite umik utišanja %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings index ff4c77eaf..a349973f0 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings @@ -70,9 +70,10 @@ Kontrollera din internetanslutning."; "Common.Controls.Actions.UnblockDomain" = "Avblockera %@"; "Common.Controls.Actions.Unfollow" = "Avfölj %@"; "Common.Controls.Friendship.Block" = "Blockera"; -"Common.Controls.Friendship.BlockDomain" = "Blockera %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "Blockera %@"; "Common.Controls.Friendship.Blocked" = "Blockerad"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Redigera info"; "Common.Controls.Friendship.Follow" = "Följ"; "Common.Controls.Friendship.Following" = "Följer"; @@ -334,6 +335,8 @@ laddas upp till Mastodon."; "Scene.Profile.Fields.Verified.Long" = "Ägarskap för denna länk kontrollerades den %@"; "Scene.Profile.Fields.Verified.Short" = "Verifierad på %@"; "Scene.Profile.Header.FollowsYou" = "Följer dig"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Blockera domän"; "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 boostar"; @@ -342,6 +345,8 @@ laddas upp till Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Tysta konto"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Bekräfta för att visa boostar"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Visa boostar"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "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 %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings index ffc9fc4ce..86bb41938 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings @@ -58,9 +58,9 @@ "Common.Controls.Actions.SavePhoto" = "บันทึกรูปภาพ"; "Common.Controls.Actions.SeeMore" = "ดูเพิ่มเติม"; "Common.Controls.Actions.Settings" = "การตั้งค่า"; -"Common.Controls.Actions.Share" = "แบ่งปัน"; -"Common.Controls.Actions.SharePost" = "แบ่งปันโพสต์"; -"Common.Controls.Actions.ShareUser" = "แบ่งปัน %@"; +"Common.Controls.Actions.Share" = "แชร์"; +"Common.Controls.Actions.SharePost" = "แชร์โพสต์"; +"Common.Controls.Actions.ShareUser" = "แชร์ %@"; "Common.Controls.Actions.SignIn" = "เข้าสู่ระบบ"; "Common.Controls.Actions.Skip" = "ข้าม"; "Common.Controls.Actions.TakePhoto" = "ถ่ายรูป"; @@ -70,9 +70,10 @@ "Common.Controls.Actions.UnblockDomain" = "เลิกปิดกั้น %@"; "Common.Controls.Actions.Unfollow" = "เลิกติดตาม %@"; "Common.Controls.Friendship.Block" = "ปิดกั้น"; -"Common.Controls.Friendship.BlockDomain" = "ปิดกั้น %@"; +"Common.Controls.Friendship.BlockDomain" = "ปิดกั้นโดเมน %@"; "Common.Controls.Friendship.BlockUser" = "ปิดกั้น %@"; "Common.Controls.Friendship.Blocked" = "ปิดกั้นอยู่"; +"Common.Controls.Friendship.DomainBlocked" = "ปิดกั้นโดเมนอยู่"; "Common.Controls.Friendship.EditInfo" = "แก้ไขข้อมูล"; "Common.Controls.Friendship.Follow" = "ติดตาม"; "Common.Controls.Friendship.Following" = "กำลังติดตาม"; @@ -110,7 +111,7 @@ "Common.Controls.Status.Actions.Menu" = "เมนู"; "Common.Controls.Status.Actions.Reblog" = "ดัน"; "Common.Controls.Status.Actions.Reply" = "ตอบกลับ"; -"Common.Controls.Status.Actions.ShareLinkInPost" = "แบ่งปันลิงก์ในโพสต์"; +"Common.Controls.Status.Actions.ShareLinkInPost" = "แชร์ลิงก์ในโพสต์"; "Common.Controls.Status.Actions.ShowGif" = "แสดง GIF"; "Common.Controls.Status.Actions.ShowImage" = "แสดงภาพ"; "Common.Controls.Status.Actions.ShowVideoPlayer" = "แสดงตัวเล่นวิดีโอ"; @@ -292,7 +293,7 @@ "Scene.HomeTimeline.NavigationBarState.Publishing" = "กำลังเผยแพร่โพสต์..."; "Scene.HomeTimeline.Title" = "หน้าแรก"; "Scene.Login.ServerSearchField.Placeholder" = "ป้อน URL หรือค้นหาสำหรับเซิร์ฟเวอร์ของคุณ"; -"Scene.Login.Subtitle" = "นำคุณเข้าสู่ระบบในเซิร์ฟเวอร์ที่คุณได้สร้างบัญชีของคุณไว้ใน"; +"Scene.Login.Subtitle" = "นำคุณเข้าสู่ระบบในเซิร์ฟเวอร์ที่คุณได้สร้างบัญชีของคุณไว้"; "Scene.Login.Title" = "ยินดีต้อนรับกลับมา"; "Scene.Notification.FollowRequest.Accept" = "ยอมรับ"; "Scene.Notification.FollowRequest.Accepted" = "ยอมรับแล้ว"; @@ -334,6 +335,8 @@ "Scene.Profile.Fields.Verified.Long" = "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ %@"; "Scene.Profile.Fields.Verified.Short" = "ยืนยันเมื่อ %@"; "Scene.Profile.Header.FollowsYou" = "ติดตามคุณ"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "ยืนยันเพื่อปิดกั้นโดเมน %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "ปิดกั้นโดเมน"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "ยืนยันเพื่อปิดกั้น %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "ปิดกั้นบัญชี"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "ยืนยันเพื่อซ่อนการดัน"; @@ -342,6 +345,8 @@ "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "ซ่อนบัญชี"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "ยืนยันเพื่อแสดงการดัน"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "แสดงการดัน"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "ยืนยันเพื่อเลิกปิดกั้นโดเมน %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "เลิกปิดกั้นโดเมน"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "ยืนยันเพื่อเลิกปิดกั้น %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "เลิกปิดกั้นบัญชี"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "ยืนยันเพื่อเลิกซ่อน %@"; @@ -403,7 +408,7 @@ "Scene.Report.StepFinal.UnfollowUser" = "เลิกติดตาม %@"; "Scene.Report.StepFinal.Unfollowed" = "เลิกติดตามแล้ว"; "Scene.Report.StepFinal.WhenYouSeeSomethingYouDontLikeOnMastodonYouCanRemoveThePersonFromYourExperience." = "เมื่อคุณเห็นบางอย่างที่คุณไม่ชอบใน Mastodon คุณสามารถเอาบุคคลออกจากประสบการณ์ของคุณ"; -"Scene.Report.StepFinal.WhileWeReviewThisYouCanTakeActionAgainstUser" = "ขณะที่เราตรวจทานสิ่งนี้ คุณสามารถดำเนินการกับ %@"; +"Scene.Report.StepFinal.WhileWeReviewThisYouCanTakeActionAgainstUser" = "ขณะที่เราตรวจทานสิ่งนี้ คุณสามารถใช้การกระทำต่อ %@"; "Scene.Report.StepFinal.YouWontSeeTheirPostsOrReblogsInYourHomeFeedTheyWontKnowTheyVeBeenMuted" = "คุณจะไม่เห็นโพสต์หรือการดันของเขาในฟีดหน้าแรกของคุณ เขาจะไม่ทราบว่ามีการซ่อนเขา"; "Scene.Report.StepFour.IsThereAnythingElseWeShouldKnow" = "มีสิ่งอื่นใดที่เราควรทราบหรือไม่?"; "Scene.Report.StepFour.Step4Of4" = "ขั้นตอนที่ 4 จาก 4"; @@ -535,7 +540,7 @@ "Scene.Welcome.Education.A11Y.WhatIsMastodon.Title" = "Mastodon คืออะไร?"; "Scene.Welcome.Education.Mastodon.Description" = "Mastodon เป็นเครือข่ายสังคมแบบกระจายศูนย์ หมายความว่าไม่มีบริษัทใดควบคุมเครือข่ายสังคม เครือข่ายสังคมประกอบด้วยเซิร์ฟเวอร์ที่ทำงานอย่างอิสระจำนวนมาก ทั้งหมดเชื่อมต่อเข้าด้วยกัน"; "Scene.Welcome.Education.Mastodon.Title" = "ยินดีต้อนรับสู่ Mastodon"; -"Scene.Welcome.Education.Servers.Description" = "ทุกบัญชี Mastodon ได้รับการโฮสต์ในเซิร์ฟเวอร์ — แต่ละแห่งมีค่า, กฎ และผู้ดูแลของเซิร์ฟเวอร์เอง ไม่ว่าคุณจะเลือกเซิร์ฟเวอร์ใด คุณสามารถติดตามและโต้ตอบกับผู้คนในเซิร์ฟเวอร์ใด ๆ"; +"Scene.Welcome.Education.Servers.Description" = "ทุกบัญชี Mastodon จะถูกโฮสต์ในเซิร์ฟเวอร์ ซึ่งแต่ละแห่งมีค่านิยม, กฎ และผู้ดูแลของเซิร์ฟเวอร์เอง ไม่ว่าคุณจะเลือกเซิร์ฟเวอร์ใด คุณสามารถติดตามและโต้ตอบกับผู้คนในเซิร์ฟเวอร์ใดก็ได้"; "Scene.Welcome.Education.Servers.Title" = "เซิร์ฟเวอร์คืออะไร?"; "Scene.Welcome.JoinDefaultServer" = "เข้าร่วม %@"; "Scene.Welcome.LearnMore" = "เรียนรู้เพิ่มเติม"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings index 77e6db6bb..dc94e3ad9 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings @@ -69,9 +69,10 @@ "Common.Controls.Actions.UnblockDomain" = "%@ kişisinin engelini kaldır"; "Common.Controls.Actions.Unfollow" = "Unfollow %@"; "Common.Controls.Friendship.Block" = "Engelle"; -"Common.Controls.Friendship.BlockDomain" = "%@ kişisini engelle"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "%@ kişisini engelle"; "Common.Controls.Friendship.Blocked" = "Engellendi"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "Bilgiyi Düzenle"; "Common.Controls.Friendship.Follow" = "Takip et"; "Common.Controls.Friendship.Following" = "Takip ediliyor"; @@ -333,6 +334,8 @@ yüklenemiyor."; "Scene.Profile.Fields.Verified.Long" = "%@ adresinin sahipliği kontrol edilmiş"; "Scene.Profile.Fields.Verified.Short" = "%@ tarafında onaylı"; "Scene.Profile.Header.FollowsYou" = "Seni takip ediyor"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "%@ engellemeyi onayla"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Hesabı Engelle"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Yeniden paylaşımları gizlemeyi onayla"; @@ -341,6 +344,8 @@ yüklenemiyor."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Hesabı sustur"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Yeniden paylaşımları göstermeyi onayla"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Yeniden Paylaşımları Göster"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "%@ engellemeyi kaldırmayı onaylayın"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Hesabın Engelini Kaldır"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "%@ susturmasını kaldırmak için onaylayın"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings index 5cfee6ce2..f343caf10 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings @@ -73,6 +73,7 @@ Vui lòng kiểm tra kết nối mạng."; "Common.Controls.Friendship.BlockDomain" = "Chặn %@"; "Common.Controls.Friendship.BlockUser" = "Chặn %@"; "Common.Controls.Friendship.Blocked" = "Đã chặn"; +"Common.Controls.Friendship.DomainBlocked" = "Máy chủ chặn"; "Common.Controls.Friendship.EditInfo" = "Chỉnh sửa"; "Common.Controls.Friendship.Follow" = "Theo dõi"; "Common.Controls.Friendship.Following" = "Đang theo dõi"; @@ -161,7 +162,7 @@ Vui lòng kiểm tra kết nối mạng."; "Common.Controls.Status.Visibility.Unlisted" = "Ai cũng thấy tút này nhưng không hiện trên bảng tin máy chủ."; "Common.Controls.Tabs.A11Y.Explore" = "Khám phá"; "Common.Controls.Tabs.A11Y.Search" = "Tìm kiếm"; -"Common.Controls.Tabs.Home" = "Trang chính"; +"Common.Controls.Tabs.Home" = "Trang chủ"; "Common.Controls.Tabs.Notifications" = "Thông báo"; "Common.Controls.Tabs.Profile" = "Trang hồ sơ"; "Common.Controls.Tabs.SearchAndExplore" = "Tìm và Khám Phá"; @@ -290,7 +291,7 @@ tải lên Mastodon."; "Scene.HomeTimeline.NavigationBarState.Offline" = "Ngoại tuyến"; "Scene.HomeTimeline.NavigationBarState.Published" = "Đã đăng!"; "Scene.HomeTimeline.NavigationBarState.Publishing" = "Đang đăng tút..."; -"Scene.HomeTimeline.Title" = "Trang chính"; +"Scene.HomeTimeline.Title" = "Trang chủ"; "Scene.Login.ServerSearchField.Placeholder" = "Nhập URL hoặc tìm máy chủ"; "Scene.Login.Subtitle" = "Đăng nhập vào máy chủ mà bạn đã tạo tài khoản."; "Scene.Login.Title" = "Chào mừng trở lại!"; @@ -334,6 +335,8 @@ tải lên Mastodon."; "Scene.Profile.Fields.Verified.Long" = "Liên kết này đã được xác minh trên %@"; "Scene.Profile.Fields.Verified.Short" = "Đã xác minh %@"; "Scene.Profile.Header.FollowsYou" = "Đang theo dõi bạn"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Bạn muốn chặn %@?"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Chặn máy chủ"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Xác nhận chặn %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Chặn người này"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "Xác nhận ẩn đăng lại"; @@ -342,6 +345,8 @@ tải lên Mastodon."; "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "Ẩn người này"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "Xác nhận hiện đăng lại"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "Hiện đăng lại"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Bạn muốn bỏ chặn %@?"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Bỏ chặn máy chủ"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "Xác nhận bỏ chặn %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "Bỏ chặn người này"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Xác nhận bỏ ẩn %@"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings index 5352c1487..0a4005f57 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings @@ -70,9 +70,10 @@ "Common.Controls.Actions.UnblockDomain" = "解除屏蔽 %@"; "Common.Controls.Actions.Unfollow" = "不再关注 %@"; "Common.Controls.Friendship.Block" = "屏蔽"; -"Common.Controls.Friendship.BlockDomain" = "屏蔽 %@"; +"Common.Controls.Friendship.BlockDomain" = "Block domain %@"; "Common.Controls.Friendship.BlockUser" = "屏蔽 %@"; "Common.Controls.Friendship.Blocked" = "已屏蔽"; +"Common.Controls.Friendship.DomainBlocked" = "Domain Blocked"; "Common.Controls.Friendship.EditInfo" = "编辑"; "Common.Controls.Friendship.Follow" = "关注"; "Common.Controls.Friendship.Following" = "正在关注"; @@ -334,6 +335,8 @@ "Scene.Profile.Fields.Verified.Long" = "此链接的所有权已在 %@ 上检查通过"; "Scene.Profile.Fields.Verified.Short" = "验证于 %@"; "Scene.Profile.Header.FollowsYou" = "关注了你"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "Confirm to block domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "Block domain"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "确认屏蔽 %@"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "屏蔽帐户"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "确认隐藏转发"; @@ -342,6 +345,8 @@ "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "静音账户"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "确认显示转发"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "显示转发"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "Confirm to unblock domain %@"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "Unblock domain"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "确认取消屏蔽 %@"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "解除屏蔽帐户"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "确认取消静音 %@"; @@ -440,16 +445,16 @@ "Scene.Search.SearchBar.Cancel" = "取消"; "Scene.Search.SearchBar.Placeholder" = "搜索标签和用户"; "Scene.Search.Searching.Clear" = "清除"; -"Scene.Search.Searching.ClearAll" = "Clear all"; +"Scene.Search.Searching.ClearAll" = "清除"; "Scene.Search.Searching.EmptyState.NoResults" = "无结果"; -"Scene.Search.Searching.Hashtag" = "Go to #%@"; -"Scene.Search.Searching.NoUser.Message" = "There's no Useraccount \"%@\" on %@"; -"Scene.Search.Searching.NoUser.Title" = "No User Account Found"; -"Scene.Search.Searching.People" = "People matching \"%@\""; -"Scene.Search.Searching.Posts" = "Posts matching \"%@\""; -"Scene.Search.Searching.Profile" = "Go to @%@@%@"; +"Scene.Search.Searching.Hashtag" = "转到 #%@"; +"Scene.Search.Searching.NoUser.Message" = "找不到用户 %@(在服务器 %@ 上)"; +"Scene.Search.Searching.NoUser.Title" = "找不到账户"; +"Scene.Search.Searching.People" = "匹配 %@ 的用户"; +"Scene.Search.Searching.Posts" = "匹配 %@ 的嘟文"; +"Scene.Search.Searching.Profile" = "转到 @%@@%@"; "Scene.Search.Searching.RecentSearch" = "最近搜索"; -"Scene.Search.Searching.Url" = "Open URL in Mastodon"; +"Scene.Search.Searching.Url" = "在 Mastodon 中打开 URL"; "Scene.Search.Title" = "搜索"; "Scene.ServerPicker.Button.Category.Academia" = "学术"; "Scene.ServerPicker.Button.Category.Activism" = "行动主义"; @@ -489,45 +494,45 @@ "Scene.ServerRules.Subtitle" = "这些规则由 %@ 的管理员设置。"; "Scene.ServerRules.TermsOfService" = "服务条款"; "Scene.ServerRules.Title" = "一些基本规则。"; -"Scene.Settings.AboutMastodon.ClearMediaStorage" = "Clear Media Storage"; -"Scene.Settings.AboutMastodon.ContributeToMastodon" = "Contribute to Mastodon"; -"Scene.Settings.AboutMastodon.MoreSettings" = "Even More Settings"; -"Scene.Settings.AboutMastodon.PrivacyPolicy" = "Privacy Policy"; -"Scene.Settings.AboutMastodon.Title" = "About"; -"Scene.Settings.General.Appearance.Dark" = "Dark"; -"Scene.Settings.General.Appearance.Light" = "Light"; -"Scene.Settings.General.Appearance.SectionTitle" = "Appearance"; -"Scene.Settings.General.Appearance.System" = "Use Device Appearance"; -"Scene.Settings.General.Design.SectionTitle" = "Design"; -"Scene.Settings.General.Design.ShowAnimations" = "Play Animated Avatars and Emoji"; -"Scene.Settings.General.Links.OpenInBrowser" = "Open in Browser"; -"Scene.Settings.General.Links.OpenInMastodon" = "Open in Mastodon"; -"Scene.Settings.General.Links.SectionTitle" = "Links"; -"Scene.Settings.General.Title" = "General"; -"Scene.Settings.Notifications.Alert.Boosts" = "Boosts"; -"Scene.Settings.Notifications.Alert.Favorites" = "Favorites"; -"Scene.Settings.Notifications.Alert.MentionsAndReplies" = "Mentions & Replies"; -"Scene.Settings.Notifications.Alert.NewFollowers" = "New Followers"; -"Scene.Settings.Notifications.Disabled.GoToSettings" = "Go to Notification Settings"; -"Scene.Settings.Notifications.Disabled.NotificationHint" = "Turn on notifications from your device settings to see updates on your lock screen."; -"Scene.Settings.Notifications.Policy.Anyone" = "Anyone"; -"Scene.Settings.Notifications.Policy.Follow" = "People you follow"; -"Scene.Settings.Notifications.Policy.Followers" = "People who follow you"; -"Scene.Settings.Notifications.Policy.Noone" = "No one"; -"Scene.Settings.Notifications.Policy.Title" = "Get Notifications from"; -"Scene.Settings.Notifications.Title" = "Notifications"; -"Scene.Settings.Overview.AboutMastodon" = "About Mastodon"; -"Scene.Settings.Overview.General" = "General"; -"Scene.Settings.Overview.Logout" = "Logout %@"; -"Scene.Settings.Overview.Notifications" = "Notifications"; -"Scene.Settings.Overview.ServerDetails" = "Server Details"; -"Scene.Settings.Overview.SupportMastodon" = "Support Mastodon"; -"Scene.Settings.Overview.Title" = "Settings"; -"Scene.Settings.ServerDetails.About" = "About"; -"Scene.Settings.ServerDetails.AboutInstance.LegalNotice" = "A legal notice"; -"Scene.Settings.ServerDetails.AboutInstance.MessageAdmin" = "Message Admin"; -"Scene.Settings.ServerDetails.AboutInstance.Title" = "Administrator"; -"Scene.Settings.ServerDetails.Rules" = "Rules"; +"Scene.Settings.AboutMastodon.ClearMediaStorage" = "清楚媒体缓存"; +"Scene.Settings.AboutMastodon.ContributeToMastodon" = "贡献给Mastodon"; +"Scene.Settings.AboutMastodon.MoreSettings" = "更多设置"; +"Scene.Settings.AboutMastodon.PrivacyPolicy" = "隐私政策"; +"Scene.Settings.AboutMastodon.Title" = "关于"; +"Scene.Settings.General.Appearance.Dark" = "深色"; +"Scene.Settings.General.Appearance.Light" = "浅色"; +"Scene.Settings.General.Appearance.SectionTitle" = "外观"; +"Scene.Settings.General.Appearance.System" = "跟随系统"; +"Scene.Settings.General.Design.SectionTitle" = "设计"; +"Scene.Settings.General.Design.ShowAnimations" = "播放动态头像和表情"; +"Scene.Settings.General.Links.OpenInBrowser" = "在浏览器中打开"; +"Scene.Settings.General.Links.OpenInMastodon" = "在 Mastodon 中打开"; +"Scene.Settings.General.Links.SectionTitle" = "链接"; +"Scene.Settings.General.Title" = "通用"; +"Scene.Settings.Notifications.Alert.Boosts" = "转嘟"; +"Scene.Settings.Notifications.Alert.Favorites" = "喜欢"; +"Scene.Settings.Notifications.Alert.MentionsAndReplies" = "提及与回复"; +"Scene.Settings.Notifications.Alert.NewFollowers" = "新关注者"; +"Scene.Settings.Notifications.Disabled.GoToSettings" = "转到通知设置"; +"Scene.Settings.Notifications.Disabled.NotificationHint" = "在系统设置中打开通知来随时获取新动态。"; +"Scene.Settings.Notifications.Policy.Anyone" = "任何人"; +"Scene.Settings.Notifications.Policy.Follow" = "你关注的人"; +"Scene.Settings.Notifications.Policy.Followers" = "关注你的人"; +"Scene.Settings.Notifications.Policy.Noone" = "关闭通知"; +"Scene.Settings.Notifications.Policy.Title" = "通知接收范围"; +"Scene.Settings.Notifications.Title" = "通知"; +"Scene.Settings.Overview.AboutMastodon" = "关于 Mastodon"; +"Scene.Settings.Overview.General" = "通用"; +"Scene.Settings.Overview.Logout" = "登出 %@"; +"Scene.Settings.Overview.Notifications" = "通知"; +"Scene.Settings.Overview.ServerDetails" = "服务器详情"; +"Scene.Settings.Overview.SupportMastodon" = "支持 Mastodon"; +"Scene.Settings.Overview.Title" = "设置"; +"Scene.Settings.ServerDetails.About" = "关于"; +"Scene.Settings.ServerDetails.AboutInstance.LegalNotice" = "法律声明"; +"Scene.Settings.ServerDetails.AboutInstance.MessageAdmin" = "联系管理员"; +"Scene.Settings.ServerDetails.AboutInstance.Title" = "管理员"; +"Scene.Settings.ServerDetails.Rules" = "规则"; "Scene.SuggestionAccount.FollowAll" = "一键关注"; "Scene.SuggestionAccount.Title" = "Mastodon上流行的"; "Scene.Thread.BackTitle" = "帖子"; diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings index b75a73144..c15f83db4 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings @@ -70,9 +70,10 @@ "Common.Controls.Actions.UnblockDomain" = "解除封鎖 %@"; "Common.Controls.Actions.Unfollow" = "取消跟隨 %@"; "Common.Controls.Friendship.Block" = "封鎖"; -"Common.Controls.Friendship.BlockDomain" = "封鎖 %@"; +"Common.Controls.Friendship.BlockDomain" = "封鎖網域 %@"; "Common.Controls.Friendship.BlockUser" = "封鎖 %@"; "Common.Controls.Friendship.Blocked" = "已封鎖"; +"Common.Controls.Friendship.DomainBlocked" = "已封鎖網域"; "Common.Controls.Friendship.EditInfo" = "編輯"; "Common.Controls.Friendship.Follow" = "跟隨"; "Common.Controls.Friendship.Following" = "跟隨中"; @@ -329,6 +330,8 @@ "Scene.Profile.Fields.Verified.Long" = "已於 %@ 檢查此連結的擁有者權限"; "Scene.Profile.Fields.Verified.Short" = "於 %@ 上已驗證"; "Scene.Profile.Header.FollowsYou" = "已跟隨您"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Message" = "確認將網域 %@ 封鎖"; +"Scene.Profile.RelationshipActionAlert.ConfirmBlockDomain.Title" = "封鎖網域"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "確認將 %@ 封鎖"; "Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "封鎖"; "Scene.Profile.RelationshipActionAlert.ConfirmHideReblogs.Message" = "確認隱藏轉嘟"; @@ -337,6 +340,8 @@ "Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Title" = "靜音"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Message" = "確認顯示轉嘟"; "Scene.Profile.RelationshipActionAlert.ConfirmShowReblogs.Title" = "顯示轉嘟"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Message" = "確認將網域 %@ 解除封鎖"; +"Scene.Profile.RelationshipActionAlert.ConfirmUnblockDomain.Title" = "解除封鎖網域"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Message" = "確認將 %@ 取消封鎖"; "Scene.Profile.RelationshipActionAlert.ConfirmUnblockUser.Title" = "取消封鎖"; "Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "確認將 %@ 取消靜音"; diff --git a/MastodonSDK/Sources/MastodonSDK/API/Mastodon+API+Media.swift b/MastodonSDK/Sources/MastodonSDK/API/Mastodon+API+Media.swift index 861b48c15..0995edafb 100644 --- a/MastodonSDK/Sources/MastodonSDK/API/Mastodon+API+Media.swift +++ b/MastodonSDK/Sources/MastodonSDK/API/Mastodon+API+Media.swift @@ -179,7 +179,7 @@ extension Mastodon.API.Media { extension Mastodon.API.Media { static func updateMediaEndpointURL(domain: String, attachmentID: Mastodon.Entity.Attachment.ID) -> URL { - return Mastodon.API.endpointURL(domain: domain).appendingPathComponent("media").appendingPathComponent(attachmentID) + Mastodon.API.endpointURL(domain: domain).appendingPathComponent("media").appendingPathComponent(attachmentID) } /// Update attachment diff --git a/MastodonSDK/Sources/MastodonSDK/API/Mastodon+API+Statuses+StatusHistory.swift b/MastodonSDK/Sources/MastodonSDK/API/Mastodon+API+Statuses+StatusHistory.swift index 096233c32..5ea6fe4c2 100644 --- a/MastodonSDK/Sources/MastodonSDK/API/Mastodon+API+Statuses+StatusHistory.swift +++ b/MastodonSDK/Sources/MastodonSDK/API/Mastodon+API+Statuses+StatusHistory.swift @@ -106,12 +106,41 @@ extension Mastodon.API.Statuses { } extension Mastodon.API.Statuses { + + public struct MediaAttributes: Codable { + let id: String + let description: String? + //TODO: Add focus at some point + + public init(id: String, description: String?) { + self.id = id + self.description = description + } + } + + public struct Poll: Codable { + public let options: [String]? + public let expiresIn: Int? + public let multipleAnswers: Bool? + + public init(options: [String]?, expiresIn: Int?, multipleAnswers: Bool?) { + self.options = options + self.expiresIn = expiresIn + self.multipleAnswers = multipleAnswers + } + + enum CodingKeys: String, CodingKey { + case options + case expiresIn = "expires_in" + case multipleAnswers = "multiple_answers" + } + } + public struct EditStatusQuery: Codable, PutQuery { public let status: String? public let mediaIDs: [String]? - public let pollOptions: [String]? - public let pollExpiresIn: Int? - public let pollMultipleAnswers: Bool? + public let mediaAttributes: [MediaAttributes]? + public let poll: Poll? public let sensitive: Bool? public let spoilerText: String? public let visibility: Mastodon.Entity.Status.Visibility? @@ -120,9 +149,8 @@ extension Mastodon.API.Statuses { public init( status: String?, mediaIDs: [String]?, - pollOptions: [String]?, - pollExpiresIn: Int?, - pollMultipleAnswers: Bool?, + mediaAttributes: [MediaAttributes]? = nil, + poll: Poll?, sensitive: Bool?, spoilerText: String?, visibility: Mastodon.Entity.Status.Visibility?, @@ -130,37 +158,23 @@ extension Mastodon.API.Statuses { ) { self.status = status self.mediaIDs = mediaIDs - self.pollOptions = pollOptions - self.pollExpiresIn = pollExpiresIn - self.pollMultipleAnswers = pollMultipleAnswers + self.mediaAttributes = mediaAttributes + self.poll = poll self.sensitive = sensitive self.spoilerText = spoilerText self.visibility = visibility self.language = language } - var contentType: String? { - return Self.multipartContentType() - } - - var body: Data? { - var data = Data() - - status.flatMap { data.append(Data.multipart(key: "status", value: $0)) } - for mediaID in mediaIDs ?? [] { - data.append(Data.multipart(key: "media_ids[]", value: mediaID)) - } - for pollOption in pollOptions ?? [] { - data.append(Data.multipart(key: "poll[options][]", value: pollOption)) - } - pollExpiresIn.flatMap { data.append(Data.multipart(key: "poll[expires_in]", value: $0)) } - sensitive.flatMap { data.append(Data.multipart(key: "sensitive", value: $0)) } - spoilerText.flatMap { data.append(Data.multipart(key: "spoiler_text", value: $0)) } - visibility.flatMap { data.append(Data.multipart(key: "visibility", value: $0.rawValue)) } - language.flatMap { data.append(Data.multipart(key: "language", value: $0)) } - - data.append(Data.multipartEnd()) - return data + enum CodingKeys: String, CodingKey { + case status + case mediaIDs = "media_ids" + case mediaAttributes = "media_attributes" + case poll + case sensitive + case spoilerText = "spoiler_text" + case visibility + case language } } } diff --git a/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Instance.swift b/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Instance.swift index 353601cd4..bbe37cce9 100644 --- a/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Instance.swift +++ b/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Instance.swift @@ -114,7 +114,7 @@ extension Mastodon.Entity.Instance { } extension Mastodon.Entity.Instance { - public struct Configuration: Codable { + public struct Configuration: Codable, InstanceConfigLimitingPropertyContaining { public let statuses: Statuses? public let mediaAttachments: MediaAttachments? public let polls: Polls? diff --git a/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+InstanceV2.swift b/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+InstanceV2.swift index 3cfb29699..95f6e1706 100644 --- a/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+InstanceV2.swift +++ b/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+InstanceV2.swift @@ -71,7 +71,7 @@ extension Mastodon.Entity.V2 { } extension Mastodon.Entity.V2.Instance { - public struct Configuration: Codable { + public struct Configuration: Codable, InstanceConfigLimitingPropertyContaining { public let statuses: Mastodon.Entity.Instance.Configuration.Statuses? public let mediaAttachments: Mastodon.Entity.Instance.Configuration.MediaAttachments? public let polls: Mastodon.Entity.Instance.Configuration.Polls? diff --git a/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Status.swift b/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Status.swift index c39517ecf..5262bfef0 100644 --- a/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Status.swift +++ b/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Status.swift @@ -142,7 +142,8 @@ extension Mastodon.Entity.Status: Hashable { lhs.favourited == rhs.favourited && lhs.reblogged == rhs.reblogged && lhs.bookmarked == rhs.bookmarked && - lhs.pinned == rhs.pinned + lhs.pinned == rhs.pinned && + lhs.content == rhs.content } public func hash(into hasher: inout Hasher) { @@ -153,5 +154,6 @@ extension Mastodon.Entity.Status: Hashable { hasher.combine(reblogged) hasher.combine(bookmarked) hasher.combine(pinned) + hasher.combine(content) } } diff --git a/MastodonSDK/Sources/MastodonSDK/InstanceConfigLimitingPropertyContaining.swift b/MastodonSDK/Sources/MastodonSDK/InstanceConfigLimitingPropertyContaining.swift new file mode 100644 index 000000000..b0736f388 --- /dev/null +++ b/MastodonSDK/Sources/MastodonSDK/InstanceConfigLimitingPropertyContaining.swift @@ -0,0 +1,7 @@ +// Copyright © 2024 Mastodon gGmbH. All rights reserved. + +public protocol InstanceConfigLimitingPropertyContaining { + var statuses: Mastodon.Entity.Instance.Configuration.Statuses? { get } + var mediaAttachments: Mastodon.Entity.Instance.Configuration.MediaAttachments? { get } + var polls: Mastodon.Entity.Instance.Configuration.Polls? { get } +} diff --git a/MastodonSDK/Sources/MastodonSDK/MastodonFeed.swift b/MastodonSDK/Sources/MastodonSDK/MastodonFeed.swift index 96d78fb46..3bd5c940d 100644 --- a/MastodonSDK/Sources/MastodonSDK/MastodonFeed.swift +++ b/MastodonSDK/Sources/MastodonSDK/MastodonFeed.swift @@ -66,7 +66,8 @@ extension MastodonFeed: Hashable { lhs.id == rhs.id && lhs.status?.entity == rhs.status?.entity && lhs.status?.reblog?.entity == rhs.status?.reblog?.entity && - lhs.status?.isSensitiveToggled == rhs.status?.isSensitiveToggled + lhs.status?.isSensitiveToggled == rhs.status?.isSensitiveToggled && + lhs.status?.reblog?.isSensitiveToggled == rhs.status?.reblog?.isSensitiveToggled } public func hash(into hasher: inout Hasher) { @@ -74,6 +75,7 @@ extension MastodonFeed: Hashable { hasher.combine(status?.entity) hasher.combine(status?.reblog?.entity) hasher.combine(status?.isSensitiveToggled) + hasher.combine(status?.reblog?.isSensitiveToggled) } } diff --git a/MastodonSDK/Sources/MastodonSDK/MastodonStatus.swift b/MastodonSDK/Sources/MastodonSDK/MastodonStatus.swift index 5f6112da2..c19283ba2 100644 --- a/MastodonSDK/Sources/MastodonSDK/MastodonStatus.swift +++ b/MastodonSDK/Sources/MastodonSDK/MastodonStatus.swift @@ -7,6 +7,10 @@ import CoreDataStack public final class MastodonStatus: ObservableObject { public typealias ID = Mastodon.Entity.Status.ID + /// `originalStatus` is used to restore a previously re-blogged state when a status + /// has been originally reblogged by another account + @Published public var originalStatus: MastodonStatus? + @Published public var entity: Mastodon.Entity.Status @Published public var reblog: MastodonStatus? @@ -32,19 +36,32 @@ extension MastodonStatus { public static func fromEntity(_ entity: Mastodon.Entity.Status) -> MastodonStatus { return MastodonStatus(entity: entity, isSensitiveToggled: false) } + + public func inheritSensitivityToggled(from status: MastodonStatus?) -> MastodonStatus { + self.isSensitiveToggled = status?.isSensitiveToggled ?? false + self.reblog?.isSensitiveToggled = status?.reblog?.isSensitiveToggled ?? false + return self + } + + public func withOriginal(status: MastodonStatus?) -> MastodonStatus { + originalStatus = status + return self + } } extension MastodonStatus: Hashable { public static func == (lhs: MastodonStatus, rhs: MastodonStatus) -> Bool { lhs.entity == rhs.entity && lhs.reblog?.entity == rhs.reblog?.entity && - lhs.isSensitiveToggled == rhs.isSensitiveToggled + lhs.isSensitiveToggled == rhs.isSensitiveToggled && + lhs.reblog?.isSensitiveToggled == rhs.reblog?.isSensitiveToggled } public func hash(into hasher: inout Hasher) { hasher.combine(entity) hasher.combine(reblog?.entity) hasher.combine(isSensitiveToggled) + hasher.combine(reblog?.isSensitiveToggled) } } @@ -59,6 +76,17 @@ public extension Mastodon.Entity.Status { } } +public extension MastodonStatus { + enum UpdateIntent { + case bookmark(Bool) + case reblog(Bool) + case favorite(Bool) + case toggleSensitive(Bool) + case delete + case edit + } +} + public extension MastodonStatus { func getPoll(in context: NSManagedObjectContext, domain: String) async -> Poll? { guard diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel+Upload.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel+Upload.swift index 58259d28c..943fb9cfe 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel+Upload.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel+Upload.swift @@ -120,15 +120,12 @@ extension AttachmentViewModel { } let attachment = output.asAttachment - + let query = Mastodon.API.Media.UploadMediaQuery( file: attachment, thumbnail: nil, - description: { - let caption = caption.trimmingCharacters(in: .whitespacesAndNewlines) - return caption.isEmpty ? nil : caption - }(), - focus: nil // TODO: + description: caption.trimmingCharacters(in: .whitespacesAndNewlines), + focus: nil ) // upload + N * check upload diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel.swift index 714db2a03..cf802e0b7 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Attachment/AttachmentViewModel.swift @@ -47,6 +47,7 @@ final public class AttachmentViewModel: NSObject, ObservableObject, Identifiable public let sizeLimit: SizeLimit @Published var caption = "" @Published public private(set) var isCaptionEditable = true + let isEditing: Bool // output @Published public private(set) var output: Output? @@ -75,15 +76,20 @@ final public class AttachmentViewModel: NSObject, ObservableObject, Identifiable authContext: AuthContext, input: Input, sizeLimit: SizeLimit, - delegate: AttachmentViewModelDelegate + delegate: AttachmentViewModelDelegate, + isEditing: Bool = false, + caption: String? = nil ) { self.api = api self.authContext = authContext self.input = input self.sizeLimit = sizeLimit self.delegate = delegate + self.isEditing = isEditing + + self.caption = caption ?? "" + super.init() - // end init Timer.publish(every: 1.0 / 60.0, on: .main, in: .common) // 60 FPS .autoconnect() @@ -134,7 +140,9 @@ final public class AttachmentViewModel: NSObject, ObservableObject, Identifiable switch input { case .mastodonAssetUrl: - self.isCaptionEditable = false + if self.isEditing == false { + self.isCaptionEditable = false + } self.uploadState = .finish self.output = output self.uploadResult = .exists @@ -258,7 +266,7 @@ extension AttachmentViewModel { public enum Input: Hashable { case image(UIImage) case url(URL) - case mastodonAssetUrl(URL, String) + case mastodonAssetUrl(url: URL, attachmentId: String) case pickerResult(PHPickerResult) case itemProvider(NSItemProvider) } @@ -321,4 +329,5 @@ extension AttachmentViewModel { func update(uploadResult: UploadResult) { self.uploadResult = uploadResult } + } diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewModel.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewModel.swift index b35d94f03..cf70443f5 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/ComposeContentViewModel.swift @@ -227,15 +227,14 @@ public final class ComposeContentViewModel: NSObject, ObservableObject { } // set limit - let _configuration: Mastodon.Entity.Instance.Configuration? = { - var configuration: Mastodon.Entity.Instance.Configuration? = nil - context.managedObjectContext.performAndWait { - let authentication = authContext.mastodonAuthenticationBox.authentication - configuration = authentication.instance(in: context.managedObjectContext)?.configuration - } - return configuration - }() - if let configuration = _configuration { + var configuration: InstanceConfigLimitingPropertyContaining? + + context.managedObjectContext.performAndWait { + let authentication = authContext.mastodonAuthenticationBox.authentication + configuration = (authentication.instance(in: context.managedObjectContext)?.configurationV2 ?? authentication.instance(in: context.managedObjectContext)?.configuration) + } + + if let configuration { // set character limit if let maxCharacters = configuration.statuses?.maxCharacters { maxTextInputLimit = maxCharacters @@ -265,14 +264,16 @@ public final class ComposeContentViewModel: NSObject, ObservableObject { self.isVisibilityButtonEnabled = false self.attachmentViewModels = status.entity.mastodonAttachments.compactMap { guard let assetURL = $0.assetURL, let url = URL(string: assetURL) else { return nil } + let attachmentViewModel = AttachmentViewModel( api: context.apiService, authContext: authContext, - input: .mastodonAssetUrl(url, $0.id), + input: .mastodonAssetUrl(url: url, attachmentId: $0.id), sizeLimit: sizeLimit, - delegate: self + delegate: self, + isEditing: true, + caption: $0.altDescription ) - attachmentViewModel.caption = $0.altDescription ?? "" return attachmentViewModel } } diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Publisher/MastodonStatusEditPublisher.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Publisher/MastodonStatusEditPublisher.swift index 59db01496..d28968bca 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Publisher/MastodonStatusEditPublisher.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Publisher/MastodonStatusEditPublisher.swift @@ -115,8 +115,8 @@ extension MastodonEditStatusPublisher: StatusPublisher { guard case let AttachmentViewModel.Input.mastodonAssetUrl(_, attachmentId) = attachmentViewModel.input else { throw AppError.badRequest } + attachmentIDs.append(attachmentId) - break case let .uploadedMastodonAttachment(attachment): attachmentIDs.append(attachment.id) @@ -157,12 +157,21 @@ extension MastodonEditStatusPublisher: StatusPublisher { return self.pollExpireConfigurationOption.seconds }() + let poll = Mastodon.API.Statuses.Poll(options: pollOptions, expiresIn: pollExpiresIn, multipleAnswers: self.pollMultipleConfigurationOption) + + let mediaAttributes: [Mastodon.API.Statuses.MediaAttributes] = attachmentViewModels.compactMap { + if case let .mastodonAssetUrl(url: _, attachmentId: attachmentId) = $0.input { + return Mastodon.API.Statuses.MediaAttributes(id: attachmentId, description: $0.caption) + } else { + return nil + } + } + let query = Mastodon.API.Statuses.EditStatusQuery( status: content, mediaIDs: attachmentIDs.isEmpty ? nil : attachmentIDs, - pollOptions: pollOptions, - pollExpiresIn: pollExpiresIn, - pollMultipleAnswers: pollMultipleConfigurationOption, + mediaAttributes: mediaAttributes, + poll: poll, sensitive: isMediaSensitive, spoilerText: isContentWarningComposing ? contentWarning : nil, visibility: visibility, diff --git a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Publisher/MastodonStatusPublisher.swift b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Publisher/MastodonStatusPublisher.swift index 1c519a857..9e9901b08 100644 --- a/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Publisher/MastodonStatusPublisher.swift +++ b/MastodonSDK/Sources/MastodonUI/Scene/ComposeContent/Publisher/MastodonStatusPublisher.swift @@ -117,17 +117,14 @@ extension MastodonStatusPublisher: StatusPublisher { break case let .uploadedMastodonAttachment(attachment): attachmentIDs.append(attachment.id) - - let caption = attachmentViewModel.caption - guard !caption.isEmpty else { continue } - + _ = try await api.updateMedia( domain: authContext.mastodonAuthenticationBox.domain, attachmentID: attachment.id, query: .init( file: nil, thumbnail: nil, - description: caption, + description: attachmentViewModel.caption, focus: nil ), mastodonAuthenticationBox: authContext.mastodonAuthenticationBox diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+Configuration.swift b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+Configuration.swift index d93ad4607..2ba820071 100644 --- a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+Configuration.swift +++ b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+Configuration.swift @@ -150,17 +150,22 @@ extension StatusView { viewModel.header = createHeader(name: "", emojis: [:]) /// finally we can load the status information and display the correct header if let authenticationBox = viewModel.authContext?.mastodonAuthenticationBox { - Task { @MainActor in - if let replyTo = try? await Mastodon.API.Statuses.status( - session: .shared, - domain: authenticationBox.domain, - statusID: inReplyToID, - authorization: authenticationBox.userAuthorization - ).singleOutput().value { - let header = createHeader(name: replyTo.account.displayNameWithFallback, emojis: replyTo.account.emojis.asDictionary) - viewModel.header = header - } - } + Mastodon.API.Statuses.status( + session: .shared, + domain: authenticationBox.domain, + statusID: inReplyToID, + authorization: authenticationBox.userAuthorization + ) + .receive(on: DispatchQueue.main) + .sink(receiveCompletion: { completion in + // no-op + }, receiveValue: { [weak self] response in + guard let self else { return } + let replyTo = response.value + let header = createHeader(name: replyTo.account.displayNameWithFallback, emojis: replyTo.account.emojis.asDictionary) + self.viewModel.header = header + }) + .store(in: &disposeBag) } } else { // B. replyTo status not exist @@ -214,6 +219,8 @@ extension StatusView { } }() + viewModel.authorId = author.id + // author username viewModel.authorUsername = author.acct @@ -227,27 +234,13 @@ extension StatusView { }() // isMuting, isBlocking, Following - guard let auth = viewModel.authContext?.mastodonAuthenticationBox else { return } + guard viewModel.authContext?.mastodonAuthenticationBox != nil else { return } guard !viewModel.isMyself else { viewModel.isMuting = false viewModel.isBlocking = false viewModel.isFollowed = false return } - - if let relationship = try? await Mastodon.API.Account.relationships( - session: .shared, - domain: auth.domain, - query: .init(ids: [author.id]), - authorization: auth.userAuthorization - ).singleOutput().value { - guard let rel = relationship.first else { return } - DispatchQueue.main.async { [self] in - viewModel.isMuting = rel.muting - viewModel.isBlocking = rel.blocking - viewModel.isFollowed = rel.followedBy - } - } } } diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift index 8ca7cd79a..eef476a38 100644 --- a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift @@ -46,6 +46,7 @@ extension StatusView { @Published public var authorAvatarImage: UIImage? @Published public var authorAvatarImageURL: URL? @Published public var authorName: MetaContent? + @Published public var authorId: String? @Published public var authorUsername: String? @Published public var locked = false @@ -277,21 +278,20 @@ extension StatusView.ViewModel { // timestamp Publishers.CombineLatest3( $timestamp, - $editedAt, + $editedAt.removeDuplicates(), timestampUpdatePublisher.prepend(Date()).eraseToAnyPublisher() ) - .compactMap { [weak self] timestamp, editedAt, _ -> String? in - guard let self = self else { return nil } + .sink(receiveValue: { [weak self] timestamp, editedAt, _ in + guard let self = self else { return } if let timestamp = editedAt, let text = self.timestampFormatter?(timestamp, true) { - return text + self.editedAt = editedAt + timestampText = text } else if let timestamp = timestamp, let text = self.timestampFormatter?(timestamp, false) { - return text + timestampText = text } - return "" - } - .removeDuplicates() - .assign(to: &$timestampText) - + }) + .store(in: &disposeBag) + $timestampText .sink { [weak self] text in guard let _ = self else { return } @@ -655,16 +655,12 @@ extension StatusView.ViewModel { private func bindMenu(statusView: StatusView) { let authorView = statusView.authorView - let publisherOne = Publishers.CombineLatest( + let publisherOne = Publishers.CombineLatest3( $authorName, + $authorId, $isMyself ) - let publishersTwo = Publishers.CombineLatest4( - $isMuting, - $isBlocking, - $isBookmark, - $isFollowed - ) + let publishersThree = Publishers.CombineLatest( $translation, $language @@ -672,15 +668,14 @@ extension StatusView.ViewModel { Publishers.CombineLatest3( publisherOne.eraseToAnyPublisher(), - publishersTwo.eraseToAnyPublisher(), + $isBookmark, publishersThree.eraseToAnyPublisher() ).eraseToAnyPublisher() - .sink { tupleOne, tupleTwo, tupleThree in - let (authorName, isMyself) = tupleOne - let (isMuting, isBlocking, isBookmark, isFollowed) = tupleTwo + .sink { tupleOne, isBookmark, tupleThree in + let (authorName, authorId, isMyself) = tupleOne let (translatedFromLanguage, language) = tupleThree - guard let name = authorName?.string, let context = self.context, let authContext = self.authContext else { + guard let name = authorName?.string, let authorId = authorId, let context = self.context, let authContext = self.authContext else { statusView.authorView.menuButton.menu = nil return } @@ -689,21 +684,45 @@ extension StatusView.ViewModel { let instance = authentication.instance(in: context.managedObjectContext) let isTranslationEnabled = instance?.isTranslationEnabled ?? false - let menuContext = StatusAuthorView.AuthorMenuContext( - name: name, - isMuting: isMuting, - isBlocking: isBlocking, - isMyself: isMyself, - isBookmarking: isBookmark, - isFollowed: isFollowed, - isTranslationEnabled: isTranslationEnabled, - isTranslated: translatedFromLanguage != nil, - statusLanguage: language - ) - - let (menu, actions) = authorView.setupAuthorMenu(menuContext: menuContext) - authorView.menuButton.menu = menu - authorView.authorActions = actions + authorView.menuButton.menu = UIMenu(children: [ + UIDeferredMenuElement({ menuElement in + + let domain = authContext.mastodonAuthenticationBox.domain + + Task { @MainActor in + if let relationship = try? await Mastodon.API.Account.relationships( + session: .shared, + domain: domain, + query: .init(ids: [authorId]), + authorization: authContext.mastodonAuthenticationBox.userAuthorization + ).singleOutput().value { + guard let rel = relationship.first else { return } + DispatchQueue.main.async { + + let menuContext = StatusAuthorView.AuthorMenuContext( + name: name, + isMuting: rel.muting ?? false, + isBlocking: rel.blocking, + isMyself: isMyself, + isBookmarking: isBookmark, + isFollowed: rel.followedBy, + isTranslationEnabled: isTranslationEnabled, + isTranslated: translatedFromLanguage != nil, + statusLanguage: language + ) + + let (menu, actions) = authorView.setupAuthorMenu(menuContext: menuContext) + authorView.authorActions = actions + + menuElement(menu.children) + } + } else { + menuElement(MastodonMenu.setupMenu(actions: [[.shareStatus]], delegate: statusView).children) + } + } + }) + ]) + authorView.menuButton.showsMenuAsPrimaryAction = true } .store(in: &disposeBag) diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView.swift b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView.swift index bdd160435..5248208a1 100644 --- a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView.swift +++ b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView.swift @@ -327,6 +327,9 @@ public final class StatusView: UIView { setPollDisplay(isDisplay: false) setFilterHintLabelDisplay(isDisplay: false) setStatusCardControlDisplay(isDisplay: false) + + headerInfoLabel.text = nil + headerIconImageView.image = nil } public override init(frame: CGRect) {