diff --git a/IceCubesApp/Resources/Localization/be.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/be.lproj/Localizable.strings index c67338f7..e14ae7e9 100644 --- a/IceCubesApp/Resources/Localization/be.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/be.lproj/Localizable.strings @@ -484,6 +484,7 @@ "status.show-full-post" = "Show full post"; "status.summary.at-time" = " а "; "status.summary.edited-time" = "Апошняе рэдагаванне:"; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld павышаных"; "status.summary.n-favorites %lld" = "%lld улюбёных"; "status.visibility.direct" = "Прыватны"; @@ -524,6 +525,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Дадаць уліковы запіс"; "accessibility.app-account.selector.accounts" = "Уліковыя запісы"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Дадатковая інфармацыя"; diff --git a/IceCubesApp/Resources/Localization/ca.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/ca.lproj/Localizable.strings index 816ead3b..655b26b8 100644 --- a/IceCubesApp/Resources/Localization/ca.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/ca.lproj/Localizable.strings @@ -478,6 +478,7 @@ "status.show-full-post" = "Show full post"; "status.summary.at-time" = " a les "; "status.summary.edited-time" = "Darrera edició: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld impulsos"; "status.summary.n-favorites %lld" = "%lld preferits"; "status.visibility.direct" = "Privat"; @@ -518,6 +519,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Add account"; "accessibility.app-account.selector.accounts" = "Accounts"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Additional Info"; diff --git a/IceCubesApp/Resources/Localization/de.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/de.lproj/Localizable.strings index 8fffccae..cdc54e15 100644 --- a/IceCubesApp/Resources/Localization/de.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/de.lproj/Localizable.strings @@ -474,6 +474,7 @@ "status.show-more" = "Mehr anzeigen"; "status.show-full-post" = "Ganzen Beitrag anzeigen"; "status.summary.at-time" = " um "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld Boosts"; "status.summary.n-favorites %lld" = "%lld Favoriten"; "status.summary.edited-time" = "Zuletzt bearbeitet: "; @@ -514,6 +515,37 @@ "accessibility.editor.privacy.hint" = "Ändert das Beitragspublikum."; "accessibility.tabs.timeline.add-account" = "Konto hinzufügen"; "accessibility.app-account.selector.accounts" = "Konten"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Zusätzliche Informationen"; diff --git a/IceCubesApp/Resources/Localization/en-GB.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/en-GB.lproj/Localizable.strings index 91e44192..f8c1b9bc 100644 --- a/IceCubesApp/Resources/Localization/en-GB.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/en-GB.lproj/Localizable.strings @@ -479,6 +479,7 @@ "status.show-full-post" = "Show full post"; "status.summary.at-time" = " at "; "status.summary.edited-time" = "Last edited: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld boosts"; "status.summary.n-favorites %lld" = "%lld favourites"; "status.visibility.direct" = "Private"; @@ -521,6 +522,37 @@ "accessibility.editor.privacy.label" = "Visibility"; "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.app-account.selector.accounts" = "Accounts"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Additional Info"; diff --git a/IceCubesApp/Resources/Localization/en.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/en.lproj/Localizable.strings index bf10d316..17e56dce 100644 --- a/IceCubesApp/Resources/Localization/en.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/en.lproj/Localizable.strings @@ -480,6 +480,7 @@ "status.show-full-post" = "Show full post"; "status.summary.at-time" = " at "; "status.summary.edited-time" = "Last edited: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld boosts"; "status.summary.n-favorites %lld" = "%lld favorites"; "status.visibility.direct" = "Private"; @@ -520,6 +521,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Add Account"; "accessibility.app-account.selector.accounts" = "Accounts"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Additional Info"; diff --git a/IceCubesApp/Resources/Localization/es.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/es.lproj/Localizable.strings index cf7c1d36..05135fd0 100644 --- a/IceCubesApp/Resources/Localization/es.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/es.lproj/Localizable.strings @@ -480,6 +480,7 @@ "status.show-full-post" = "Mostrar publicación completa"; "status.summary.at-time" = " a las "; "status.summary.edited-time" = "Última edición: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld retoots"; "status.summary.n-favorites %lld" = "%lld favoritos"; "status.visibility.direct" = "Privado"; @@ -520,6 +521,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Añadir cuenta"; "accessibility.app-account.selector.accounts" = "Cuentas"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Información adicional"; diff --git a/IceCubesApp/Resources/Localization/eu.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/eu.lproj/Localizable.strings index 1278db4b..6851c4a6 100644 --- a/IceCubesApp/Resources/Localization/eu.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/eu.lproj/Localizable.strings @@ -472,6 +472,7 @@ "status.show-full-post" = "Erakutsi osorik"; "status.summary.at-time" = " · "; "status.summary.edited-time" = "Azkenekoz editatua: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.visibility.direct" = "Aipatutakoak"; "status.visibility.follower" = "Jarraitzaileak"; "status.visibility.public" = "Publikoa"; @@ -509,6 +510,37 @@ "accessibility.editor.privacy.hint" = "Nork ikus dezakeen aldatzen du."; "accessibility.tabs.timeline.add-account" = "Gehitu kontua"; "accessibility.app-account.selector.accounts" = "Kontuak"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Informazio gehigarria"; diff --git a/IceCubesApp/Resources/Localization/fr.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/fr.lproj/Localizable.strings index 3b2fa4fc..2a096cad 100644 --- a/IceCubesApp/Resources/Localization/fr.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/fr.lproj/Localizable.strings @@ -475,6 +475,7 @@ "status.show-full-post" = "Show full post"; "status.summary.at-time" = " à "; "status.summary.edited-time" = "Dernière modification : "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld boosts"; "status.summary.n-favorites %lld" = "%lld favoris"; "status.visibility.direct" = "Privé"; @@ -515,6 +516,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Ajouter un compte>"; "accessibility.app-account.selector.accounts" = "Comptes"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Information supplémentaire"; diff --git a/IceCubesApp/Resources/Localization/it.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/it.lproj/Localizable.strings index 18566191..5b2e298c 100644 --- a/IceCubesApp/Resources/Localization/it.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/it.lproj/Localizable.strings @@ -479,6 +479,7 @@ "status.show-full-post" = "Mostra il post completo"; "status.summary.at-time" = " alle "; "status.summary.edited-time" = "Ultima modifica: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld condivisioni"; "status.summary.n-favorites %lld" = "%lld preferiti"; "status.visibility.direct" = "Privato"; @@ -519,6 +520,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Aggiungi account"; "accessibility.app-account.selector.accounts" = "Account"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Informazioni aggiuntive"; diff --git a/IceCubesApp/Resources/Localization/ja.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/ja.lproj/Localizable.strings index b6369f0a..8c7fea86 100644 --- a/IceCubesApp/Resources/Localization/ja.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/ja.lproj/Localizable.strings @@ -479,6 +479,7 @@ "status.show-full-post" = "投稿をすべて表示"; "status.summary.at-time" = " "; "status.summary.edited-time" = "最新編集日: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld ブースト"; "status.summary.n-favorites %lld" = "%lld お気に入り"; "status.visibility.direct" = "指定された相手のみ"; @@ -519,6 +520,37 @@ "accessibility.editor.privacy.hint" = "投稿対象者を変更します"; "accessibility.tabs.timeline.add-account" = "アカウントを追加"; "accessibility.app-account.selector.accounts" = "アカウント"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "追加情報"; diff --git a/IceCubesApp/Resources/Localization/ko.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/ko.lproj/Localizable.strings index 5b695e36..06f9a7b0 100644 --- a/IceCubesApp/Resources/Localization/ko.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/ko.lproj/Localizable.strings @@ -481,6 +481,7 @@ "status.show-full-post" = "전체 내용 보기"; "status.summary.at-time" = " "; "status.summary.edited-time" = "마지막 수정: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "부스트 %lld회"; "status.summary.n-favorites %lld" = "좋아요 %lld회"; "status.visibility.direct" = "언급된 사용자만"; @@ -521,6 +522,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "계정 추가"; "accessibility.app-account.selector.accounts" = "계정"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "추가 정보"; diff --git a/IceCubesApp/Resources/Localization/nb.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/nb.lproj/Localizable.strings index 546505fa..6a8af4a2 100644 --- a/IceCubesApp/Resources/Localization/nb.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/nb.lproj/Localizable.strings @@ -479,6 +479,7 @@ "status.show-full-post" = "Show full post"; "status.summary.at-time" = "kl "; "status.summary.edited-time" = "Sist redigert: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld forsterkninger"; "status.summary.n-favorites %lld" = "%lld favoritter"; "status.visibility.direct" = "Privat"; @@ -519,6 +520,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Add account"; "accessibility.app-account.selector.accounts" = "Accounts"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Additional Info"; diff --git a/IceCubesApp/Resources/Localization/nl.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/nl.lproj/Localizable.strings index 614d8dee..117b2a31 100644 --- a/IceCubesApp/Resources/Localization/nl.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/nl.lproj/Localizable.strings @@ -473,6 +473,7 @@ "status.show-full-post" = "Toon volledige post"; "status.summary.at-time" = " om "; "status.summary.edited-time" = "Laatst gewijzigd: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld boosts"; "status.summary.n-favorites %lld" = "%lld favorieten"; "status.visibility.direct" = "Direct bericht"; @@ -516,6 +517,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Voeg account toe"; "accessibility.app-account.selector.accounts" = "Accounts"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Aanvullende informatie"; diff --git a/IceCubesApp/Resources/Localization/pl.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/pl.lproj/Localizable.strings index 4af52344..434c7db1 100644 --- a/IceCubesApp/Resources/Localization/pl.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/pl.lproj/Localizable.strings @@ -473,6 +473,7 @@ "status.show-full-post" = "Pokaż cały post"; "status.summary.at-time" = " o "; "status.summary.edited-time" = "Ostatnia edycja: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.visibility.direct" = "Post bezpośredni"; "status.visibility.follower" = "Tylko obserwujący"; "status.visibility.public" = "Publiczny"; @@ -511,6 +512,37 @@ "accessibility.editor.privacy.hint" = "Zmienia odbiorców postu."; "accessibility.tabs.timeline.add-account" = "Dodaj konto"; "accessibility.app-account.selector.accounts" = "Konta"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Informacja dodatkowa"; diff --git a/IceCubesApp/Resources/Localization/pt-BR.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/pt-BR.lproj/Localizable.strings index 0913c842..d00f0cba 100644 --- a/IceCubesApp/Resources/Localization/pt-BR.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/pt-BR.lproj/Localizable.strings @@ -479,6 +479,7 @@ "status.show-full-post" = "Show full post"; "status.summary.at-time" = " as "; "status.summary.edited-time" = "Última edição: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld boosts"; "status.summary.n-favorites %lld" = "%lld favoritos"; "status.visibility.direct" = "Privado"; @@ -519,6 +520,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Adicionar conta"; "accessibility.app-account.selector.accounts" = "Contas"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Informação Adicional"; diff --git a/IceCubesApp/Resources/Localization/tr.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/tr.lproj/Localizable.strings index 5b48209b..60244aee 100644 --- a/IceCubesApp/Resources/Localization/tr.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/tr.lproj/Localizable.strings @@ -475,6 +475,7 @@ "status.show-full-post" = "Show full post"; "status.summary.at-time" = " de "; "status.summary.edited-time" = "Son düzenleme: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld yükseltmeler"; "status.summary.n-favorites %lld" = "%lld favoriler"; "status.visibility.direct" = "Gizli"; @@ -519,6 +520,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Add account"; "accessibility.app-account.selector.accounts" = "Accounts"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Additional Info"; diff --git a/IceCubesApp/Resources/Localization/uk.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/uk.lproj/Localizable.strings index 4f1236ef..ecacc668 100644 --- a/IceCubesApp/Resources/Localization/uk.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/uk.lproj/Localizable.strings @@ -480,6 +480,7 @@ "status.show-full-post" = "Показати весь допис"; "status.summary.at-time" = " о "; "status.summary.edited-time" = "Востаннє змінено: "; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld поширень"; "status.summary.n-favorites %lld" = "%lld вподобань"; "status.visibility.direct" = "Особисте"; @@ -520,6 +521,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "Додати профіль"; "accessibility.app-account.selector.accounts" = "Профілі"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "Додаткова інформація"; diff --git a/IceCubesApp/Resources/Localization/zh-Hans.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/zh-Hans.lproj/Localizable.strings index 86e03bf0..7c0c72e1 100644 --- a/IceCubesApp/Resources/Localization/zh-Hans.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/zh-Hans.lproj/Localizable.strings @@ -478,6 +478,7 @@ "status.show-full-post" = "显示全文"; "status.summary.at-time" = " 在 "; "status.summary.edited-time" = "上次编辑:"; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld 转发"; "status.summary.n-favorites %lld" = "%lld 喜欢"; "status.visibility.direct" = "私密"; @@ -521,6 +522,37 @@ "accessibility.editor.privacy.hint" = "更改嘟文可见度。"; "accessibility.tabs.timeline.add-account" = "添加账户"; "accessibility.app-account.selector.accounts" = "账户"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "附加信息"; diff --git a/IceCubesApp/Resources/Localization/zh-Hant.lproj/Localizable.strings b/IceCubesApp/Resources/Localization/zh-Hant.lproj/Localizable.strings index 43d23fd0..b00d559a 100644 --- a/IceCubesApp/Resources/Localization/zh-Hant.lproj/Localizable.strings +++ b/IceCubesApp/Resources/Localization/zh-Hant.lproj/Localizable.strings @@ -479,6 +479,7 @@ "status.show-full-post" = "顯示全文"; "status.summary.at-time" = " 於 "; "status.summary.edited-time" = "上次編輯:"; +"status.summary.n-replies %lld" = "%lld replies"; "status.summary.n-boosts %lld" = "%lld 轉嘟"; "status.summary.n-favorites %lld" = "%lld 最愛"; "status.visibility.direct" = "私訊"; @@ -519,6 +520,37 @@ "accessibility.editor.privacy.hint" = "Changes post audience."; "accessibility.tabs.timeline.add-account" = "新增帳號"; "accessibility.app-account.selector.accounts" = "帳號"; +"accessibility.tabs.profile.options.label" = "Options"; +"accessibility.tabs.profile.options.inputLabel1" = "Settings"; +"accessibility.tabs.profile.options.inputLabel2" = "More"; +"accessibility.tabs.profile.user-avatar.label" = "Profile photo"; +"accessibility.tabs.profile.user-avatar.hint" = "Displays a larger version."; +"accessibility.tabs.profile.user-avatar.supporter.label" = "Supporter"; +"accessibility.tabs.profile.user.account-bot.label" = "Bot account"; +"accessibility.tabs.profile.user.account-blocked.label" = "Blocked"; +"accessibility.tabs.profile.user.account-muted.label" = "Muted"; +"accessibility.tabs.profile.user.account-private.label" = "Private account"; +"accessibility.tabs.profile.header-image.label" = "Header image"; +"accessibility.tabs.profile.header-image.hint" = "Displays a larger version."; +"accessibility.tabs.profile.post-count.hint" = "Scrolls to list."; +"accessibility.tabs.profile.following-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.follower-count.hint" = "Navigates to list."; +"accessibility.tabs.profile.picker.statuses" = "Posts"; +"accessibility.tabs.profile.picker.favorites" = "Favorites"; +"accessibility.tabs.profile.picker.bookmarks" = "Bookmarks"; +"accessibility.tabs.profile.picker.followed-tags" = "Tags"; +"accessibility.tabs.profile.picker.posts-and-replies" = "Posts and replies"; +"accessibility.tabs.profile.picker.media" = "Media"; +"accessibility.tabs.profile.picker.lists" = "Lists"; +"accessibility.tabs.profile.user-notifications.label" = "Receive notifications"; +"accessibility.tabs.profile.user-reblogs.label" = "Display boosts"; +"accessibility.tabs.profile.fields.verified.label" = "Verified"; +"accessibility.tabs.profile.fields.container.label" = "User-defined fields"; +"accessibility.status.spoiler-full-content" = "Full Content"; +"accessibility.status.a-boosted-b-%@-%@" = "%@ boosted %@"; +"accessibility.status.a-replied-to-%@" = "%@ replied to"; +"accessibility.image.alt-text-%@" = "Image alt text: %@"; +"accessibility.image.alt-text-more.label" = "More alt text available"; // MARK: Report "report.comment.placeholder" = "附加資訊"; diff --git a/Packages/Account/Sources/Account/AccountDetailHeaderView.swift b/Packages/Account/Sources/Account/AccountDetailHeaderView.swift index 2203f22b..e6965356 100644 --- a/Packages/Account/Sources/Account/AccountDetailHeaderView.swift +++ b/Packages/Account/Sources/Account/AccountDetailHeaderView.swift @@ -73,7 +73,6 @@ struct AccountDetailHeaderView: View { } .background(theme.secondaryBackgroundColor) .frame(height: Constants.headerHeight) - .contentShape(Rectangle()) .onTapGesture { guard account.haveHeader else { return @@ -82,20 +81,18 @@ struct AccountDetailHeaderView: View { await quickLook.prepareFor(urls: [account.header], selectedURL: account.header) } } + .accessibilityElement(children: .combine) + .accessibilityAddTraits([.isImage, .isButton]) + .accessibilityLabel("accessibility.tabs.profile.header-image.label") + .accessibilityHint("accessibility.tabs.profile.header-image.hint") + .accessibilityHidden(account.haveHeader == false) } private var accountAvatarView: some View { HStack { ZStack(alignment: .topTrailing) { AvatarView(url: account.avatar, size: .account) - .onTapGesture { - guard account.haveAvatar else { - return - } - Task { - await quickLook.prepareFor(urls: [account.avatar], selectedURL: account.avatar) - } - } + .accessibilityLabel("accessibility.tabs.profile.user-avatar.label") if viewModel.isCurrentUser, isSupporter { Image(systemName: "checkmark.seal.fill") .resizable() @@ -103,8 +100,23 @@ struct AccountDetailHeaderView: View { .foregroundColor(theme.tintColor) .offset(x: theme.avatarShape == .circle ? 0 : 10, y: theme.avatarShape == .circle ? 0 : -10) + .accessibilityRemoveTraits(.isSelected) + .accessibilityLabel("accessibility.tabs.profile.user-avatar.supporter.label") } } + .onTapGesture { + guard account.haveAvatar else { + return + } + Task { + await quickLook.prepareFor(urls: [account.avatar], selectedURL: account.avatar) + } + } + .accessibilityElement(children: .combine) + .accessibilityAddTraits([.isImage, .isButton]) + .accessibilityHint("accessibility.tabs.profile.user-avatar.hint") + .accessibilityHidden(account.haveAvatar == false) + Spacer() Group { Button { @@ -114,6 +126,7 @@ struct AccountDetailHeaderView: View { } label: { makeCustomInfoLabel(title: "account.posts", count: account.statusesCount) } + .accessibilityHint("accessibility.tabs.profile.post-count.hint") .buttonStyle(.borderless) Button { @@ -121,6 +134,7 @@ struct AccountDetailHeaderView: View { } label: { makeCustomInfoLabel(title: "account.following", count: account.followingCount) } + .accessibilityHint("accessibility.tabs.profile.following-count.hint") .buttonStyle(.borderless) Button { @@ -132,6 +146,7 @@ struct AccountDetailHeaderView: View { needsBadge: currentAccount.account?.id == account.id && !currentAccount.followRequests.isEmpty ) } + .accessibilityHint("accessibility.tabs.profile.follower-count.hint") .buttonStyle(.borderless) }.offset(y: 20) @@ -149,29 +164,41 @@ struct AccountDetailHeaderView: View { .foregroundColor(theme.labelColor) .emojiSize(Font.scaledHeadlineFont.emojiSize) .emojiBaselineOffset(Font.scaledHeadlineFont.emojiBaselineOffset) + .accessibilityAddTraits(.isHeader) + + // The views here are wrapped in ZStacks as a Text(Image) does not provide an `accessibilityLabel`. if account.bot { - Text(Image(systemName: "poweroutlet.type.b.fill")) - .font(.footnote) + ZStack { + Text(Image(systemName: "poweroutlet.type.b.fill")) + .font(.footnote) + }.accessibilityLabel("accessibility.tabs.profile.user.account-bot.label") } if account.locked { - Text(Image(systemName: "lock.fill")) - .font(.footnote) + ZStack { + Text(Image(systemName: "lock.fill")) + .font(.footnote) + }.accessibilityLabel("accessibility.tabs.profile.user.account-private.label") } if viewModel.relationship?.blocking == true { - Text(Image(systemName: "person.crop.circle.badge.xmark.fill")) - .font(.footnote) + ZStack { + Text(Image(systemName: "person.crop.circle.badge.xmark.fill")) + .font(.footnote) + }.accessibilityLabel("accessibility.tabs.profile.user.account-blocked.label") } if viewModel.relationship?.muting == true { - Text(Image(systemName: "speaker.slash.fill")) - .font(.footnote) + ZStack { + Text(Image(systemName: "speaker.slash.fill")) + .font(.footnote) + }.accessibilityLabel("accessibility.tabs.profile.user.account-muted.label") } } Text("@\(account.acct)") .font(.scaledCallout) .foregroundColor(.gray) .textSelection(.enabled) + .accessibilityRespondsToUserInteraction(false) joinedAtView - } + }.accessibilityElement(children: .contain) Spacer() if let relationship = viewModel.relationship, !viewModel.isCurrentUser { HStack { @@ -201,6 +228,7 @@ struct AccountDetailHeaderView: View { .environment(\.openURL, OpenURLAction { url in routerPath.handle(url: url) }) + .accessibilityRespondsToUserInteraction(false) if let translation = viewModel.translation, !viewModel.isLoadingTranslation { GroupBox { @@ -247,6 +275,9 @@ struct AccountDetailHeaderView: View { .font(.scaledFootnote) .foregroundColor(.gray) } + .accessibilityElement(children: .ignore) + .accessibilityLabel(title) + .accessibilityValue("\(count)") } @ViewBuilder @@ -254,12 +285,14 @@ struct AccountDetailHeaderView: View { if let joinedAt = viewModel.account?.createdAt.asDate { HStack(spacing: 4) { Image(systemName: "calendar") + .accessibilityHidden(true) Text("account.joined") Text(joinedAt, style: .date) } .foregroundColor(.gray) .font(.footnote) .padding(.top, 6) + .accessibilityElement(children: .combine) } } @@ -293,6 +326,7 @@ struct AccountDetailHeaderView: View { if field.verifiedAt != nil { Image(systemName: "checkmark.seal") .foregroundColor(Color.green.opacity(0.80)) + .accessibilityHidden(true) } EmojiTextApp(field.value, emojis: viewModel.account?.emojis ?? []) .emojiSize(Font.scaledBodyFont.emojiSize) @@ -301,6 +335,7 @@ struct AccountDetailHeaderView: View { .environment(\.openURL, OpenURLAction { url in routerPath.handle(url: url) }) + .accessibilityValue(field.verifiedAt != nil ? "accessibility.tabs.profile.fields.verified.label" : "") } .font(.scaledBody) if viewModel.fields.last != field { @@ -310,9 +345,13 @@ struct AccountDetailHeaderView: View { } Spacer() } + .accessibilityElement(children: .combine) + .modifier(ConditionalUserDefinedFieldAccessibilityActionModifier(field: field, routerPath: routerPath)) } } .padding(8) + .accessibilityElement(children: .contain) + .accessibilityLabel("accessibility.tabs.profile.fields.container.label") .background(theme.secondaryBackgroundColor) .cornerRadius(4) .overlay( @@ -323,6 +362,30 @@ struct AccountDetailHeaderView: View { } } +/// A ``ViewModifier`` that creates a attaches an accessibility action if the field value is a valid link +private struct ConditionalUserDefinedFieldAccessibilityActionModifier: ViewModifier { + + let field: Account.Field + let routerPath: RouterPath + + func body(content: Content) -> some View { + if let url = URL(string: field.value.asRawText), UIApplication.shared.canOpenURL(url) { + content + .accessibilityAction { + let _ = routerPath.handle(url: url) + } + // SwiftUI will automatically decorate this element with the link trait, so we remove the button trait manually. + // March 18th, 2023: The button trait is still re-applied… + .accessibilityRemoveTraits(.isButton) + .accessibilityInputLabels([field.name]) + } else { + content + // This element is not interactive; setting this property removes its button trait + .accessibilityRespondsToUserInteraction(false) + } + } +} + struct AccountDetailHeaderView_Previews: PreviewProvider { static var previews: some View { AccountDetailHeaderView(viewModel: .init(account: .placeholder()), diff --git a/Packages/Account/Sources/Account/AccountDetailView.swift b/Packages/Account/Sources/Account/AccountDetailView.swift index abf5c40b..6104dda2 100644 --- a/Packages/Account/Sources/Account/AccountDetailView.swift +++ b/Packages/Account/Sources/Account/AccountDetailView.swift @@ -55,6 +55,7 @@ public struct AccountDetailView: View { { tab in Image(systemName: tab.iconName) .tag(tab) + .accessibilityLabel(tab.accessibilityLabel) } } .pickerStyle(.segmented) @@ -193,14 +194,18 @@ public struct AccountDetailView: View { Text("account.detail.familiar-followers") .font(.scaledHeadline) .padding(.leading, .layoutPadding) + .accessibilityAddTraits(.isHeader) ScrollView(.horizontal, showsIndicators: false) { LazyHStack(spacing: 0) { ForEach(viewModel.familiarFollowers) { account in - AvatarView(url: account.avatar, size: .badge) - .onTapGesture { - routerPath.navigate(to: .accountDetailWithAccount(account: account)) - } - .padding(.leading, -4) + Button { + routerPath.navigate(to: .accountDetailWithAccount(account: account)) + } label: { + AvatarView(url: account.avatar, size: .badge) + .padding(.leading, -4) + .accessibilityLabel(account.safeDisplayName) + + }.accessibilityAddTraits(.isImage) } } .padding(.leading, .layoutPadding + 4) @@ -276,6 +281,7 @@ public struct AccountDetailView: View { private var pinnedPostsView: some View { if !viewModel.pinned.isEmpty { Label("account.post.pinned", systemImage: "pin.fill") + .accessibilityAddTraits(.isHeader) .font(.scaledFootnote) .foregroundColor(.gray) .fontWeight(.semibold) @@ -353,6 +359,12 @@ public struct AccountDetailView: View { } } label: { Image(systemName: "ellipsis.circle") + .accessibilityLabel("accessibility.tabs.profile.options.label") + .accessibilityInputLabels([ + LocalizedStringKey("accessibility.tabs.profile.options.label"), + LocalizedStringKey("accessibility.tabs.profile.options.inputLabel1"), + LocalizedStringKey("accessibility.tabs.profile.options.inputLabel2") + ]) } } } diff --git a/Packages/Account/Sources/Account/AccountDetailViewModel.swift b/Packages/Account/Sources/Account/AccountDetailViewModel.swift index a8d80453..a7a38851 100644 --- a/Packages/Account/Sources/Account/AccountDetailViewModel.swift +++ b/Packages/Account/Sources/Account/AccountDetailViewModel.swift @@ -36,6 +36,18 @@ class AccountDetailViewModel: ObservableObject, StatusesFetcher { case .lists: return "list.bullet" } } + + var accessibilityLabel: LocalizedStringKey { + switch self { + case .statuses: return "accessibility.tabs.profile.picker.statuses" + case .favorites: return "accessibility.tabs.profile.picker.favorites" + case .bookmarks: return "accessibility.tabs.profile.picker.bookmarks" + case .followedTags: return "accessibility.tabs.profile.picker.followed-tags" + case .postsAndReplies: return "accessibility.tabs.profile.picker.posts-and-replies" + case .media: return "accessibility.tabs.profile.picker.media" + case .lists: return "accessibility.tabs.profile.picker.lists" + } + } } enum TabState { diff --git a/Packages/Account/Sources/Account/Follow/FollowButton.swift b/Packages/Account/Sources/Account/Follow/FollowButton.swift index ebcf680a..54c23fcd 100644 --- a/Packages/Account/Sources/Account/Follow/FollowButton.swift +++ b/Packages/Account/Sources/Account/Follow/FollowButton.swift @@ -97,6 +97,9 @@ public struct FollowButton: View { Text("account.follow.requested") } else { Text(viewModel.relationship.following ? "account.follow.following" : "account.follow.follow") + .accessibilityRepresentation { + Toggle("account.follow.following", isOn: .constant(viewModel.relationship.following)) + } } } if viewModel.relationship.following, @@ -109,6 +112,8 @@ public struct FollowButton: View { } } label: { Image(systemName: viewModel.relationship.notifying ? "bell.fill" : "bell") + }.accessibilityRepresentation { + Toggle("accessibility.tabs.profile.user-notifications.label", isOn: .constant(viewModel.relationship.notifying)) } Button { Task { @@ -116,6 +121,8 @@ public struct FollowButton: View { } } label: { Image(viewModel.relationship.showingReblogs ? "Rocket.Fill" : "Rocket") + }.accessibilityRepresentation { + Toggle("accessibility.tabs.profile.user-reblogs.label", isOn: .constant(viewModel.relationship.showingReblogs)) } } } diff --git a/Packages/Status/Sources/Status/Row/StatusRowView.swift b/Packages/Status/Sources/Status/Row/StatusRowView.swift index 2fa171a8..d75aad70 100644 --- a/Packages/Status/Sources/Status/Row/StatusRowView.swift +++ b/Packages/Status/Sources/Status/Row/StatusRowView.swift @@ -66,10 +66,6 @@ public struct StatusRowView: View { viewModel.navigateToDetail() } } - .accessibilityElement(children: viewModel.isFocused ? .contain : .combine) - .accessibilityAction { - viewModel.navigateToDetail() - } if viewModel.showActions, viewModel.isFocused || theme.statusActionsDisplay != .none, !isInCaptureMode { StatusRowActionsView(viewModel: viewModel) .padding(.top, 8) @@ -97,12 +93,14 @@ public struct StatusRowView: View { contextMenu } .swipeActions(edge: .trailing) { - if !isCompact { + // The actions associated with the swipes are exposed as custom accessibility actions and there is no way to remove them. + if !isCompact, UIAccessibility.isVoiceOverRunning == false { StatusRowSwipeView(viewModel: viewModel, mode: .trailing) } } .swipeActions(edge: .leading) { - if !isCompact { + // The actions associated with the swipes are exposed as custom accessibility actions and there is no way to remove them. + if !isCompact, UIAccessibility.isVoiceOverRunning == false { StatusRowSwipeView(viewModel: viewModel, mode: .leading) } } @@ -112,10 +110,12 @@ public struct StatusRowView: View { bottom: 12, trailing: .layoutPadding)) .accessibilityElement(children: viewModel.isFocused ? .contain : .combine) + .modifier(ConditionalAccessibilityLabelModifier(viewModel: viewModel, setLabel: viewModel.isFocused == false)) + .accessibilityAction { + viewModel.navigateToDetail() + } .accessibilityActions { - if UIAccessibility.isVoiceOverRunning { - accesibilityActions - } + accessibilityActions } .background { Color.clear @@ -153,7 +153,7 @@ public struct StatusRowView: View { } @ViewBuilder - private var accesibilityActions: some View { + private var accessibilityActions: some View { // Add the individual mentions as accessibility actions ForEach(viewModel.status.mentions, id: \.id) { mention in Button("@\(mention.username)") { @@ -170,8 +170,6 @@ public struct StatusRowView: View { Button("@\(viewModel.status.account.username)") { viewModel.routerPath.navigate(to: .accountDetail(id: viewModel.status.account.id)) } - - contextMenu } private func makeFilterView(filter: Filter) -> some View { @@ -203,3 +201,98 @@ public struct StatusRowView: View { .transition(.opacity) } } + +/// A ``ViewModifier`` that creates a suitable combined accessibility label for a `StatusRowView` that is not focused. +private struct ConditionalAccessibilityLabelModifier: ViewModifier { + + @ObservedObject var viewModel: StatusRowViewModel + let setLabel: Bool + + var hasSpoiler: Bool { + viewModel.displaySpoiler && viewModel.finalStatus.spoilerText.asRawText.isEmpty == false + } + + var isReply: Bool { + if let accountId = viewModel.status.inReplyToAccountId, viewModel.status.mentions.contains(where: { $0.id == accountId }) { + return true + } + return false + } + + var isBoost: Bool { + viewModel.status.reblog != nil + } + + func body(content: Content) -> some View { + if setLabel { + if hasSpoiler { + // Use the spoiler text in the label and place the full text as custom content + content + .accessibilityLabel(combinedAccessibilityLabel()) + .accessibilityCustomContent( + LocalizedStringKey("accessibility.status.spoiler-full-content"), + viewModel.finalStatus.content.asRawText, + importance: .high + ) + } else { + content + .accessibilityLabel(combinedAccessibilityLabel()) + } + } else { + content + } + } + + func combinedAccessibilityLabel() -> Text { + userNamePreamble() + + Text(hasSpoiler + ? viewModel.finalStatus.spoilerText.asRawText + : viewModel.finalStatus.content.asRawText + ) + Text(", ") + + Text(hasSpoiler + ? "status.editor.spoiler" + : "" + ) + Text(", ") + + imageAltText() + Text(", ") + + Text(viewModel.finalStatus.createdAt.relativeFormatted) + Text(", ") + + Text("status.summary.n-replies \(viewModel.finalStatus.repliesCount)") + Text(", ") + + Text("status.summary.n-boosts \(viewModel.finalStatus.reblogsCount)") + Text(", ") + + Text("status.summary.n-favorites \(viewModel.finalStatus.favouritesCount)") + } + + func userNamePreamble() -> Text { + switch (isReply, isBoost) { + case (true, false): + return Text("accessibility.status.a-replied-to-\(finalUserDisplayName())") + Text(" ") + case (_, true): + return Text("accessibility.status.a-boosted-b-\(userDisplayName())-\(finalUserDisplayName())") + Text(", ") + default: + return Text(userDisplayName()) + Text(", ") + } + } + + func userDisplayName() -> String { + viewModel.status.account.displayNameWithoutEmojis.count < 4 + ? viewModel.status.account.safeDisplayName + : viewModel.status.account.displayNameWithoutEmojis + } + + func finalUserDisplayName() -> String { + viewModel.finalStatus.account.displayNameWithoutEmojis.count < 4 + ? viewModel.finalStatus.account.safeDisplayName + : viewModel.finalStatus.account.displayNameWithoutEmojis + } + + func imageAltText() -> Text { + let descriptions = viewModel.finalStatus.mediaAttachments + .compactMap(\.description) + + if descriptions.count == 1 { + return Text("accessibility.image.alt-text-\(descriptions[0])") + } else if descriptions.count > 1 { + return Text("accessibility.image.alt-text-\(descriptions[0])") + Text(", ") + Text("accessibility.image.alt-text-more.label") + } else { + return Text("") + } + } +} diff --git a/Packages/Status/Sources/Status/Row/Subviews/StatusRowActionsView.swift b/Packages/Status/Sources/Status/Row/Subviews/StatusRowActionsView.swift index 5e3a7b95..44741394 100644 --- a/Packages/Status/Sources/Status/Row/Subviews/StatusRowActionsView.swift +++ b/Packages/Status/Sources/Status/Row/Subviews/StatusRowActionsView.swift @@ -50,6 +50,30 @@ struct StatusRowActionsView: View { } } + func accessibilityLabel(dataController: StatusDataController, privateBoost: Bool = false) -> LocalizedStringKey { + switch self { + case .respond: + return "status.action.reply" + case .boost: + if dataController.isReblogged { + return "status.action.unboost" + } + return privateBoost + ? "status.action.boost-to-followers" + : "status.action.boost" + case .favorite: + return dataController.isFavorited + ? "status.action.unfavorite" + : "status.action.favorite" + case .bookmark: + return dataController.isBookmarked + ? "status.action.unbookmark" + : "status.action.bookmark" + case .share: + return "status.action.share" + } + } + func count(dataController: StatusDataController, viewModel: StatusRowViewModel, theme: Theme) -> Int? { if theme.statusActionsDisplay == .discret && !viewModel.isFocused { return nil @@ -104,6 +128,8 @@ struct StatusRowActionsView: View { action.image(dataController: statusDataController) } .buttonStyle(.statusAction()) + .accessibilityElement(children: .combine) + .accessibilityLabel("status.action.share-link") } } else { actionButton(action: action) @@ -151,6 +177,8 @@ struct StatusRowActionsView: View { .monospacedDigit() } } + .accessibilityElement(children: .combine) + .accessibilityLabel(action.accessibilityLabel(dataController: statusDataController, privateBoost: privateBoost())) } private func handleAction(action: Action) { diff --git a/Packages/Status/Sources/Status/Row/Subviews/StatusRowMediaPreviewView.swift b/Packages/Status/Sources/Status/Row/Subviews/StatusRowMediaPreviewView.swift index 9e3916c8..cb4ac98f 100644 --- a/Packages/Status/Sources/Status/Row/Subviews/StatusRowMediaPreviewView.swift +++ b/Packages/Status/Sources/Status/Row/Subviews/StatusRowMediaPreviewView.swift @@ -90,6 +90,9 @@ public struct StatusRowMediaPreviewView: View { await quickLook.prepareFor(urls: attachments.compactMap { $0.url }, selectedURL: attachment.url!) } } + .accessibilityElement(children: .combine) + .modifier(ConditionalAccessibilityLabelAltTextModifier(attachment: attachment)) + .accessibilityAddTraits([.isButton, .isImage]) } else { if isCompact || theme.statusDisplayStyle == .compact { HStack { @@ -269,6 +272,9 @@ public struct StatusRowMediaPreviewView: View { await quickLook.prepareFor(urls: attachments.compactMap { $0.url }, selectedURL: attachment.url!) } } + .accessibilityElement(children: .combine) + .modifier(ConditionalAccessibilityLabelAltTextModifier(attachment: attachment)) + .accessibilityAddTraits([.isButton, .isImage]) } } @@ -328,3 +334,19 @@ public struct StatusRowMediaPreviewView: View { } } } + +/// A ``ViewModifier`` that creates a suitable accessibility label for an image that may or may not have alt text +private struct ConditionalAccessibilityLabelAltTextModifier: ViewModifier { + + let attachment: MediaAttachment + + func body(content: Content) -> some View { + if let altText = attachment.description { + content + .accessibilityLabel("accessibility.image.alt-text-\(altText)") + } else { + content + } + } +} + diff --git a/Packages/Status/Sources/Status/Row/Subviews/StatusRowReblogView.swift b/Packages/Status/Sources/Status/Row/Subviews/StatusRowReblogView.swift index 014326ff..ebe1ca2a 100644 --- a/Packages/Status/Sources/Status/Row/Subviews/StatusRowReblogView.swift +++ b/Packages/Status/Sources/Status/Row/Subviews/StatusRowReblogView.swift @@ -12,7 +12,7 @@ struct StatusRowReblogView: View { EmojiTextApp(.init(stringValue: viewModel.status.account.safeDisplayName), emojis: viewModel.status.account.emojis) Text("status.row.was-boosted") } - .accessibilityElement() + .accessibilityElement(children: .combine) .accessibilityLabel( Text("\(viewModel.status.account.safeDisplayName)") + Text(" ") diff --git a/Packages/Status/Sources/Status/Row/Subviews/StatusRowReplyView.swift b/Packages/Status/Sources/Status/Row/Subviews/StatusRowReplyView.swift index f1081281..757b5d37 100644 --- a/Packages/Status/Sources/Status/Row/Subviews/StatusRowReplyView.swift +++ b/Packages/Status/Sources/Status/Row/Subviews/StatusRowReplyView.swift @@ -13,6 +13,12 @@ struct StatusRowReplyView: View { Text("status.row.was-reply") Text(mention.username) } + .accessibilityElement(children: .combine) + .accessibilityLabel( + Text("status.row.was-reply") + + Text(" ") + + Text(mention.username) + ) .font(.scaledFootnote) .foregroundColor(.gray) .fontWeight(.semibold)