diff --git a/AppShared/Info.plist b/AppShared/Info.plist
index 66a4b22f5..920eaff87 100644
--- a/AppShared/Info.plist
+++ b/AppShared/Info.plist
@@ -17,6 +17,6 @@
CFBundleShortVersionString
1.3.1
CFBundleVersion
- 110
+ 113
diff --git a/Localization/StringsConvertor/Intents/input/it_IT/Intents.strings b/Localization/StringsConvertor/Intents/input/it_IT/Intents.strings
index 6877490ba..d26aef14b 100644
--- a/Localization/StringsConvertor/Intents/input/it_IT/Intents.strings
+++ b/Localization/StringsConvertor/Intents/input/it_IT/Intents.strings
@@ -1,51 +1,51 @@
-"16wxgf" = "Post on Mastodon";
+"16wxgf" = "Pubblica su Mastodon";
-"751xkl" = "Text Content";
+"751xkl" = "Contenuto testuale";
-"CsR7G2" = "Post on Mastodon";
+"CsR7G2" = "Pubblica su Mastodon";
-"HZSGTr" = "What content to post?";
+"HZSGTr" = "Quale contenuto postare?";
-"HdGikU" = "Posting failed";
+"HdGikU" = "Pubblicazione non riuscita";
-"KDNTJ4" = "Failure Reason";
+"KDNTJ4" = "Motivo del fallimento";
-"RHxKOw" = "Send Post with text content";
+"RHxKOw" = "Invia post con contenuto testuale";
-"RxSqsb" = "Post";
+"RxSqsb" = "Pubblica";
-"WCIR3D" = "Post ${content} on Mastodon";
+"WCIR3D" = "Pubblica ${content} su Mastodon";
-"ZKJSNu" = "Post";
+"ZKJSNu" = "Pubblica";
"ZS1XaK" = "${content}";
-"ZbSjzC" = "Visibility";
+"ZbSjzC" = "Visibilità";
-"Zo4jgJ" = "Post Visibility";
+"Zo4jgJ" = "Visibilità del post";
-"apSxMG-dYQ5NN" = "There are ${count} options matching ‘Public’.";
+"apSxMG-dYQ5NN" = "Ci sono ${count} opzioni corrispondenti a 'Pubblico'.";
-"apSxMG-ehFLjY" = "There are ${count} options matching ‘Followers Only’.";
+"apSxMG-ehFLjY" = "Ci sono ${count} opzioni corrispondenti a ‘Solo Seguaci’.";
-"ayoYEb-dYQ5NN" = "${content}, Public";
+"ayoYEb-dYQ5NN" = "${content}, Pubblico";
-"ayoYEb-ehFLjY" = "${content}, Followers Only";
+"ayoYEb-ehFLjY" = "${content}, Solo seguaci";
-"dUyuGg" = "Post on Mastodon";
+"dUyuGg" = "Pubblica su Mastodon";
-"dYQ5NN" = "Public";
+"dYQ5NN" = "Pubblico";
-"ehFLjY" = "Followers Only";
+"ehFLjY" = "Solo i seguaci";
-"gfePDu" = "Posting failed. ${failureReason}";
+"gfePDu" = "Pubblicazione fallita. ${failureReason}";
-"k7dbKQ" = "Post was sent successfully.";
+"k7dbKQ" = "Post inviato con successo.";
-"oGiqmY-dYQ5NN" = "Just to confirm, you wanted ‘Public’?";
+"oGiqmY-dYQ5NN" = "Solo per confermare, volevi ‘Pubblico’?";
-"oGiqmY-ehFLjY" = "Just to confirm, you wanted ‘Followers Only’?";
+"oGiqmY-ehFLjY" = "Solo per confermare, volevi 'Solo seguaci'?";
"rM6dvp" = "URL";
-"ryJLwG" = "Post was sent successfully. ";
+"ryJLwG" = "Post inviato con successo. ";
diff --git a/Localization/StringsConvertor/Intents/input/it_IT/Intents.stringsdict b/Localization/StringsConvertor/Intents/input/it_IT/Intents.stringsdict
index 18422c772..75d98a9e1 100644
--- a/Localization/StringsConvertor/Intents/input/it_IT/Intents.stringsdict
+++ b/Localization/StringsConvertor/Intents/input/it_IT/Intents.stringsdict
@@ -5,7 +5,7 @@
There are ${count} options matching ‘${content}’. - 2
NSStringLocalizedFormatKey
- There are %#@count_option@ matching ‘${content}’.
+ Ci sono %#@count_option@ corrispondenti a «${content}».
count_option
NSStringFormatSpecTypeKey
@@ -13,15 +13,15 @@
NSStringFormatValueTypeKey
%ld
one
- 1 option
+ 1 opzione
other
- %ld options
+ %ld opzioni
There are ${count} options matching ‘${visibility}’.
NSStringLocalizedFormatKey
- There are %#@count_option@ matching ‘${visibility}’.
+ Ci sono %#@count_option@ corrispondenti a «${visibility}».
count_option
NSStringFormatSpecTypeKey
@@ -29,9 +29,9 @@
NSStringFormatValueTypeKey
%ld
one
- 1 option
+ 1 opzione
other
- %ld options
+ %ld opzioni
diff --git a/Localization/StringsConvertor/input/ar_SA/Localizable.stringsdict b/Localization/StringsConvertor/input/ar_SA/Localizable.stringsdict
index 32782f1c0..c2f641720 100644
--- a/Localization/StringsConvertor/input/ar_SA/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/ar_SA/Localizable.stringsdict
@@ -471,15 +471,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ سنة
+ مُنذُ %ldع
two
- مُنذُ سنتين
+ مُنذُ %ldع
few
- مُنذُ %ld سنين
+ مُنذُ %ldع
many
- مُنذُ %ld سنةً
+ مُنذُ %ldع
other
- مُنذُ %ld سنة
+ مُنذُ %ldع
date.month.ago.abbr
@@ -495,15 +495,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ شهر
+ مُنذُ %ldش
two
- مُنذُ شهرين
+ مُنذُ %ldش
few
- مُنذُ %ld أشهُر
+ مُنذُ %ldش
many
- مُنذُ %ld شهرًا
+ مُنذُ %ldش
other
- مُنذُ %ld شهر
+ مُنذُ %ldش
date.day.ago.abbr
@@ -519,15 +519,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ يوم
+ مُنذُ %ldي
two
- مُنذُ يومين
+ مُنذُ %ldي
few
- مُنذُ %ld أيام
+ مُنذُ %ldي
many
- مُنذُ %ld يومًا
+ مُنذُ %ldي
other
- مُنذُ %ld يوم
+ مُنذُ %ldي
date.hour.ago.abbr
@@ -543,15 +543,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ ساعة
+ مُنذُ %ldس
two
- مُنذُ ساعتين
+ مُنذُ %ldس
few
- مُنذُ %ld ساعات
+ مُنذُ %ldس
many
- مُنذُ %ld ساعةًَ
+ مُنذُ %ldس
other
- مُنذُ %ld ساعة
+ مُنذُ %ldس
date.minute.ago.abbr
@@ -567,15 +567,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ دقيقة
+ مُنذُ %ldد
two
- مُنذُ دقيقتان
+ مُنذُ %ldد
few
- مُنذُ %ld دقائق
+ مُنذُ %ldد
many
- مُنذُ %ld دقيقةً
+ مُنذُ %ldد
other
- مُنذُ %ld دقيقة
+ مُنذُ %ldد
date.second.ago.abbr
@@ -591,15 +591,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ ثانية
+ مُنذُ %ldث
two
- مُنذُ ثانيتين
+ مُنذُ %ldث
few
- مُنذُ %ld ثوان
+ مُنذُ %ldث
many
- مُنذُ %ld ثانية
+ مُنذُ %ldث
other
- مُنذُ %ld ثانية
+ مُنذُ %ldث
diff --git a/Localization/StringsConvertor/input/ar_SA/app.json b/Localization/StringsConvertor/input/ar_SA/app.json
index 6a6fdcd41..d9712536b 100644
--- a/Localization/StringsConvertor/input/ar_SA/app.json
+++ b/Localization/StringsConvertor/input/ar_SA/app.json
@@ -492,6 +492,14 @@
"clear": "مَحو"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "المنشورات",
+ "hashtags": "الوسوم",
+ "news": "الأخبار",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "مُفضَّلَتُك"
},
diff --git a/Localization/StringsConvertor/input/ca_ES/app.json b/Localization/StringsConvertor/input/ca_ES/app.json
index 1c73b9177..c3484260a 100644
--- a/Localization/StringsConvertor/input/ca_ES/app.json
+++ b/Localization/StringsConvertor/input/ca_ES/app.json
@@ -41,11 +41,11 @@
"block_entire_domain": "Bloquejar Domini"
},
"save_photo_failure": {
- "title": "Desa l'Error de la Foto",
+ "title": "Error al Desar la Foto",
"message": "Activa el permís d'accés a la biblioteca de fotos per desar-la."
},
"delete_post": {
- "title": "Estàs segur que vols suprimir aquesta publicació?",
+ "title": "Esborrar Publicació",
"message": "Estàs segur que vols suprimir aquesta publicació?"
},
"clean_cache": {
@@ -83,7 +83,7 @@
"share_post": "Compartir Publicació",
"open_in_safari": "Obrir a Safari",
"open_in_browser": "Obre al navegador",
- "find_people": "Busca persones per seguir",
+ "find_people": "Busca persones a seguir",
"manually_search": "Cerca manualment a canvi",
"skip": "Omet",
"reply": "Respon",
@@ -110,26 +110,26 @@
"previous_status": "Publicació anterior",
"next_status": "Publicació següent",
"open_status": "Obre la publicació",
- "open_author_profile": "Obre el perfil de l'autor",
- "open_reblogger_profile": "Obre el perfil del impulsor",
- "reply_status": "Respon a la publicació",
- "toggle_reblog": "Commuta l'impuls de la publicació",
- "toggle_favorite": "Commuta el Favorit de la publicació",
+ "open_author_profile": "Obre el Perfil de l'Autor",
+ "open_reblogger_profile": "Obre el Perfil del Impulsor",
+ "reply_status": "Respon a la Publicació",
+ "toggle_reblog": "Commuta l'Impuls de la Publicació",
+ "toggle_favorite": "Commuta el Favorit de la Publicació",
"toggle_content_warning": "Commuta l'Avís de Contingut",
"preview_image": "Vista prèvia de l'Imatge"
},
"segmented_control": {
- "previous_section": "Secció anterior",
- "next_section": "Secció següent"
+ "previous_section": "Secció Anterior",
+ "next_section": "Secció Següent"
}
},
"status": {
"user_reblogged": "%s ha impulsat",
"user_replied_to": "Ha respòs a %s",
- "show_post": "Mostra la publicació",
+ "show_post": "Mostra la Publicació",
"show_user_profile": "Mostra el perfil de l'usuari",
"content_warning": "Advertència de Contingut",
- "media_content_warning": "Toca qualsevol lloc per mostrar",
+ "media_content_warning": "Toca qualsevol lloc per a mostrar",
"tap_to_reveal": "Toca per a mostrar",
"poll": {
"vote": "Vota",
@@ -187,15 +187,15 @@
"now": "Ara"
},
"loader": {
- "load_missing_posts": "Carrega les publicacions que falten",
- "loading_missing_posts": "Carregant les publicacions que falten...",
+ "load_missing_posts": "Carrega les publicacions faltants",
+ "loading_missing_posts": "Carregant les publicacions faltants...",
"show_more_replies": "Mostra més respostes"
},
"header": {
"no_status_found": "No s'ha trobat cap publicació",
"blocking_warning": "No pots veure el perfil d'aquest usuari\n fins que el desbloquegis.\nEl teu perfil els sembla així.",
"user_blocking_warning": "No pots veure el perfil de %s\n fins que el desbloquegis.\nEl teu perfil els sembla així.",
- "blocked_warning": "No pots veure el perfil d'aquest usuari\n fins que et desbloquegi.",
+ "blocked_warning": "No pots veure el perfil d'aquest usuari\nfins que et desbloquegi.",
"user_blocked_warning": "No pots veure el perfil de %s\n fins que et desbloquegi.",
"suspended_warning": "Aquest usuari ha estat suspès.",
"user_suspended_warning": "El compte de %s ha estat suspès."
@@ -210,7 +210,7 @@
"log_in": "Inicia sessió"
},
"server_picker": {
- "title": "Tria un servidor,\nqualsevol servidor.",
+ "title": "Mastodon està fet d'usuaris en diferents comunitats.",
"subtitle": "Tria una comunitat segons els teus interessos, regió o una de propòsit general.",
"subtitle_extend": "Tria una comunitat segons els teus interessos, regió o una de propòsit general. Cada comunitat és operada per una organització totalment independent o individualment.",
"button": {
@@ -271,7 +271,7 @@
"checked": "verificat",
"unchecked": "no verificat"
},
- "hint": "La teva contrasenya ha de tenir com a mínim buit caràcters"
+ "hint": "La teva contrasenya ha de tenir com a mínim vuit caràcters"
},
"invite": {
"registration_user_invite_request": "Perquè vols unir-te?"
@@ -299,7 +299,7 @@
"inclusion": "%s no és un valor suportat"
},
"special": {
- "username_invalid": "El nom d'usuari només ha de contenir caràcters alfanumèrics i guions baixos",
+ "username_invalid": "El nom d'usuari ha de contenir només caràcters alfanumèrics i guions baixos",
"username_too_long": "El nom d'usuari és massa llarg (no pot ser més llarg de 30 caràcters)",
"email_invalid": "Aquesta no és una adreça de correu electrònic vàlida",
"password_too_short": "La contrasenya és massa curta (ha de tenir 8 caràcters com a mínim)"
@@ -318,7 +318,7 @@
},
"confirm_email": {
"title": "Una última cosa.",
- "subtitle": "Acabem d'enviar un correu electrònic a %s,\ntoca l'enllaç per a confirmar el teu compte.",
+ "subtitle": "Toca l'enllaç del correu electrònic que t'hem enviat per a confirmar el teu compte.",
"button": {
"open_email_app": "Obre l'aplicació de correu",
"resend": "Reenvia"
@@ -492,6 +492,14 @@
"clear": "Neteja"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Publicacions",
+ "hashtags": "Etiquetes",
+ "news": "Notícies",
+ "for_you": "Per a tu"
+ }
+ },
"favorite": {
"title": "Els teus Favorits"
},
@@ -543,7 +551,7 @@
"anyone": "algú",
"follower": "un seguidor",
"follow": "a qualsevol que segueixi",
- "noone": "algú",
+ "noone": "ningú",
"title": "Notifica'm quan"
}
},
diff --git a/Localization/StringsConvertor/input/cy_GB/app.json b/Localization/StringsConvertor/input/cy_GB/app.json
index f0dc0ebf1..548c5adae 100644
--- a/Localization/StringsConvertor/input/cy_GB/app.json
+++ b/Localization/StringsConvertor/input/cy_GB/app.json
@@ -492,6 +492,14 @@
"clear": "Clear"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/da_DK/app.json b/Localization/StringsConvertor/input/da_DK/app.json
index f0dc0ebf1..548c5adae 100644
--- a/Localization/StringsConvertor/input/da_DK/app.json
+++ b/Localization/StringsConvertor/input/da_DK/app.json
@@ -492,6 +492,14 @@
"clear": "Clear"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/de_DE/Localizable.stringsdict b/Localization/StringsConvertor/input/de_DE/Localizable.stringsdict
index cd7218623..20e8b615e 100644
--- a/Localization/StringsConvertor/input/de_DE/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/de_DE/Localizable.stringsdict
@@ -125,9 +125,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 reply
+ 1 Antwort
other
- %ld replies
+ %ld Antworten
plural.count.vote
diff --git a/Localization/StringsConvertor/input/de_DE/app.json b/Localization/StringsConvertor/input/de_DE/app.json
index e36015953..522b3f772 100644
--- a/Localization/StringsConvertor/input/de_DE/app.json
+++ b/Localization/StringsConvertor/input/de_DE/app.json
@@ -130,7 +130,7 @@
"show_user_profile": "Benutzerprofil anzeigen",
"content_warning": "Inhaltswarnung",
"media_content_warning": "Tippe irgendwo zum Anzeigen",
- "tap_to_reveal": "Tap to reveal",
+ "tap_to_reveal": "Zum Anzeigen tippen",
"poll": {
"vote": "Abstimmen",
"closed": "Beendet"
@@ -143,10 +143,10 @@
"unfavorite": "Aus Favoriten entfernen",
"menu": "Menü",
"hide": "Verstecken",
- "show_image": "Show image",
- "show_gif": "Show GIF",
- "show_video_player": "Show video player",
- "tap_then_hold_to_show_menu": "Tap then hold to show menu"
+ "show_image": "Bild anzeigen",
+ "show_gif": "GIF anzeigen",
+ "show_video_player": "Zeige Video-Player",
+ "tap_then_hold_to_show_menu": "Halte gedrückt um das Menü anzuzeigen"
},
"tag": {
"url": "URL",
@@ -447,10 +447,10 @@
}
},
"accessibility": {
- "show_avatar_image": "Show avatar image",
- "edit_avatar_image": "Edit avatar image",
- "show_banner_image": "Show banner image",
- "double_tap_to_open_the_list": "Double tap to open the list"
+ "show_avatar_image": "Profilbild anzeigen",
+ "edit_avatar_image": "Profilbild bearbeiten",
+ "show_banner_image": "Bannerbild anzeigen",
+ "double_tap_to_open_the_list": "Doppeltippen, um die Liste zu öffnen"
}
},
"follower": {
@@ -492,6 +492,14 @@
"clear": "Zurücksetzen"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Beiträge",
+ "hashtags": "Hashtags",
+ "news": "Nachrichten",
+ "for_you": "Für dich"
+ }
+ },
"favorite": {
"title": "Deine Favoriten"
},
@@ -553,7 +561,7 @@
"disable_avatar_animation": "Animierte Profilbilder deaktivieren",
"disable_emoji_animation": "Animierte Emojis deaktivieren",
"using_default_browser": "Standardbrowser zum Öffnen von Links verwenden",
- "open_links_in_mastodon": "Open links in Mastodon"
+ "open_links_in_mastodon": "Links in Mastodon öffnen"
},
"boring_zone": {
"title": "Der langweilige Bereich",
diff --git a/Localization/StringsConvertor/input/en_US/app.json b/Localization/StringsConvertor/input/en_US/app.json
index f0dc0ebf1..548c5adae 100644
--- a/Localization/StringsConvertor/input/en_US/app.json
+++ b/Localization/StringsConvertor/input/en_US/app.json
@@ -492,6 +492,14 @@
"clear": "Clear"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/es_AR/app.json b/Localization/StringsConvertor/input/es_AR/app.json
index c90fcb35d..581ccd83c 100644
--- a/Localization/StringsConvertor/input/es_AR/app.json
+++ b/Localization/StringsConvertor/input/es_AR/app.json
@@ -45,7 +45,7 @@
"message": "Por favor, habilitá el permiso de acceso a la biblioteca de fotos para guardar la imagen."
},
"delete_post": {
- "title": "¿Estás seguro que querés eliminar este mensaje?",
+ "title": "Eliminar mensaje",
"message": "¿Estás seguro que querés eliminar este mensaje?"
},
"clean_cache": {
@@ -492,6 +492,14 @@
"clear": "Limpiar"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Mensajes",
+ "hashtags": "Etiquetas",
+ "news": "Novedades",
+ "for_you": "Para vos"
+ }
+ },
"favorite": {
"title": "Tus favoritos"
},
diff --git a/Localization/StringsConvertor/input/es_ES/app.json b/Localization/StringsConvertor/input/es_ES/app.json
index e9f352cb8..d4215ecb9 100644
--- a/Localization/StringsConvertor/input/es_ES/app.json
+++ b/Localization/StringsConvertor/input/es_ES/app.json
@@ -492,6 +492,14 @@
"clear": "Borrar"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Tus Favoritos"
},
diff --git a/Localization/StringsConvertor/input/eu_ES/Localizable.stringsdict b/Localization/StringsConvertor/input/eu_ES/Localizable.stringsdict
index 2069e27a3..871fb10bc 100644
--- a/Localization/StringsConvertor/input/eu_ES/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/eu_ES/Localizable.stringsdict
@@ -125,9 +125,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 reply
+ Erantzun bat
other
- %ld replies
+ %ld erantzun
plural.count.vote
diff --git a/Localization/StringsConvertor/input/eu_ES/app.json b/Localization/StringsConvertor/input/eu_ES/app.json
index ff249acd4..8547ae263 100644
--- a/Localization/StringsConvertor/input/eu_ES/app.json
+++ b/Localization/StringsConvertor/input/eu_ES/app.json
@@ -130,7 +130,7 @@
"show_user_profile": "Erakutsi erabiltzailearen profila",
"content_warning": "Edukiaren abisua",
"media_content_warning": "Ukitu edonon bistaratzeko",
- "tap_to_reveal": "Tap to reveal",
+ "tap_to_reveal": "Sakatu erakusteko",
"poll": {
"vote": "Bozkatu",
"closed": "Itxita"
@@ -143,10 +143,10 @@
"unfavorite": "Kendu gogokoa",
"menu": "Menua",
"hide": "Ezkutatu",
- "show_image": "Show image",
- "show_gif": "Show GIF",
- "show_video_player": "Show video player",
- "tap_then_hold_to_show_menu": "Tap then hold to show menu"
+ "show_image": "Erakutsi irudia",
+ "show_gif": "Erakutsi GIFa",
+ "show_video_player": "Erakutsi bideo-erreproduzigailua",
+ "tap_then_hold_to_show_menu": "Sakatu eta eutsi menua erakusteko"
},
"tag": {
"url": "URLa",
@@ -447,10 +447,10 @@
}
},
"accessibility": {
- "show_avatar_image": "Show avatar image",
- "edit_avatar_image": "Edit avatar image",
- "show_banner_image": "Show banner image",
- "double_tap_to_open_the_list": "Double tap to open the list"
+ "show_avatar_image": "Erakutsi abatarra",
+ "edit_avatar_image": "Editatu abatarra",
+ "show_banner_image": "Erakutsi banner irudia",
+ "double_tap_to_open_the_list": "Sakatu birritan zerrenda irekitzeko"
}
},
"follower": {
@@ -492,6 +492,14 @@
"clear": "Garbitu"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Zure gogokoak"
},
@@ -502,8 +510,8 @@
},
"notification_description": {
"followed_you": "zu jarraitzen hasi da",
- "favorited_your_post": "erabiltzaileak zure bidalketa gogoko du",
- "reblogged_your_post": "erabiltzaileak bultzada eman dio zure bidalketari",
+ "favorited_your_post": "(e)k zure bidalketa gogoko du",
+ "reblogged_your_post": "(e)k bultzada eman dio zure bidalketari",
"mentioned_you": "erabiltzaileak aipatu zaitu",
"request_to_follow_you": "erabiltzaileak zu jarraitzea eskatu du",
"poll_has_ended": "inkesta amaitu da"
@@ -553,7 +561,7 @@
"disable_avatar_animation": "Desgaitu abatar animatuak",
"disable_emoji_animation": "Desgaitu emoji animatuak",
"using_default_browser": "Erabili nabigatzaile lehenetsia estekak irekitzeko",
- "open_links_in_mastodon": "Open links in Mastodon"
+ "open_links_in_mastodon": "Ireki estekak Mastodonen"
},
"boring_zone": {
"title": "Eremu aspergarria",
diff --git a/Localization/StringsConvertor/input/fr_FR/Localizable.stringsdict b/Localization/StringsConvertor/input/fr_FR/Localizable.stringsdict
index 93ee696f2..5c2b14978 100644
--- a/Localization/StringsConvertor/input/fr_FR/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/fr_FR/Localizable.stringsdict
@@ -125,9 +125,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 reply
+ 1 réponse
other
- %ld replies
+ %ld réponses
plural.count.vote
diff --git a/Localization/StringsConvertor/input/fr_FR/app.json b/Localization/StringsConvertor/input/fr_FR/app.json
index 248253e98..642d2c371 100644
--- a/Localization/StringsConvertor/input/fr_FR/app.json
+++ b/Localization/StringsConvertor/input/fr_FR/app.json
@@ -130,7 +130,7 @@
"show_user_profile": "Montrer le profil de l’utilisateur·rice",
"content_warning": "Avertissement de contenu",
"media_content_warning": "Tapotez n’importe où pour révéler la publication",
- "tap_to_reveal": "Tap to reveal",
+ "tap_to_reveal": "Appuyer pour afficher",
"poll": {
"vote": "Voter",
"closed": "Fermé"
@@ -143,9 +143,9 @@
"unfavorite": "Retirer des favoris",
"menu": "Menu",
"hide": "Cacher",
- "show_image": "Show image",
- "show_gif": "Show GIF",
- "show_video_player": "Show video player",
+ "show_image": "Afficher l’image",
+ "show_gif": "Afficher le GIF",
+ "show_video_player": "Afficher le lecteur vidéo",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
@@ -447,10 +447,10 @@
}
},
"accessibility": {
- "show_avatar_image": "Show avatar image",
- "edit_avatar_image": "Edit avatar image",
- "show_banner_image": "Show banner image",
- "double_tap_to_open_the_list": "Double tap to open the list"
+ "show_avatar_image": "Afficher l’avatar",
+ "edit_avatar_image": "Modifier l’avatar",
+ "show_banner_image": "Afficher l’image de la bannière",
+ "double_tap_to_open_the_list": "Appuyer deux fois pour ouvrir la liste"
}
},
"follower": {
@@ -492,6 +492,14 @@
"clear": "Effacer"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Messages",
+ "hashtags": "Hashtags",
+ "news": "Actualité",
+ "for_you": "Pour vous"
+ }
+ },
"favorite": {
"title": "Vos favoris"
},
@@ -553,7 +561,7 @@
"disable_avatar_animation": "Désactiver les avatars animés",
"disable_emoji_animation": "Désactiver les émojis animées",
"using_default_browser": "Utiliser le navigateur par défaut pour ouvrir les liens",
- "open_links_in_mastodon": "Open links in Mastodon"
+ "open_links_in_mastodon": "Ouvrir les liens dans Mastodon"
},
"boring_zone": {
"title": "La zone ennuyante",
diff --git a/Localization/StringsConvertor/input/gd_GB/app.json b/Localization/StringsConvertor/input/gd_GB/app.json
index 236ad4735..7053105dc 100644
--- a/Localization/StringsConvertor/input/gd_GB/app.json
+++ b/Localization/StringsConvertor/input/gd_GB/app.json
@@ -492,6 +492,14 @@
"clear": "Falamhaich"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Na h-annsachdan agad"
},
diff --git a/Localization/StringsConvertor/input/hi_IN/app.json b/Localization/StringsConvertor/input/hi_IN/app.json
index a33a4f62c..846a3f66f 100644
--- a/Localization/StringsConvertor/input/hi_IN/app.json
+++ b/Localization/StringsConvertor/input/hi_IN/app.json
@@ -492,6 +492,14 @@
"clear": "Clear"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/id_ID/app.json b/Localization/StringsConvertor/input/id_ID/app.json
index 1de960d1b..c6fe56107 100644
--- a/Localization/StringsConvertor/input/id_ID/app.json
+++ b/Localization/StringsConvertor/input/id_ID/app.json
@@ -492,6 +492,14 @@
"clear": "Hapus"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/it_IT/Localizable.stringsdict b/Localization/StringsConvertor/input/it_IT/Localizable.stringsdict
index 48222f420..710980608 100644
--- a/Localization/StringsConvertor/input/it_IT/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/it_IT/Localizable.stringsdict
@@ -95,7 +95,7 @@
one
1 preferito
other
- %ld favorites
+ %ld preferiti
plural.count.reblog
@@ -189,9 +189,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 seguace
+ 1 following
other
- %ld following
+ %ld stanno seguendo
plural.count.follower
@@ -205,9 +205,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 follower
+ 1 seguace
other
- %ld followers
+ %ld seguaci
date.year.left
@@ -221,9 +221,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 year left
+ 1 anno rimasto
other
- %ld years left
+ %ld anni rimasti
date.month.left
@@ -237,9 +237,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 months left
+ 1 mese rimasto
other
- %ld months left
+ %ld mesi rimasti
date.day.left
@@ -253,9 +253,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 day left
+ 1 giorno rimasto
other
- %ld days left
+ %ld giorni rimasti
date.hour.left
@@ -269,9 +269,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 hour left
+ 1 ora rimasta
other
- %ld hours left
+ %ld ore rimaste
date.minute.left
@@ -285,9 +285,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 minute left
+ 1 minuto rimasto
other
- %ld minutes left
+ %ld minuti rimasti
date.second.left
@@ -301,9 +301,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 second left
+ 1 secondo rimasto
other
- %ld seconds left
+ %ld secondi rimasti
date.year.ago.abbr
@@ -317,9 +317,9 @@
NSStringFormatValueTypeKey
ld
one
- 1y ago
+ 1 anno fa
other
- %ldy ago
+ %ld anni fa
date.month.ago.abbr
@@ -333,9 +333,9 @@
NSStringFormatValueTypeKey
ld
one
- 1M ago
+ 1 mese fa
other
- %ldM ago
+ %ld mesi fa
date.day.ago.abbr
@@ -349,9 +349,9 @@
NSStringFormatValueTypeKey
ld
one
- 1d ago
+ 1 giorno fa
other
- %ldd ago
+ %ld giorni fa
date.hour.ago.abbr
@@ -365,9 +365,9 @@
NSStringFormatValueTypeKey
ld
one
- 1h ago
+ 1 ora fa
other
- %ldh ago
+ %ld ore fa
date.minute.ago.abbr
@@ -381,9 +381,9 @@
NSStringFormatValueTypeKey
ld
one
- 1m ago
+ 1 minuto fa
other
- %ldm ago
+ %ld minuti fa
date.second.ago.abbr
@@ -397,9 +397,9 @@
NSStringFormatValueTypeKey
ld
one
- 1s ago
+ 1 secondo fa
other
- %lds ago
+ %ld secondi fa
diff --git a/Localization/StringsConvertor/input/it_IT/app.json b/Localization/StringsConvertor/input/it_IT/app.json
index c839cbefa..240440163 100644
--- a/Localization/StringsConvertor/input/it_IT/app.json
+++ b/Localization/StringsConvertor/input/it_IT/app.json
@@ -80,71 +80,71 @@
"preview": "Anteprima",
"share": "Condividi",
"share_user": "Condividi %s",
- "share_post": "Share Post",
- "open_in_safari": "Open in Safari",
- "open_in_browser": "Open in Browser",
- "find_people": "Find people to follow",
- "manually_search": "Manually search instead",
- "skip": "Skip",
- "reply": "Reply",
- "report_user": "Report %s",
- "block_domain": "Block %s",
- "unblock_domain": "Unblock %s",
- "settings": "Settings",
- "delete": "Delete"
+ "share_post": "Condividi il post",
+ "open_in_safari": "Apri su Safari",
+ "open_in_browser": "Apri nel browser",
+ "find_people": "Trova persone da seguire",
+ "manually_search": "Cerca manualmente invece",
+ "skip": "Salta",
+ "reply": "Rispondi",
+ "report_user": "Segnala %s",
+ "block_domain": "Blocca %s",
+ "unblock_domain": "Sblocca %s",
+ "settings": "Impostazioni",
+ "delete": "Elimina"
},
"tabs": {
- "home": "Home",
- "search": "Search",
- "notification": "Notification",
- "profile": "Profile"
+ "home": "Inizio",
+ "search": "Cerca",
+ "notification": "Notifiche",
+ "profile": "Profilo"
},
"keyboard": {
"common": {
- "switch_to_tab": "Switch to %s",
- "compose_new_post": "Compose New Post",
- "show_favorites": "Show Favorites",
- "open_settings": "Open Settings"
+ "switch_to_tab": "Passa a %s",
+ "compose_new_post": "Componi un nuovo post",
+ "show_favorites": "Mostra preferiti",
+ "open_settings": "Apri Impostazioni"
},
"timeline": {
- "previous_status": "Previous Post",
- "next_status": "Next Post",
- "open_status": "Open Post",
- "open_author_profile": "Open Author's Profile",
- "open_reblogger_profile": "Open Reblogger's Profile",
- "reply_status": "Reply to Post",
- "toggle_reblog": "Toggle Reblog on Post",
- "toggle_favorite": "Toggle Favorite on Post",
- "toggle_content_warning": "Toggle Content Warning",
- "preview_image": "Preview Image"
+ "previous_status": "Post precedente",
+ "next_status": "Post successivo",
+ "open_status": "Apri il post",
+ "open_author_profile": "Apri il profilo dell'autore",
+ "open_reblogger_profile": "Apri il profilo di chi ha condiviso",
+ "reply_status": "Rispondi al post",
+ "toggle_reblog": "Attiva/Disattiva condivisione sul post",
+ "toggle_favorite": "Attiva/Disattiva preferito nel post",
+ "toggle_content_warning": "Attiva/Disattiva avvertimento contenuti",
+ "preview_image": "Anteprima immagine"
},
"segmented_control": {
- "previous_section": "Previous Section",
- "next_section": "Next Section"
+ "previous_section": "Sezione precedente",
+ "next_section": "Sezione successiva"
}
},
"status": {
- "user_reblogged": "%s reblogged",
- "user_replied_to": "Replied to %s",
- "show_post": "Show Post",
- "show_user_profile": "Show user profile",
- "content_warning": "Content Warning",
- "media_content_warning": "Tap anywhere to reveal",
- "tap_to_reveal": "Tap to reveal",
+ "user_reblogged": "%s hanno condiviso",
+ "user_replied_to": "Rispondi a %s",
+ "show_post": "Mostra il post",
+ "show_user_profile": "Mostra il profilo dell'utente",
+ "content_warning": "Avviso sul contenuto",
+ "media_content_warning": "Tocca ovunque per rivelare",
+ "tap_to_reveal": "Tocca per rivelare",
"poll": {
- "vote": "Vote",
- "closed": "Closed"
+ "vote": "Vota",
+ "closed": "Chiuso"
},
"actions": {
- "reply": "Reply",
- "reblog": "Reblog",
- "unreblog": "Undo reblog",
- "favorite": "Favorite",
- "unfavorite": "Unfavorite",
- "menu": "Menu",
- "hide": "Hide",
- "show_image": "Show image",
- "show_gif": "Show GIF",
+ "reply": "Rispondi",
+ "reblog": "Condivisione",
+ "unreblog": "Annulla condivisione",
+ "favorite": "Preferito",
+ "unfavorite": "Non preferito",
+ "menu": "Menù",
+ "hide": "Nascondi",
+ "show_image": "Mostra immagine",
+ "show_gif": "Mostra GIF",
"show_video_player": "Mostra lettore video",
"tap_then_hold_to_show_menu": "Tocca quindi tieni premuto per mostrare il menu"
},
@@ -219,88 +219,88 @@
"all_accessiblity_description": "Categoria: Tutti",
"academia": "accademia",
"activism": "attivismo",
- "food": "food",
- "furry": "furry",
- "games": "games",
- "general": "general",
- "journalism": "journalism",
+ "food": "cibo",
+ "furry": "peloso",
+ "games": "giochi",
+ "general": "generale",
+ "journalism": "giornalismo",
"lgbt": "lgbt",
- "regional": "regional",
- "art": "art",
- "music": "music",
- "tech": "tech"
+ "regional": "locale",
+ "art": "arte",
+ "music": "musica",
+ "tech": "tecnologia"
},
- "see_less": "See Less",
- "see_more": "See More"
+ "see_less": "Vedi meno",
+ "see_more": "Vedi di più"
},
"label": {
- "language": "LANGUAGE",
- "users": "USERS",
- "category": "CATEGORY"
+ "language": "LINGUA",
+ "users": "UTENTI",
+ "category": "CATEGORIA"
},
"input": {
- "placeholder": "Search communities"
+ "placeholder": "Cerca comunità"
},
"empty_state": {
- "finding_servers": "Finding available servers...",
- "bad_network": "Something went wrong while loading the data. Check your internet connection.",
- "no_results": "No results"
+ "finding_servers": "Ricerca server disponibili...",
+ "bad_network": "Qualcosa è andato storto durante il caricamento dei dati. Controlla la tua connessione internet.",
+ "no_results": "Nessun risultato"
}
},
"register": {
- "title": "Let’s get you set up on %s",
+ "title": "Facciamo in modo che sia configurato il %s",
"input": {
"avatar": {
- "delete": "Delete"
+ "delete": "Elimina"
},
"username": {
- "placeholder": "username",
- "duplicate_prompt": "This username is taken."
+ "placeholder": "nome utente",
+ "duplicate_prompt": "Questo nome utente è già stato preso."
},
"display_name": {
- "placeholder": "display name"
+ "placeholder": "visualizza nome"
},
"email": {
"placeholder": "email"
},
"password": {
"placeholder": "password",
- "require": "Your password needs at least:",
- "character_limit": "8 characters",
+ "require": "La tua password ha bisogno di almeno:",
+ "character_limit": "8 caratteri",
"accessibility": {
- "checked": "checked",
- "unchecked": "unchecked"
+ "checked": "verificato",
+ "unchecked": "non verificato"
},
- "hint": "Your password needs at least eight characters"
+ "hint": "La tua password deve essere di almeno 8 caratteri"
},
"invite": {
- "registration_user_invite_request": "Why do you want to join?"
+ "registration_user_invite_request": "Perché vuoi unirti?"
}
},
"error": {
"item": {
- "username": "Username",
+ "username": "Nome utente",
"email": "Email",
"password": "Password",
- "agreement": "Agreement",
+ "agreement": "Accordo",
"locale": "Locale",
- "reason": "Reason"
+ "reason": "Motivo"
},
"reason": {
- "blocked": "%s contains a disallowed email provider",
- "unreachable": "%s does not seem to exist",
- "taken": "%s is already in use",
- "reserved": "%s is a reserved keyword",
- "accepted": "%s must be accepted",
- "blank": "%s is required",
- "invalid": "%s is invalid",
- "too_long": "%s is too long",
- "too_short": "%s is too short",
- "inclusion": "%s is not a supported value"
+ "blocked": "%s contiene un provider email non consentito",
+ "unreachable": "%s non sembra esistere",
+ "taken": "%s è già in uso",
+ "reserved": "%s è una parola chiave riservata",
+ "accepted": "%s deve essere accettato",
+ "blank": "%s è richiesto",
+ "invalid": "%s non è valido",
+ "too_long": "%s è troppo lungo",
+ "too_short": "%s è troppo corto",
+ "inclusion": "%s non è un valore supportato"
},
"special": {
- "username_invalid": "Username must only contain alphanumeric characters and underscores",
- "username_too_long": "Username is too long (can’t be longer than 30 characters)",
+ "username_invalid": "Il nome utente deve contenere solo caratteri alfanumerici e trattini bassi",
+ "username_too_long": "Il nome utente è troppo lungo (non può essere più lungo di 30 caratteri)",
"email_invalid": "Questo non è un indirizzo email valido",
"password_too_short": "La password è troppo corta (deve contenere almeno 8 caratteri)"
}
@@ -384,97 +384,97 @@
"visibility": {
"public": "Pubblico",
"unlisted": "Non elencato",
- "private": "Followers only",
- "direct": "Only people I mention"
+ "private": "Solo i seguaci",
+ "direct": "Solo le persone che menziono"
},
"auto_complete": {
- "space_to_add": "Space to add"
+ "space_to_add": "Spazio da aggiungere"
},
"accessibility": {
- "append_attachment": "Add Attachment",
- "append_poll": "Add Poll",
- "remove_poll": "Remove Poll",
- "custom_emoji_picker": "Custom Emoji Picker",
- "enable_content_warning": "Enable Content Warning",
- "disable_content_warning": "Disable Content Warning",
- "post_visibility_menu": "Post Visibility Menu"
+ "append_attachment": "Aggiungi allegato",
+ "append_poll": "Aggiungi sondaggio",
+ "remove_poll": "Elimina sondaggio",
+ "custom_emoji_picker": "Selettore Emoji personalizzato",
+ "enable_content_warning": "Abilita avvertimento contenuti",
+ "disable_content_warning": "Disabilita avviso di contenuti",
+ "post_visibility_menu": "Menu di visibilità del post"
},
"keyboard": {
- "discard_post": "Discard Post",
- "publish_post": "Publish Post",
- "toggle_poll": "Toggle Poll",
- "toggle_content_warning": "Toggle Content Warning",
- "append_attachment_entry": "Add Attachment - %s",
- "select_visibility_entry": "Select Visibility - %s"
+ "discard_post": "Scarta post",
+ "publish_post": "Pubblica il post",
+ "toggle_poll": "Attiva/Disattiva Sondaggio",
+ "toggle_content_warning": "Attiva/Disattiva avviso contenuti",
+ "append_attachment_entry": "Aggiungi allegato - %s",
+ "select_visibility_entry": "Seleziona visibilità - %s"
}
},
"profile": {
"dashboard": {
- "posts": "posts",
- "following": "following",
- "followers": "followers"
+ "posts": "post",
+ "following": "seguendo",
+ "followers": "seguaci"
},
"fields": {
- "add_row": "Add Row",
+ "add_row": "Aggiungi riga",
"placeholder": {
- "label": "Label",
- "content": "Content"
+ "label": "Etichetta",
+ "content": "Contenuto"
}
},
"segmented_control": {
- "posts": "Posts",
- "replies": "Replies",
- "posts_and_replies": "Posts and Replies",
+ "posts": "Post",
+ "replies": "Risposte",
+ "posts_and_replies": "Post e risposte",
"media": "Media",
- "about": "About"
+ "about": "Info su"
},
"relationship_action_alert": {
"confirm_mute_user": {
- "title": "Mute Account",
- "message": "Confirm to mute %s"
+ "title": "Silenzia account",
+ "message": "Confermi di silenziare %s"
},
"confirm_unmute_user": {
- "title": "Unmute Account",
- "message": "Confirm to unmute %s"
+ "title": "Riattiva account",
+ "message": "Confermi di riattivare %s"
},
"confirm_block_user": {
- "title": "Block Account",
- "message": "Confirm to block %s"
+ "title": "Blocca account",
+ "message": "Confermi di bloccare %s"
},
"confirm_unblock_user": {
- "title": "Unblock Account",
- "message": "Confirm to unblock %s"
+ "title": "Sblocca account",
+ "message": "Conferma per sbloccare %s"
}
},
"accessibility": {
- "show_avatar_image": "Show avatar image",
- "edit_avatar_image": "Edit avatar image",
- "show_banner_image": "Show banner image",
- "double_tap_to_open_the_list": "Double tap to open the list"
+ "show_avatar_image": "Mostra immagine avatar",
+ "edit_avatar_image": "Modifica immagine avatar",
+ "show_banner_image": "Mostra immagine banner",
+ "double_tap_to_open_the_list": "Doppio tocco per aprire la lista"
}
},
"follower": {
- "footer": "Followers from other servers are not displayed."
+ "footer": "I seguaci da altri server non vengono visualizzati."
},
"following": {
- "footer": "Follows from other servers are not displayed."
+ "footer": "I follow da altri server non vengono visualizzati."
},
"search": {
- "title": "Search",
+ "title": "Cerca",
"search_bar": {
- "placeholder": "Search hashtags and users",
- "cancel": "Cancel"
+ "placeholder": "Cerca hashtag e utenti",
+ "cancel": "Annulla"
},
"recommend": {
- "button_text": "See All",
+ "button_text": "Vedi tutto",
"hash_tag": {
- "title": "Trending on Mastodon",
- "description": "Hashtags that are getting quite a bit of attention",
- "people_talking": "%s people are talking"
+ "title": "Di tendenza su Mastodon",
+ "description": "Hashtag che stanno ottenendo un bel po' di attenzione",
+ "people_talking": "%s persone ne parlano"
},
"accounts": {
- "title": "Accounts you might like",
- "description": "You may like to follow these accounts",
+ "title": "Account che potrebbero piacerti",
+ "description": "Potresti voler seguire questi account",
"follow": "Segui"
}
},
@@ -492,6 +492,14 @@
"clear": "Cancella"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Post",
+ "hashtags": "Hashtag",
+ "news": "Notizie",
+ "for_you": "Per Te"
+ }
+ },
"favorite": {
"title": "I tuoi preferiti"
},
@@ -559,50 +567,50 @@
"title": "La zona boring",
"account_settings": "Impostazioni account",
"terms": "Termini di servizio",
- "privacy": "Privacy Policy"
+ "privacy": "Politica sulla Privacy"
},
"spicy_zone": {
- "title": "The Spicy Zone",
- "clear": "Clear Media Cache",
- "signout": "Sign Out"
+ "title": "La zona piccante",
+ "clear": "Cancella la cache multimediale",
+ "signout": "Esci"
}
},
"footer": {
- "mastodon_description": "Mastodon is open source software. You can report issues on GitHub at %s (%s)"
+ "mastodon_description": "Mastodon è un software open source. Puoi segnalare problemi su GitHub a %s (%s)"
},
"keyboard": {
- "close_settings_window": "Close Settings Window"
+ "close_settings_window": "Chiudi la finestra Impostazioni"
}
},
"report": {
- "title_report": "Report",
- "title": "Report %s",
- "step1": "Step 1 of 2",
- "step2": "Step 2 of 2",
- "content1": "Are there any other posts you’d like to add to the report?",
- "content2": "Is there anything the moderators should know about this report?",
- "report_sent_title": "Thanks for reporting, we’ll look into this.",
- "send": "Send Report",
- "skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments",
- "reported": "REPORTED"
+ "title_report": "Segnala",
+ "title": "Segnala %s",
+ "step1": "Fase 1 di 2",
+ "step2": "Fase 2 di 2",
+ "content1": "Ci sono altri post che vorresti aggiungere alla segnalazione?",
+ "content2": "C'è qualcosa che i moderatori dovrebbero sapere su questa segnalazione?",
+ "report_sent_title": "Grazie per la segnalazione, esamineremo questo aspetto.",
+ "send": "Invia segnalazione",
+ "skip_to_send": "Invia senza commento",
+ "text_placeholder": "Digita o incolla commenti aggiuntivi",
+ "reported": "SEGNALATO"
},
"preview": {
"keyboard": {
- "close_preview": "Close Preview",
- "show_next": "Show Next",
- "show_previous": "Show Previous"
+ "close_preview": "Chiudi anteprima",
+ "show_next": "Mostra successivo",
+ "show_previous": "Mostra precedente"
}
},
"account_list": {
- "tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
- "dismiss_account_switcher": "Dismiss Account Switcher",
- "add_account": "Add Account"
+ "tab_bar_hint": "Profilo corrente selezionato: %s. Doppio tocco e tieni premuto per mostrare il cambio account",
+ "dismiss_account_switcher": "Ignora il cambio account",
+ "add_account": "Aggiungi account"
},
"wizard": {
- "new_in_mastodon": "New in Mastodon",
- "multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
- "accessibility_hint": "Double tap to dismiss this wizard"
+ "new_in_mastodon": "Nuovo su Mastodon",
+ "multiple_account_switch_intro_description": "Passa tra più account tenendo premuto il pulsante del profilo.",
+ "accessibility_hint": "Doppio tocco per eliminare questa procedura guidata"
}
}
}
\ No newline at end of file
diff --git a/Localization/StringsConvertor/input/ja_JP/app.json b/Localization/StringsConvertor/input/ja_JP/app.json
index 5117c19fd..fb16cf4b2 100644
--- a/Localization/StringsConvertor/input/ja_JP/app.json
+++ b/Localization/StringsConvertor/input/ja_JP/app.json
@@ -492,6 +492,14 @@
"clear": "クリア"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "お気に入り"
},
diff --git a/Localization/StringsConvertor/input/kab_KAB/app.json b/Localization/StringsConvertor/input/kab_KAB/app.json
index feb257001..08de0aef7 100644
--- a/Localization/StringsConvertor/input/kab_KAB/app.json
+++ b/Localization/StringsConvertor/input/kab_KAB/app.json
@@ -492,6 +492,14 @@
"clear": "Sfeḍ"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Ismenyifen-ik·im"
},
diff --git a/Localization/StringsConvertor/input/kmr_TR/app.json b/Localization/StringsConvertor/input/kmr_TR/app.json
index ffa345778..61fb70338 100644
--- a/Localization/StringsConvertor/input/kmr_TR/app.json
+++ b/Localization/StringsConvertor/input/kmr_TR/app.json
@@ -492,6 +492,14 @@
"clear": "Pak bike"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Şandî",
+ "hashtags": "Hashtag",
+ "news": "Nûçe",
+ "for_you": "Ji bo te"
+ }
+ },
"favorite": {
"title": "Bijarteyên te"
},
diff --git a/Localization/StringsConvertor/input/ko_KR/app.json b/Localization/StringsConvertor/input/ko_KR/app.json
index e75a2ae0c..ab079573e 100644
--- a/Localization/StringsConvertor/input/ko_KR/app.json
+++ b/Localization/StringsConvertor/input/ko_KR/app.json
@@ -492,6 +492,14 @@
"clear": "Clear"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/nl_NL/app.json b/Localization/StringsConvertor/input/nl_NL/app.json
index 6d004c555..7a0e37a24 100644
--- a/Localization/StringsConvertor/input/nl_NL/app.json
+++ b/Localization/StringsConvertor/input/nl_NL/app.json
@@ -492,6 +492,14 @@
"clear": "Wissen"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Uw favorieten"
},
diff --git a/Localization/StringsConvertor/input/pt_BR/app.json b/Localization/StringsConvertor/input/pt_BR/app.json
index f0dc0ebf1..548c5adae 100644
--- a/Localization/StringsConvertor/input/pt_BR/app.json
+++ b/Localization/StringsConvertor/input/pt_BR/app.json
@@ -492,6 +492,14 @@
"clear": "Clear"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/pt_PT/app.json b/Localization/StringsConvertor/input/pt_PT/app.json
index f0dc0ebf1..548c5adae 100644
--- a/Localization/StringsConvertor/input/pt_PT/app.json
+++ b/Localization/StringsConvertor/input/pt_PT/app.json
@@ -492,6 +492,14 @@
"clear": "Clear"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/ro_RO/app.json b/Localization/StringsConvertor/input/ro_RO/app.json
index eeb4dc865..1b776e792 100644
--- a/Localization/StringsConvertor/input/ro_RO/app.json
+++ b/Localization/StringsConvertor/input/ro_RO/app.json
@@ -492,6 +492,14 @@
"clear": "Clear"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/ru_RU/app.json b/Localization/StringsConvertor/input/ru_RU/app.json
index 0309c4630..ca040eeb8 100644
--- a/Localization/StringsConvertor/input/ru_RU/app.json
+++ b/Localization/StringsConvertor/input/ru_RU/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "Вы уверены, что хотите удалить этот пост?",
- "message": "Are you sure you want to delete this post?"
+ "message": "Вы уверены, что хотите удалить этот пост?"
},
"clean_cache": {
"title": "Очистка кэша",
@@ -130,7 +130,7 @@
"show_user_profile": "Показать профиль пользователя",
"content_warning": "Предупреждение о содержании",
"media_content_warning": "Нажмите в любом месте, чтобы показать",
- "tap_to_reveal": "Tap to reveal",
+ "tap_to_reveal": "Нажмите, чтобы показать",
"poll": {
"vote": "Проголосовать",
"closed": "Завершён"
@@ -142,11 +142,11 @@
"favorite": "Добавить в избранное",
"unfavorite": "Убрать из избранного",
"menu": "Меню",
- "hide": "Hide",
- "show_image": "Show image",
- "show_gif": "Show GIF",
- "show_video_player": "Show video player",
- "tap_then_hold_to_show_menu": "Tap then hold to show menu"
+ "hide": "Скрыть",
+ "show_image": "Показать изображение",
+ "show_gif": "Показать GIF",
+ "show_video_player": "Показать видеопроигрыватель",
+ "tap_then_hold_to_show_menu": "Нажмите и удерживайте, чтобы показать меню"
},
"tag": {
"url": "Ссылка",
@@ -175,7 +175,7 @@
"unblock_user": "Разблокировать %s",
"blocked": "В заблокированных",
"mute": "Игнорировать",
- "mute_user": "Добавить %s в игнорируемые",
+ "mute_user": "Игнорировать %s",
"unmute": "Убрать из игнорируемых",
"unmute_user": "Убрать %s из игнорируемых",
"muted": "В игнорируемых",
@@ -206,7 +206,7 @@
"scene": {
"welcome": {
"slogan": "Социальная сеть\nпод вашим контролем.",
- "get_started": "Get Started",
+ "get_started": "Присоединиться",
"log_in": "Вход"
},
"server_picker": {
@@ -321,7 +321,7 @@
"subtitle": "Мы только что отправили письмо на\n%s.\nНажмите на ссылку в нём, чтобы\nподтвердить свою учётную запись.",
"button": {
"open_email_app": "Открыть приложение почты",
- "resend": "Resend"
+ "resend": "Отправить заново"
},
"dont_receive_email": {
"title": "Проверьте свой e-mail адрес",
@@ -424,7 +424,7 @@
"segmented_control": {
"posts": "Посты",
"replies": "Ответы",
- "posts_and_replies": "Posts and Replies",
+ "posts_and_replies": "Посты и ответы",
"media": "Медиа",
"about": "About"
},
@@ -492,6 +492,14 @@
"clear": "Очистить"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Ваше избранное"
},
@@ -553,7 +561,7 @@
"disable_avatar_animation": "Отключить анимацию аватарок",
"disable_emoji_animation": "Отключить анимацию эмодзи",
"using_default_browser": "Использовать браузер по умолчанию для открытия ссылок",
- "open_links_in_mastodon": "Open links in Mastodon"
+ "open_links_in_mastodon": "Открывать ссылки в Мастодоне"
},
"boring_zone": {
"title": "Зона скукотищи",
@@ -575,7 +583,7 @@
}
},
"report": {
- "title_report": "Report",
+ "title_report": "Жалоба",
"title": "Пожаловаться на %s",
"step1": "Шаг 1 из 2",
"step2": "Шаг 2 из 2",
@@ -600,7 +608,7 @@
"add_account": "Add Account"
},
"wizard": {
- "new_in_mastodon": "New in Mastodon",
+ "new_in_mastodon": "Новое в Мастодоне",
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
"accessibility_hint": "Double tap to dismiss this wizard"
}
diff --git a/Localization/StringsConvertor/input/sv_FI/app.json b/Localization/StringsConvertor/input/sv_FI/app.json
index 5bb7c8b70..769aadc5b 100644
--- a/Localization/StringsConvertor/input/sv_FI/app.json
+++ b/Localization/StringsConvertor/input/sv_FI/app.json
@@ -492,6 +492,14 @@
"clear": "Tyhjennä"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Omat suosikit"
},
diff --git a/Localization/StringsConvertor/input/sv_SE/app.json b/Localization/StringsConvertor/input/sv_SE/app.json
index d21203af3..f18ce2dc8 100644
--- a/Localization/StringsConvertor/input/sv_SE/app.json
+++ b/Localization/StringsConvertor/input/sv_SE/app.json
@@ -492,6 +492,14 @@
"clear": "Rensa"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/StringsConvertor/input/th_TH/Localizable.stringsdict b/Localization/StringsConvertor/input/th_TH/Localizable.stringsdict
index 3895c3993..8ae8feb7b 100644
--- a/Localization/StringsConvertor/input/th_TH/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/th_TH/Localizable.stringsdict
@@ -111,7 +111,7 @@
NSStringFormatValueTypeKey
ld
other
- %ld replies
+ %ld การตอบกลับ
plural.count.vote
diff --git a/Localization/StringsConvertor/input/th_TH/app.json b/Localization/StringsConvertor/input/th_TH/app.json
index 183f9cfc9..b771f951f 100644
--- a/Localization/StringsConvertor/input/th_TH/app.json
+++ b/Localization/StringsConvertor/input/th_TH/app.json
@@ -130,7 +130,7 @@
"show_user_profile": "แสดงโปรไฟล์ผู้ใช้",
"content_warning": "คำเตือนเนื้อหา",
"media_content_warning": "แตะที่ใดก็ตามเพื่อเปิดเผย",
- "tap_to_reveal": "Tap to reveal",
+ "tap_to_reveal": "แตะเพื่อเปิดเผย",
"poll": {
"vote": "ลงคะแนน",
"closed": "ปิดแล้ว"
@@ -143,10 +143,10 @@
"unfavorite": "เลิกชื่นชอบ",
"menu": "เมนู",
"hide": "ซ่อน",
- "show_image": "Show image",
- "show_gif": "Show GIF",
- "show_video_player": "Show video player",
- "tap_then_hold_to_show_menu": "Tap then hold to show menu"
+ "show_image": "แสดงภาพ",
+ "show_gif": "แสดง GIF",
+ "show_video_player": "แสดงตัวเล่นวิดีโอ",
+ "tap_then_hold_to_show_menu": "แตะค้างไว้เพื่อแสดงเมนู"
},
"tag": {
"url": "URL",
@@ -447,10 +447,10 @@
}
},
"accessibility": {
- "show_avatar_image": "Show avatar image",
- "edit_avatar_image": "Edit avatar image",
- "show_banner_image": "Show banner image",
- "double_tap_to_open_the_list": "Double tap to open the list"
+ "show_avatar_image": "แสดงภาพประจำตัว",
+ "edit_avatar_image": "แก้ไขภาพประจำตัว",
+ "show_banner_image": "แสดงภาพแบนเนอร์",
+ "double_tap_to_open_the_list": "แตะสองครั้งเพื่อเปิดรายการ"
}
},
"follower": {
@@ -492,6 +492,14 @@
"clear": "ล้าง"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "โพสต์",
+ "hashtags": "แฮชแท็ก",
+ "news": "ข่าว",
+ "for_you": "สำหรับคุณ"
+ }
+ },
"favorite": {
"title": "รายการโปรดของคุณ"
},
@@ -553,7 +561,7 @@
"disable_avatar_animation": "ปิดใช้งานภาพประจำตัวแบบเคลื่อนไหว",
"disable_emoji_animation": "ปิดใช้งานอีโมจิแบบเคลื่อนไหว",
"using_default_browser": "ใช้เบราว์เซอร์เริ่มต้นเพื่อเปิดลิงก์",
- "open_links_in_mastodon": "Open links in Mastodon"
+ "open_links_in_mastodon": "เปิดลิงก์ใน Mastodon"
},
"boring_zone": {
"title": "โซนน่าเบื่อ",
diff --git a/Localization/StringsConvertor/input/vi_VN/app.json b/Localization/StringsConvertor/input/vi_VN/app.json
index eafd513bc..5aa16c958 100644
--- a/Localization/StringsConvertor/input/vi_VN/app.json
+++ b/Localization/StringsConvertor/input/vi_VN/app.json
@@ -28,8 +28,8 @@
}
},
"edit_profile_failure": {
- "title": "Lỗi chỉnh sửa trang cá nhân",
- "message": "Không thể chỉnh sửa trang cá nhân. Vui lòng thử lại."
+ "title": "Lỗi chỉnh sửa hồ sơ",
+ "message": "Không thể chỉnh sửa hồ sơ. Vui lòng thử lại."
},
"sign_out": {
"title": "Đăng xuất",
@@ -97,7 +97,7 @@
"home": "Bảng tin",
"search": "Tìm kiếm",
"notification": "Thông báo",
- "profile": "Trang cá nhân"
+ "profile": "Trang hồ sơ"
},
"keyboard": {
"common": {
@@ -127,7 +127,7 @@
"user_reblogged": "%s đăng lại",
"user_replied_to": "Trả lời %s",
"show_post": "Xem tút",
- "show_user_profile": "Xem trang cá nhân",
+ "show_user_profile": "Xem trang hồ sơ",
"content_warning": "Nội dung ẩn",
"media_content_warning": "Nhấn để hiển thị",
"tap_to_reveal": "Nhấn để hiển thị",
@@ -492,6 +492,14 @@
"clear": "Xóa"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Tút",
+ "hashtags": "Hashtag",
+ "news": "Tin tức",
+ "for_you": "Dành cho bạn"
+ }
+ },
"favorite": {
"title": "Lượt thích"
},
diff --git a/Localization/StringsConvertor/input/zh_CN/Localizable.stringsdict b/Localization/StringsConvertor/input/zh_CN/Localizable.stringsdict
index 418903836..6c2661ee5 100644
--- a/Localization/StringsConvertor/input/zh_CN/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/zh_CN/Localizable.stringsdict
@@ -111,7 +111,7 @@
NSStringFormatValueTypeKey
ld
other
- %ld replies
+ %ld 条回复
plural.count.vote
diff --git a/Localization/StringsConvertor/input/zh_CN/app.json b/Localization/StringsConvertor/input/zh_CN/app.json
index e0b3e084d..db871d5a9 100644
--- a/Localization/StringsConvertor/input/zh_CN/app.json
+++ b/Localization/StringsConvertor/input/zh_CN/app.json
@@ -130,7 +130,7 @@
"show_user_profile": "查看用户个人资料",
"content_warning": "内容警告",
"media_content_warning": "点击任意位置显示",
- "tap_to_reveal": "Tap to reveal",
+ "tap_to_reveal": "点击以显示",
"poll": {
"vote": "投票",
"closed": "已关闭"
@@ -143,10 +143,10 @@
"unfavorite": "取消喜欢",
"menu": "菜单",
"hide": "隐藏",
- "show_image": "Show image",
- "show_gif": "Show GIF",
- "show_video_player": "Show video player",
- "tap_then_hold_to_show_menu": "Tap then hold to show menu"
+ "show_image": "显示图片",
+ "show_gif": "显示 GIF",
+ "show_video_player": "显示视频播放器",
+ "tap_then_hold_to_show_menu": "长按以显示菜单"
},
"tag": {
"url": "URL",
@@ -447,10 +447,10 @@
}
},
"accessibility": {
- "show_avatar_image": "Show avatar image",
- "edit_avatar_image": "Edit avatar image",
- "show_banner_image": "Show banner image",
- "double_tap_to_open_the_list": "Double tap to open the list"
+ "show_avatar_image": "显示头像",
+ "edit_avatar_image": "编辑头像",
+ "show_banner_image": "显示顶部横幅图片",
+ "double_tap_to_open_the_list": "双击打开列表"
}
},
"follower": {
@@ -492,6 +492,14 @@
"clear": "清除"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "帖子",
+ "hashtags": "话题",
+ "news": "新闻",
+ "for_you": "为你推荐"
+ }
+ },
"favorite": {
"title": "你的喜欢"
},
@@ -553,7 +561,7 @@
"disable_avatar_animation": "禁用动画头像",
"disable_emoji_animation": "禁用动画表情",
"using_default_browser": "使用默认浏览器打开链接",
- "open_links_in_mastodon": "Open links in Mastodon"
+ "open_links_in_mastodon": "在 Mastodon 中打开链接"
},
"boring_zone": {
"title": "The Boring Zone",
diff --git a/Localization/StringsConvertor/input/zh_TW/app.json b/Localization/StringsConvertor/input/zh_TW/app.json
index e1e613233..909bd7c65 100644
--- a/Localization/StringsConvertor/input/zh_TW/app.json
+++ b/Localization/StringsConvertor/input/zh_TW/app.json
@@ -492,6 +492,14 @@
"clear": "Clear"
}
},
+ "discovery": {
+ "tabs": {
+ "posts": "Posts",
+ "hashtags": "Hashtags",
+ "news": "News",
+ "for_you": "For You"
+ }
+ },
"favorite": {
"title": "Your Favorites"
},
diff --git a/Localization/app.json b/Localization/app.json
index 548c5adae..a8fc9031f 100644
--- a/Localization/app.json
+++ b/Localization/app.json
@@ -129,6 +129,7 @@
"show_post": "Show Post",
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
+ "sensitive_content": "Sensitive Content",
"media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": {
@@ -498,7 +499,8 @@
"hashtags": "Hashtags",
"news": "News",
"for_you": "For You"
- }
+ },
+ "intro": "These are the posts gaining traction in your corner of Mastodon."
},
"favorite": {
"title": "Your Favorites"
diff --git a/Mastodon.xcodeproj/project.pbxproj b/Mastodon.xcodeproj/project.pbxproj
index 54c682956..8b212674c 100644
--- a/Mastodon.xcodeproj/project.pbxproj
+++ b/Mastodon.xcodeproj/project.pbxproj
@@ -115,9 +115,7 @@
DB0009A626AEE5DC009B9D2D /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = DB0009A926AEE5DC009B9D2D /* Intents.intentdefinition */; settings = {ATTRIBUTES = (no_codegen, ); }; };
DB0009A726AEE5DC009B9D2D /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = DB0009A926AEE5DC009B9D2D /* Intents.intentdefinition */; };
DB00CA972632DDB600A54956 /* CommonOSLog in Frameworks */ = {isa = PBXBuildFile; productRef = DB00CA962632DDB600A54956 /* CommonOSLog */; };
- DB0140BD25C40D7500F9F3CF /* CommonOSLog in Frameworks */ = {isa = PBXBuildFile; productRef = DB0140BC25C40D7500F9F3CF /* CommonOSLog */; };
DB0140CF25C42AEE00F9F3CF /* OSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0140CE25C42AEE00F9F3CF /* OSLog.swift */; };
- DB01E23326A98F0900C3965B /* MastodonMeta in Frameworks */ = {isa = PBXBuildFile; productRef = DB01E23226A98F0900C3965B /* MastodonMeta */; };
DB01E23526A98F0900C3965B /* MetaTextKit in Frameworks */ = {isa = PBXBuildFile; productRef = DB01E23426A98F0900C3965B /* MetaTextKit */; };
DB023D26279FFB0A005AC798 /* ShareActivityProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D25279FFB0A005AC798 /* ShareActivityProvider.swift */; };
DB023D2827A0FABD005AC798 /* NotificationTableViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D2727A0FABD005AC798 /* NotificationTableViewCellDelegate.swift */; };
@@ -130,6 +128,8 @@
DB029E95266A20430062874E /* MastodonAuthenticationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB029E94266A20430062874E /* MastodonAuthenticationController.swift */; };
DB02CDAB26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */; };
DB02CDBF2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDBE2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift */; };
+ DB02EA0B280D180D00E751C5 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = DB02EA0A280D180D00E751C5 /* KeychainAccess */; };
+ DB02EA0D280D184B00E751C5 /* CommonOSLog in Frameworks */ = {isa = PBXBuildFile; productRef = DB02EA0C280D184B00E751C5 /* CommonOSLog */; };
DB03A793272A7E5700EE37C5 /* SidebarListHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03A792272A7E5700EE37C5 /* SidebarListHeaderView.swift */; };
DB03A795272A981400EE37C5 /* ContentSplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03A794272A981400EE37C5 /* ContentSplitViewController.swift */; };
DB03F7F32689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03F7F22689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift */; };
@@ -148,6 +148,7 @@
DB0618072785A8880030EE79 /* MastodonRegisterViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618062785A8880030EE79 /* MastodonRegisterViewModel+Diffable.swift */; };
DB06180A2785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618092785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift */; };
DB084B5725CBC56C00F898ED /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB084B5625CBC56C00F898ED /* Status.swift */; };
+ DB0A322E280EE9FD001729D2 /* DiscoveryIntroBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */; };
DB0AC6FC25CD02E600D75117 /* APIService+Instance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0AC6FB25CD02E600D75117 /* APIService+Instance.swift */; };
DB0C946526A6FD4D0088FB11 /* AlamofireImage in Frameworks */ = {isa = PBXBuildFile; productRef = DB0C946426A6FD4D0088FB11 /* AlamofireImage */; };
DB0C947726A7FE840088FB11 /* NotificationAvatarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0C947626A7FE840088FB11 /* NotificationAvatarButton.swift */; };
@@ -347,7 +348,6 @@
DB6804872637CD4C00430867 /* AppShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DB6804D12637CE4700430867 /* UserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6804D02637CE4700430867 /* UserDefaults.swift */; };
DB6804FD2637CFEC00430867 /* AppSecret.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6804FC2637CFEC00430867 /* AppSecret.swift */; };
- DB6805102637D0F800430867 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = DB68050F2637D0F800430867 /* KeychainAccess */; };
DB68586425E619B700F0A850 /* NSKeyValueObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB68586325E619B700F0A850 /* NSKeyValueObservation.swift */; };
DB68A04A25E9027700CFDF14 /* AdaptiveStatusBarStyleNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB68A04925E9027700CFDF14 /* AdaptiveStatusBarStyleNavigationController.swift */; };
DB68A05D25E9055900CFDF14 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DB68A05C25E9055900CFDF14 /* Settings.bundle */; };
@@ -871,6 +871,7 @@
DB0618062785A8880030EE79 /* MastodonRegisterViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MastodonRegisterViewModel+Diffable.swift"; sourceTree = ""; };
DB0618092785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterAvatarTableViewCell.swift; sourceTree = ""; };
DB084B5625CBC56C00F898ED /* Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Status.swift; sourceTree = ""; };
+ DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryIntroBannerView.swift; sourceTree = ""; };
DB0AC6FB25CD02E600D75117 /* APIService+Instance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Instance.swift"; sourceTree = ""; };
DB0C947626A7FE840088FB11 /* NotificationAvatarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationAvatarButton.swift; sourceTree = ""; };
DB0EF72A26FDB1D200347686 /* SidebarListCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarListCollectionViewCell.swift; sourceTree = ""; };
@@ -1372,7 +1373,6 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- DB0140BD25C40D7500F9F3CF /* CommonOSLog in Frameworks */,
DB9A487E2603456B008B817C /* UITextView+Placeholder in Frameworks */,
2D939AC825EE14620076FA61 /* CropViewController in Frameworks */,
DBB525082611EAC0002F1F29 /* Tabman in Frameworks */,
@@ -1382,10 +1382,10 @@
DBAC6483267D0B21007FE9FD /* DifferenceKit in Frameworks */,
DB552D4F26BBD10C00E481F6 /* OrderedCollections in Frameworks */,
2D61336925C18A4F00CAE157 /* AlamofireNetworkActivityIndicator in Frameworks */,
- DB01E23326A98F0900C3965B /* MastodonMeta in Frameworks */,
DBAC64A1267E6D02007FE9FD /* Fuzi in Frameworks */,
DB3D0FF325BAA61700EAA174 /* AlamofireImage in Frameworks */,
DBAC649E267DFE43007FE9FD /* DiffableDataSources in Frameworks */,
+ DB02EA0D280D184B00E751C5 /* CommonOSLog in Frameworks */,
2D5981BA25E4D7F8000FB903 /* ThirdPartyMailer in Frameworks */,
87FFDA5D898A5C42ADCB35E7 /* Pods_Mastodon.framework in Frameworks */,
DBF7A0FC26830C33004176A2 /* FPSIndicator in Frameworks */,
@@ -1415,7 +1415,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- DB6805102637D0F800430867 /* KeychainAccess in Frameworks */,
+ DB02EA0B280D180D00E751C5 /* KeychainAccess in Frameworks */,
EE93E8E8F9E0C39EAAEBD92F /* Pods_AppShared.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -2025,6 +2025,14 @@
path = CoreDataStack;
sourceTree = "";
};
+ DB0A322F280EEA00001729D2 /* View */ = {
+ isa = PBXGroup;
+ children = (
+ DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */,
+ );
+ path = View;
+ sourceTree = "";
+ };
DB0C947826A7FE950088FB11 /* Button */ = {
isa = PBXGroup;
children = (
@@ -3110,6 +3118,7 @@
DBDFF1912805544800557A48 /* Discovery */ = {
isa = PBXGroup;
children = (
+ DB0A322F280EEA00001729D2 /* View */,
DBDFF19828055A0900557A48 /* Posts */,
DB3E6FDE2806A41200B035AE /* Hashtags */,
DB3E6FED2806D7FC00B035AE /* News */,
@@ -3303,7 +3312,6 @@
DB3D0FF225BAA61700EAA174 /* AlamofireImage */,
5D526FE125BE9AC400460CB9 /* MastodonSDK */,
2D61336825C18A4F00CAE157 /* AlamofireNetworkActivityIndicator */,
- DB0140BC25C40D7500F9F3CF /* CommonOSLog */,
2D5981B925E4D7F8000FB903 /* ThirdPartyMailer */,
2D939AC725EE14620076FA61 /* CropViewController */,
DB9A487D2603456B008B817C /* UITextView+Placeholder */,
@@ -3312,10 +3320,10 @@
DBAC649D267DFE43007FE9FD /* DiffableDataSources */,
DBAC64A0267E6D02007FE9FD /* Fuzi */,
DBF7A0FB26830C33004176A2 /* FPSIndicator */,
- DB01E23226A98F0900C3965B /* MastodonMeta */,
DB01E23426A98F0900C3965B /* MetaTextKit */,
DB552D4E26BBD10C00E481F6 /* OrderedCollections */,
DBA5A52E26F07ED800CACBAA /* PanModal */,
+ DB02EA0C280D184B00E751C5 /* CommonOSLog */,
);
productName = Mastodon;
productReference = DB427DD225BAA00100D1B89D /* Mastodon.app */;
@@ -3376,7 +3384,7 @@
);
name = AppShared;
packageProductDependencies = (
- DB68050F2637D0F800430867 /* KeychainAccess */,
+ DB02EA0A280D180D00E751C5 /* KeychainAccess */,
);
productName = AppShared;
productReference = DB68047F2637CD4C00430867 /* AppShared.framework */;
@@ -4088,6 +4096,7 @@
DB8AF55D25C138B7002E6C99 /* UIViewController.swift in Sources */,
DB7F48452620241000796008 /* ProfileHeaderViewModel.swift in Sources */,
DB647C5926F1EA2700F7F82C /* WizardPreference.swift in Sources */,
+ DB0A322E280EE9FD001729D2 /* DiscoveryIntroBannerView.swift in Sources */,
2D3F9E0425DFA133004262D9 /* UITapGestureRecognizer.swift in Sources */,
5DDDF1992617447F00311060 /* Mastodon+Entity+Tag.swift in Sources */,
5B90C45F262599800002E742 /* SettingsToggleTableViewCell.swift in Sources */,
@@ -4728,7 +4737,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@@ -4757,7 +4766,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@@ -4865,11 +4874,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 110;
+ DYLIB_CURRENT_VERSION = 113;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -4896,11 +4905,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 110;
+ DYLIB_CURRENT_VERSION = 113;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -4925,7 +4934,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4950,7 +4959,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4975,7 +4984,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5000,7 +5009,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5086,7 +5095,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@@ -5153,11 +5162,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 110;
+ DYLIB_CURRENT_VERSION = 113;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -5182,7 +5191,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5206,7 +5215,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5231,7 +5240,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5256,7 +5265,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5280,7 +5289,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 110;
+ CURRENT_PROJECT_VERSION = 113;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5421,7 +5430,7 @@
repositoryURL = "https://github.com/TwidereProject/MetaTextKit.git";
requirement = {
kind = exactVersion;
- version = 2.2.1;
+ version = 2.2.2;
};
};
DB0E2D2C26833FF600865C3C /* XCRemoteSwiftPackageReference "Nuke-FLAnimatedImage-Plugin" */ = {
@@ -5539,21 +5548,21 @@
package = DB0140BB25C40D7500F9F3CF /* XCRemoteSwiftPackageReference "CommonOSLog" */;
productName = CommonOSLog;
};
- DB0140BC25C40D7500F9F3CF /* CommonOSLog */ = {
- isa = XCSwiftPackageProductDependency;
- package = DB0140BB25C40D7500F9F3CF /* XCRemoteSwiftPackageReference "CommonOSLog" */;
- productName = CommonOSLog;
- };
- DB01E23226A98F0900C3965B /* MastodonMeta */ = {
- isa = XCSwiftPackageProductDependency;
- package = DB01E23126A98F0900C3965B /* XCRemoteSwiftPackageReference "MetaTextKit" */;
- productName = MastodonMeta;
- };
DB01E23426A98F0900C3965B /* MetaTextKit */ = {
isa = XCSwiftPackageProductDependency;
package = DB01E23126A98F0900C3965B /* XCRemoteSwiftPackageReference "MetaTextKit" */;
productName = MetaTextKit;
};
+ DB02EA0A280D180D00E751C5 /* KeychainAccess */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = DB6804722637CC1200430867 /* XCRemoteSwiftPackageReference "KeychainAccess" */;
+ productName = KeychainAccess;
+ };
+ DB02EA0C280D184B00E751C5 /* CommonOSLog */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = DB0140BB25C40D7500F9F3CF /* XCRemoteSwiftPackageReference "CommonOSLog" */;
+ productName = CommonOSLog;
+ };
DB0C946426A6FD4D0088FB11 /* AlamofireImage */ = {
isa = XCSwiftPackageProductDependency;
package = DB3D0FF125BAA61700EAA174 /* XCRemoteSwiftPackageReference "AlamofireImage" */;
@@ -5573,11 +5582,6 @@
package = DB552D4D26BBD10C00E481F6 /* XCRemoteSwiftPackageReference "swift-collections" */;
productName = OrderedCollections;
};
- DB68050F2637D0F800430867 /* KeychainAccess */ = {
- isa = XCSwiftPackageProductDependency;
- package = DB6804722637CC1200430867 /* XCRemoteSwiftPackageReference "KeychainAccess" */;
- productName = KeychainAccess;
- };
DB6D9F41263527CE008423CD /* AlamofireImage */ = {
isa = XCSwiftPackageProductDependency;
package = DB3D0FF125BAA61700EAA174 /* XCRemoteSwiftPackageReference "AlamofireImage" */;
diff --git a/Mastodon.xcodeproj/xcshareddata/xcschemes/Mastodon.xcscheme b/Mastodon.xcodeproj/xcshareddata/xcschemes/Mastodon.xcscheme
index 048ce3cf5..488d5a2da 100644
--- a/Mastodon.xcodeproj/xcshareddata/xcschemes/Mastodon.xcscheme
+++ b/Mastodon.xcodeproj/xcshareddata/xcschemes/Mastodon.xcscheme
@@ -73,7 +73,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- enableAddressSanitizer = "YES"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
@@ -90,13 +89,6 @@
ReferencedContainer = "container:Mastodon.xcodeproj">
-
-
-
-
MastodonIntent.xcscheme_^#shared#^_
orderHint
- 33
+ 30
MastodonIntents.xcscheme_^#shared#^_
@@ -124,12 +124,12 @@
NotificationService.xcscheme_^#shared#^_
orderHint
- 32
+ 31
ShareActionExtension.xcscheme_^#shared#^_
orderHint
- 31
+ 23
SuppressBuildableAutocreation
diff --git a/Mastodon.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Mastodon.xcworkspace/xcshareddata/swiftpm/Package.resolved
index 11d453883..53f6a3a4c 100644
--- a/Mastodon.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ b/Mastodon.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -6,8 +6,8 @@
"repositoryURL": "https://github.com/Alamofire/Alamofire.git",
"state": {
"branch": null,
- "revision": "f82c23a8a7ef8dc1a49a8bfc6a96883e79121864",
- "version": "5.5.0"
+ "revision": "354dda32d89fc8cd4f5c46487f64957d355f53d8",
+ "version": "5.6.1"
}
},
{
@@ -55,6 +55,15 @@
"version": "1.2.0"
}
},
+ {
+ "package": "FaviconFinder",
+ "repositoryURL": "https://github.com/will-lumley/FaviconFinder.git",
+ "state": {
+ "branch": null,
+ "revision": "1f74844f77f79b95c0bb0130b3a87d4f340e6d3a",
+ "version": "3.3.0"
+ }
+ },
{
"package": "FLAnimatedImage",
"repositoryURL": "https://github.com/Flipboard/FLAnimatedImage.git",
@@ -96,8 +105,8 @@
"repositoryURL": "https://github.com/TwidereProject/MetaTextKit.git",
"state": {
"branch": null,
- "revision": "3ea336d3de7938dc112084c596a646e697b0feee",
- "version": "2.2.1"
+ "revision": "8074400b3819ef0395550082e6e8e960ef22e1f3",
+ "version": "2.2.2"
}
},
{
@@ -105,8 +114,8 @@
"repositoryURL": "https://github.com/kean/Nuke.git",
"state": {
"branch": null,
- "revision": "0db18dd34998cca18e9a28bcee136f84518007a0",
- "version": "10.4.1"
+ "revision": "78fa963b8491fc520791d8c2a509f1b8593d8aae",
+ "version": "10.7.1"
}
},
{
@@ -141,8 +150,8 @@
"repositoryURL": "https://github.com/SDWebImage/SDWebImage.git",
"state": {
"branch": null,
- "revision": "2c53f531f1bedd253f55d85105409c28ed4a922c",
- "version": "5.12.3"
+ "revision": "2e63d0061da449ad0ed130768d05dceb1496de44",
+ "version": "5.12.5"
}
},
{
@@ -172,13 +181,22 @@
"version": "1.0.0"
}
},
+ {
+ "package": "SwiftSoup",
+ "repositoryURL": "https://github.com/scinfu/SwiftSoup.git",
+ "state": {
+ "branch": null,
+ "revision": "41e7c263fb8c277e980ebcb9b0b5f6031d3d4886",
+ "version": "2.4.2"
+ }
+ },
{
"package": "Introspect",
"repositoryURL": "https://github.com/siteline/SwiftUI-Introspect.git",
"state": {
"branch": null,
- "revision": "2e09be8af614401bc9f87d40093ec19ce56ccaf2",
- "version": "0.1.3"
+ "revision": "f2616860a41f9d9932da412a8978fec79c06fe24",
+ "version": "0.1.4"
}
},
{
diff --git a/Mastodon/Diffiable/Discovery/DiscoverySection.swift b/Mastodon/Diffiable/Discovery/DiscoverySection.swift
index 76cc9c030..cab2eb82b 100644
--- a/Mastodon/Diffiable/Discovery/DiscoverySection.swift
+++ b/Mastodon/Diffiable/Discovery/DiscoverySection.swift
@@ -52,13 +52,16 @@ extension DiscoverySection {
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: ProfileCardTableViewCell.self), for: indexPath) as! ProfileCardTableViewCell
context.managedObjectContext.performAndWait {
guard let user = record.object(in: context.managedObjectContext) else { return }
- cell.profileCardView.configure(user: user)
+ cell.configure(
+ tableView: tableView,
+ user: user,
+ profileCardTableViewCellDelegate: configuration.profileCardTableViewCellDelegate
+ )
}
context.authenticationService.activeMastodonAuthentication
.map { $0?.user }
.assign(to: \.me, on: cell.profileCardView.viewModel.relationshipViewModel)
.store(in: &cell.disposeBag)
- cell.delegate = configuration.profileCardTableViewCellDelegate
return cell
case .bottomLoader:
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: TimelineBottomLoaderTableViewCell.self), for: indexPath) as! TimelineBottomLoaderTableViewCell
diff --git a/Mastodon/Info.plist b/Mastodon/Info.plist
index 88b45ec38..0bd118781 100644
--- a/Mastodon/Info.plist
+++ b/Mastodon/Info.plist
@@ -43,7 +43,7 @@
CFBundleVersion
- 110
+ 113
ITSAppUsesNonExemptEncryption
LSApplicationQueriesSchemes
diff --git a/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift b/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift
index eab85e95e..36ceb6dd6 100644
--- a/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift
+++ b/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift
@@ -286,24 +286,8 @@ extension DataSourceFacade {
try await dependency.context.managedObjectContext.perform {
guard let _status = status.object(in: dependency.context.managedObjectContext) else { return }
let status = _status.reblog ?? _status
-
- let allToggled = status.isContentSensitiveToggled && status.isMediaSensitiveToggled
-
- status.update(isContentSensitiveToggled: !allToggled)
- status.update(isMediaSensitiveToggled: !allToggled)
+ status.update(isSensitiveToggled: !status.isSensitiveToggled)
}
}
-// static func responseToToggleMediaSensitiveAction(
-// dependency: NeedsDependency,
-// status: ManagedObjectRecord
-// ) async throws {
-// try await dependency.context.managedObjectContext.perform {
-// guard let _status = status.object(in: dependency.context.managedObjectContext) else { return }
-// let status = _status.reblog ?? _status
-//
-// status.update(isMediaSensitiveToggled: !status.isMediaSensitiveToggled)
-// }
-// }
-
}
diff --git a/Mastodon/Protocol/Provider/DataSourceProvider+NotificationTableViewCellDelegate.swift b/Mastodon/Protocol/Provider/DataSourceProvider+NotificationTableViewCellDelegate.swift
index 0924028ff..f6e58673b 100644
--- a/Mastodon/Protocol/Provider/DataSourceProvider+NotificationTableViewCellDelegate.swift
+++ b/Mastodon/Protocol/Provider/DataSourceProvider+NotificationTableViewCellDelegate.swift
@@ -135,7 +135,7 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider & Med
let status = _status.reblog ?? _status
return NotificationMediaTransitionContext(
status: .init(objectID: status.objectID),
- needsToggleMediaSensitive: status.isMediaSensitiveToggled ? !status.sensitive : status.sensitive
+ needsToggleMediaSensitive: status.isSensitiveToggled ? !status.sensitive : status.sensitive
)
}
@@ -187,7 +187,7 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider & Med
let status = _status.reblog ?? _status
return NotificationMediaTransitionContext(
status: .init(objectID: status.objectID),
- needsToggleMediaSensitive: status.isMediaSensitiveToggled ? !status.sensitive : status.sensitive
+ needsToggleMediaSensitive: status.isMediaSensitive ? !status.isSensitiveToggled : false
)
}
diff --git a/Mastodon/Protocol/Provider/DataSourceProvider+StatusTableViewCellDelegate.swift b/Mastodon/Protocol/Provider/DataSourceProvider+StatusTableViewCellDelegate.swift
index d14b5c346..9e5838e77 100644
--- a/Mastodon/Protocol/Provider/DataSourceProvider+StatusTableViewCellDelegate.swift
+++ b/Mastodon/Protocol/Provider/DataSourceProvider+StatusTableViewCellDelegate.swift
@@ -143,12 +143,7 @@ extension StatusTableViewCellDelegate where Self: DataSourceProvider & MediaPrev
return
}
- let managedObjectContext = self.context.managedObjectContext
- let needsToggleMediaSensitive: Bool = try await managedObjectContext.perform {
- guard let _status = status.object(in: managedObjectContext) else { return false }
- let status = _status.reblog ?? _status
- return status.isMediaSensitiveToggled ? !status.sensitive : status.sensitive
- }
+ let needsToggleMediaSensitive = await !statusView.viewModel.isMediaReveal
guard !needsToggleMediaSensitive else {
try await DataSourceFacade.responseToToggleSensitiveAction(
diff --git a/Mastodon/Scene/Discovery/Posts/DiscoveryPostsViewController.swift b/Mastodon/Scene/Discovery/Posts/DiscoveryPostsViewController.swift
index 30e2faf96..259b21d36 100644
--- a/Mastodon/Scene/Discovery/Posts/DiscoveryPostsViewController.swift
+++ b/Mastodon/Scene/Discovery/Posts/DiscoveryPostsViewController.swift
@@ -8,6 +8,7 @@
import os.log
import UIKit
import Combine
+import MastodonUI
final class DiscoveryPostsViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
@@ -31,6 +32,8 @@ final class DiscoveryPostsViewController: UIViewController, NeedsDependency, Med
}()
let refreshControl = UIRefreshControl()
+
+ let discoveryIntroBannerView = DiscoveryIntroBannerView()
deinit {
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
@@ -60,6 +63,21 @@ extension DiscoveryPostsViewController {
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
])
+
+ discoveryIntroBannerView.translatesAutoresizingMaskIntoConstraints = false
+ view.addSubview(discoveryIntroBannerView)
+ NSLayoutConstraint.activate([
+ discoveryIntroBannerView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),
+ discoveryIntroBannerView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
+ discoveryIntroBannerView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
+ ])
+
+ discoveryIntroBannerView.delegate = self
+ discoveryIntroBannerView.isHidden = UserDefaults.shared.discoveryIntroBannerNeedsHidden
+ UserDefaults.shared.publisher(for: \.discoveryIntroBannerNeedsHidden)
+ .receive(on: DispatchQueue.main)
+ .assign(to: \.isHidden, on: discoveryIntroBannerView)
+ .store(in: &disposeBag)
tableView.delegate = self
viewModel.setupDiffableDataSource(
@@ -146,3 +164,10 @@ extension DiscoveryPostsViewController: ScrollViewContainer {
tableView
}
}
+
+// MARK: - DiscoveryIntroBannerViewDelegate
+extension DiscoveryPostsViewController: DiscoveryIntroBannerViewDelegate {
+ func discoveryIntroBannerView(_ bannerView: DiscoveryIntroBannerView, closeButtonDidPressed button: UIButton) {
+ UserDefaults.shared.discoveryIntroBannerNeedsHidden = true
+ }
+}
diff --git a/Mastodon/Scene/Discovery/View/DiscoveryIntroBannerView.swift b/Mastodon/Scene/Discovery/View/DiscoveryIntroBannerView.swift
new file mode 100644
index 000000000..e3e1c4547
--- /dev/null
+++ b/Mastodon/Scene/Discovery/View/DiscoveryIntroBannerView.swift
@@ -0,0 +1,101 @@
+//
+// DiscoveryIntroBannerView.swift
+// Mastodon
+//
+// Created by MainasuK on 2022-4-19.
+//
+
+import os.log
+import UIKit
+import Combine
+import MastodonAsset
+
+public protocol DiscoveryIntroBannerViewDelegate: AnyObject {
+ func discoveryIntroBannerView(_ bannerView: DiscoveryIntroBannerView, closeButtonDidPressed button: UIButton)
+}
+
+public final class DiscoveryIntroBannerView: UIView {
+
+ let logger = Logger(subsystem: "DiscoveryIntroBannerView", category: "View")
+
+ var _disposeBag = Set()
+
+ public weak var delegate: DiscoveryIntroBannerViewDelegate?
+
+ let label: UILabel = {
+ let label = UILabel()
+ label.font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 16, weight: .regular))
+ label.textColor = Asset.Colors.Label.primary.color
+ label.text = "These are the posts gaining traction in your corner of Mastodon." // TODO: i18n
+ label.numberOfLines = 0
+ return label
+ }()
+
+ let closeButton: HitTestExpandedButton = {
+ let button = HitTestExpandedButton(type: .system)
+ button.setImage(UIImage(systemName: "xmark.circle.fill"), for: .normal)
+ button.tintColor = Asset.Colors.Label.secondary.color
+ return button
+ }()
+
+ public override init(frame: CGRect) {
+ super.init(frame: frame)
+ _init()
+ }
+
+ public required init?(coder: NSCoder) {
+ super.init(coder: coder)
+ _init()
+ }
+
+}
+
+extension DiscoveryIntroBannerView {
+ private func _init() {
+ preservesSuperviewLayoutMargins = true
+
+ setupAppearance(theme: ThemeService.shared.currentTheme.value)
+ ThemeService.shared.currentTheme
+ .receive(on: DispatchQueue.main)
+ .sink { [weak self] theme in
+ guard let self = self else { return }
+ self.setupAppearance(theme: theme)
+ }
+ .store(in: &_disposeBag)
+
+ closeButton.translatesAutoresizingMaskIntoConstraints = false
+ addSubview(closeButton)
+ NSLayoutConstraint.activate([
+ closeButton.topAnchor.constraint(equalTo: topAnchor, constant: 16).priority(.required - 1),
+ layoutMarginsGuide.trailingAnchor.constraint(equalTo: closeButton.trailingAnchor),
+ closeButton.heightAnchor.constraint(equalToConstant: 20).priority(.required - 1),
+ closeButton.widthAnchor.constraint(equalToConstant: 20).priority(.required - 1),
+ ])
+
+ label.translatesAutoresizingMaskIntoConstraints = false
+ addSubview(label)
+ NSLayoutConstraint.activate([
+ label.topAnchor.constraint(equalTo: topAnchor, constant: 16).priority(.required - 1),
+ label.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor),
+ closeButton.leadingAnchor.constraint(equalTo: label.trailingAnchor, constant: 10),
+ bottomAnchor.constraint(equalTo: label.bottomAnchor, constant: 16).priority(.required - 1),
+ ])
+
+ closeButton.addTarget(self, action: #selector(DiscoveryIntroBannerView.closeButtonDidPressed(_:)), for: .touchUpInside)
+ }
+}
+
+extension DiscoveryIntroBannerView {
+ @objc private func closeButtonDidPressed(_ sender: UIButton) {
+ logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public)")
+ delegate?.discoveryIntroBannerView(self, closeButtonDidPressed: sender)
+ }
+}
+
+extension DiscoveryIntroBannerView {
+
+ private func setupAppearance(theme: Theme) {
+ backgroundColor = theme.systemBackgroundColor
+ }
+
+}
diff --git a/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewController.swift b/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewController.swift
index bdb4d05cb..16130251c 100644
--- a/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewController.swift
+++ b/Mastodon/Scene/Notification/NotificationTimeline/NotificationTimelineViewController.swift
@@ -39,6 +39,8 @@ final class NotificationTimelineViewController: UIViewController, NeedsDependenc
return tableView
}()
+ let cellFrameCache = NSCache()
+
deinit {
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s", ((#file as NSString).lastPathComponent), #line, #function)
}
@@ -122,6 +124,16 @@ extension NotificationTimelineViewController {
}
+// MARK: - CellFrameCacheContainer
+extension NotificationTimelineViewController: CellFrameCacheContainer {
+ func keyForCache(tableView: UITableView, indexPath: IndexPath) -> NSNumber? {
+ guard let diffableDataSource = viewModel.diffableDataSource else { return nil }
+ guard let item = diffableDataSource.itemIdentifier(for: indexPath) else { return nil }
+ let key = NSNumber(value: item.hashValue)
+ return key
+ }
+}
+
extension NotificationTimelineViewController {
@objc private func refreshControlValueChanged(_ sender: UIRefreshControl) {
@@ -162,6 +174,13 @@ extension NotificationTimelineViewController: UITableViewDelegate, AutoGenerateT
// sourcery:end
+ func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
+ guard let frame = retrieveCellFrame(tableView: tableView, indexPath: indexPath) else {
+ return 300
+ }
+ return ceil(frame.height)
+ }
+
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
guard let item = viewModel.diffableDataSource?.itemIdentifier(for: indexPath) else {
return
@@ -172,6 +191,10 @@ extension NotificationTimelineViewController: UITableViewDelegate, AutoGenerateT
await viewModel.loadMore(item: item)
}
}
+
+ func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
+ cacheCellFrame(tableView: tableView, didEndDisplaying: cell, forRowAt: indexPath)
+ }
}
diff --git a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewController.swift b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewController.swift
index 2d43faa56..b86c952a4 100644
--- a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewController.swift
+++ b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewController.swift
@@ -12,6 +12,7 @@ import GameController
import AuthenticationServices
import MastodonAsset
import MastodonLocalization
+import MastodonUI
final class MastodonPickServerViewController: UIViewController, NeedsDependency {
@@ -144,6 +145,13 @@ extension MastodonPickServerViewController {
pickServerServerSectionTableHeaderViewDelegate: self,
pickServerCellDelegate: self
)
+
+ KeyboardResponderService
+ .configure(
+ scrollView: tableView,
+ layoutNeedsUpdate: viewModel.viewDidAppear.eraseToAnyPublisher()
+ )
+ .store(in: &disposeBag)
viewModel
.selectedServer
@@ -238,6 +246,7 @@ extension MastodonPickServerViewController {
super.viewDidAppear(animated)
tableView.flashScrollIndicators()
+ viewModel.viewDidAppear.send()
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
@@ -416,28 +425,6 @@ extension MastodonPickServerViewController: UITableViewDelegate {
viewModel.selectedServer.send(nil)
}
- func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
- guard let diffableDataSource = viewModel.diffableDataSource else { return }
- guard let item = diffableDataSource.itemIdentifier(for: indexPath) else { return }
-
- switch item {
-// case .categoryPicker:
-// guard let cell = cell as? PickServerCategoriesCell else { return }
-// guard let diffableDataSource = cell.diffableDataSource else { return }
-// let snapshot = diffableDataSource.snapshot()
-//
-// let item = viewModel.selectCategoryItem.value
-// guard let section = snapshot.indexOfSection(.main),
-// let row = snapshot.indexOfItem(item) else { return }
-// cell.collectionView.selectItem(at: IndexPath(item: row, section: section), animated: false, scrollPosition: .centeredHorizontally)
-// case .search:
-// guard let cell = cell as? PickServerSearchCell else { return }
-// cell.searchTextField.text = viewModel.searchText.value
- default:
- break
- }
- }
-
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
guard let diffableDataSource = viewModel.diffableDataSource else { return nil }
let snapshot = diffableDataSource.snapshot()
diff --git a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift
index af38b110b..59008c530 100644
--- a/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift
+++ b/Mastodon/Scene/Onboarding/PickServer/MastodonPickServerViewModel.swift
@@ -45,7 +45,8 @@ class MastodonPickServerViewModel: NSObject {
let indexedServers = CurrentValueSubject<[Mastodon.Entity.Server], Never>([])
let unindexedServers = CurrentValueSubject<[Mastodon.Entity.Server]?, Never>([]) // set nil when loading
let viewWillAppear = PassthroughSubject()
-
+ let viewDidAppear = CurrentValueSubject(Void())
+
// output
var diffableDataSource: UITableViewDiffableDataSource?
private(set) lazy var loadIndexedServerStateMachine: GKStateMachine = {
diff --git a/Mastodon/Scene/Onboarding/PickServer/View/PickServerServerSectionTableHeaderView.swift b/Mastodon/Scene/Onboarding/PickServer/View/PickServerServerSectionTableHeaderView.swift
index b2269b9c4..894cbdbdf 100644
--- a/Mastodon/Scene/Onboarding/PickServer/View/PickServerServerSectionTableHeaderView.swift
+++ b/Mastodon/Scene/Onboarding/PickServer/View/PickServerServerSectionTableHeaderView.swift
@@ -185,12 +185,12 @@ extension PickServerServerSectionTableHeaderView {
override func accessibilityElementCount() -> Int {
guard let diffableDataSource = diffableDataSource else { return 0 }
- return diffableDataSource.snapshot().itemIdentifiers.count
+ return diffableDataSource.snapshot().itemIdentifiers.count + 1
}
override func accessibilityElement(at index: Int) -> Any? {
- guard let item = collectionView.cellForItem(at: IndexPath(item: index, section: 0)) else { return nil }
- return item
+ if let item = collectionView.cellForItem(at: IndexPath(item: index, section: 0)) { return item }
+ return searchTextField
}
}
diff --git a/Mastodon/Scene/Search/Search/SearchViewController.swift b/Mastodon/Scene/Search/Search/SearchViewController.swift
index 7594eb478..982844f51 100644
--- a/Mastodon/Scene/Search/Search/SearchViewController.swift
+++ b/Mastodon/Scene/Search/Search/SearchViewController.swift
@@ -15,7 +15,7 @@ import MastodonLocalization
final class HeightFixedSearchBar: UISearchBar {
override var intrinsicContentSize: CGSize {
- return CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
+ return CGSize(width: CGFloat.greatestFiniteMagnitude, height: 36)
}
}
@@ -179,14 +179,14 @@ extension SearchViewController: UISearchControllerDelegate {
//extension SearchViewController: UICollectionViewDelegate {
// func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): select item at: \(indexPath.debugDescription)")
-//
+//
// defer {
// collectionView.deselectItem(at: indexPath, animated: true)
// }
-//
+//
// guard let diffableDataSource = viewModel.diffableDataSource else { return }
// guard let item = diffableDataSource.itemIdentifier(for: indexPath) else { return }
-//
+//
// switch item {
// case .trend(let hashtag):
// let viewModel = HashtagTimelineViewModel(context: context, hashtag: hashtag.name)
diff --git a/Mastodon/Scene/Share/View/Content/MediaView+Configuration.swift b/Mastodon/Scene/Share/View/Content/MediaView+Configuration.swift
index cba1fcf6d..02f9ad5a4 100644
--- a/Mastodon/Scene/Share/View/Content/MediaView+Configuration.swift
+++ b/Mastodon/Scene/Share/View/Content/MediaView+Configuration.swift
@@ -62,14 +62,14 @@ extension MediaView {
{
let placeholder = UIImage.placeholder(color: .systemGray6)
let request = URLRequest(url: url)
- ImageDownloader.default.download(request) { response in
+ ImageDownloader.default.download(request, completion: { response in
switch response.result {
case .success(let image):
configuration.previewImage = image
- case .failure(let error):
+ case .failure:
configuration.previewImage = placeholder
}
- }
+ })
}
if let assetURL = configuration.assetURL,
@@ -84,7 +84,7 @@ extension MediaView {
.store(in: &configuration.blurhashImageDisposeBag)
}
- configuration.isReveal = status.sensitive ? status.isMediaSensitiveToggled : true
+ configuration.isReveal = status.isMediaSensitive ? status.isSensitiveToggled : true
return configuration
}
diff --git a/Mastodon/Scene/Share/View/Content/StatusView+Configuration.swift b/Mastodon/Scene/Share/View/Content/StatusView+Configuration.swift
index 1a90c69af..ab4fea1ab 100644
--- a/Mastodon/Scene/Share/View/Content/StatusView+Configuration.swift
+++ b/Mastodon/Scene/Share/View/Content/StatusView+Configuration.swift
@@ -156,7 +156,6 @@ extension StatusView {
.map { _ in author.avatarImageURL() }
.assign(to: \.authorAvatarImageURL, on: viewModel)
.store(in: &disposeBag)
-
// author name
Publishers.CombineLatest(
author.publisher(for: \.displayName),
@@ -268,25 +267,19 @@ extension StatusView {
.assign(to: \.visibility, on: viewModel)
.store(in: &disposeBag)
// sensitive
- status.publisher(for: \.isContentSensitiveToggled)
- .assign(to: \.isContentSensitiveToggled, on: viewModel)
+ viewModel.isContentSensitive = status.isContentSensitive
+ status.publisher(for: \.isSensitiveToggled)
+ .assign(to: \.isSensitiveToggled, on: viewModel)
.store(in: &disposeBag)
-
-
-// viewModel.source = status.source
}
private func configureMedia(status: Status) {
let status = status.reblog ?? status
- viewModel.isMediaSensitive = status.sensitive && !status.attachments.isEmpty // some servers set media sensitive even empty attachments
+ viewModel.isMediaSensitive = status.isMediaSensitive
let configurations = MediaView.configuration(status: status)
viewModel.mediaViewConfigurations = configurations
-
- status.publisher(for: \.isMediaSensitiveToggled)
- .assign(to: \.isMediaSensitiveToggled, on: viewModel)
- .store(in: &disposeBag)
}
private func configurePoll(status: Status) {
diff --git a/Mastodon/Scene/Share/View/TableviewCell/StatusTableViewCell.swift b/Mastodon/Scene/Share/View/TableviewCell/StatusTableViewCell.swift
index a1033f052..a3315211e 100644
--- a/Mastodon/Scene/Share/View/TableviewCell/StatusTableViewCell.swift
+++ b/Mastodon/Scene/Share/View/TableviewCell/StatusTableViewCell.swift
@@ -61,7 +61,7 @@ extension StatusTableViewCell {
statusView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 16),
containerViewLeadingLayoutConstraint,
containerViewTrailingLayoutConstraint,
- statusView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
+ contentView.bottomAnchor.constraint(equalTo: statusView.bottomAnchor, constant: 10),
])
statusView.setup(style: .inline)
updateContainerViewMarginConstraints()
diff --git a/Mastodon/Scene/Share/View/TableviewCell/StatusThreadRootTableViewCell.swift b/Mastodon/Scene/Share/View/TableviewCell/StatusThreadRootTableViewCell.swift
index e27cc2dd3..115175800 100644
--- a/Mastodon/Scene/Share/View/TableviewCell/StatusThreadRootTableViewCell.swift
+++ b/Mastodon/Scene/Share/View/TableviewCell/StatusThreadRootTableViewCell.swift
@@ -112,7 +112,7 @@ extension StatusThreadRootTableViewCell {
statusView.statusMetricView
]
- if !statusView.viewModel.isSensitive {
+ if !statusView.viewModel.isMediaSensitive {
elements.removeAll(where: { $0 === statusView.contentSensitiveeToggleButton })
}
diff --git a/MastodonIntent/Info.plist b/MastodonIntent/Info.plist
index 797487637..0d11fe1f3 100644
--- a/MastodonIntent/Info.plist
+++ b/MastodonIntent/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
1.3.1
CFBundleVersion
- 110
+ 113
NSExtension
NSExtensionAttributes
diff --git a/MastodonSDK/Package.swift b/MastodonSDK/Package.swift
index dd562f147..8b007c2a6 100644
--- a/MastodonSDK/Package.swift
+++ b/MastodonSDK/Package.swift
@@ -32,12 +32,13 @@ let package = Package(
.package(url: "https://github.com/apple/swift-nio.git", from: "1.0.0"),
.package(url: "https://github.com/kean/Nuke.git", from: "10.3.1"),
.package(url: "https://github.com/Flipboard/FLAnimatedImage.git", from: "1.0.0"),
- .package(url: "https://github.com/TwidereProject/MetaTextKit.git", .exact("2.2.1")),
+ .package(url: "https://github.com/TwidereProject/MetaTextKit.git", .exact("2.2.2")),
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.4.0"),
.package(url: "https://github.com/Alamofire/AlamofireImage.git", from: "4.1.0"),
.package(name: "NukeFLAnimatedImagePlugin", url: "https://github.com/kean/Nuke-FLAnimatedImage-Plugin.git", from: "8.0.0"),
.package(name: "UITextView+Placeholder", url: "https://github.com/MainasuK/UITextView-Placeholder.git", from: "1.4.1"),
- .package(name: "Introspect", url: "https://github.com/siteline/SwiftUI-Introspect.git", from: "0.1.3")
+ .package(name: "Introspect", url: "https://github.com/siteline/SwiftUI-Introspect.git", from: "0.1.3"),
+ .package(name: "FaviconFinder", url: "https://github.com/will-lumley/FaviconFinder.git", from: "3.2.2"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
@@ -94,8 +95,8 @@ let package = Package(
.product(name: "Alamofire", package: "Alamofire"),
.product(name: "AlamofireImage", package: "AlamofireImage"),
.product(name: "MetaTextKit", package: "MetaTextKit"),
- .product(name: "MastodonMeta", package: "MetaTextKit"),
.product(name: "FLAnimatedImage", package: "FLAnimatedImage"),
+ .product(name: "FaviconFinder", package: "FaviconFinder"),
]
),
.testTarget(
diff --git a/MastodonSDK/Sources/CoreDataStack/CoreData.xcdatamodeld/CoreData 3.xcdatamodel/contents b/MastodonSDK/Sources/CoreDataStack/CoreData.xcdatamodeld/CoreData 3.xcdatamodel/contents
index a6f0ee0ce..16a1c7c84 100644
--- a/MastodonSDK/Sources/CoreDataStack/CoreData.xcdatamodeld/CoreData 3.xcdatamodel/contents
+++ b/MastodonSDK/Sources/CoreDataStack/CoreData.xcdatamodeld/CoreData 3.xcdatamodel/contents
@@ -1,5 +1,5 @@
-
+
@@ -185,8 +185,7 @@
-
-
+
@@ -262,7 +261,7 @@
-
+
diff --git a/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/Status.swift b/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/Status.swift
index d17d1c616..0c7291913 100644
--- a/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/Status.swift
+++ b/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/Status.swift
@@ -42,9 +42,7 @@ public final class Status: NSManagedObject {
@NSManaged public private(set) var spoilerText: String?
// sourcery: autoUpdatableObject
- @NSManaged public private(set) var isContentSensitiveToggled: Bool
- // sourcery: autoUpdatableObject
- @NSManaged public private(set) var isMediaSensitiveToggled: Bool
+ @NSManaged public private(set) var isSensitiveToggled: Bool
@NSManaged public private(set) var application: Application?
@@ -432,14 +430,9 @@ extension Status: AutoUpdatableObject {
self.spoilerText = spoilerText
}
}
- public func update(isContentSensitiveToggled: Bool) {
- if self.isContentSensitiveToggled != isContentSensitiveToggled {
- self.isContentSensitiveToggled = isContentSensitiveToggled
- }
- }
- public func update(isMediaSensitiveToggled: Bool) {
- if self.isMediaSensitiveToggled != isMediaSensitiveToggled {
- self.isMediaSensitiveToggled = isMediaSensitiveToggled
+ public func update(isSensitiveToggled: Bool) {
+ if self.isSensitiveToggled != isSensitiveToggled {
+ self.isSensitiveToggled = isSensitiveToggled
}
}
public func update(reblogsCount: Int64) {
diff --git a/MastodonSDK/Sources/MastodonCommon/Preference/Preference+Discovery.swift b/MastodonSDK/Sources/MastodonCommon/Preference/Preference+Discovery.swift
new file mode 100644
index 000000000..0c6a9c544
--- /dev/null
+++ b/MastodonSDK/Sources/MastodonCommon/Preference/Preference+Discovery.swift
@@ -0,0 +1,19 @@
+//
+// Preference+Discovery.swift
+//
+//
+// Created by MainasuK on 2022-4-19.
+//
+
+import Foundation
+
+extension UserDefaults {
+
+ @objc public dynamic var discoveryIntroBannerNeedsHidden: Bool {
+ get {
+ return bool(forKey: #function)
+ }
+ set { self[#function] = newValue }
+ }
+
+}
diff --git a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift
index 15d786efb..f2bec6b01 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift
+++ b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift
@@ -543,6 +543,18 @@ public enum L10n {
public static let title = L10n.tr("Localizable", "Scene.ConfirmEmail.OpenEmailApp.Title")
}
}
+ public enum Discovery {
+ public enum Tabs {
+ /// For You
+ public static let forYou = L10n.tr("Localizable", "Scene.Discovery.Tabs.ForYou")
+ /// Hashtags
+ public static let hashtags = L10n.tr("Localizable", "Scene.Discovery.Tabs.Hashtags")
+ /// News
+ public static let news = L10n.tr("Localizable", "Scene.Discovery.Tabs.News")
+ /// Posts
+ public static let posts = L10n.tr("Localizable", "Scene.Discovery.Tabs.Posts")
+ }
+ }
public enum Favorite {
/// Your Favorites
public static let title = L10n.tr("Localizable", "Scene.Favorite.Title")
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings
index f26554fe5..bf6ab09e6 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings
@@ -201,6 +201,10 @@
"Scene.ConfirmEmail.Subtitle" = "لقد أرسلنا للتو بريد إلكتروني إلى %@،
انقر على الرابط لتأكيد حسابك.";
"Scene.ConfirmEmail.Title" = "شيءٌ أخير.";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "الوسوم";
+"Scene.Discovery.Tabs.News" = "الأخبار";
+"Scene.Discovery.Tabs.Posts" = "المنشورات";
"Scene.Favorite.Title" = "مُفضَّلَتُك";
"Scene.Follower.Footer" = "لا يُمكِن عَرض المُتابِعين مِنَ الخوادم الأُخرى.";
"Scene.Following.Footer" = "لا يُمكِن عَرض المُتابَعات مِنَ الخوادم الأُخرى.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.stringsdict
index 32782f1c0..c2f641720 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.stringsdict
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.stringsdict
@@ -471,15 +471,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ سنة
+ مُنذُ %ldع
two
- مُنذُ سنتين
+ مُنذُ %ldع
few
- مُنذُ %ld سنين
+ مُنذُ %ldع
many
- مُنذُ %ld سنةً
+ مُنذُ %ldع
other
- مُنذُ %ld سنة
+ مُنذُ %ldع
date.month.ago.abbr
@@ -495,15 +495,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ شهر
+ مُنذُ %ldش
two
- مُنذُ شهرين
+ مُنذُ %ldش
few
- مُنذُ %ld أشهُر
+ مُنذُ %ldش
many
- مُنذُ %ld شهرًا
+ مُنذُ %ldش
other
- مُنذُ %ld شهر
+ مُنذُ %ldش
date.day.ago.abbr
@@ -519,15 +519,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ يوم
+ مُنذُ %ldي
two
- مُنذُ يومين
+ مُنذُ %ldي
few
- مُنذُ %ld أيام
+ مُنذُ %ldي
many
- مُنذُ %ld يومًا
+ مُنذُ %ldي
other
- مُنذُ %ld يوم
+ مُنذُ %ldي
date.hour.ago.abbr
@@ -543,15 +543,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ ساعة
+ مُنذُ %ldس
two
- مُنذُ ساعتين
+ مُنذُ %ldس
few
- مُنذُ %ld ساعات
+ مُنذُ %ldس
many
- مُنذُ %ld ساعةًَ
+ مُنذُ %ldس
other
- مُنذُ %ld ساعة
+ مُنذُ %ldس
date.minute.ago.abbr
@@ -567,15 +567,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ دقيقة
+ مُنذُ %ldد
two
- مُنذُ دقيقتان
+ مُنذُ %ldد
few
- مُنذُ %ld دقائق
+ مُنذُ %ldد
many
- مُنذُ %ld دقيقةً
+ مُنذُ %ldد
other
- مُنذُ %ld دقيقة
+ مُنذُ %ldد
date.second.ago.abbr
@@ -591,15 +591,15 @@
zero
مُنذُ لَحظة
one
- مُنذُ ثانية
+ مُنذُ %ldث
two
- مُنذُ ثانيتين
+ مُنذُ %ldث
few
- مُنذُ %ld ثوان
+ مُنذُ %ldث
many
- مُنذُ %ld ثانية
+ مُنذُ %ldث
other
- مُنذُ %ld ثانية
+ مُنذُ %ldث
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings
index 0cb63f34b..4e10ce165 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings
@@ -5,7 +5,7 @@
"Common.Alerts.Common.PleaseTryAgain" = "Si us plau intenta-ho de nou.";
"Common.Alerts.Common.PleaseTryAgainLater" = "Si us plau, prova-ho més tard.";
"Common.Alerts.DeletePost.Message" = "Estàs segur que vols suprimir aquesta publicació?";
-"Common.Alerts.DeletePost.Title" = "Estàs segur que vols suprimir aquesta publicació?";
+"Common.Alerts.DeletePost.Title" = "Esborrar Publicació";
"Common.Alerts.DiscardPostContent.Message" = "Confirma per a descartar el contingut de la publicació composta.";
"Common.Alerts.DiscardPostContent.Title" = "Descarta l'esborrany";
"Common.Alerts.EditProfileFailure.Message" = "No es pot editar el perfil. Si us plau torna-ho a provar.";
@@ -16,7 +16,7 @@
Comprova la teva connexió a Internet.";
"Common.Alerts.PublishPostFailure.Title" = "Error de Publicació";
"Common.Alerts.SavePhotoFailure.Message" = "Activa el permís d'accés a la biblioteca de fotos per desar-la.";
-"Common.Alerts.SavePhotoFailure.Title" = "Desa l'Error de la Foto";
+"Common.Alerts.SavePhotoFailure.Title" = "Error al Desar la Foto";
"Common.Alerts.ServerError.Title" = "Error del Servidor";
"Common.Alerts.SignOut.Confirm" = "Tancar Sessió";
"Common.Alerts.SignOut.Message" = "Estàs segur que vols tancar la sessió?";
@@ -36,7 +36,7 @@ Comprova la teva connexió a Internet.";
"Common.Controls.Actions.Discard" = "Descarta";
"Common.Controls.Actions.Done" = "Fet";
"Common.Controls.Actions.Edit" = "Edita";
-"Common.Controls.Actions.FindPeople" = "Busca persones per seguir";
+"Common.Controls.Actions.FindPeople" = "Busca persones a seguir";
"Common.Controls.Actions.ManuallySearch" = "Cerca manualment a canvi";
"Common.Controls.Actions.Next" = "Següent";
"Common.Controls.Actions.Ok" = "D'acord";
@@ -81,18 +81,18 @@ Comprova la teva connexió a Internet.";
"Common.Controls.Keyboard.Common.OpenSettings" = "Obre la configuració";
"Common.Controls.Keyboard.Common.ShowFavorites" = "Mostra els Favorits";
"Common.Controls.Keyboard.Common.SwitchToTab" = "Canviar a %@";
-"Common.Controls.Keyboard.SegmentedControl.NextSection" = "Secció següent";
-"Common.Controls.Keyboard.SegmentedControl.PreviousSection" = "Secció anterior";
+"Common.Controls.Keyboard.SegmentedControl.NextSection" = "Secció Següent";
+"Common.Controls.Keyboard.SegmentedControl.PreviousSection" = "Secció Anterior";
"Common.Controls.Keyboard.Timeline.NextStatus" = "Publicació següent";
-"Common.Controls.Keyboard.Timeline.OpenAuthorProfile" = "Obre el perfil de l'autor";
-"Common.Controls.Keyboard.Timeline.OpenRebloggerProfile" = "Obre el perfil del impulsor";
+"Common.Controls.Keyboard.Timeline.OpenAuthorProfile" = "Obre el Perfil de l'Autor";
+"Common.Controls.Keyboard.Timeline.OpenRebloggerProfile" = "Obre el Perfil del Impulsor";
"Common.Controls.Keyboard.Timeline.OpenStatus" = "Obre la publicació";
"Common.Controls.Keyboard.Timeline.PreviewImage" = "Vista prèvia de l'Imatge";
"Common.Controls.Keyboard.Timeline.PreviousStatus" = "Publicació anterior";
-"Common.Controls.Keyboard.Timeline.ReplyStatus" = "Respon a la publicació";
+"Common.Controls.Keyboard.Timeline.ReplyStatus" = "Respon a la Publicació";
"Common.Controls.Keyboard.Timeline.ToggleContentWarning" = "Commuta l'Avís de Contingut";
-"Common.Controls.Keyboard.Timeline.ToggleFavorite" = "Commuta el Favorit de la publicació";
-"Common.Controls.Keyboard.Timeline.ToggleReblog" = "Commuta l'impuls de la publicació";
+"Common.Controls.Keyboard.Timeline.ToggleFavorite" = "Commuta el Favorit de la Publicació";
+"Common.Controls.Keyboard.Timeline.ToggleReblog" = "Commuta l'Impuls de la Publicació";
"Common.Controls.Status.Actions.Favorite" = "Favorit";
"Common.Controls.Status.Actions.Hide" = "Amaga";
"Common.Controls.Status.Actions.Menu" = "Menú";
@@ -105,10 +105,10 @@ Comprova la teva connexió a Internet.";
"Common.Controls.Status.Actions.Unfavorite" = "Desfer Favorit";
"Common.Controls.Status.Actions.Unreblog" = "Desfer l'impuls";
"Common.Controls.Status.ContentWarning" = "Advertència de Contingut";
-"Common.Controls.Status.MediaContentWarning" = "Toca qualsevol lloc per mostrar";
+"Common.Controls.Status.MediaContentWarning" = "Toca qualsevol lloc per a mostrar";
"Common.Controls.Status.Poll.Closed" = "Finalitzada";
"Common.Controls.Status.Poll.Vote" = "Vota";
-"Common.Controls.Status.ShowPost" = "Mostra la publicació";
+"Common.Controls.Status.ShowPost" = "Mostra la Publicació";
"Common.Controls.Status.ShowUserProfile" = "Mostra el perfil de l'usuari";
"Common.Controls.Status.Tag.Email" = "Correu electrònic";
"Common.Controls.Status.Tag.Emoji" = "Emoji";
@@ -129,7 +129,7 @@ Comprova la teva connexió a Internet.";
"Common.Controls.Tabs.Search" = "Cerca";
"Common.Controls.Timeline.Filtered" = "Filtrat";
"Common.Controls.Timeline.Header.BlockedWarning" = "No pots veure el perfil d'aquest usuari
- fins que et desbloquegi.";
+fins que et desbloquegi.";
"Common.Controls.Timeline.Header.BlockingWarning" = "No pots veure el perfil d'aquest usuari
fins que el desbloquegis.
El teu perfil els sembla així.";
@@ -141,8 +141,8 @@ El teu perfil els sembla així.";
fins que el desbloquegis.
El teu perfil els sembla així.";
"Common.Controls.Timeline.Header.UserSuspendedWarning" = "El compte de %@ ha estat suspès.";
-"Common.Controls.Timeline.Loader.LoadMissingPosts" = "Carrega les publicacions que falten";
-"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "Carregant les publicacions que falten...";
+"Common.Controls.Timeline.Loader.LoadMissingPosts" = "Carrega les publicacions faltants";
+"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "Carregant les publicacions faltants...";
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "Mostra més respostes";
"Common.Controls.Timeline.Timestamp.Now" = "Ara";
"Scene.AccountList.AddAccount" = "Afegir compte";
@@ -198,9 +198,12 @@ carregat a Mastodon.";
"Scene.ConfirmEmail.OpenEmailApp.Mail" = "Correu electrònic";
"Scene.ConfirmEmail.OpenEmailApp.OpenEmailClient" = "Obre el Client de Correu electrònic";
"Scene.ConfirmEmail.OpenEmailApp.Title" = "Comprova la teva safata d'entrada.";
-"Scene.ConfirmEmail.Subtitle" = "Acabem d'enviar un correu electrònic a %@,
-toca l'enllaç per a confirmar el teu compte.";
+"Scene.ConfirmEmail.Subtitle" = "Toca l'enllaç del correu electrònic que t'hem enviat per a confirmar el teu compte.";
"Scene.ConfirmEmail.Title" = "Una última cosa.";
+"Scene.Discovery.Tabs.ForYou" = "Per a tu";
+"Scene.Discovery.Tabs.Hashtags" = "Etiquetes";
+"Scene.Discovery.Tabs.News" = "Notícies";
+"Scene.Discovery.Tabs.Posts" = "Publicacions";
"Scene.Favorite.Title" = "Els teus Favorits";
"Scene.Follower.Footer" = "Els seguidors d'altres servidors no son mostrats.";
"Scene.Following.Footer" = "Els seguits d'altres servidors no son mostrats.";
@@ -263,7 +266,7 @@ toca l'enllaç per a confirmar el teu compte.";
"Scene.Register.Error.Reason.Unreachable" = "%@ sembla que no existeix";
"Scene.Register.Error.Special.EmailInvalid" = "Aquesta no és una adreça de correu electrònic vàlida";
"Scene.Register.Error.Special.PasswordTooShort" = "La contrasenya és massa curta (ha de tenir 8 caràcters com a mínim)";
-"Scene.Register.Error.Special.UsernameInvalid" = "El nom d'usuari només ha de contenir caràcters alfanumèrics i guions baixos";
+"Scene.Register.Error.Special.UsernameInvalid" = "El nom d'usuari ha de contenir només caràcters alfanumèrics i guions baixos";
"Scene.Register.Error.Special.UsernameTooLong" = "El nom d'usuari és massa llarg (no pot ser més llarg de 30 caràcters)";
"Scene.Register.Input.Avatar.Delete" = "Suprimeix";
"Scene.Register.Input.DisplayName.Placeholder" = "nom visible";
@@ -272,7 +275,7 @@ toca l'enllaç per a confirmar el teu compte.";
"Scene.Register.Input.Password.Accessibility.Checked" = "verificat";
"Scene.Register.Input.Password.Accessibility.Unchecked" = "no verificat";
"Scene.Register.Input.Password.CharacterLimit" = "8 caràcters";
-"Scene.Register.Input.Password.Hint" = "La teva contrasenya ha de tenir com a mínim buit caràcters";
+"Scene.Register.Input.Password.Hint" = "La teva contrasenya ha de tenir com a mínim vuit caràcters";
"Scene.Register.Input.Password.Placeholder" = "contrasenya";
"Scene.Register.Input.Password.Require" = "La teva contrasenya com a mínim necessita:";
"Scene.Register.Input.Username.DuplicatePrompt" = "Aquest nom d'usuari ja està en ús.";
@@ -331,8 +334,7 @@ toca l'enllaç per a confirmar el teu compte.";
"Scene.ServerPicker.Label.Users" = "USUARIS";
"Scene.ServerPicker.Subtitle" = "Tria una comunitat segons els teus interessos, regió o una de propòsit general.";
"Scene.ServerPicker.SubtitleExtend" = "Tria una comunitat segons els teus interessos, regió o una de propòsit general. Cada comunitat és operada per una organització totalment independent o individualment.";
-"Scene.ServerPicker.Title" = "Tria un servidor,
-qualsevol servidor.";
+"Scene.ServerPicker.Title" = "Mastodon està fet d'usuaris en diferents comunitats.";
"Scene.ServerRules.Button.Confirm" = "Hi estic d'acord";
"Scene.ServerRules.PrivacyPolicy" = "política de privadesa";
"Scene.ServerRules.Prompt" = "Al continuar, estàs subjecte als termes de servei i a la política de privacitat de %@.";
@@ -362,7 +364,7 @@ qualsevol servidor.";
"Scene.Settings.Section.Notifications.Trigger.Anyone" = "algú";
"Scene.Settings.Section.Notifications.Trigger.Follow" = "a qualsevol que segueixi";
"Scene.Settings.Section.Notifications.Trigger.Follower" = "un seguidor";
-"Scene.Settings.Section.Notifications.Trigger.Noone" = "algú";
+"Scene.Settings.Section.Notifications.Trigger.Noone" = "ningú";
"Scene.Settings.Section.Notifications.Trigger.Title" = "Notifica'm quan";
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "Desactiva avatars animats";
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "Desactiva emojis animats";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings
index 325b1e949..06f5eedff 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings
@@ -98,10 +98,10 @@ Bitte überprüfe deine Internetverbindung.";
"Common.Controls.Status.Actions.Menu" = "Menü";
"Common.Controls.Status.Actions.Reblog" = "Teilen";
"Common.Controls.Status.Actions.Reply" = "Antworten";
-"Common.Controls.Status.Actions.ShowGif" = "Show GIF";
-"Common.Controls.Status.Actions.ShowImage" = "Show image";
-"Common.Controls.Status.Actions.ShowVideoPlayer" = "Show video player";
-"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Tap then hold to show menu";
+"Common.Controls.Status.Actions.ShowGif" = "GIF anzeigen";
+"Common.Controls.Status.Actions.ShowImage" = "Bild anzeigen";
+"Common.Controls.Status.Actions.ShowVideoPlayer" = "Zeige Video-Player";
+"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Halte gedrückt um das Menü anzuzeigen";
"Common.Controls.Status.Actions.Unfavorite" = "Aus Favoriten entfernen";
"Common.Controls.Status.Actions.Unreblog" = "Nicht mehr teilen";
"Common.Controls.Status.ContentWarning" = "Inhaltswarnung";
@@ -116,7 +116,7 @@ Bitte überprüfe deine Internetverbindung.";
"Common.Controls.Status.Tag.Link" = "Link";
"Common.Controls.Status.Tag.Mention" = "Erwähnung";
"Common.Controls.Status.Tag.Url" = "URL";
-"Common.Controls.Status.TapToReveal" = "Tap to reveal";
+"Common.Controls.Status.TapToReveal" = "Zum Anzeigen tippen";
"Common.Controls.Status.UserReblogged" = "%@ teilte";
"Common.Controls.Status.UserRepliedTo" = "Antwortet auf %@";
"Common.Controls.Status.Visibility.Direct" = "Nur erwähnte Benutzer können diesen Beitrag sehen.";
@@ -201,6 +201,10 @@ kann nicht auf Mastodon hochgeladen werden.";
"Scene.ConfirmEmail.Subtitle" = "Wir haben gerade eine E-Mail an %@ gesendet,
tippe darin auf den Link, um Dein Konto zu bestätigen.";
"Scene.ConfirmEmail.Title" = "Noch eine letzte Sache.";
+"Scene.Discovery.Tabs.ForYou" = "Für dich";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "Nachrichten";
+"Scene.Discovery.Tabs.Posts" = "Beiträge";
"Scene.Favorite.Title" = "Deine Favoriten";
"Scene.Follower.Footer" = "Follower von anderen Servern werden nicht angezeigt.";
"Scene.Following.Footer" = "Wem das Konto folgt wird von anderen Servern werden nicht angezeigt.";
@@ -222,10 +226,10 @@ tippe darin auf den Link, um Dein Konto zu bestätigen.";
"Scene.Preview.Keyboard.ClosePreview" = "Vorschau schließen";
"Scene.Preview.Keyboard.ShowNext" = "Nächstes anzeigen";
"Scene.Preview.Keyboard.ShowPrevious" = "Vorheriges anzeigen";
-"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.Accessibility.DoubleTapToOpenTheList" = "Doppeltippen, um die Liste zu öffnen";
+"Scene.Profile.Accessibility.EditAvatarImage" = "Profilbild bearbeiten";
+"Scene.Profile.Accessibility.ShowAvatarImage" = "Profilbild anzeigen";
+"Scene.Profile.Accessibility.ShowBannerImage" = "Bannerbild anzeigen";
"Scene.Profile.Dashboard.Followers" = "Folger";
"Scene.Profile.Dashboard.Following" = "Gefolgte";
"Scene.Profile.Dashboard.Posts" = "Beiträge";
@@ -366,7 +370,7 @@ beliebigen Server.";
"Scene.Settings.Section.Notifications.Trigger.Title" = "Benachrichtige mich, wenn";
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "Animierte Profilbilder deaktivieren";
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "Animierte Emojis deaktivieren";
-"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Open links in Mastodon";
+"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Links in Mastodon öffnen";
"Scene.Settings.Section.Preference.Title" = "Präferenzen";
"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "Vollständig dunkler Dunkelmodus";
"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "Standardbrowser zum Öffnen von Links verwenden";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.stringsdict
index cd7218623..20e8b615e 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.stringsdict
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.stringsdict
@@ -125,9 +125,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 reply
+ 1 Antwort
other
- %ld replies
+ %ld Antworten
plural.count.vote
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings
index 285c185bc..4edf4702f 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings
@@ -200,6 +200,10 @@ uploaded to Mastodon.";
"Scene.ConfirmEmail.OpenEmailApp.Title" = "Check your inbox.";
"Scene.ConfirmEmail.Subtitle" = "Tap the link we emailed to you to verify your account.";
"Scene.ConfirmEmail.Title" = "One last thing.";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "News";
+"Scene.Discovery.Tabs.Posts" = "Posts";
"Scene.Favorite.Title" = "Your Favorites";
"Scene.Follower.Footer" = "Followers from other servers are not displayed.";
"Scene.Following.Footer" = "Follows from other servers are not displayed.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/es-419.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/es-419.lproj/Localizable.strings
index f3670fb6b..0782206f4 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/es-419.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/es-419.lproj/Localizable.strings
@@ -5,7 +5,7 @@
"Common.Alerts.Common.PleaseTryAgain" = "Por favor, intentá de nuevo.";
"Common.Alerts.Common.PleaseTryAgainLater" = "Por favor, intentá de nuevo más tarde.";
"Common.Alerts.DeletePost.Message" = "¿Estás seguro que querés eliminar este mensaje?";
-"Common.Alerts.DeletePost.Title" = "¿Estás seguro que querés eliminar este mensaje?";
+"Common.Alerts.DeletePost.Title" = "Eliminar mensaje";
"Common.Alerts.DiscardPostContent.Message" = "Confirmá para descartar el contenido del mensaje redactado.";
"Common.Alerts.DiscardPostContent.Title" = "Descartar borrador";
"Common.Alerts.EditProfileFailure.Message" = "No se pudo editar el perfil. Por favor, intentá de nuevo.";
@@ -201,6 +201,10 @@ y no se puede subir a Mastodon.";
"Scene.ConfirmEmail.Subtitle" = "Acabamos de enviar un correo electrónico a %@,
pulsá en el enlace para confirmar tu cuenta.";
"Scene.ConfirmEmail.Title" = "Una última cosa.";
+"Scene.Discovery.Tabs.ForYou" = "Para vos";
+"Scene.Discovery.Tabs.Hashtags" = "Etiquetas";
+"Scene.Discovery.Tabs.News" = "Novedades";
+"Scene.Discovery.Tabs.Posts" = "Mensajes";
"Scene.Favorite.Title" = "Tus favoritos";
"Scene.Follower.Footer" = "No se muestran los seguidores de otros servidores.";
"Scene.Following.Footer" = "No se muestran las cuentas de otros servidores que seguís.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings
index 4cbebb3e5..544a0b86c 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings
@@ -201,6 +201,10 @@ subirse a Mastodon.";
"Scene.ConfirmEmail.Subtitle" = "Te acabamos de enviar un correo a %@,
pulsa en el enlace para confirmar tu cuenta.";
"Scene.ConfirmEmail.Title" = "Una última cosa.";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "News";
+"Scene.Discovery.Tabs.Posts" = "Posts";
"Scene.Favorite.Title" = "Tus Favoritos";
"Scene.Follower.Footer" = "No se muestran los seguidores de otros servidores.";
"Scene.Following.Footer" = "No se muestran los seguidos de otros servidores.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/eu-ES.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/eu-ES.lproj/Localizable.strings
index 341f4862a..42b3bfb6c 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/eu-ES.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/eu-ES.lproj/Localizable.strings
@@ -98,10 +98,10 @@ Egiaztatu Interneteko konexioa.";
"Common.Controls.Status.Actions.Menu" = "Menua";
"Common.Controls.Status.Actions.Reblog" = "Bultzada";
"Common.Controls.Status.Actions.Reply" = "Erantzun";
-"Common.Controls.Status.Actions.ShowGif" = "Show GIF";
-"Common.Controls.Status.Actions.ShowImage" = "Show image";
-"Common.Controls.Status.Actions.ShowVideoPlayer" = "Show video player";
-"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Tap then hold to show menu";
+"Common.Controls.Status.Actions.ShowGif" = "Erakutsi GIFa";
+"Common.Controls.Status.Actions.ShowImage" = "Erakutsi irudia";
+"Common.Controls.Status.Actions.ShowVideoPlayer" = "Erakutsi bideo-erreproduzigailua";
+"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Sakatu eta eutsi menua erakusteko";
"Common.Controls.Status.Actions.Unfavorite" = "Kendu gogokoa";
"Common.Controls.Status.Actions.Unreblog" = "Desegin bultzada";
"Common.Controls.Status.ContentWarning" = "Edukiaren abisua";
@@ -116,7 +116,7 @@ Egiaztatu Interneteko konexioa.";
"Common.Controls.Status.Tag.Link" = "Esteka";
"Common.Controls.Status.Tag.Mention" = "Aipatu";
"Common.Controls.Status.Tag.Url" = "URLa";
-"Common.Controls.Status.TapToReveal" = "Tap to reveal";
+"Common.Controls.Status.TapToReveal" = "Sakatu erakusteko";
"Common.Controls.Status.UserReblogged" = "%@ erabiltzaileak bultzada eman dio";
"Common.Controls.Status.UserRepliedTo" = "%@(r)i erantzuten";
"Common.Controls.Status.Visibility.Direct" = "Aipatutako erabiltzaileek soilik ikus dezakete bidalketa hau.";
@@ -201,6 +201,10 @@ Mastodonera igo.";
"Scene.ConfirmEmail.Subtitle" = "Eposta bat bidali dizugu %@ helbidera,
sakatu kontua berresteko esteka.";
"Scene.ConfirmEmail.Title" = "Eta azkenik...";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "News";
+"Scene.Discovery.Tabs.Posts" = "Posts";
"Scene.Favorite.Title" = "Zure gogokoak";
"Scene.Follower.Footer" = "Beste zerbitzarietako jarraitzaileak ez dira bistaratzen.";
"Scene.Following.Footer" = "Beste zerbitzarietan jarraitutakoak ez dira bistaratzen.";
@@ -211,21 +215,21 @@ sakatu kontua berresteko esteka.";
"Scene.HomeTimeline.Title" = "Hasiera";
"Scene.Notification.Keyobard.ShowEverything" = "Erakutsi guztia";
"Scene.Notification.Keyobard.ShowMentions" = "Erakutsi aipamenak";
-"Scene.Notification.NotificationDescription.FavoritedYourPost" = "erabiltzaileak zure bidalketa gogoko du";
+"Scene.Notification.NotificationDescription.FavoritedYourPost" = "(e)k zure bidalketa gogoko du";
"Scene.Notification.NotificationDescription.FollowedYou" = "zu jarraitzen hasi da";
"Scene.Notification.NotificationDescription.MentionedYou" = "erabiltzaileak aipatu zaitu";
"Scene.Notification.NotificationDescription.PollHasEnded" = "inkesta amaitu da";
-"Scene.Notification.NotificationDescription.RebloggedYourPost" = "erabiltzaileak bultzada eman dio zure bidalketari";
+"Scene.Notification.NotificationDescription.RebloggedYourPost" = "(e)k bultzada eman dio zure bidalketari";
"Scene.Notification.NotificationDescription.RequestToFollowYou" = "erabiltzaileak zu jarraitzea eskatu du";
"Scene.Notification.Title.Everything" = "Dena";
"Scene.Notification.Title.Mentions" = "Aipamenak";
"Scene.Preview.Keyboard.ClosePreview" = "Itxi aurrebista";
"Scene.Preview.Keyboard.ShowNext" = "Erakutsi hurrengoa";
"Scene.Preview.Keyboard.ShowPrevious" = "Erakutsi aurrekoa";
-"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.Accessibility.DoubleTapToOpenTheList" = "Sakatu birritan zerrenda irekitzeko";
+"Scene.Profile.Accessibility.EditAvatarImage" = "Editatu abatarra";
+"Scene.Profile.Accessibility.ShowAvatarImage" = "Erakutsi abatarra";
+"Scene.Profile.Accessibility.ShowBannerImage" = "Erakutsi banner irudia";
"Scene.Profile.Dashboard.Followers" = "jarraitzaile";
"Scene.Profile.Dashboard.Following" = "jarraitzen";
"Scene.Profile.Dashboard.Posts" = "bidalketa";
@@ -366,7 +370,7 @@ edozein zerbitzari.";
"Scene.Settings.Section.Notifications.Trigger.Title" = "Noiz jakinarazi:";
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "Desgaitu abatar animatuak";
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "Desgaitu emoji animatuak";
-"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Open links in Mastodon";
+"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Ireki estekak Mastodonen";
"Scene.Settings.Section.Preference.Title" = "Hobespenak";
"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "Benetako modu beltz iluna";
"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "Erabili nabigatzaile lehenetsia estekak irekitzeko";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/eu-ES.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/eu-ES.lproj/Localizable.stringsdict
index 2069e27a3..871fb10bc 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/eu-ES.lproj/Localizable.stringsdict
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/eu-ES.lproj/Localizable.stringsdict
@@ -125,9 +125,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 reply
+ Erantzun bat
other
- %ld replies
+ %ld erantzun
plural.count.vote
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings
index 69aa3172a..0ed3a271a 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings
@@ -98,9 +98,9 @@ Veuillez vérifier votre accès à Internet.";
"Common.Controls.Status.Actions.Menu" = "Menu";
"Common.Controls.Status.Actions.Reblog" = "Rebloguer";
"Common.Controls.Status.Actions.Reply" = "Répondre";
-"Common.Controls.Status.Actions.ShowGif" = "Show GIF";
-"Common.Controls.Status.Actions.ShowImage" = "Show image";
-"Common.Controls.Status.Actions.ShowVideoPlayer" = "Show video player";
+"Common.Controls.Status.Actions.ShowGif" = "Afficher le GIF";
+"Common.Controls.Status.Actions.ShowImage" = "Afficher l’image";
+"Common.Controls.Status.Actions.ShowVideoPlayer" = "Afficher le lecteur vidéo";
"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Tap then hold to show menu";
"Common.Controls.Status.Actions.Unfavorite" = "Retirer des favoris";
"Common.Controls.Status.Actions.Unreblog" = "Annuler le reblog";
@@ -116,7 +116,7 @@ Veuillez vérifier votre accès à Internet.";
"Common.Controls.Status.Tag.Link" = "Lien";
"Common.Controls.Status.Tag.Mention" = "Mention";
"Common.Controls.Status.Tag.Url" = "URL";
-"Common.Controls.Status.TapToReveal" = "Tap to reveal";
+"Common.Controls.Status.TapToReveal" = "Appuyer pour afficher";
"Common.Controls.Status.UserReblogged" = "%@ a reblogué";
"Common.Controls.Status.UserRepliedTo" = "À répondu à %@";
"Common.Controls.Status.Visibility.Direct" = "Seul·e l’utilisateur·rice mentionnée peut voir ce message.";
@@ -201,6 +201,10 @@ téléversé sur Mastodon.";
"Scene.ConfirmEmail.Subtitle" = "Nous venons d’envoyer un courriel à %@,
tapotez le lien pour confirmer votre compte.";
"Scene.ConfirmEmail.Title" = "Une dernière chose.";
+"Scene.Discovery.Tabs.ForYou" = "Pour vous";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "Actualité";
+"Scene.Discovery.Tabs.Posts" = "Messages";
"Scene.Favorite.Title" = "Vos favoris";
"Scene.Follower.Footer" = "Les abonné·e·s issus des autres serveurs ne sont pas affiché·e·s.";
"Scene.Following.Footer" = "Les abonnés issus des autres serveurs ne sont pas affichés.";
@@ -222,10 +226,10 @@ tapotez le lien pour confirmer votre compte.";
"Scene.Preview.Keyboard.ClosePreview" = "Fermer l'aperçu";
"Scene.Preview.Keyboard.ShowNext" = "Afficher le suivant";
"Scene.Preview.Keyboard.ShowPrevious" = "Afficher le précédent";
-"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.Accessibility.DoubleTapToOpenTheList" = "Appuyer deux fois pour ouvrir la liste";
+"Scene.Profile.Accessibility.EditAvatarImage" = "Modifier l’avatar";
+"Scene.Profile.Accessibility.ShowAvatarImage" = "Afficher l’avatar";
+"Scene.Profile.Accessibility.ShowBannerImage" = "Afficher l’image de la bannière";
"Scene.Profile.Dashboard.Followers" = "abonnés";
"Scene.Profile.Dashboard.Following" = "abonnements";
"Scene.Profile.Dashboard.Posts" = "publications";
@@ -366,7 +370,7 @@ n'importe quel serveur.";
"Scene.Settings.Section.Notifications.Trigger.Title" = "Me notifier lorsque";
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "Désactiver les avatars animés";
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "Désactiver les émojis animées";
-"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Open links in Mastodon";
+"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Ouvrir les liens dans Mastodon";
"Scene.Settings.Section.Preference.Title" = "Préférences";
"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "Vrai mode sombre";
"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "Utiliser le navigateur par défaut pour ouvrir les liens";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.stringsdict
index 93ee696f2..5c2b14978 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.stringsdict
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.stringsdict
@@ -125,9 +125,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 reply
+ 1 réponse
other
- %ld replies
+ %ld réponses
plural.count.vote
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/gd-GB.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/gd-GB.lproj/Localizable.strings
index 9e4ab6029..91bc13736 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/gd-GB.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/gd-GB.lproj/Localizable.strings
@@ -201,6 +201,10 @@ a luchdadh suas gu Mastodon.";
"Scene.ConfirmEmail.Subtitle" = "Tha sinn air post-d a chur gu %@,
thoir gnogag air a’ chunntas a dhearbhadh a’ chunntais agad.";
"Scene.ConfirmEmail.Title" = "Aon rud eile.";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "News";
+"Scene.Discovery.Tabs.Posts" = "Posts";
"Scene.Favorite.Title" = "Na h-annsachdan agad";
"Scene.Follower.Footer" = "Cha dèid luchd-leantainn o fhrithealaichean eile a shealltainn.";
"Scene.Following.Footer" = "Cha dèid cò air a leanas tu air frithealaichean eile a shealltainn.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings
index a8164db9d..339e23f1c 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings
@@ -195,6 +195,10 @@
"Scene.ConfirmEmail.OpenEmailApp.Title" = "メールを確認";
"Scene.ConfirmEmail.Subtitle" = "先程 %@ にメールを送信しました。リンクをタップしてアカウントを確認してください。";
"Scene.ConfirmEmail.Title" = "さいごにもうひとつ。";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "News";
+"Scene.Discovery.Tabs.Posts" = "Posts";
"Scene.Favorite.Title" = "お気に入り";
"Scene.Follower.Footer" = "他のサーバーからのフォロワーは表示されません。";
"Scene.Following.Footer" = "他のサーバーにいるフォローは表示されません。";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings
index 55b8a3a62..792cf3681 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings
@@ -200,6 +200,10 @@ Ad d-yettwasali ɣef Mastodon.";
"Scene.ConfirmEmail.OpenEmailApp.Title" = "Sefqed Tanaka-inek.";
"Scene.ConfirmEmail.Subtitle" = "Sit ɣef useɣwen i ak-n-uznen i wakken ad tesneqdeḍ amiḍan-ik.";
"Scene.ConfirmEmail.Title" = "Taɣawsa taneggarut.";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "News";
+"Scene.Discovery.Tabs.Posts" = "Posts";
"Scene.Favorite.Title" = "Ismenyifen-ik·im";
"Scene.Follower.Footer" = "Ineḍfaren seg yiqeddacen-nniḍen ur d-ttwaskanen ara.";
"Scene.Following.Footer" = "Ineḍfaren seg yiqeddacen-nniḍen ur d-ttwaskanen ara.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings
index 608163f4e..dcc8dae64 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings
@@ -201,6 +201,10 @@ Profîla te ji wan ra wiha xuya dike.";
"Scene.ConfirmEmail.Subtitle" = "Me tenê e-nameyek ji %@ re şand,
girêdanê bitikne da ku ajimêra xwe bidî piştrastkirin.";
"Scene.ConfirmEmail.Title" = "Tiştekî dawî.";
+"Scene.Discovery.Tabs.ForYou" = "Ji bo te";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtag";
+"Scene.Discovery.Tabs.News" = "Nûçe";
+"Scene.Discovery.Tabs.Posts" = "Şandî";
"Scene.Favorite.Title" = "Bijarteyên te";
"Scene.Follower.Footer" = "Şopîner ji rajekerên din nayê dîtin.";
"Scene.Following.Footer" = "Şopandin ji rajekerên din nayê dîtin.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings
index 6a19a4bf6..31148373f 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings
@@ -195,6 +195,10 @@ Uw profiel ziet er zo uit voor hen.";
"Scene.ConfirmEmail.Subtitle" = "We hebben een e-mail gestuurd naar %@,
klik op de link om uw account te bevestigen.";
"Scene.ConfirmEmail.Title" = "Nog één ding.";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "News";
+"Scene.Discovery.Tabs.Posts" = "Posts";
"Scene.Favorite.Title" = "Uw favorieten";
"Scene.Follower.Footer" = "Followers from other servers are not displayed.";
"Scene.Following.Footer" = "Follows from other servers are not displayed.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings
index 6913d753f..d7ed34c30 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings
@@ -4,7 +4,7 @@
"Common.Alerts.CleanCache.Title" = "Очистка кэша";
"Common.Alerts.Common.PleaseTryAgain" = "Пожалуйста, попробуйте ещё раз.";
"Common.Alerts.Common.PleaseTryAgainLater" = "Пожалуйста, попробуйте позже.";
-"Common.Alerts.DeletePost.Message" = "Are you sure you want to delete this post?";
+"Common.Alerts.DeletePost.Message" = "Вы уверены, что хотите удалить этот пост?";
"Common.Alerts.DeletePost.Title" = "Вы уверены, что хотите удалить этот пост?";
"Common.Alerts.DiscardPostContent.Message" = "Вы действительно хотите удалить набранное содержимое поста?";
"Common.Alerts.DiscardPostContent.Title" = "Удалить черновик";
@@ -69,7 +69,7 @@
"Common.Controls.Friendship.Follow" = "Подписаться";
"Common.Controls.Friendship.Following" = "В подписках";
"Common.Controls.Friendship.Mute" = "Игнорировать";
-"Common.Controls.Friendship.MuteUser" = "Добавить %@ в игнорируемые";
+"Common.Controls.Friendship.MuteUser" = "Игнорировать %@";
"Common.Controls.Friendship.Muted" = "В игнорируемых";
"Common.Controls.Friendship.Pending" = "Отправлен";
"Common.Controls.Friendship.Request" = "Отправить запрос";
@@ -94,14 +94,14 @@
"Common.Controls.Keyboard.Timeline.ToggleFavorite" = "Добавить или убрать из избранного";
"Common.Controls.Keyboard.Timeline.ToggleReblog" = "Продвинуть или убрать продвижение";
"Common.Controls.Status.Actions.Favorite" = "Добавить в избранное";
-"Common.Controls.Status.Actions.Hide" = "Hide";
+"Common.Controls.Status.Actions.Hide" = "Скрыть";
"Common.Controls.Status.Actions.Menu" = "Меню";
"Common.Controls.Status.Actions.Reblog" = "Продвинуть";
"Common.Controls.Status.Actions.Reply" = "Ответить";
-"Common.Controls.Status.Actions.ShowGif" = "Show GIF";
-"Common.Controls.Status.Actions.ShowImage" = "Show image";
-"Common.Controls.Status.Actions.ShowVideoPlayer" = "Show video player";
-"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Tap then hold to show menu";
+"Common.Controls.Status.Actions.ShowGif" = "Показать GIF";
+"Common.Controls.Status.Actions.ShowImage" = "Показать изображение";
+"Common.Controls.Status.Actions.ShowVideoPlayer" = "Показать видеопроигрыватель";
+"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Нажмите и удерживайте, чтобы показать меню";
"Common.Controls.Status.Actions.Unfavorite" = "Убрать из избранного";
"Common.Controls.Status.Actions.Unreblog" = "Убрать продвижение";
"Common.Controls.Status.ContentWarning" = "Предупреждение о содержании";
@@ -116,7 +116,7 @@
"Common.Controls.Status.Tag.Link" = "Ссылка";
"Common.Controls.Status.Tag.Mention" = "Упоминание";
"Common.Controls.Status.Tag.Url" = "Ссылка";
-"Common.Controls.Status.TapToReveal" = "Tap to reveal";
+"Common.Controls.Status.TapToReveal" = "Нажмите, чтобы показать";
"Common.Controls.Status.UserReblogged" = "%@ продвинул(а)";
"Common.Controls.Status.UserRepliedTo" = "Ответил(а) %@";
"Common.Controls.Status.Visibility.Direct" = "Only mentioned user can see this post.";
@@ -198,7 +198,7 @@
"Scene.Compose.Visibility.Public" = "Публичный";
"Scene.Compose.Visibility.Unlisted" = "Скрытый";
"Scene.ConfirmEmail.Button.OpenEmailApp" = "Открыть приложение почты";
-"Scene.ConfirmEmail.Button.Resend" = "Resend";
+"Scene.ConfirmEmail.Button.Resend" = "Отправить заново";
"Scene.ConfirmEmail.DontReceiveEmail.Description" = "Проверьте, правильно ли указан ваш e-mail адрес, а также папку «спам», если ещё не сделали этого.";
"Scene.ConfirmEmail.DontReceiveEmail.ResendEmail" = "Отправить ещё раз";
"Scene.ConfirmEmail.DontReceiveEmail.Title" = "Проверьте свой e-mail адрес";
@@ -211,6 +211,10 @@
Нажмите на ссылку в нём, чтобы
подтвердить свою учётную запись.";
"Scene.ConfirmEmail.Title" = "И ещё кое-что.";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "News";
+"Scene.Discovery.Tabs.Posts" = "Posts";
"Scene.Favorite.Title" = "Ваше избранное";
"Scene.Follower.Footer" = "Followers from other servers are not displayed.";
"Scene.Following.Footer" = "Follows from other servers are not displayed.";
@@ -253,7 +257,7 @@
"Scene.Profile.SegmentedControl.About" = "About";
"Scene.Profile.SegmentedControl.Media" = "Медиа";
"Scene.Profile.SegmentedControl.Posts" = "Посты";
-"Scene.Profile.SegmentedControl.PostsAndReplies" = "Posts and Replies";
+"Scene.Profile.SegmentedControl.PostsAndReplies" = "Посты и ответы";
"Scene.Profile.SegmentedControl.Replies" = "Ответы";
"Scene.Register.Error.Item.Agreement" = "Соглашение";
"Scene.Register.Error.Item.Email" = "E-mail";
@@ -298,7 +302,7 @@
"Scene.Report.Step2" = "Шаг 2 из 2";
"Scene.Report.TextPlaceholder" = "Дополнительные комментарии";
"Scene.Report.Title" = "Пожаловаться на %@";
-"Scene.Report.TitleReport" = "Report";
+"Scene.Report.TitleReport" = "Жалоба";
"Scene.Search.Recommend.Accounts.Description" = "Возможно, вы захотите подписаться на эти профили";
"Scene.Search.Recommend.Accounts.Follow" = "Подписаться";
"Scene.Search.Recommend.Accounts.Title" = "Вам может понравится";
@@ -376,7 +380,7 @@
"Scene.Settings.Section.Notifications.Trigger.Title" = "Уведомлять меня, когда";
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "Отключить анимацию аватарок";
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "Отключить анимацию эмодзи";
-"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Open links in Mastodon";
+"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Открывать ссылки в Мастодоне";
"Scene.Settings.Section.Preference.Title" = "Предпочтения";
"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "Полноценно чёрный режим";
"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "Использовать браузер по умолчанию для открытия ссылок";
@@ -388,10 +392,10 @@
"Scene.SuggestionAccount.Title" = "Подпишитесь на людей";
"Scene.Thread.BackTitle" = "Пост";
"Scene.Thread.Title" = "Пост %@";
-"Scene.Welcome.GetStarted" = "Get Started";
+"Scene.Welcome.GetStarted" = "Присоединиться";
"Scene.Welcome.LogIn" = "Вход";
"Scene.Welcome.Slogan" = "Социальная сеть
под вашим контролем.";
"Scene.Wizard.AccessibilityHint" = "Double tap to dismiss this wizard";
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Switch between multiple accounts by holding the profile button.";
-"Scene.Wizard.NewInMastodon" = "New in Mastodon";
\ No newline at end of file
+"Scene.Wizard.NewInMastodon" = "Новое в Мастодоне";
\ No newline at end of file
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/sv_FI.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/sv_FI.lproj/Localizable.strings
index 07d5aa5e7..434303e3d 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/sv_FI.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/sv_FI.lproj/Localizable.strings
@@ -200,6 +200,10 @@ uploaded to Mastodon.";
"Scene.ConfirmEmail.OpenEmailApp.Title" = "Tarkasta postilaatikkosi.";
"Scene.ConfirmEmail.Subtitle" = "Lähetimme juuri sähköpostin osoitteeseen %@, napauta siinä olevaa linkkiä vahvistaaksesi tilisi.";
"Scene.ConfirmEmail.Title" = "Viimeinen asia.";
+"Scene.Discovery.Tabs.ForYou" = "For You";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtags";
+"Scene.Discovery.Tabs.News" = "News";
+"Scene.Discovery.Tabs.Posts" = "Posts";
"Scene.Favorite.Title" = "Omat suosikit";
"Scene.Follower.Footer" = "Seuraajia muilta palvelimilta ei näytetä.";
"Scene.Following.Footer" = "Seurauksia muilta palvelimilta ei näytetä.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings
index de50842f2..5dfb5134a 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings
@@ -98,10 +98,10 @@
"Common.Controls.Status.Actions.Menu" = "เมนู";
"Common.Controls.Status.Actions.Reblog" = "ดัน";
"Common.Controls.Status.Actions.Reply" = "ตอบกลับ";
-"Common.Controls.Status.Actions.ShowGif" = "Show GIF";
-"Common.Controls.Status.Actions.ShowImage" = "Show image";
-"Common.Controls.Status.Actions.ShowVideoPlayer" = "Show video player";
-"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Tap then hold to show menu";
+"Common.Controls.Status.Actions.ShowGif" = "แสดง GIF";
+"Common.Controls.Status.Actions.ShowImage" = "แสดงภาพ";
+"Common.Controls.Status.Actions.ShowVideoPlayer" = "แสดงตัวเล่นวิดีโอ";
+"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "แตะค้างไว้เพื่อแสดงเมนู";
"Common.Controls.Status.Actions.Unfavorite" = "เลิกชื่นชอบ";
"Common.Controls.Status.Actions.Unreblog" = "เลิกทำการดัน";
"Common.Controls.Status.ContentWarning" = "คำเตือนเนื้อหา";
@@ -116,7 +116,7 @@
"Common.Controls.Status.Tag.Link" = "ลิงก์";
"Common.Controls.Status.Tag.Mention" = "กล่าวถึง";
"Common.Controls.Status.Tag.Url" = "URL";
-"Common.Controls.Status.TapToReveal" = "Tap to reveal";
+"Common.Controls.Status.TapToReveal" = "แตะเพื่อเปิดเผย";
"Common.Controls.Status.UserReblogged" = "%@ ได้ดัน";
"Common.Controls.Status.UserRepliedTo" = "ตอบกลับ %@";
"Common.Controls.Status.Visibility.Direct" = "เฉพาะผู้ใช้ที่กล่าวถึงเท่านั้นที่สามารถเห็นโพสต์นี้";
@@ -200,6 +200,10 @@
"Scene.ConfirmEmail.OpenEmailApp.Title" = "ตรวจสอบกล่องขาเข้าของคุณ";
"Scene.ConfirmEmail.Subtitle" = "แตะลิงก์ที่เราส่งอีเมลถึงคุณเพื่อยืนยันบัญชีของคุณ";
"Scene.ConfirmEmail.Title" = "หนึ่งสิ่งสุดท้าย";
+"Scene.Discovery.Tabs.ForYou" = "สำหรับคุณ";
+"Scene.Discovery.Tabs.Hashtags" = "แฮชแท็ก";
+"Scene.Discovery.Tabs.News" = "ข่าว";
+"Scene.Discovery.Tabs.Posts" = "โพสต์";
"Scene.Favorite.Title" = "รายการโปรดของคุณ";
"Scene.Follower.Footer" = "ไม่ได้แสดงผู้ติดตามจากเซิร์ฟเวอร์อื่น ๆ";
"Scene.Following.Footer" = "ไม่ได้แสดงการติดตามจากเซิร์ฟเวอร์อื่น ๆ";
@@ -221,10 +225,10 @@
"Scene.Preview.Keyboard.ClosePreview" = "ปิดตัวอย่าง";
"Scene.Preview.Keyboard.ShowNext" = "แสดงถัดไป";
"Scene.Preview.Keyboard.ShowPrevious" = "แสดงก่อนหน้า";
-"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.Accessibility.DoubleTapToOpenTheList" = "แตะสองครั้งเพื่อเปิดรายการ";
+"Scene.Profile.Accessibility.EditAvatarImage" = "แก้ไขภาพประจำตัว";
+"Scene.Profile.Accessibility.ShowAvatarImage" = "แสดงภาพประจำตัว";
+"Scene.Profile.Accessibility.ShowBannerImage" = "แสดงภาพแบนเนอร์";
"Scene.Profile.Dashboard.Followers" = "ผู้ติดตาม";
"Scene.Profile.Dashboard.Following" = "กำลังติดตาม";
"Scene.Profile.Dashboard.Posts" = "โพสต์";
@@ -364,7 +368,7 @@
"Scene.Settings.Section.Notifications.Trigger.Title" = "แจ้งเตือนฉันเมื่อ";
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "ปิดใช้งานภาพประจำตัวแบบเคลื่อนไหว";
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "ปิดใช้งานอีโมจิแบบเคลื่อนไหว";
-"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Open links in Mastodon";
+"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "เปิดลิงก์ใน Mastodon";
"Scene.Settings.Section.Preference.Title" = "การกำหนดลักษณะ";
"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "โหมดมืดดำสนิท";
"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "ใช้เบราว์เซอร์เริ่มต้นเพื่อเปิดลิงก์";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.stringsdict
index 3895c3993..8ae8feb7b 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.stringsdict
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.stringsdict
@@ -111,7 +111,7 @@
NSStringFormatValueTypeKey
ld
other
- %ld replies
+ %ld การตอบกลับ
plural.count.vote
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings
index 95eef33b0..407c4f9cb 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings
@@ -8,8 +8,8 @@
"Common.Alerts.DeletePost.Title" = "Xóa tút";
"Common.Alerts.DiscardPostContent.Message" = "Xác nhận bỏ qua nội dung tút đã viết.";
"Common.Alerts.DiscardPostContent.Title" = "Hủy bản nháp";
-"Common.Alerts.EditProfileFailure.Message" = "Không thể chỉnh sửa trang cá nhân. Vui lòng thử lại.";
-"Common.Alerts.EditProfileFailure.Title" = "Lỗi chỉnh sửa trang cá nhân";
+"Common.Alerts.EditProfileFailure.Message" = "Không thể chỉnh sửa hồ sơ. Vui lòng thử lại.";
+"Common.Alerts.EditProfileFailure.Title" = "Lỗi chỉnh sửa hồ sơ";
"Common.Alerts.PublishPostFailure.AttachmentsMessage.MoreThanOneVideo" = "Không thể đính kèm nhiều video.";
"Common.Alerts.PublishPostFailure.AttachmentsMessage.VideoAttachWithPhoto" = "Không thể đính kèm video cùng với hình ảnh.";
"Common.Alerts.PublishPostFailure.Message" = "Không thể đăng tút.
@@ -109,7 +109,7 @@ Vui lòng kiểm tra kết nối mạng.";
"Common.Controls.Status.Poll.Closed" = "Kết thúc";
"Common.Controls.Status.Poll.Vote" = "Bình chọn";
"Common.Controls.Status.ShowPost" = "Xem tút";
-"Common.Controls.Status.ShowUserProfile" = "Xem trang cá nhân";
+"Common.Controls.Status.ShowUserProfile" = "Xem trang hồ sơ";
"Common.Controls.Status.Tag.Email" = "Email";
"Common.Controls.Status.Tag.Emoji" = "Emoji";
"Common.Controls.Status.Tag.Hashtag" = "Hashtag";
@@ -125,7 +125,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.Home" = "Bảng tin";
"Common.Controls.Tabs.Notification" = "Thông báo";
-"Common.Controls.Tabs.Profile" = "Trang cá nhân";
+"Common.Controls.Tabs.Profile" = "Trang hồ sơ";
"Common.Controls.Tabs.Search" = "Tìm kiếm";
"Common.Controls.Timeline.Filtered" = "Bộ lọc";
"Common.Controls.Timeline.Header.BlockedWarning" = "Bạn không thể xem trang người này
@@ -200,6 +200,10 @@ tải lên Mastodon.";
"Scene.ConfirmEmail.OpenEmailApp.Title" = "Kiểm tra hộp thư của bạn.";
"Scene.ConfirmEmail.Subtitle" = "Nhấn vào liên kết chúng tôi gửi qua email để xác thực tài khoản.";
"Scene.ConfirmEmail.Title" = "Còn điều này nữa.";
+"Scene.Discovery.Tabs.ForYou" = "Dành cho bạn";
+"Scene.Discovery.Tabs.Hashtags" = "Hashtag";
+"Scene.Discovery.Tabs.News" = "Tin tức";
+"Scene.Discovery.Tabs.Posts" = "Tút";
"Scene.Favorite.Title" = "Lượt thích";
"Scene.Follower.Footer" = "Không hiển thị người theo dõi từ máy chủ khác.";
"Scene.Following.Footer" = "Không hiển thị người bạn theo dõi từ máy chủ khác.";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings
index f4a90541d..f9ec487c4 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings
@@ -98,10 +98,10 @@
"Common.Controls.Status.Actions.Menu" = "菜单";
"Common.Controls.Status.Actions.Reblog" = "转发";
"Common.Controls.Status.Actions.Reply" = "回复";
-"Common.Controls.Status.Actions.ShowGif" = "Show GIF";
-"Common.Controls.Status.Actions.ShowImage" = "Show image";
-"Common.Controls.Status.Actions.ShowVideoPlayer" = "Show video player";
-"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "Tap then hold to show menu";
+"Common.Controls.Status.Actions.ShowGif" = "显示 GIF";
+"Common.Controls.Status.Actions.ShowImage" = "显示图片";
+"Common.Controls.Status.Actions.ShowVideoPlayer" = "显示视频播放器";
+"Common.Controls.Status.Actions.TapThenHoldToShowMenu" = "长按以显示菜单";
"Common.Controls.Status.Actions.Unfavorite" = "取消喜欢";
"Common.Controls.Status.Actions.Unreblog" = "取消转发";
"Common.Controls.Status.ContentWarning" = "内容警告";
@@ -116,7 +116,7 @@
"Common.Controls.Status.Tag.Link" = "链接";
"Common.Controls.Status.Tag.Mention" = "提及";
"Common.Controls.Status.Tag.Url" = "URL";
-"Common.Controls.Status.TapToReveal" = "Tap to reveal";
+"Common.Controls.Status.TapToReveal" = "点击以显示";
"Common.Controls.Status.UserReblogged" = "%@ 转发";
"Common.Controls.Status.UserRepliedTo" = "回复给 %@";
"Common.Controls.Status.Visibility.Direct" = "只有提到的用户才能看到此帖子。";
@@ -201,6 +201,10 @@
"Scene.ConfirmEmail.Subtitle" = "我们刚刚向 %@ 发送了一封电子邮件,
点击链接确认你的帐户。";
"Scene.ConfirmEmail.Title" = "最后一件事。";
+"Scene.Discovery.Tabs.ForYou" = "为你推荐";
+"Scene.Discovery.Tabs.Hashtags" = "话题";
+"Scene.Discovery.Tabs.News" = "新闻";
+"Scene.Discovery.Tabs.Posts" = "帖子";
"Scene.Favorite.Title" = "你的喜欢";
"Scene.Follower.Footer" = "不会显示来自其它服务器的关注者";
"Scene.Following.Footer" = "不会显示来自其它服务器的关注";
@@ -222,10 +226,10 @@
"Scene.Preview.Keyboard.ClosePreview" = "关闭预览";
"Scene.Preview.Keyboard.ShowNext" = "显示下一个";
"Scene.Preview.Keyboard.ShowPrevious" = "显示前一个";
-"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.Accessibility.DoubleTapToOpenTheList" = "双击打开列表";
+"Scene.Profile.Accessibility.EditAvatarImage" = "编辑头像";
+"Scene.Profile.Accessibility.ShowAvatarImage" = "显示头像";
+"Scene.Profile.Accessibility.ShowBannerImage" = "显示顶部横幅图片";
"Scene.Profile.Dashboard.Followers" = "关注者";
"Scene.Profile.Dashboard.Following" = "正在关注";
"Scene.Profile.Dashboard.Posts" = "帖子";
@@ -366,7 +370,7 @@
"Scene.Settings.Section.Notifications.Trigger.Title" = "提示通知来自";
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "禁用动画头像";
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "禁用动画表情";
-"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "Open links in Mastodon";
+"Scene.Settings.Section.Preference.OpenLinksInMastodon" = "在 Mastodon 中打开链接";
"Scene.Settings.Section.Preference.Title" = "偏好";
"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "纯黑模式";
"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "使用默认浏览器打开链接";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.stringsdict
index 418903836..6c2661ee5 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.stringsdict
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.stringsdict
@@ -111,7 +111,7 @@
NSStringFormatValueTypeKey
ld
other
- %ld replies
+ %ld 条回复
plural.count.vote
diff --git a/MastodonSDK/Sources/MastodonUI/Extension/CoreDataStack/MastodonStatus.swift b/MastodonSDK/Sources/MastodonUI/Extension/CoreDataStack/MastodonStatus.swift
new file mode 100644
index 000000000..b7d33712f
--- /dev/null
+++ b/MastodonSDK/Sources/MastodonUI/Extension/CoreDataStack/MastodonStatus.swift
@@ -0,0 +1,28 @@
+//
+// MastodonStatus.swift
+//
+//
+// Created by MainasuK on 2022-4-18.
+//
+
+import Foundation
+import CoreDataStack
+
+extension Status {
+
+ // mark content sensitive when status contains spoilerText
+ public var isContentSensitive: Bool {
+ if let spoilerText = spoilerText, !spoilerText.isEmpty {
+ return true
+ } else {
+ return false
+ }
+ }
+
+ // mark media sensitive when `isContentSensitive` or media marked sensitive
+ public var isMediaSensitive: Bool {
+ // some servers set media sensitive even empty attachments
+ return isContentSensitive || (sensitive && !attachments.isEmpty)
+ }
+
+}
diff --git a/MastodonSDK/Sources/MastodonUI/View/Container/MediaGridContainerView.swift b/MastodonSDK/Sources/MastodonUI/View/Container/MediaGridContainerView.swift
index cb9c53f35..e3359fb58 100644
--- a/MastodonSDK/Sources/MastodonUI/View/Container/MediaGridContainerView.swift
+++ b/MastodonSDK/Sources/MastodonUI/View/Container/MediaGridContainerView.swift
@@ -48,22 +48,7 @@ public final class MediaGridContainerView: UIView {
return mediaViews
}()
-
-// let sensitiveToggleButtonBlurVisualEffectView: UIVisualEffectView = {
-// let visualEffectView = UIVisualEffectView(effect: ContentWarningOverlayView.blurVisualEffect)
-// visualEffectView.layer.masksToBounds = true
-// visualEffectView.layer.cornerRadius = MediaGridContainerView.sensitiveToggleButtonSize.width / 2
-// visualEffectView.layer.cornerCurve = .continuous
-// return visualEffectView
-// }()
-// let sensitiveToggleButtonVibrancyVisualEffectView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: ContentWarningOverlayView.blurVisualEffect))
-// let sensitiveToggleButton: HitTestExpandedButton = {
-// let button = HitTestExpandedButton(type: .system)
-// button.contentEdgeInsets = UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 4)
-// button.imageView?.contentMode = .scaleAspectFit
-// button.setImage(UIImage(systemName: "eye.slash.fill"), for: .normal)
-// return button
-// }()
+ let contentWarningOverlay = ContentWarningOverlayView()
public override init(frame: CGRect) {
super.init(frame: frame)
@@ -86,7 +71,8 @@ public final class MediaGridContainerView: UIView {
extension MediaGridContainerView {
private func _init() {
-// sensitiveToggleButton.addTarget(self, action: #selector(MediaGridContainerView.sensitiveToggleButtonDidPressed(_:)), for: .touchUpInside)
+ contentWarningOverlay.isUserInteractionEnabled = false
+ contentWarningOverlay.isHidden = true
}
}
@@ -112,8 +98,8 @@ extension MediaGridContainerView {
let mediaView = _mediaViews[0]
layout.layout(in: self, mediaView: mediaView)
-// layoutSensitiveToggleButton()
-// bringSubviewToFront(sensitiveToggleButtonBlurVisualEffectView)
+ layoutContentWarningOverlay()
+ bringSubviewToFront(contentWarningOverlay)
return mediaView
}
@@ -124,8 +110,8 @@ extension MediaGridContainerView {
let mediaViews = Array(_mediaViews[0.. String? in
+ var strings: [String?] = []
+ strings.append(authorName?.string)
+ strings.append(bioContent?.string)
+ return strings.compactMap { $0 }.joined(separator: ", ")
+ }
+
+ authorAccessibilityLabel
+ .map { $0 ?? "" }
+ .assign(to: &$groupedAccessibilityLabel)
+
+ $groupedAccessibilityLabel
+ .sink { accessibilityLabel in
+ view.accessibilityLabel = accessibilityLabel
+ }
+ .store(in: &disposeBag)
+ }
}
diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/ProfileCardView.swift b/MastodonSDK/Sources/MastodonUI/View/Content/ProfileCardView.swift
index eb500b7c4..07f441500 100644
--- a/MastodonSDK/Sources/MastodonUI/View/Content/ProfileCardView.swift
+++ b/MastodonSDK/Sources/MastodonUI/View/Content/ProfileCardView.swift
@@ -46,6 +46,8 @@ public final class ProfileCardView: UIView {
// author username
public let authorUsernameLabel = MetaLabel(style: .profileCardUsername)
+ // bio
+ let bioMetaTextAdaptiveMarginContainerView = AdaptiveMarginContainerView()
let bioMetaText: MetaText = {
let metaText = MetaText()
metaText.textView.backgroundColor = .clear
@@ -78,6 +80,9 @@ public final class ProfileCardView: UIView {
return metaText
}()
+ let infoContainerAdaptiveMarginContainerView = AdaptiveMarginContainerView()
+ let infoContainer = UIStackView()
+
let statusDashboardView = ProfileStatusDashboardView()
let relationshipActionButtonShadowContainer = ShadowBackgroundContainer()
@@ -179,7 +184,7 @@ extension ProfileCardView {
avatarButtonBackgroundView.layer.masksToBounds = true
avatarButtonBackgroundView.layer.cornerCurve = .continuous
- avatarButtonBackgroundView.layer.cornerRadius = 12
+ avatarButtonBackgroundView.layer.cornerRadius = 12 + 1
avatarButtonBackgroundView.translatesAutoresizingMaskIntoConstraints = false
authorContainer.insertSubview(avatarButtonBackgroundView, belowSubview: avatarButton)
NSLayoutConstraint.activate([
@@ -192,31 +197,36 @@ extension ProfileCardView {
// authorInfoContainer: V - [ authorNameLabel | authorUsernameLabel ]
let authorInfoContainer = UIStackView()
authorInfoContainer.axis = .vertical
- authorInfoContainer.spacing = 2
+ // authorInfoContainer.spacing = 2
authorContainer.addArrangedSubview(authorInfoContainer)
authorInfoContainer.addArrangedSubview(authorNameLabel)
authorInfoContainer.addArrangedSubview(authorUsernameLabel)
// bioMetaText
- let bioMetaTextAdaptiveMarginContainerView = AdaptiveMarginContainerView()
bioMetaTextAdaptiveMarginContainerView.contentView = bioMetaText.textView
bioMetaTextAdaptiveMarginContainerView.margin = ProfileCardView.contentMargin
+ bioMetaText.textView.setContentHuggingPriority(.required - 1, for: .vertical)
+ bioMetaText.textView.setContentCompressionResistancePriority(.required - 1, for: .vertical)
container.addArrangedSubview(bioMetaTextAdaptiveMarginContainerView)
container.setCustomSpacing(16, after: bioMetaTextAdaptiveMarginContainerView)
-
+
// infoContainer: H - [ statusDashboardView | (spacer) | relationshipActionButton ]
- let infoContainer = UIStackView()
infoContainer.axis = .horizontal
- let infoContainerAdaptiveMarginContainerView = AdaptiveMarginContainerView()
+ infoContainer.spacing = 8
infoContainerAdaptiveMarginContainerView.contentView = infoContainer
infoContainerAdaptiveMarginContainerView.margin = ProfileCardView.contentMargin
container.addArrangedSubview(infoContainerAdaptiveMarginContainerView)
- infoContainer.addArrangedSubview(statusDashboardView)
- infoContainer.addArrangedSubview(UIView())
- let relationshipActionButtonShadowContainer = ShadowBackgroundContainer()
- infoContainer.addArrangedSubview(relationshipActionButtonShadowContainer)
+ infoContainer.addArrangedSubview(statusDashboardView)
+ let infoContainerSpacer = UIView()
+ infoContainer.addArrangedSubview(UIView())
+ infoContainerSpacer.setContentHuggingPriority(.defaultLow - 100, for: .vertical)
+ infoContainerSpacer.setContentHuggingPriority(.defaultLow - 100, for: .horizontal)
+ let relationshipActionButtonShadowContainer = ShadowBackgroundContainer()
+ relationshipActionButtonShadowContainer.translatesAutoresizingMaskIntoConstraints = false
+ infoContainer.addArrangedSubview(relationshipActionButtonShadowContainer)
+
relationshipActionButton.translatesAutoresizingMaskIntoConstraints = false
relationshipActionButtonShadowContainer.addSubview(relationshipActionButton)
NSLayoutConstraint.activate([
@@ -224,15 +234,15 @@ extension ProfileCardView {
relationshipActionButton.leadingAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.leadingAnchor),
relationshipActionButton.trailingAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.trailingAnchor),
relationshipActionButton.bottomAnchor.constraint(equalTo: relationshipActionButtonShadowContainer.bottomAnchor),
- relationshipActionButton.widthAnchor.constraint(greaterThanOrEqualToConstant: ProfileCardView.friendshipActionButtonSize.width).priority(.required - 1),
- relationshipActionButton.heightAnchor.constraint(equalToConstant: ProfileCardView.friendshipActionButtonSize.height).priority(.defaultHigh),
+ relationshipActionButtonShadowContainer.widthAnchor.constraint(greaterThanOrEqualToConstant: ProfileCardView.friendshipActionButtonSize.width).priority(.required - 1),
+ relationshipActionButtonShadowContainer.heightAnchor.constraint(equalToConstant: ProfileCardView.friendshipActionButtonSize.height).priority(.required - 1),
])
-
+
let bottomPadding = UIView()
bottomPadding.translatesAutoresizingMaskIntoConstraints = false
container.addArrangedSubview(bottomPadding)
NSLayoutConstraint.activate([
- bottomPadding.heightAnchor.constraint(equalToConstant: 16)
+ bottomPadding.heightAnchor.constraint(equalToConstant: 16).priority(.required - 10),
])
relationshipActionButton.addTarget(self, action: #selector(ProfileCardView.relationshipActionButtonDidPressed(_:)), for: .touchUpInside)
@@ -243,7 +253,27 @@ extension ProfileCardView {
viewModel.userInterfaceStyle = traitCollection.userInterfaceStyle
}
+
+ public override func layoutSubviews() {
+ updateInfoContainerLayout()
+ super.layoutSubviews()
+ }
+
+}
+extension ProfileCardView {
+ public func setupLayoutFrame(_ rect: CGRect) {
+ frame.size.width = rect.width
+ bioMetaTextAdaptiveMarginContainerView.frame.size.width = frame.width
+ bioMetaTextAdaptiveMarginContainerView.contentView?.frame.size.width = frame.width - 2 * bioMetaTextAdaptiveMarginContainerView.margin
+ infoContainerAdaptiveMarginContainerView.frame.size.width = frame.width
+ infoContainerAdaptiveMarginContainerView.contentView?.frame.size.width = frame.width - 2 * infoContainerAdaptiveMarginContainerView.margin
+ }
+
+ private func updateInfoContainerLayout() {
+ let isCompactAdaptive = bounds.width < 350
+ infoContainer.axis = isCompactAdaptive ? .vertical : .horizontal
+ }
}
extension ProfileCardView {
diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift
index 67cefa475..44f7bb9ab 100644
--- a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift
+++ b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift
@@ -74,11 +74,9 @@ extension StatusView {
// Sensitive
@Published public var isContentSensitive: Bool = false
- @Published public var isContentSensitiveToggled: Bool = false
@Published public var isMediaSensitive: Bool = false
- @Published public var isMediaSensitiveToggled: Bool = false
-
- @Published public var isSensitive: Bool = false // isContentSensitive || isMediaSensitive
+ @Published public var isSensitiveToggled = false
+
@Published public var isContentReveal: Bool = true
@Published public var isMediaReveal: Bool = true
@@ -130,9 +128,8 @@ extension StatusView {
authorAvatarImageURL = nil
isContentSensitive = false
- isContentSensitiveToggled = false
isMediaSensitive = false
- isMediaSensitiveToggled = false
+ isSensitiveToggled = false
activeFilters = []
filterContext = nil
@@ -161,28 +158,18 @@ extension StatusView {
$spoilerContent
.map { $0 != nil }
.assign(to: &$isContentSensitive)
- // isSensitive
- Publishers.CombineLatest(
+ // isReveal
+ Publishers.CombineLatest3(
$isContentSensitive,
- $isMediaSensitive
- )
- .map { $0 || $1 }
- .assign(to: &$isSensitive)
- // $isContentReveal
- Publishers.CombineLatest(
- $isContentSensitive,
- $isContentSensitiveToggled
- )
- .map { $0 ? $1 : true }
- .assign(to: &$isContentReveal)
- // $isMediaReveal
- Publishers.CombineLatest(
$isMediaSensitive,
- $isMediaSensitiveToggled
+ $isSensitiveToggled
)
- .map { $1 ? !$0 : $0 }
- .map { !$0 }
- .assign(to: &$isMediaReveal)
+ .sink { [weak self] isContentSensitive, isMediaSensitive, isSensitiveToggled in
+ guard let self = self else { return }
+ self.isContentReveal = isContentSensitive ? isSensitiveToggled : true
+ self.isMediaReveal = isMediaSensitive ? isSensitiveToggled : true
+ }
+ .store(in: &disposeBag)
}
}
}
@@ -326,29 +313,22 @@ extension StatusView.ViewModel {
}
.store(in: &disposeBag)
- $isSensitive
+ $isMediaSensitive
.sink { isSensitive in
guard isSensitive else { return }
statusView.setContentSensitiveeToggleButtonDisplay()
}
.store(in: &disposeBag)
- // There are 2 conditions:
- // 1. The content may non-sensitive with sensitive media
- // 2. The content and media both senstivie
- Publishers.CombineLatest(
- $isContentSensitiveToggled,
- $isMediaSensitiveToggled
- )
- .map { $0 || $1 }
- .sink { isSensitiveToggled in
- // The button indicator go-to state for button action direction
- // eye: when media is hidden
- // eye-slash: when media display
- let image = isSensitiveToggled ? UIImage(systemName: "eye.slash.fill") : UIImage(systemName: "eye.fill")
- statusView.contentSensitiveeToggleButton.setImage(image, for: .normal)
- }
- .store(in: &disposeBag)
+ $isSensitiveToggled
+ .sink { isSensitiveToggled in
+ // The button indicator go-to state for button action direction
+ // eye: when media is hidden
+ // eye-slash: when media display
+ let image = isSensitiveToggled ? UIImage(systemName: "eye.slash.fill") : UIImage(systemName: "eye.fill")
+ statusView.contentSensitiveeToggleButton.setImage(image, for: .normal)
+ }
+ .store(in: &disposeBag)
}
private func bindMedia(statusView: StatusView) {
@@ -405,6 +385,7 @@ extension StatusView.ViewModel {
$isMediaReveal
.sink { isMediaReveal in
+ statusView.mediaGridContainerView.contentWarningOverlay.isHidden = isMediaReveal
statusView.mediaGridContainerView.viewModel.isSensitiveToggleButtonDisplay = isMediaReveal
}
.store(in: &disposeBag)
diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView.swift b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView.swift
index eb3a69354..7b96fe0b5 100644
--- a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView.swift
+++ b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView.swift
@@ -508,6 +508,7 @@ extension StatusView.Style {
// status content
statusView.contentContainer.addArrangedSubview(statusView.contentMetaText.textView)
+ statusView.containerStackView.setCustomSpacing(16, after: statusView.contentMetaText.textView)
statusView.spoilerOverlayView.translatesAutoresizingMaskIntoConstraints = false
statusView.containerStackView.addSubview(statusView.spoilerOverlayView)
diff --git a/MastodonSDK/Sources/MastodonUI/View/Control/ActionToolbarContainer.swift b/MastodonSDK/Sources/MastodonUI/View/Control/ActionToolbarContainer.swift
index 449254d20..c3a9b96f3 100644
--- a/MastodonSDK/Sources/MastodonUI/View/Control/ActionToolbarContainer.swift
+++ b/MastodonSDK/Sources/MastodonUI/View/Control/ActionToolbarContainer.swift
@@ -114,7 +114,7 @@ extension ActionToolbarContainer {
container.addArrangedSubview(favoriteButton)
container.addArrangedSubview(shareButton)
NSLayoutConstraint.activate([
- replyButton.heightAnchor.constraint(equalToConstant: 44).priority(.defaultHigh),
+ replyButton.heightAnchor.constraint(equalToConstant: 36).priority(.defaultHigh),
replyButton.heightAnchor.constraint(equalTo: reblogButton.heightAnchor).priority(.defaultHigh),
replyButton.heightAnchor.constraint(equalTo: favoriteButton.heightAnchor).priority(.defaultHigh),
replyButton.heightAnchor.constraint(equalTo: shareButton.heightAnchor).priority(.defaultHigh),
diff --git a/MastodonSDK/Sources/MastodonUI/View/Control/ContentWarningOverlayView.swift b/MastodonSDK/Sources/MastodonUI/View/Control/ContentWarningOverlayView.swift
index d559e4e04..70be5bbc2 100644
--- a/MastodonSDK/Sources/MastodonUI/View/Control/ContentWarningOverlayView.swift
+++ b/MastodonSDK/Sources/MastodonUI/View/Control/ContentWarningOverlayView.swift
@@ -7,28 +7,24 @@
import os.log
import UIKit
-
-public protocol ContentWarningOverlayViewDelegate: AnyObject {
- func contentWarningOverlayViewDidPressed(_ contentWarningOverlayView: ContentWarningOverlayView)
-}
+import MastodonLocalization
public final class ContentWarningOverlayView: UIView {
-
- public static let blurVisualEffect = UIBlurEffect(style: .systemUltraThinMaterial)
-
+
let logger = Logger(subsystem: "ContentWarningOverlayView", category: "View")
- public weak var delegate: ContentWarningOverlayViewDelegate?
-
- public let blurVisualEffectView = UIVisualEffectView(effect: ContentWarningOverlayView.blurVisualEffect)
- public let vibrancyVisualEffectView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: ContentWarningOverlayView.blurVisualEffect))
-// let alertImageView: UIImageView = {
-// let imageView = UIImageView()
-// imageView.image = Asset.Indices.exclamationmarkTriangleLarge.image.withRenderingMode(.alwaysTemplate)
-// return imageView
-// }()
-
- public let tapGestureRecognizer = UITapGestureRecognizer.singleTapGestureRecognizer
+ let hintLabel: UILabel = {
+ let label = UILabel()
+ label.font = .systemFont(ofSize: 18, weight: .regular)
+ label.text = L10n.Common.Controls.Status.tapToReveal
+ label.textAlignment = .center
+ label.textColor = .white.withAlphaComponent(0.7)
+ label.layer.shadowOpacity = 0.3
+ label.layer.shadowOffset = CGSize(width: 0, height: 2)
+ label.layer.shadowRadius = 2
+ label.layer.shadowColor = UIColor.black.cgColor
+ return label
+ }()
override init(frame: CGRect) {
super.init(frame: frame)
@@ -44,40 +40,12 @@ public final class ContentWarningOverlayView: UIView {
extension ContentWarningOverlayView {
private func _init() {
- // overlay
- blurVisualEffectView.translatesAutoresizingMaskIntoConstraints = false
- addSubview(blurVisualEffectView)
+ hintLabel.translatesAutoresizingMaskIntoConstraints = false
+ addSubview(hintLabel)
NSLayoutConstraint.activate([
- blurVisualEffectView.topAnchor.constraint(equalTo: topAnchor),
- blurVisualEffectView.leadingAnchor.constraint(equalTo: leadingAnchor),
- blurVisualEffectView.trailingAnchor.constraint(equalTo: trailingAnchor),
- blurVisualEffectView.bottomAnchor.constraint(equalTo: bottomAnchor),
+ hintLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 8),
+ trailingAnchor.constraint(equalTo: hintLabel.trailingAnchor, constant: 8),
+ centerYAnchor.constraint(equalTo: hintLabel.centerYAnchor, constant: 10),
])
-
- vibrancyVisualEffectView.translatesAutoresizingMaskIntoConstraints = false
- blurVisualEffectView.contentView.addSubview(vibrancyVisualEffectView)
- NSLayoutConstraint.activate([
- vibrancyVisualEffectView.topAnchor.constraint(equalTo: blurVisualEffectView.contentView.topAnchor),
- vibrancyVisualEffectView.leadingAnchor.constraint(equalTo: blurVisualEffectView.contentView.leadingAnchor),
- vibrancyVisualEffectView.trailingAnchor.constraint(equalTo: blurVisualEffectView.contentView.trailingAnchor),
- vibrancyVisualEffectView.bottomAnchor.constraint(equalTo: blurVisualEffectView.contentView.bottomAnchor),
- ])
-
-// alertImageView.translatesAutoresizingMaskIntoConstraints = false
-// vibrancyVisualEffectView.contentView.addSubview(alertImageView)
-// NSLayoutConstraint.activate([
-// alertImageView.centerXAnchor.constraint(equalTo: vibrancyVisualEffectView.contentView.centerXAnchor),
-// alertImageView.centerYAnchor.constraint(equalTo: vibrancyVisualEffectView.contentView.centerYAnchor),
-// ])
-
- tapGestureRecognizer.addTarget(self, action: #selector(ContentWarningOverlayView.tapGestureRecognizerHandler(_:)))
- addGestureRecognizer(tapGestureRecognizer)
- }
-}
-
-extension ContentWarningOverlayView {
- @objc private func tapGestureRecognizerHandler(_ sender: UITapGestureRecognizer) {
- logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public)")
- delegate?.contentWarningOverlayViewDidPressed(self)
}
}
diff --git a/MastodonSDK/Sources/MastodonUI/View/Control/ProfileStatusDashboardView.swift b/MastodonSDK/Sources/MastodonUI/View/Control/ProfileStatusDashboardView.swift
index 7d8e4fbcd..a45e8ef6a 100644
--- a/MastodonSDK/Sources/MastodonUI/View/Control/ProfileStatusDashboardView.swift
+++ b/MastodonSDK/Sources/MastodonUI/View/Control/ProfileStatusDashboardView.swift
@@ -55,7 +55,7 @@ extension ProfileStatusDashboardView {
containerStackView.heightAnchor.constraint(equalToConstant: 44).priority(.defaultHigh),
])
- let spacing: CGFloat = UIView.isZoomedMode ? 4 : 16
+ let spacing: CGFloat = UIView.isZoomedMode ? 4 : 12
containerStackView.spacing = spacing
containerStackView.axis = .horizontal
containerStackView.distribution = .fillEqually
@@ -75,9 +75,9 @@ extension ProfileStatusDashboardView {
tapGestureRecognizer.addTarget(self, action: #selector(ProfileStatusDashboardView.tapGestureRecognizerHandler(_:)))
meterView.addGestureRecognizer(tapGestureRecognizer)
}
-
- followingDashboardMeterView.accessibilityHint = "Double tap to open the list" // TODO: i18n
- followersDashboardMeterView.accessibilityHint = "Double tap to open the list"
+
+ followingDashboardMeterView.accessibilityHint = L10n.Scene.Profile.Accessibility.doubleTapToOpenTheList
+ followersDashboardMeterView.accessibilityHint = L10n.Scene.Profile.Accessibility.doubleTapToOpenTheList
}
}
diff --git a/MastodonSDK/Sources/MastodonUI/View/TableViewCell/NewsTableViewCell.swift b/MastodonSDK/Sources/MastodonUI/View/TableViewCell/NewsTableViewCell.swift
index 3515000f9..f0b2aec8f 100644
--- a/MastodonSDK/Sources/MastodonUI/View/TableViewCell/NewsTableViewCell.swift
+++ b/MastodonSDK/Sources/MastodonUI/View/TableViewCell/NewsTableViewCell.swift
@@ -51,6 +51,11 @@ extension NewsTableViewCell {
separatorLine.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
separatorLine.heightAnchor.constraint(equalToConstant: UIView.separatorLineHeight(of: contentView)),
])
+
+ isAccessibilityElement = true
+ accessibilityElements = [
+ newsView
+ ]
}
}
diff --git a/MastodonSDK/Sources/MastodonUI/View/TableViewCell/ProfileCardTableViewCell+Configuration.swift b/MastodonSDK/Sources/MastodonUI/View/TableViewCell/ProfileCardTableViewCell+Configuration.swift
new file mode 100644
index 000000000..061af0f48
--- /dev/null
+++ b/MastodonSDK/Sources/MastodonUI/View/TableViewCell/ProfileCardTableViewCell+Configuration.swift
@@ -0,0 +1,30 @@
+//
+// ProfileCardTableViewCell+Configuration.swift
+//
+//
+// Created by MainasuK on 2022-4-19.
+//
+
+import UIKit
+import CoreDataStack
+
+extension ProfileCardTableViewCell {
+
+ public func configure(
+ tableView: UITableView,
+ user: MastodonUser,
+ profileCardTableViewCellDelegate: ProfileCardTableViewCellDelegate?
+ ) {
+ if profileCardView.frame == .zero {
+ // set content view width
+ assert(layoutMarginsGuide.layoutFrame.width > .zero)
+ shadowBackgroundContainer.frame.size.width = layoutMarginsGuide.layoutFrame.width
+ profileCardView.setupLayoutFrame(layoutMarginsGuide.layoutFrame)
+ logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): did layout for new cell")
+ }
+
+ profileCardView.configure(user: user)
+ delegate = profileCardTableViewCellDelegate
+ }
+
+}
diff --git a/MastodonSDK/Sources/MastodonUI/View/TableViewCell/ProfileCardTableViewCell.swift b/MastodonSDK/Sources/MastodonUI/View/TableViewCell/ProfileCardTableViewCell.swift
index d3c8f223c..aff7b6feb 100644
--- a/MastodonSDK/Sources/MastodonUI/View/TableViewCell/ProfileCardTableViewCell.swift
+++ b/MastodonSDK/Sources/MastodonUI/View/TableViewCell/ProfileCardTableViewCell.swift
@@ -5,6 +5,7 @@
// Created by MainasuK on 2022-4-14.
//
+import os.log
import UIKit
import Combine
@@ -14,9 +15,13 @@ public protocol ProfileCardTableViewCellDelegate: AnyObject {
public final class ProfileCardTableViewCell: UITableViewCell {
+ let logger = Logger(subsystem: "ProfileCardTableViewCell", category: "Cell")
+
public weak var delegate: ProfileCardTableViewCellDelegate?
public var disposeBag = Set()
+ public let shadowBackgroundContainer = ShadowBackgroundContainer()
+
public let profileCardView: ProfileCardView = {
let profileCardView = ProfileCardView()
profileCardView.layer.masksToBounds = true
@@ -49,15 +54,14 @@ extension ProfileCardTableViewCell {
private func _init() {
selectionStyle = .none
- let shadowBackgroundContainer = ShadowBackgroundContainer()
shadowBackgroundContainer.cornerRadius = 6
shadowBackgroundContainer.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(shadowBackgroundContainer)
NSLayoutConstraint.activate([
- shadowBackgroundContainer.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10),
+ shadowBackgroundContainer.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10).priority(.required - 1),
shadowBackgroundContainer.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor),
shadowBackgroundContainer.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor),
- contentView.bottomAnchor.constraint(equalTo: shadowBackgroundContainer.bottomAnchor, constant: 10),
+ contentView.bottomAnchor.constraint(equalTo: shadowBackgroundContainer.bottomAnchor, constant: 10).priority(.required - 1),
])
profileCardView.translatesAutoresizingMaskIntoConstraints = false
@@ -70,6 +74,12 @@ extension ProfileCardTableViewCell {
])
profileCardView.delegate = self
+
+ profileCardView.isAccessibilityElement = true
+ accessibilityElements = [
+ profileCardView,
+ profileCardView.relationshipActionButton
+ ]
}
}
diff --git a/MastodonTests/Info.plist b/MastodonTests/Info.plist
index 66a4b22f5..920eaff87 100644
--- a/MastodonTests/Info.plist
+++ b/MastodonTests/Info.plist
@@ -17,6 +17,6 @@
CFBundleShortVersionString
1.3.1
CFBundleVersion
- 110
+ 113
diff --git a/MastodonUITests/Info.plist b/MastodonUITests/Info.plist
index 66a4b22f5..920eaff87 100644
--- a/MastodonUITests/Info.plist
+++ b/MastodonUITests/Info.plist
@@ -17,6 +17,6 @@
CFBundleShortVersionString
1.3.1
CFBundleVersion
- 110
+ 113
diff --git a/NotificationService/Info.plist b/NotificationService/Info.plist
index 7301c57de..fa92e4a24 100644
--- a/NotificationService/Info.plist
+++ b/NotificationService/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
1.3.1
CFBundleVersion
- 110
+ 113
NSExtension
NSExtensionPointIdentifier
diff --git a/ShareActionExtension/Info.plist b/ShareActionExtension/Info.plist
index 856818817..9ee97c1e1 100644
--- a/ShareActionExtension/Info.plist
+++ b/ShareActionExtension/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
1.3.1
CFBundleVersion
- 110
+ 113
NSExtension
NSExtensionAttributes