Merge branch 'main' into develop
This commit is contained in:
commit
2ddd4354ef
|
@ -17,6 +17,6 @@
|
|||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.3.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>110</string>
|
||||
<string>113</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -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. ";
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>There are %#@count_option@ matching ‘${content}’.</string>
|
||||
<string>Ci sono %#@count_option@ corrispondenti a «${content}».</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
@ -13,15 +13,15 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<string>1 opzione</string>
|
||||
<key>other</key>
|
||||
<string>%ld options</string>
|
||||
<string>%ld opzioni</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>There are %#@count_option@ matching ‘${visibility}’.</string>
|
||||
<string>Ci sono %#@count_option@ corrispondenti a «${visibility}».</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
|
@ -29,9 +29,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<string>1 opzione</string>
|
||||
<key>other</key>
|
||||
<string>%ld options</string>
|
||||
<string>%ld opzioni</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
|
|
@ -471,15 +471,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ سنة</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ سنتين</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld سنين</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld سنةً</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld سنة</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.month.ago.abbr</key>
|
||||
|
@ -495,15 +495,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ شهر</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ شهرين</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld أشهُر</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld شهرًا</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld شهر</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.day.ago.abbr</key>
|
||||
|
@ -519,15 +519,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ يوم</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ يومين</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld أيام</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld يومًا</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld يوم</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.hour.ago.abbr</key>
|
||||
|
@ -543,15 +543,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ ساعة</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ ساعتين</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld ساعات</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld ساعةًَ</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld ساعة</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.minute.ago.abbr</key>
|
||||
|
@ -567,15 +567,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ دقيقة</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ دقيقتان</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld دقائق</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld دقيقةً</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld دقيقة</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.second.ago.abbr</key>
|
||||
|
@ -591,15 +591,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ ثانية</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ ثانيتين</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld ثوان</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld ثانية</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld ثانية</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "مَحو"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "المنشورات",
|
||||
"hashtags": "الوسوم",
|
||||
"news": "الأخبار",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "مُفضَّلَتُك"
|
||||
},
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Clear"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Clear"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -125,9 +125,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 reply</string>
|
||||
<string>1 Antwort</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld Antworten</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Clear"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -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"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Borrar"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Tus Favoritos"
|
||||
},
|
||||
|
|
|
@ -125,9 +125,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 reply</string>
|
||||
<string>Erantzun bat</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld erantzun</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -125,9 +125,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 reply</string>
|
||||
<string>1 réponse</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld réponses</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Falamhaich"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Na h-annsachdan agad"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Clear"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Hapus"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
<key>one</key>
|
||||
<string>1 preferito</string>
|
||||
<key>other</key>
|
||||
<string>%ld favorites</string>
|
||||
<string>%ld preferiti</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.reblog</key>
|
||||
|
@ -189,9 +189,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 seguace</string>
|
||||
<string>1 following</string>
|
||||
<key>other</key>
|
||||
<string>%ld following</string>
|
||||
<string>%ld stanno seguendo</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.follower</key>
|
||||
|
@ -205,9 +205,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 follower</string>
|
||||
<string>1 seguace</string>
|
||||
<key>other</key>
|
||||
<string>%ld followers</string>
|
||||
<string>%ld seguaci</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.year.left</key>
|
||||
|
@ -221,9 +221,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 year left</string>
|
||||
<string>1 anno rimasto</string>
|
||||
<key>other</key>
|
||||
<string>%ld years left</string>
|
||||
<string>%ld anni rimasti</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.month.left</key>
|
||||
|
@ -237,9 +237,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 months left</string>
|
||||
<string>1 mese rimasto</string>
|
||||
<key>other</key>
|
||||
<string>%ld months left</string>
|
||||
<string>%ld mesi rimasti</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.day.left</key>
|
||||
|
@ -253,9 +253,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 day left</string>
|
||||
<string>1 giorno rimasto</string>
|
||||
<key>other</key>
|
||||
<string>%ld days left</string>
|
||||
<string>%ld giorni rimasti</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.hour.left</key>
|
||||
|
@ -269,9 +269,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 hour left</string>
|
||||
<string>1 ora rimasta</string>
|
||||
<key>other</key>
|
||||
<string>%ld hours left</string>
|
||||
<string>%ld ore rimaste</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.minute.left</key>
|
||||
|
@ -285,9 +285,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 minute left</string>
|
||||
<string>1 minuto rimasto</string>
|
||||
<key>other</key>
|
||||
<string>%ld minutes left</string>
|
||||
<string>%ld minuti rimasti</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.second.left</key>
|
||||
|
@ -301,9 +301,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 second left</string>
|
||||
<string>1 secondo rimasto</string>
|
||||
<key>other</key>
|
||||
<string>%ld seconds left</string>
|
||||
<string>%ld secondi rimasti</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.year.ago.abbr</key>
|
||||
|
@ -317,9 +317,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1y ago</string>
|
||||
<string>1 anno fa</string>
|
||||
<key>other</key>
|
||||
<string>%ldy ago</string>
|
||||
<string>%ld anni fa</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.month.ago.abbr</key>
|
||||
|
@ -333,9 +333,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1M ago</string>
|
||||
<string>1 mese fa</string>
|
||||
<key>other</key>
|
||||
<string>%ldM ago</string>
|
||||
<string>%ld mesi fa</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.day.ago.abbr</key>
|
||||
|
@ -349,9 +349,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1d ago</string>
|
||||
<string>1 giorno fa</string>
|
||||
<key>other</key>
|
||||
<string>%ldd ago</string>
|
||||
<string>%ld giorni fa</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.hour.ago.abbr</key>
|
||||
|
@ -365,9 +365,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1h ago</string>
|
||||
<string>1 ora fa</string>
|
||||
<key>other</key>
|
||||
<string>%ldh ago</string>
|
||||
<string>%ld ore fa</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.minute.ago.abbr</key>
|
||||
|
@ -381,9 +381,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1m ago</string>
|
||||
<string>1 minuto fa</string>
|
||||
<key>other</key>
|
||||
<string>%ldm ago</string>
|
||||
<string>%ld minuti fa</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.second.ago.abbr</key>
|
||||
|
@ -397,9 +397,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1s ago</string>
|
||||
<string>1 secondo fa</string>
|
||||
<key>other</key>
|
||||
<string>%lds ago</string>
|
||||
<string>%ld secondi fa</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "クリア"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "お気に入り"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Sfeḍ"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Ismenyifen-ik·im"
|
||||
},
|
||||
|
|
|
@ -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"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Clear"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Wissen"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Uw favorieten"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Clear"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Clear"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Clear"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Tyhjennä"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Omat suosikit"
|
||||
},
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Rensa"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld การตอบกลับ</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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": "โซนน่าเบื่อ",
|
||||
|
|
|
@ -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"
|
||||
},
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld 条回复</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -492,6 +492,14 @@
|
|||
"clear": "Clear"
|
||||
}
|
||||
},
|
||||
"discovery": {
|
||||
"tabs": {
|
||||
"posts": "Posts",
|
||||
"hashtags": "Hashtags",
|
||||
"news": "News",
|
||||
"for_you": "For You"
|
||||
}
|
||||
},
|
||||
"favorite": {
|
||||
"title": "Your Favorites"
|
||||
},
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 = "<group>"; };
|
||||
DB0618092785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterAvatarTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DB084B5625CBC56C00F898ED /* Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Status.swift; sourceTree = "<group>"; };
|
||||
DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryIntroBannerView.swift; sourceTree = "<group>"; };
|
||||
DB0AC6FB25CD02E600D75117 /* APIService+Instance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Instance.swift"; sourceTree = "<group>"; };
|
||||
DB0C947626A7FE840088FB11 /* NotificationAvatarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationAvatarButton.swift; sourceTree = "<group>"; };
|
||||
DB0EF72A26FDB1D200347686 /* SidebarListCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarListCollectionViewCell.swift; sourceTree = "<group>"; };
|
||||
|
@ -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 = "<group>";
|
||||
};
|
||||
DB0A322F280EEA00001729D2 /* View */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DB0A322D280EE9FD001729D2 /* DiscoveryIntroBannerView.swift */,
|
||||
);
|
||||
path = View;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
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" */;
|
||||
|
|
|
@ -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">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
<AdditionalOption
|
||||
key = "NSZombieEnabled"
|
||||
value = "YES"
|
||||
isEnabled = "YES">
|
||||
</AdditionalOption>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
|
|
|
@ -109,7 +109,7 @@
|
|||
<key>MastodonIntent.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>33</integer>
|
||||
<integer>30</integer>
|
||||
</dict>
|
||||
<key>MastodonIntents.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
|
@ -124,12 +124,12 @@
|
|||
<key>NotificationService.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>32</integer>
|
||||
<integer>31</integer>
|
||||
</dict>
|
||||
<key>ShareActionExtension.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>31</integer>
|
||||
<integer>23</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>110</string>
|
||||
<string>113</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
|
|
|
@ -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<Status>
|
||||
// ) 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)
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<AnyCancellable>()
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
}
|
|
@ -39,6 +39,8 @@ final class NotificationTimelineViewController: UIViewController, NeedsDependenc
|
|||
return tableView
|
||||
}()
|
||||
|
||||
let cellFrameCache = NSCache<NSNumber, NSValue>()
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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<Void, Never>()
|
||||
|
||||
let viewDidAppear = CurrentValueSubject<Void, Never>(Void())
|
||||
|
||||
// output
|
||||
var diffableDataSource: UITableViewDiffableDataSource<PickServerSection, PickServerItem>?
|
||||
private(set) lazy var loadIndexedServerStateMachine: GKStateMachine = {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -112,7 +112,7 @@ extension StatusThreadRootTableViewCell {
|
|||
statusView.statusMetricView
|
||||
]
|
||||
|
||||
if !statusView.viewModel.isSensitive {
|
||||
if !statusView.viewModel.isMediaSensitive {
|
||||
elements.removeAll(where: { $0 === statusView.contentSensitiveeToggleButton })
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.3.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>110</string>
|
||||
<string>113</string>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionAttributes</key>
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="19574" systemVersion="21D62" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
|
||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="20086" systemVersion="21E258" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
|
||||
<entity name="Application" representedClassName="CoreDataStack.Application" syncable="YES">
|
||||
<attribute name="identifier" optional="YES" attributeType="UUID" usesScalarValueType="NO"/>
|
||||
<attribute name="name" attributeType="String"/>
|
||||
|
@ -185,8 +185,7 @@
|
|||
<attribute name="identifier" attributeType="String"/>
|
||||
<attribute name="inReplyToAccountID" optional="YES" attributeType="String"/>
|
||||
<attribute name="inReplyToID" optional="YES" attributeType="String"/>
|
||||
<attribute name="isContentSensitiveToggled" transient="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
||||
<attribute name="isMediaSensitiveToggled" transient="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
||||
<attribute name="isSensitiveToggled" transient="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
||||
<attribute name="language" optional="YES" attributeType="String"/>
|
||||
<attribute name="mentions" optional="YES" attributeType="Binary"/>
|
||||
<attribute name="reblogsCount" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
|
||||
|
@ -262,7 +261,7 @@
|
|||
<element name="PrivateNote" positionX="0" positionY="0" width="128" height="89"/>
|
||||
<element name="SearchHistory" positionX="0" positionY="0" width="128" height="149"/>
|
||||
<element name="Setting" positionX="72" positionY="162" width="128" height="164"/>
|
||||
<element name="Status" positionX="0" positionY="0" width="128" height="629"/>
|
||||
<element name="Status" positionX="0" positionY="0" width="128" height="614"/>
|
||||
<element name="Subscription" positionX="81" positionY="171" width="128" height="179"/>
|
||||
<element name="SubscriptionAlerts" positionX="72" positionY="162" width="128" height="164"/>
|
||||
<element name="Tag" positionX="0" positionY="0" width="128" height="149"/>
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 }
|
||||
}
|
||||
|
||||
}
|
|
@ -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")
|
||||
|
|
|
@ -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" = "لا يُمكِن عَرض المُتابَعات مِنَ الخوادم الأُخرى.";
|
||||
|
|
|
@ -471,15 +471,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ سنة</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ سنتين</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld سنين</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld سنةً</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld سنة</string>
|
||||
<string>مُنذُ %ldع</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.month.ago.abbr</key>
|
||||
|
@ -495,15 +495,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ شهر</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ شهرين</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld أشهُر</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld شهرًا</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld شهر</string>
|
||||
<string>مُنذُ %ldش</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.day.ago.abbr</key>
|
||||
|
@ -519,15 +519,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ يوم</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ يومين</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld أيام</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld يومًا</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld يوم</string>
|
||||
<string>مُنذُ %ldي</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.hour.ago.abbr</key>
|
||||
|
@ -543,15 +543,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ ساعة</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ ساعتين</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld ساعات</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld ساعةًَ</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld ساعة</string>
|
||||
<string>مُنذُ %ldس</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.minute.ago.abbr</key>
|
||||
|
@ -567,15 +567,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ دقيقة</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ دقيقتان</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld دقائق</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld دقيقةً</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld دقيقة</string>
|
||||
<string>مُنذُ %ldد</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>date.second.ago.abbr</key>
|
||||
|
@ -591,15 +591,15 @@
|
|||
<key>zero</key>
|
||||
<string>مُنذُ لَحظة</string>
|
||||
<key>one</key>
|
||||
<string>مُنذُ ثانية</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
<key>two</key>
|
||||
<string>مُنذُ ثانيتين</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
<key>few</key>
|
||||
<string>مُنذُ %ld ثوان</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
<key>many</key>
|
||||
<string>مُنذُ %ld ثانية</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
<key>other</key>
|
||||
<string>مُنذُ %ld ثانية</string>
|
||||
<string>مُنذُ %ldث</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -125,9 +125,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 reply</string>
|
||||
<string>1 Antwort</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld Antworten</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -125,9 +125,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 reply</string>
|
||||
<string>Erantzun bat</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld erantzun</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -125,9 +125,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>one</key>
|
||||
<string>1 reply</string>
|
||||
<string>1 réponse</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld réponses</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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" = "他のサーバーにいるフォローは表示されません。";
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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";
|
||||
"Scene.Wizard.NewInMastodon" = "Новое в Мастодоне";
|
|
@ -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ä.";
|
||||
|
|
|
@ -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" = "ใช้เบราว์เซอร์เริ่มต้นเพื่อเปิดลิงก์";
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld การตอบกลับ</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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" = "使用默认浏览器打开链接";
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>other</key>
|
||||
<string>%ld replies</string>
|
||||
<string>%ld 条回复</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.vote</key>
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
|
@ -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..<layout.count])
|
||||
layout.layout(in: self, mediaViews: mediaViews)
|
||||
|
||||
// layoutSensitiveToggleButton()
|
||||
// bringSubviewToFront(sensitiveToggleButtonBlurVisualEffectView)
|
||||
layoutContentWarningOverlay()
|
||||
bringSubviewToFront(contentWarningOverlay)
|
||||
|
||||
return mediaViews
|
||||
}
|
||||
|
@ -147,34 +133,16 @@ extension MediaGridContainerView {
|
|||
}
|
||||
|
||||
extension MediaGridContainerView {
|
||||
// private func layoutSensitiveToggleButton() {
|
||||
// sensitiveToggleButtonBlurVisualEffectView.translatesAutoresizingMaskIntoConstraints = false
|
||||
// addSubview(sensitiveToggleButtonBlurVisualEffectView)
|
||||
// NSLayoutConstraint.activate([
|
||||
// sensitiveToggleButtonBlurVisualEffectView.topAnchor.constraint(equalTo: topAnchor, constant: 16),
|
||||
// trailingAnchor.constraint(equalTo: sensitiveToggleButtonBlurVisualEffectView.trailingAnchor, constant: 16),
|
||||
// ])
|
||||
//
|
||||
// sensitiveToggleButtonVibrancyVisualEffectView.translatesAutoresizingMaskIntoConstraints = false
|
||||
// sensitiveToggleButtonBlurVisualEffectView.contentView.addSubview(sensitiveToggleButtonVibrancyVisualEffectView)
|
||||
// NSLayoutConstraint.activate([
|
||||
// sensitiveToggleButtonVibrancyVisualEffectView.topAnchor.constraint(equalTo: sensitiveToggleButtonBlurVisualEffectView.contentView.topAnchor),
|
||||
// sensitiveToggleButtonVibrancyVisualEffectView.leadingAnchor.constraint(equalTo: sensitiveToggleButtonBlurVisualEffectView.contentView.leadingAnchor),
|
||||
// sensitiveToggleButtonVibrancyVisualEffectView.trailingAnchor.constraint(equalTo: sensitiveToggleButtonBlurVisualEffectView.contentView.trailingAnchor),
|
||||
// sensitiveToggleButtonVibrancyVisualEffectView.bottomAnchor.constraint(equalTo: sensitiveToggleButtonBlurVisualEffectView.contentView.bottomAnchor),
|
||||
// ])
|
||||
//
|
||||
// sensitiveToggleButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
// sensitiveToggleButtonVibrancyVisualEffectView.contentView.addSubview(sensitiveToggleButton)
|
||||
// NSLayoutConstraint.activate([
|
||||
// sensitiveToggleButton.topAnchor.constraint(equalTo: sensitiveToggleButtonVibrancyVisualEffectView.contentView.topAnchor),
|
||||
// sensitiveToggleButton.leadingAnchor.constraint(equalTo: sensitiveToggleButtonVibrancyVisualEffectView.contentView.leadingAnchor),
|
||||
// sensitiveToggleButtonVibrancyVisualEffectView.contentView.trailingAnchor.constraint(equalTo: sensitiveToggleButton.trailingAnchor),
|
||||
// sensitiveToggleButtonVibrancyVisualEffectView.contentView.bottomAnchor.constraint(equalTo: sensitiveToggleButton.bottomAnchor),
|
||||
// sensitiveToggleButton.widthAnchor.constraint(equalToConstant: MediaGridContainerView.sensitiveToggleButtonSize.width).priority(.required - 1),
|
||||
// sensitiveToggleButton.heightAnchor.constraint(equalToConstant: MediaGridContainerView.sensitiveToggleButtonSize.height).priority(.required - 1),
|
||||
// ])
|
||||
// }
|
||||
private func layoutContentWarningOverlay() {
|
||||
contentWarningOverlay.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(contentWarningOverlay)
|
||||
NSLayoutConstraint.activate([
|
||||
contentWarningOverlay.topAnchor.constraint(equalTo: topAnchor),
|
||||
contentWarningOverlay.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
contentWarningOverlay.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
contentWarningOverlay.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
extension MediaGridContainerView {
|
||||
|
|
|
@ -9,9 +9,28 @@ import UIKit
|
|||
import MastodonSDK
|
||||
import MastodonLocalization
|
||||
import AlamofireImage
|
||||
import FaviconFinder
|
||||
|
||||
extension NewsView {
|
||||
public func configure(link: Mastodon.Entity.Link) {
|
||||
let faviconPlaceholder = UIImage(systemName: "network")
|
||||
providerFaviconImageView.image = faviconPlaceholder
|
||||
if let url = URL(string: link.url) {
|
||||
let token = providerFaviconImageView.tag
|
||||
FaviconFinder(url: url).downloadFavicon { [weak self] result in
|
||||
guard let self = self else { return }
|
||||
switch result {
|
||||
case .success(let favicon):
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
guard let self = self else { return }
|
||||
guard self.providerFaviconImageView.tag == token else { return }
|
||||
self.providerFaviconImageView.image = favicon.image
|
||||
}
|
||||
case .failure:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
providerNameLabel.text = link.providerName
|
||||
headlineLabel.text = link.title
|
||||
footnoteLabel.text = L10n.Plural.peopleTalking(link.talkingPeopleCount ?? 0)
|
||||
|
|
|
@ -12,6 +12,15 @@ public final class NewsView: UIView {
|
|||
|
||||
let container = UIStackView()
|
||||
|
||||
let providerFaviconImageView: UIImageView = {
|
||||
let imageView = UIImageView()
|
||||
imageView.contentMode = .scaleAspectFit
|
||||
imageView.layer.masksToBounds = true
|
||||
imageView.layer.cornerRadius = 2
|
||||
imageView.layer.cornerCurve = .continuous
|
||||
return imageView
|
||||
}()
|
||||
|
||||
let providerNameLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = UIFontMetrics(forTextStyle: .footnote).scaledFont(for: .systemFont(ofSize: 13, weight: .semibold))
|
||||
|
@ -37,6 +46,7 @@ public final class NewsView: UIView {
|
|||
let imageView = MediaView()
|
||||
|
||||
public func prepareForReuse() {
|
||||
providerFaviconImageView.tag = (0..<Int.max).randomElement() ?? -1
|
||||
imageView.prepareForReuse()
|
||||
}
|
||||
|
||||
|
@ -72,13 +82,28 @@ extension NewsView {
|
|||
textContainer.spacing = 4
|
||||
container.addArrangedSubview(textContainer)
|
||||
|
||||
// providerContainer: H - [ providerFavIconImageView | providerNameLabel | (spacer) ]
|
||||
// providerContainer: H - [ providerFaviconImageView | providerNameLabel | (spacer) ]
|
||||
let providerContainer = UIStackView()
|
||||
providerContainer.axis = .horizontal
|
||||
providerContainer.spacing = 4
|
||||
textContainer.addArrangedSubview(providerContainer)
|
||||
|
||||
providerFaviconImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
providerContainer.addArrangedSubview(providerFaviconImageView)
|
||||
providerContainer.addArrangedSubview(providerNameLabel)
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
providerFaviconImageView.heightAnchor.constraint(equalTo: providerNameLabel.heightAnchor, multiplier: 1.0).priority(.required - 10),
|
||||
providerFaviconImageView.widthAnchor.constraint(equalTo: providerNameLabel.heightAnchor, multiplier: 1.0).priority(.required - 10),
|
||||
])
|
||||
// low priority for intrinsic size hugging
|
||||
providerFaviconImageView.setContentHuggingPriority(.defaultLow - 10, for: .vertical)
|
||||
providerFaviconImageView.setContentHuggingPriority(.defaultLow - 10, for: .horizontal)
|
||||
// high priority but lower then layout constraint for size compression
|
||||
providerFaviconImageView.setContentCompressionResistancePriority(.required - 11, for: .vertical)
|
||||
providerFaviconImageView.setContentCompressionResistancePriority(.required - 11, for: .horizontal)
|
||||
providerNameLabel.setContentCompressionResistancePriority(.required - 1, for: .vertical)
|
||||
providerNameLabel.setContentHuggingPriority(.required - 1, for: .vertical)
|
||||
|
||||
// headlineLabel
|
||||
textContainer.addArrangedSubview(headlineLabel)
|
||||
let spacer = UIView()
|
||||
|
|
|
@ -42,6 +42,8 @@ extension ProfileCardView {
|
|||
@Published public var isBlocking = false
|
||||
@Published public var isBlockedBy = false
|
||||
|
||||
@Published public var groupedAccessibilityLabel = ""
|
||||
|
||||
init() {
|
||||
backgroundColor = ThemeService.shared.currentTheme.value.systemBackgroundColor
|
||||
Publishers.CombineLatest(
|
||||
|
@ -75,6 +77,7 @@ extension ProfileCardView.ViewModel {
|
|||
bindBio(view: view)
|
||||
bindRelationship(view: view)
|
||||
bindDashboard(view: view)
|
||||
bindAccessibility(view: view)
|
||||
}
|
||||
|
||||
private func bindAppearacne(view: ProfileCardView) {
|
||||
|
@ -185,4 +188,27 @@ extension ProfileCardView.ViewModel {
|
|||
}
|
||||
.store(in: &disposeBag)
|
||||
}
|
||||
|
||||
private func bindAccessibility(view: ProfileCardView) {
|
||||
let authorAccessibilityLabel = Publishers.CombineLatest(
|
||||
$authorName,
|
||||
$bioContent
|
||||
)
|
||||
.map { authorName, bioContent -> 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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue