Bluesky app fork with some witchin' additions 💫

Revert changing "post" to "skeet"

Revert 5cdd5bba "Actually call them skeets"

Revert "They're still called skeets (DeerSettings fix)"

This reverts commit ab8068ccd75063609f1999fe6ce828500afb9415.

Revert "Actually replacing posts with skeets"

This reverts commit e57ba453d7ec593ee86f64cdac5dad15e65f8442.

just manually do the rest

+308 -299
+10 -10
src/Navigation.tsx
··· 218 name="ModerationInteractionSettings" 219 getComponent={() => ModerationInteractionSettings} 220 options={{ 221 - title: title(msg`Skeet Interaction Settings`), 222 requireAuth: true, 223 }} 224 /> ··· 277 name="ProfileSearch" 278 getComponent={() => ProfileSearchScreen} 279 options={({route}) => ({ 280 - title: title(msg`Search @${route.params.name}'s skeets`), 281 })} 282 /> 283 <Stack.Screen 284 name="PostThread" 285 getComponent={() => PostThreadScreen} 286 options={({route}) => ({ 287 - title: title(msg`Skeet by @${route.params.name}`), 288 })} 289 /> 290 <Stack.Screen 291 name="PostLikedBy" 292 getComponent={() => PostLikedByScreen} 293 options={({route}) => ({ 294 - title: title(msg`Skeet by @${route.params.name}`), 295 })} 296 /> 297 <Stack.Screen 298 name="PostRepostedBy" 299 getComponent={() => PostRepostedByScreen} 300 options={({route}) => ({ 301 - title: title(msg`Skeet by @${route.params.name}`), 302 })} 303 /> 304 <Stack.Screen 305 name="PostQuotes" 306 getComponent={() => PostQuotesScreen} 307 options={({route}) => ({ 308 - title: title(msg`Skeet by @${route.params.name}`), 309 })} 310 /> 311 <Stack.Screen ··· 496 name="RepostNotificationSettings" 497 getComponent={() => RepostNotificationSettingsScreen} 498 options={{ 499 - title: title(msg`Reskeet notifications`), 500 requireAuth: true, 501 }} 502 /> ··· 512 name="LikesOnRepostsNotificationSettings" 513 getComponent={() => LikesOnRepostsNotificationSettingsScreen} 514 options={{ 515 - title: title(msg`Likes of your reskeets notifications`), 516 requireAuth: true, 517 }} 518 /> ··· 520 name="RepostsOnRepostsNotificationSettings" 521 getComponent={() => RepostsOnRepostsNotificationSettingsScreen} 522 options={{ 523 - title: title(msg`Reskeets of your reskeets notifications`), 524 requireAuth: true, 525 }} 526 /> ··· 644 name="Bookmarks" 645 getComponent={() => BookmarksScreen} 646 options={{ 647 - title: title(msg`Saved Skeets`), 648 requireAuth: true, 649 }} 650 />
··· 218 name="ModerationInteractionSettings" 219 getComponent={() => ModerationInteractionSettings} 220 options={{ 221 + title: title(msg`Post Interaction Settings`), 222 requireAuth: true, 223 }} 224 /> ··· 277 name="ProfileSearch" 278 getComponent={() => ProfileSearchScreen} 279 options={({route}) => ({ 280 + title: title(msg`Search @${route.params.name}'s posts`), 281 })} 282 /> 283 <Stack.Screen 284 name="PostThread" 285 getComponent={() => PostThreadScreen} 286 options={({route}) => ({ 287 + title: title(msg`Post by @${route.params.name}`), 288 })} 289 /> 290 <Stack.Screen 291 name="PostLikedBy" 292 getComponent={() => PostLikedByScreen} 293 options={({route}) => ({ 294 + title: title(msg`Post by @${route.params.name}`), 295 })} 296 /> 297 <Stack.Screen 298 name="PostRepostedBy" 299 getComponent={() => PostRepostedByScreen} 300 options={({route}) => ({ 301 + title: title(msg`Post by @${route.params.name}`), 302 })} 303 /> 304 <Stack.Screen 305 name="PostQuotes" 306 getComponent={() => PostQuotesScreen} 307 options={({route}) => ({ 308 + title: title(msg`Post by @${route.params.name}`), 309 })} 310 /> 311 <Stack.Screen ··· 496 name="RepostNotificationSettings" 497 getComponent={() => RepostNotificationSettingsScreen} 498 options={{ 499 + title: title(msg`Repost notifications`), 500 requireAuth: true, 501 }} 502 /> ··· 512 name="LikesOnRepostsNotificationSettings" 513 getComponent={() => LikesOnRepostsNotificationSettingsScreen} 514 options={{ 515 + title: title(msg`Likes of your reposts notifications`), 516 requireAuth: true, 517 }} 518 /> ··· 520 name="RepostsOnRepostsNotificationSettings" 521 getComponent={() => RepostsOnRepostsNotificationSettingsScreen} 522 options={{ 523 + title: title(msg`Reposts of your reposts notifications`), 524 requireAuth: true, 525 }} 526 /> ··· 644 name="Bookmarks" 645 getComponent={() => BookmarksScreen} 646 options={{ 647 + title: title(msg`Saved Posts`), 648 requireAuth: true, 649 }} 650 />
+2 -2
src/components/Post/PostRepliedTo.tsx
··· 25 26 let label 27 if (isParentBlocked) { 28 - label = <Trans context="description">Replied to a blocked skeet</Trans> 29 } else if (isParentNotFound) { 30 - label = <Trans context="description">Replied to a skeet</Trans> 31 } else if (parentAuthor) { 32 const did = 33 typeof parentAuthor === 'string' ? parentAuthor : parentAuthor.did
··· 25 26 let label 27 if (isParentBlocked) { 28 + label = <Trans context="description">Replied to a blocked post</Trans> 29 } else if (isParentNotFound) { 30 + label = <Trans context="description">Replied to a post</Trans> 31 } else if (parentAuthor) { 32 const did = 33 typeof parentAuthor === 'string' ? parentAuthor : parentAuthor.did
+4 -4
src/components/PostControls/BookmarkButton.tsx
··· 64 <toast.Outer> 65 <toast.Icon /> 66 <toast.Text> 67 - <Trans>Skeet saved</Trans> 68 </toast.Text> 69 {!disableUndo && ( 70 <toast.Action ··· 104 <toast.Outer> 105 <toast.Icon icon={TrashIcon} /> 106 <toast.Text> 107 - <Trans>Removed from saved skeets</Trans> 108 </toast.Text> 109 {!disableUndo && ( 110 <toast.Action ··· 138 big={big} 139 label={ 140 isBookmarked 141 - ? _(msg`Remove from saved skeets`) 142 - : _(msg`Add to saved skeets`) 143 } 144 onPress={onHandlePress} 145 hitSlop={hitSlop}>
··· 64 <toast.Outer> 65 <toast.Icon /> 66 <toast.Text> 67 + <Trans>Post saved</Trans> 68 </toast.Text> 69 {!disableUndo && ( 70 <toast.Action ··· 104 <toast.Outer> 105 <toast.Icon icon={TrashIcon} /> 106 <toast.Text> 107 + <Trans>Removed from saved posts</Trans> 108 </toast.Text> 109 {!disableUndo && ( 110 <toast.Action ··· 138 big={big} 139 label={ 140 isBookmarked 141 + ? _(msg`Remove from saved posts`) 142 + : _(msg`Add to saved posts`) 143 } 144 onPress={onHandlePress} 145 hitSlop={hitSlop}>
+20 -20
src/components/PostControls/PostMenu/PostMenuItems.tsx
··· 205 const onDeletePost = () => { 206 deletePostMutate({uri: postUri}).then( 207 () => { 208 - Toast.show(_(msg({message: 'Skeet deleted', context: 'toast'}))) 209 210 const route = getCurrentRoute(navigation.getState()) 211 if (route.name === 'PostThread') { ··· 225 }, 226 e => { 227 logger.error('Failed to delete post', {message: e}) 228 - Toast.show(_(msg`Failed to delete skeet, please try again`), 'xmark') 229 }, 230 ) 231 } ··· 503 }) 504 Toast.show( 505 isDetach 506 - ? _(msg`Quote skeet was successfully detached`) 507 - : _(msg`Quote skeet was re-attached`), 508 ) 509 } catch (e: any) { 510 Toast.show( ··· 694 <> 695 <Prompt.Basic 696 control={redraftPromptControl} 697 - title={_(msg`Redraft this skeet?`)} 698 description={_( 699 - msg`This will delete the original skeet and open the composer with its content.`, 700 )} 701 onConfirm={onConfirmRedraft} 702 confirmButtonCta={_(msg`Redraft`)} ··· 782 testID="postDropdownCopyTextBtn" 783 label={_(msg`Copy post text`)} 784 onPress={onCopyPostText}> 785 - <Menu.ItemText>{_(msg`Copy skeet text`)}</Menu.ItemText> 786 <Menu.ItemIcon icon={ClipboardIcon} position="right" /> 787 </Menu.Item> 788 </> 789 ) : ( 790 <Menu.Item 791 testID="postDropdownSignInBtn" 792 - label={_(msg`Sign in to view skeet`)} 793 onPress={onSignIn}> 794 - <Menu.ItemText>{_(msg`Sign in to view skeet`)}</Menu.ItemText> 795 <Menu.ItemIcon icon={Eye} position="right" /> 796 </Menu.Item> 797 )} ··· 874 label={ 875 isReply 876 ? _(msg`Hide reply for me`) 877 - : _(msg`Hide skeet for me`) 878 } 879 onPress={() => hidePromptControl.open()}> 880 <Menu.ItemText> 881 {isReply 882 ? _(msg`Hide reply for me`) 883 - : _(msg`Hide skeet for me`)} 884 </Menu.ItemText> 885 <Menu.ItemIcon icon={EyeSlash} position="right" /> 886 </Menu.Item> ··· 982 983 <Menu.Item 984 testID="postDropdownReportBtn" 985 - label={_(msg`Report skeet`)} 986 onPress={() => reportDialogControl.open()}> 987 - <Menu.ItemText>{_(msg`Report skeet`)}</Menu.ItemText> 988 <Menu.ItemIcon icon={Warning} position="right" /> 989 </Menu.Item> 990 </> ··· 1015 testID="postDropdownDeleteBtn" 1016 label={_(msg`Delete post`)} 1017 onPress={() => deletePromptControl.open()}> 1018 - <Menu.ItemText>{_(msg`Delete skeet`)}</Menu.ItemText> 1019 <Menu.ItemIcon icon={Trash} position="right" /> 1020 </Menu.Item> 1021 </> ··· 1027 1028 <Prompt.Basic 1029 control={deletePromptControl} 1030 - title={_(msg`Delete this skeet?`)} 1031 description={_( 1032 - msg`If you remove this skeet, you won't be able to recover it.`, 1033 )} 1034 onConfirm={onDeletePost} 1035 confirmButtonCta={_(msg`Delete`)} ··· 1038 1039 <Prompt.Basic 1040 control={hidePromptControl} 1041 - title={isReply ? _(msg`Hide this reply?`) : _(msg`Hide this skeet?`)} 1042 description={_( 1043 - msg`This skeet will be hidden from feeds and threads. This cannot be undone.`, 1044 )} 1045 onConfirm={onHidePost} 1046 confirmButtonCta={_(msg`Hide`)} ··· 1063 1064 <Prompt.Basic 1065 control={quotePostDetachConfirmControl} 1066 - title={_(msg`Detach quote skeet?`)} 1067 description={_( 1068 - msg`This will remove your skeet from this quote skeet for all users, and replace it with a placeholder.`, 1069 )} 1070 onConfirm={onToggleQuotePostAttachment} 1071 confirmButtonCta={_(msg`Yes, detach`)}
··· 205 const onDeletePost = () => { 206 deletePostMutate({uri: postUri}).then( 207 () => { 208 + Toast.show(_(msg({message: 'Post deleted', context: 'toast'}))) 209 210 const route = getCurrentRoute(navigation.getState()) 211 if (route.name === 'PostThread') { ··· 225 }, 226 e => { 227 logger.error('Failed to delete post', {message: e}) 228 + Toast.show(_(msg`Failed to delete post, please try again`), 'xmark') 229 }, 230 ) 231 } ··· 503 }) 504 Toast.show( 505 isDetach 506 + ? _(msg`Quote post was successfully detached`) 507 + : _(msg`Quote post was re-attached`), 508 ) 509 } catch (e: any) { 510 Toast.show( ··· 694 <> 695 <Prompt.Basic 696 control={redraftPromptControl} 697 + title={_(msg`Redraft this post?`)} 698 description={_( 699 + msg`This will delete the original post and open the composer with its content.`, 700 )} 701 onConfirm={onConfirmRedraft} 702 confirmButtonCta={_(msg`Redraft`)} ··· 782 testID="postDropdownCopyTextBtn" 783 label={_(msg`Copy post text`)} 784 onPress={onCopyPostText}> 785 + <Menu.ItemText>{_(msg`Copy post text`)}</Menu.ItemText> 786 <Menu.ItemIcon icon={ClipboardIcon} position="right" /> 787 </Menu.Item> 788 </> 789 ) : ( 790 <Menu.Item 791 testID="postDropdownSignInBtn" 792 + label={_(msg`Sign in to view post`)} 793 onPress={onSignIn}> 794 + <Menu.ItemText>{_(msg`Sign in to view post`)}</Menu.ItemText> 795 <Menu.ItemIcon icon={Eye} position="right" /> 796 </Menu.Item> 797 )} ··· 874 label={ 875 isReply 876 ? _(msg`Hide reply for me`) 877 + : _(msg`Hide post for me`) 878 } 879 onPress={() => hidePromptControl.open()}> 880 <Menu.ItemText> 881 {isReply 882 ? _(msg`Hide reply for me`) 883 + : _(msg`Hide post for me`)} 884 </Menu.ItemText> 885 <Menu.ItemIcon icon={EyeSlash} position="right" /> 886 </Menu.Item> ··· 982 983 <Menu.Item 984 testID="postDropdownReportBtn" 985 + label={_(msg`Report post`)} 986 onPress={() => reportDialogControl.open()}> 987 + <Menu.ItemText>{_(msg`Report post`)}</Menu.ItemText> 988 <Menu.ItemIcon icon={Warning} position="right" /> 989 </Menu.Item> 990 </> ··· 1015 testID="postDropdownDeleteBtn" 1016 label={_(msg`Delete post`)} 1017 onPress={() => deletePromptControl.open()}> 1018 + <Menu.ItemText>{_(msg`Delete post`)}</Menu.ItemText> 1019 <Menu.ItemIcon icon={Trash} position="right" /> 1020 </Menu.Item> 1021 </> ··· 1027 1028 <Prompt.Basic 1029 control={deletePromptControl} 1030 + title={_(msg`Delete this post?`)} 1031 description={_( 1032 + msg`If you remove this post, you won't be able to recover it.`, 1033 )} 1034 onConfirm={onDeletePost} 1035 confirmButtonCta={_(msg`Delete`)} ··· 1038 1039 <Prompt.Basic 1040 control={hidePromptControl} 1041 + title={isReply ? _(msg`Hide this reply?`) : _(msg`Hide this post?`)} 1042 description={_( 1043 + msg`This post will be hidden from feeds and threads. This cannot be undone.`, 1044 )} 1045 onConfirm={onHidePost} 1046 confirmButtonCta={_(msg`Hide`)} ··· 1063 1064 <Prompt.Basic 1065 control={quotePostDetachConfirmControl} 1066 + title={_(msg`Detach quote post?`)} 1067 description={_( 1068 + msg`This will remove your post from this quote post for all users, and replace it with a placeholder.`, 1069 )} 1070 onConfirm={onToggleQuotePostAttachment} 1071 confirmButtonCta={_(msg`Yes, detach`)}
+1 -1
src/components/PostControls/PostMenu/index.tsx
··· 63 return ( 64 <EventStopper onKeyDown={false}> 65 <Menu.Root control={lazyMenuControl}> 66 - <Menu.Trigger label={_(msg`Open skeet options menu`)}> 67 {({props}) => { 68 return ( 69 <PostControlButton
··· 63 return ( 64 <EventStopper onKeyDown={false}> 65 <Menu.Root control={lazyMenuControl}> 66 + <Menu.Trigger label={_(msg`Open post options menu`)}> 67 {({props}) => { 68 return ( 69 <PostControlButton
+10 -10
src/components/PostControls/RepostButton.tsx
··· 142 const onPressClose = useCallback(() => control.close(), [control]) 143 144 return ( 145 - <Dialog.ScrollableInner label={_(msg`Reskeet or quote skeet`)}> 146 <View style={a.gap_xl}> 147 <View style={a.gap_xs}> 148 <Button 149 style={[a.justify_start, a.px_md, a.gap_sm]} 150 label={ 151 isReposted 152 - ? _(msg`Remove reskeet`) 153 - : _(msg({message: `Reskeet`, context: 'action'})) 154 } 155 onPress={onPressRepost} 156 size="large" ··· 159 <RepostIcon size="lg" fill={t.palette.primary_500} /> 160 <Text style={[a.font_semi_bold, a.text_xl]}> 161 {isReposted ? ( 162 - <Trans>Remove reskeet</Trans> 163 ) : ( 164 - <Trans context="action">Reskeet</Trans> 165 )} 166 </Text> 167 </Button> ··· 171 style={[a.justify_start, a.px_md, a.gap_sm]} 172 label={ 173 embeddingDisabled 174 - ? _(msg`Quote skeets disabled`) 175 - : _(msg`Quote skeet`) 176 } 177 onPress={onPressQuote} 178 size="large" ··· 193 embeddingDisabled && t.atoms.text_contrast_low, 194 ]}> 195 {embeddingDisabled ? ( 196 - <Trans>Quote skeets disabled</Trans> 197 ) : ( 198 - <Trans>Quote skeet</Trans> 199 )} 200 </Text> 201 </Button> 202 </View> 203 <Button 204 - label={_(msg`Cancel quote skeet`)} 205 onPress={onPressClose} 206 size="large" 207 color="secondary">
··· 142 const onPressClose = useCallback(() => control.close(), [control]) 143 144 return ( 145 + <Dialog.ScrollableInner label={_(msg`Repost or quote post`)}> 146 <View style={a.gap_xl}> 147 <View style={a.gap_xs}> 148 <Button 149 style={[a.justify_start, a.px_md, a.gap_sm]} 150 label={ 151 isReposted 152 + ? _(msg`Remove repost`) 153 + : _(msg({message: `Repost`, context: 'action'})) 154 } 155 onPress={onPressRepost} 156 size="large" ··· 159 <RepostIcon size="lg" fill={t.palette.primary_500} /> 160 <Text style={[a.font_semi_bold, a.text_xl]}> 161 {isReposted ? ( 162 + <Trans>Remove repost</Trans> 163 ) : ( 164 + <Trans context="action">Repost</Trans> 165 )} 166 </Text> 167 </Button> ··· 171 style={[a.justify_start, a.px_md, a.gap_sm]} 172 label={ 173 embeddingDisabled 174 + ? _(msg`Quote posts disabled`) 175 + : _(msg`Quote post`) 176 } 177 onPress={onPressQuote} 178 size="large" ··· 193 embeddingDisabled && t.atoms.text_contrast_low, 194 ]}> 195 {embeddingDisabled ? ( 196 + <Trans>Quote posts disabled</Trans> 197 ) : ( 198 + <Trans>Quote post</Trans> 199 )} 200 </Text> 201 </Button> 202 </View> 203 <Button 204 + label={_(msg`Cancel quote post`)} 205 onPress={onPressClose} 206 size="large" 207 color="secondary">
+9 -9
src/components/PostControls/RepostButton.web.tsx
··· 65 <Menu.Item 66 label={ 67 isReposted 68 - ? _(msg`Undo reskeet`) 69 - : _(msg({message: `Reskeet`, context: `action`})) 70 } 71 testID="repostDropdownRepostBtn" 72 onPress={onRepost}> 73 <Menu.ItemText> 74 {isReposted 75 - ? _(msg`Undo reskeet`) 76 - : _(msg({message: `Reskeet`, context: `action`}))} 77 </Menu.ItemText> 78 <Menu.ItemIcon icon={Repost} position="right" /> 79 </Menu.Item> ··· 81 disabled={embeddingDisabled} 82 label={ 83 embeddingDisabled 84 - ? _(msg`Quote skeets disabled`) 85 - : _(msg`Quote skeet`) 86 } 87 testID="repostDropdownQuoteBtn" 88 onPress={onQuote}> 89 <Menu.ItemText> 90 {embeddingDisabled 91 - ? _(msg`Quote skeets disabled`) 92 - : _(msg`Quote skeet`)} 93 </Menu.ItemText> 94 <Menu.ItemIcon icon={Quote} position="right" /> 95 </Menu.Item> ··· 101 onPress={() => requireAuth(() => {})} 102 active={isReposted} 103 activeColor={t.palette.positive_500} 104 - label={_(msg`Reskeet or quote skeet`)} 105 big={big}> 106 <PostControlButtonIcon icon={Repost} /> 107 {typeof repostCount !== 'undefined' && repostCount > 0 && (
··· 65 <Menu.Item 66 label={ 67 isReposted 68 + ? _(msg`Undo repost`) 69 + : _(msg({message: `Repost`, context: `action`})) 70 } 71 testID="repostDropdownRepostBtn" 72 onPress={onRepost}> 73 <Menu.ItemText> 74 {isReposted 75 + ? _(msg`Undo repost`) 76 + : _(msg({message: `Repost`, context: `action`}))} 77 </Menu.ItemText> 78 <Menu.ItemIcon icon={Repost} position="right" /> 79 </Menu.Item> ··· 81 disabled={embeddingDisabled} 82 label={ 83 embeddingDisabled 84 + ? _(msg`Quote posts disabled`) 85 + : _(msg`Quote post`) 86 } 87 testID="repostDropdownQuoteBtn" 88 onPress={onQuote}> 89 <Menu.ItemText> 90 {embeddingDisabled 91 + ? _(msg`Quote posts disabled`) 92 + : _(msg`Quote post`)} 93 </Menu.ItemText> 94 <Menu.ItemIcon icon={Quote} position="right" /> 95 </Menu.Item> ··· 101 onPress={() => requireAuth(() => {})} 102 active={isReposted} 103 activeColor={t.palette.positive_500} 104 + label={_(msg`Repost or quote post`)} 105 big={big}> 106 <PostControlButtonIcon icon={Repost} /> 107 {typeof repostCount !== 'undefined' && repostCount > 0 && (
+1 -1
src/components/PostControls/ShareMenu/RecentChats.tsx
··· 120 return ( 121 <Button 122 onPress={onPress} 123 - label={_(msg`Send skeet to ${name}`)} 124 style={[ 125 a.flex_col, 126 {width: WIDTH},
··· 120 return ( 121 <Button 122 onPress={onPress} 123 + label={_(msg`Send post to ${name}`)} 124 style={[ 125 a.flex_col, 126 {width: WIDTH},
+5 -5
src/components/PostControls/ShareMenu/ShareMenuItems.tsx
··· 161 label={_(msg`Open original post`)} 162 onPress={onOpenOriginalPost}> 163 <Menu.ItemText> 164 - <Trans>Open original skeet</Trans> 165 </Menu.ItemText> 166 <Menu.ItemIcon icon={ExternalIcon} position="right" /> 167 </Menu.Item> ··· 172 label={_(msg`Open post in PDSls`)} 173 onPress={onOpenPostInPdsls}> 174 <Menu.ItemText> 175 - <Trans>Open skeet in PDSls</Trans> 176 </Menu.ItemText> 177 <Menu.ItemIcon icon={ExternalIcon} position="right" /> 178 </Menu.Item> ··· 205 label={_(msg`Copy link to post`)} 206 onPress={onCopyLink}> 207 <Menu.ItemText> 208 - <Trans>Copy link to skeet</Trans> 209 </Menu.ItemText> 210 <Menu.ItemIcon icon={ChainLinkIcon} position="right" /> 211 </Menu.Item> ··· 227 <Admonition 228 type="warning" 229 style={[a.flex_1, a.border_0, a.p_0, a.bg_transparent]}> 230 - <Trans>This skeet is only visible to logged-in users.</Trans> 231 </Admonition> 232 </Menu.ContainerItem> 233 </Menu.Group> ··· 240 label={_(msg`Share post at:// URI`)} 241 onPress={onShareATURI}> 242 <Menu.ItemText> 243 - <Trans>Share skeet at:// URI</Trans> 244 </Menu.ItemText> 245 <Menu.ItemIcon icon={ClipboardIcon} position="right" /> 246 </Menu.Item>
··· 161 label={_(msg`Open original post`)} 162 onPress={onOpenOriginalPost}> 163 <Menu.ItemText> 164 + <Trans>Open original post</Trans> 165 </Menu.ItemText> 166 <Menu.ItemIcon icon={ExternalIcon} position="right" /> 167 </Menu.Item> ··· 172 label={_(msg`Open post in PDSls`)} 173 onPress={onOpenPostInPdsls}> 174 <Menu.ItemText> 175 + <Trans>Open post in PDSls</Trans> 176 </Menu.ItemText> 177 <Menu.ItemIcon icon={ExternalIcon} position="right" /> 178 </Menu.Item> ··· 205 label={_(msg`Copy link to post`)} 206 onPress={onCopyLink}> 207 <Menu.ItemText> 208 + <Trans>Copy link to post</Trans> 209 </Menu.ItemText> 210 <Menu.ItemIcon icon={ChainLinkIcon} position="right" /> 211 </Menu.Item> ··· 227 <Admonition 228 type="warning" 229 style={[a.flex_1, a.border_0, a.p_0, a.bg_transparent]}> 230 + <Trans>This post is only visible to logged-in users.</Trans> 231 </Admonition> 232 </Menu.ContainerItem> 233 </Menu.Group> ··· 240 label={_(msg`Share post at:// URI`)} 241 onPress={onShareATURI}> 242 <Menu.ItemText> 243 + <Trans>Share post at:// URI</Trans> 244 </Menu.ItemText> 245 <Menu.ItemIcon icon={ClipboardIcon} position="right" /> 246 </Menu.Item>
+6 -8
src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx
··· 115 label={_(msg`Copy link to post`)} 116 onPress={onCopyLink}> 117 <Menu.ItemText> 118 - <Trans>Copy link to skeet</Trans> 119 </Menu.ItemText> 120 <Menu.ItemIcon icon={ChainLinkIcon} position="right" /> 121 </Menu.Item> ··· 142 label={_(msg`Open original post`)} 143 onPress={onOpenOriginalPost}> 144 <Menu.ItemText> 145 - <Trans>Open original skeet</Trans> 146 </Menu.ItemText> 147 <Menu.ItemIcon icon={ExternalIcon} position="right" /> 148 </Menu.Item> ··· 154 label={_(msg`Open post in PDSls`)} 155 onPress={onOpenPostInPdsls}> 156 <Menu.ItemText> 157 - <Trans>Open skeet in PDSls</Trans> 158 </Menu.ItemText> 159 <Menu.ItemIcon icon={ExternalIcon} position="right" /> 160 </Menu.Item> ··· 183 ax.metric('share:press:embed', {}) 184 embedPostControl.open() 185 }}> 186 - <Menu.ItemText>{_(msg`Embed skeet`)}</Menu.ItemText> 187 <Menu.ItemIcon icon={CodeBracketsIcon} position="right" /> 188 </Menu.Item> 189 )} ··· 193 {hasSession && <Menu.Divider />} 194 {copyLinkItem} 195 <Menu.LabelText style={{maxWidth: 220}}> 196 - <Trans> 197 - Note: This skeet is only visible to logged-in users. 198 - </Trans> 199 </Menu.LabelText> 200 </> 201 )} ··· 208 label={_(msg`Copy post at:// URI`)} 209 onPress={onShareATURI}> 210 <Menu.ItemText> 211 - <Trans>Copy skeet at:// URI</Trans> 212 </Menu.ItemText> 213 <Menu.ItemIcon icon={ClipboardIcon} position="right" /> 214 </Menu.Item>
··· 115 label={_(msg`Copy link to post`)} 116 onPress={onCopyLink}> 117 <Menu.ItemText> 118 + <Trans>Copy link to post</Trans> 119 </Menu.ItemText> 120 <Menu.ItemIcon icon={ChainLinkIcon} position="right" /> 121 </Menu.Item> ··· 142 label={_(msg`Open original post`)} 143 onPress={onOpenOriginalPost}> 144 <Menu.ItemText> 145 + <Trans>Open original post</Trans> 146 </Menu.ItemText> 147 <Menu.ItemIcon icon={ExternalIcon} position="right" /> 148 </Menu.Item> ··· 154 label={_(msg`Open post in PDSls`)} 155 onPress={onOpenPostInPdsls}> 156 <Menu.ItemText> 157 + <Trans>Open post in PDSls</Trans> 158 </Menu.ItemText> 159 <Menu.ItemIcon icon={ExternalIcon} position="right" /> 160 </Menu.Item> ··· 183 ax.metric('share:press:embed', {}) 184 embedPostControl.open() 185 }}> 186 + <Menu.ItemText>{_(msg`Embed post`)}</Menu.ItemText> 187 <Menu.ItemIcon icon={CodeBracketsIcon} position="right" /> 188 </Menu.Item> 189 )} ··· 193 {hasSession && <Menu.Divider />} 194 {copyLinkItem} 195 <Menu.LabelText style={{maxWidth: 220}}> 196 + <Trans>Note: This post is only visible to logged-in users.</Trans> 197 </Menu.LabelText> 198 </> 199 )} ··· 206 label={_(msg`Copy post at:// URI`)} 207 onPress={onShareATURI}> 208 <Menu.ItemText> 209 + <Trans>Copy post at:// URI</Trans> 210 </Menu.ItemText> 211 <Menu.ItemIcon icon={ClipboardIcon} position="right" /> 212 </Menu.Item>
+1 -1
src/components/ProgressGuide/List.tsx
··· 93 <ProgressGuideTask 94 current={guide.numLikes + 1} 95 total={10 + 1} 96 - title={_(msg`Like 10 skeets`)} 97 subtitle={_(msg`Teach our algorithm what you like`)} 98 /> 99 <ProgressGuideTask
··· 93 <ProgressGuideTask 94 current={guide.numLikes + 1} 95 total={10 + 1} 96 + title={_(msg`Like 10 posts`)} 97 subtitle={_(msg`Teach our algorithm what you like`)} 98 /> 99 <ProgressGuideTask
+2 -2
src/components/TrendingTopics.tsx
··· 180 if (link.startsWith('/search')) { 181 return { 182 type: 'topic', 183 - label: _(msg`Browse skeets about ${displayName}`), 184 displayName, 185 uri: undefined, 186 url: link, ··· 188 } else if (link.startsWith('/hashtag')) { 189 return { 190 type: 'tag', 191 - label: _(msg`Browse skeets tagged with ${displayName}`), 192 displayName, 193 // displayName: displayName.replace(/^#/, ''), 194 uri: undefined,
··· 180 if (link.startsWith('/search')) { 181 return { 182 type: 'topic', 183 + label: _(msg`Browse posts about ${displayName}`), 184 displayName, 185 uri: undefined, 186 url: link, ··· 188 } else if (link.startsWith('/hashtag')) { 189 return { 190 type: 'tag', 191 + label: _(msg`Browse posts tagged with ${displayName}`), 192 displayName, 193 // displayName: displayName.replace(/^#/, ''), 194 uri: undefined,
+5 -5
src/components/WhoCanReply.tsx
··· 222 style={web({maxWidth: 400})}> 223 <View style={[a.gap_sm]}> 224 <Text style={[a.font_semi_bold, a.text_xl, a.pb_sm]}> 225 - <Trans>Who can interact with this skeet?</Trans> 226 </Text> 227 <Rules 228 post={post} ··· 271 ]}> 272 {settings.length === 0 ? ( 273 <Trans> 274 - This skeet has an unknown type of threadgate on it. Your app may be 275 out of date. 276 </Trans> 277 ) : settings[0].type === 'everybody' ? ( 278 - <Trans>Everybody can reply to this skeet.</Trans> 279 ) : settings[0].type === 'nobody' ? ( 280 - <Trans>Replies to this skeet are disabled.</Trans> 281 ) : ( 282 <Trans> 283 Only{' '} ··· 299 a.flex_wrap, 300 t.atoms.text_contrast_medium, 301 ]}> 302 - <Trans>No one but the author can quote this skeet.</Trans> 303 </Text> 304 )} 305 </>
··· 222 style={web({maxWidth: 400})}> 223 <View style={[a.gap_sm]}> 224 <Text style={[a.font_semi_bold, a.text_xl, a.pb_sm]}> 225 + <Trans>Who can interact with this post?</Trans> 226 </Text> 227 <Rules 228 post={post} ··· 271 ]}> 272 {settings.length === 0 ? ( 273 <Trans> 274 + This post has an unknown type of threadgate on it. Your app may be 275 out of date. 276 </Trans> 277 ) : settings[0].type === 'everybody' ? ( 278 + <Trans>Everybody can reply to this post.</Trans> 279 ) : settings[0].type === 'nobody' ? ( 280 + <Trans>Replies to this post are disabled.</Trans> 281 ) : ( 282 <Trans> 283 Only{' '} ··· 299 a.flex_wrap, 300 t.atoms.text_contrast_medium, 301 ]}> 302 + <Trans>No one but the author can quote this post.</Trans> 303 </Text> 304 )} 305 </>
+5 -5
src/components/activity-notifications/SubscribeProfileButton.tsx
··· 57 const wrappedOnPress = requireEmailVerification(onPress, { 58 instructions: [ 59 <Trans key="message"> 60 - Before you can get notifications for {name}'s skeets, you must first 61 verify your email. 62 </Trans>, 63 ], ··· 84 accessibilityRole="button" 85 testID="dmBtn" 86 size="small" 87 - color={tooltipVisible ? 'primary_subtle' : 'secondary'} 88 - shape={enableSquareButtons ? 'square' : 'round'} 89 - label={_(msg`Get notified when ${name} skeets`)} 90 onPress={wrappedOnPress}> 91 <ButtonIcon icon={Icon} size="md" /> 92 </Button> 93 </Tooltip.Target> 94 <Tooltip.TextBubble> 95 <Text> 96 - <Trans>Get notified about new skeets</Trans> 97 </Text> 98 </Tooltip.TextBubble> 99 </Tooltip.Outer>
··· 57 const wrappedOnPress = requireEmailVerification(onPress, { 58 instructions: [ 59 <Trans key="message"> 60 + Before you can get notifications for {name}'s posts, you must first 61 verify your email. 62 </Trans>, 63 ], ··· 84 accessibilityRole="button" 85 testID="dmBtn" 86 size="small" 87 + color="secondary" 88 + shape="round" 89 + label={_(msg`Get notified when ${name} posts`)} 90 onPress={wrappedOnPress}> 91 <ButtonIcon icon={Icon} size="md" /> 92 </Button> 93 </Tooltip.Target> 94 <Tooltip.TextBubble> 95 <Text> 96 + <Trans>Get notified about new posts</Trans> 97 </Text> 98 </Tooltip.TextBubble> 99 </Tooltip.Outer>
+3 -3
src/components/activity-notifications/SubscribeProfileDialog.tsx
··· 216 return ( 217 <Dialog.ScrollableInner 218 style={web({maxWidth: 400})} 219 - label={_(msg`Get notified of new skeets from ${name}`)}> 220 <View style={[a.gap_lg]}> 221 <View style={[a.gap_xs]}> 222 <Text style={[a.font_bold, a.text_2xl]}> ··· 247 onChange={onChange}> 248 <View style={[a.gap_sm]}> 249 <Toggle.Item 250 - label={_(msg`Skeets`)} 251 name="post" 252 style={[ 253 a.flex_1, ··· 259 ]}> 260 <Toggle.LabelText 261 style={[t.atoms.text, a.font_normal, a.text_md, a.flex_1]}> 262 - <Trans>Skeets</Trans> 263 </Toggle.LabelText> 264 <Toggle.Switch /> 265 </Toggle.Item>
··· 216 return ( 217 <Dialog.ScrollableInner 218 style={web({maxWidth: 400})} 219 + label={_(msg`Get notified of new posts from ${name}`)}> 220 <View style={[a.gap_lg]}> 221 <View style={[a.gap_xs]}> 222 <Text style={[a.font_bold, a.text_2xl]}> ··· 247 onChange={onChange}> 248 <View style={[a.gap_sm]}> 249 <Toggle.Item 250 + label={_(msg`Posts`)} 251 name="post" 252 style={[ 253 a.flex_1, ··· 259 ]}> 260 <Toggle.LabelText 261 style={[t.atoms.text, a.font_normal, a.text_md, a.flex_1]}> 262 + <Trans>Posts</Trans> 263 </Toggle.LabelText> 264 <Toggle.Switch /> 265 </Toggle.Item>
+2 -2
src/components/dialogs/Embed.tsx
··· 105 <View style={[a.gap_lg]}> 106 <View style={[a.gap_sm]}> 107 <Text style={[a.text_2xl, a.font_bold]}> 108 - <Trans>Embed skeet</Trans> 109 </Text> 110 <Text 111 style={[a.text_md, t.atoms.text_contrast_medium, a.leading_normal]}> 112 <Trans> 113 - Embed this skeet in your website. Simply copy the following snippet 114 and paste it into the HTML code of your website. 115 </Trans> 116 </Text>
··· 105 <View style={[a.gap_lg]}> 106 <View style={[a.gap_sm]}> 107 <Text style={[a.text_2xl, a.font_bold]}> 108 + <Trans>Embed post</Trans> 109 </Text> 110 <Text 111 style={[a.text_md, t.atoms.text_contrast_medium, a.leading_normal]}> 112 <Trans> 113 + Embed this post in your website. Simply copy the following snippet 114 and paste it into the HTML code of your website. 115 </Trans> 116 </Text>
+4 -4
src/components/dialogs/MutedWords.tsx
··· 119 </Text> 120 <Text style={[a.pb_lg, a.leading_snug, t.atoms.text_contrast_medium]}> 121 <Trans> 122 - Skeets can be muted based on their text, their tags, or both. We 123 - recommend avoiding common words that appear in many skeets, since it 124 - can result in no skeets being shown. 125 </Trans> 126 </Text> 127 ··· 261 262 <View style={[a.flex_row, a.align_center, a.gap_sm, a.flex_wrap]}> 263 <Toggle.Item 264 - label={_(msg`Mute this word in skeet text and tags`)} 265 name="content" 266 style={[a.flex_1]}> 267 <TargetToggle>
··· 119 </Text> 120 <Text style={[a.pb_lg, a.leading_snug, t.atoms.text_contrast_medium]}> 121 <Trans> 122 + Posts can be muted based on their text, their tags, or both. We 123 + recommend avoiding common words that appear in many posts, since it 124 + can result in no posts being shown. 125 </Trans> 126 </Text> 127 ··· 261 262 <View style={[a.flex_row, a.align_center, a.gap_sm, a.flex_wrap]}> 263 <Toggle.Item 264 + label={_(msg`Mute this word in post text and tags`)} 265 name="content" 266 style={[a.flex_1]}> 267 <TargetToggle>
+4 -4
src/components/dialogs/PostInteractionSettingsDialog.tsx
··· 260 261 return ( 262 <Dialog.ScrollableInner 263 - label={_(msg`Edit skeet interaction settings`)} 264 style={[web({maxWidth: 400}), a.w_full]}> 265 {isLoading ? ( 266 <View ··· 273 ]}> 274 <Loader size="xl" /> 275 <Text style={[a.italic, a.text_center]}> 276 - <Trans>Loading skeet interaction settings...</Trans> 277 </Text> 278 </View> 279 ) : ( ··· 630 {({selected}) => ( 631 <Toggle.Panel active={selected}> 632 <Toggle.PanelText icon={QuoteIcon}> 633 - <Trans>Allow quote skeets</Trans> 634 </Toggle.PanelText> 635 <Toggle.Switch /> 636 </Toggle.Panel> ··· 679 return ( 680 <View style={[a.pb_lg]}> 681 <Text style={[a.text_2xl, a.font_bold]}> 682 - <Trans>Skeet interaction settings</Trans> 683 </Text> 684 </View> 685 )
··· 260 261 return ( 262 <Dialog.ScrollableInner 263 + label={_(msg`Edit post interaction settings`)} 264 style={[web({maxWidth: 400}), a.w_full]}> 265 {isLoading ? ( 266 <View ··· 273 ]}> 274 <Loader size="xl" /> 275 <Text style={[a.italic, a.text_center]}> 276 + <Trans>Loading post interaction settings...</Trans> 277 </Text> 278 </View> 279 ) : ( ··· 630 {({selected}) => ( 631 <Toggle.Panel active={selected}> 632 <Toggle.PanelText icon={QuoteIcon}> 633 + <Trans>Allow quote posts</Trans> 634 </Toggle.PanelText> 635 <Toggle.Switch /> 636 </Toggle.Panel> ··· 679 return ( 680 <View style={[a.pb_lg]}> 681 <Text style={[a.text_2xl, a.font_bold]}> 682 + <Trans>Post interaction settings</Trans> 683 </Text> 684 </View> 685 )
+2 -2
src/components/dialogs/lists/CreateOrEditListDialog.tsx
··· 354 : _(msg`Create moderation list`) 355 356 const displayNamePlaceholder = isCurateList 357 - ? _(msg`e.g. Great Skeeters`) 358 : _(msg`e.g. Spammers`) 359 360 const descriptionPlaceholder = isCurateList 361 - ? _(msg`e.g. The skeeters who never miss.`) 362 : _(msg`e.g. Users that repeatedly reply with ads.`) 363 364 return (
··· 354 : _(msg`Create moderation list`) 355 356 const displayNamePlaceholder = isCurateList 357 + ? _(msg`e.g. Great Posters`) 358 : _(msg`e.g. Spammers`) 359 360 const descriptionPlaceholder = isCurateList 361 + ? _(msg`e.g. The posters who never miss.`) 362 : _(msg`e.g. Users that repeatedly reply with ads.`) 363 364 return (
+3 -3
src/components/dialogs/nuxs/BookmarksAnnouncement.tsx
··· 34 <Dialog.Handle /> 35 36 <Dialog.ScrollableInner 37 - label={_(msg`Introducing saved skeets AKA bookmarks`)} 38 style={[web({maxWidth: 440})]} 39 contentContainerStyle={[ 40 { ··· 140 maxWidth: 300, 141 }, 142 ]}> 143 - <Trans>Saved Skeets</Trans> 144 </Text> 145 <Text 146 style={[ ··· 152 }, 153 ]}> 154 <Trans> 155 - Finally! Keep track of skeets that matter to you. Save them to 156 revisit anytime. 157 </Trans> 158 </Text>
··· 34 <Dialog.Handle /> 35 36 <Dialog.ScrollableInner 37 + label={_(msg`Introducing saved posts AKA bookmarks`)} 38 style={[web({maxWidth: 440})]} 39 contentContainerStyle={[ 40 { ··· 140 maxWidth: 300, 141 }, 142 ]}> 143 + <Trans>Saved Posts</Trans> 144 </Text> 145 <Text 146 style={[ ··· 152 }, 153 ]}> 154 <Trans> 155 + Finally! Keep track of posts that matter to you. Save them to 156 revisit anytime. 157 </Trans> 158 </Text>
+3 -3
src/components/dms/ChatEmptyPill.tsx
··· 33 34 const prompts = React.useMemo(() => { 35 return [ 36 - _(msg`Say hi!`), 37 _(msg`Share your favorite feed!`), 38 - _(msg`Say something funny!`), 39 _(msg`Share a fun fact!`), 40 _(msg`Share a cool story!`), 41 _(msg`Send a neat website!`), 42 - _(msg`Clip 🐴 clop 🐴 #horsefacts`), 43 ] 44 }, [_]) 45
··· 33 34 const prompts = React.useMemo(() => { 35 return [ 36 + _(msg`Say hello!`), 37 _(msg`Share your favorite feed!`), 38 + _(msg`Tell a joke!`), 39 _(msg`Share a fun fact!`), 40 _(msg`Share a cool story!`), 41 _(msg`Send a neat website!`), 42 + _(msg`Clip 🐴 clop 🐴`), 43 ] 44 }, [_]) 45
+1 -1
src/components/dms/dialogs/ShareViaChatDialog.tsx
··· 60 61 return ( 62 <SearchablePeopleList 63 - title={_(msg`Send skeet to...`)} 64 onSelectChat={onCreateChat} 65 showRecentConvos 66 sortByMessageDeclaration
··· 60 61 return ( 62 <SearchablePeopleList 63 + title={_(msg`Send post to...`)} 64 onSelectChat={onCreateChat} 65 showRecentConvos 66 sortByMessageDeclaration
+4 -4
src/components/moderation/ModerationDetailsDialog.tsx
··· 106 description = _(msg`You have muted this account.`) 107 } 108 } else if (modcause.type === 'mute-word') { 109 - name = _(msg`Skeet Hidden by Muted Word`) 110 - description = _(msg`You've chosen to hide a word or tag within this skeet.`) 111 } else if (modcause.type === 'hidden') { 112 - name = _(msg`Skeet Hidden by You`) 113 - description = _(msg`You have hidden this skeet.`) 114 } else if (modcause.type === 'reply-hidden') { 115 const isYou = currentAccount?.did === modcause.source.did 116 name = isYou
··· 106 description = _(msg`You have muted this account.`) 107 } 108 } else if (modcause.type === 'mute-word') { 109 + name = _(msg`Post Hidden by Muted Word`) 110 + description = _(msg`You've chosen to hide a word or tag within this post.`) 111 } else if (modcause.type === 'hidden') { 112 + name = _(msg`Post Hidden by You`) 113 + description = _(msg`You have hidden this post.`) 114 } else if (modcause.type === 'reply-hidden') { 115 const isYou = currentAccount?.did === modcause.source.did 116 name = isYou
+2 -2
src/components/moderation/ReportDialog/copy.ts
··· 22 } 23 case 'post': { 24 return { 25 - title: _(msg`Report this skeet`), 26 - subtitle: _(msg`Why should this skeet be reviewed?`), 27 } 28 } 29 case 'list': {
··· 22 } 23 case 'post': { 24 return { 25 + title: _(msg`Report this post`), 26 + subtitle: _(msg`Why should this post be reviewed?`), 27 } 28 } 29 case 'list': {
+1 -1
src/lib/api/index.ts
··· 187 }) 188 if (isNetworkError(e)) { 189 throw new Error( 190 - t`Skeet failed to upload. Please check your Internet connection and try again.`, 191 ) 192 } else { 193 throw e
··· 187 }) 188 if (isNetworkError(e)) { 189 throw new Error( 190 + t`Post failed to upload. Please check your Internet connection and try again.`, 191 ) 192 } else { 193 throw e
+3 -3
src/lib/hooks/useNotificationHandler.ts
··· 133 Notifications.setNotificationChannelAsync( 134 'repost' satisfies NotificationReason, 135 { 136 - name: _(msg`Reskeets`), 137 importance: Notifications.AndroidImportance.HIGH, 138 }, 139 ) ··· 168 Notifications.setNotificationChannelAsync( 169 'like-via-repost' satisfies NotificationReason, 170 { 171 - name: _(msg`Likes of your reskeets`), 172 importance: Notifications.AndroidImportance.HIGH, 173 }, 174 ) 175 Notifications.setNotificationChannelAsync( 176 'repost-via-repost' satisfies NotificationReason, 177 { 178 - name: _(msg`Reskeets of your reskeets`), 179 importance: Notifications.AndroidImportance.HIGH, 180 }, 181 )
··· 133 Notifications.setNotificationChannelAsync( 134 'repost' satisfies NotificationReason, 135 { 136 + name: _(msg`Reposts`), 137 importance: Notifications.AndroidImportance.HIGH, 138 }, 139 ) ··· 168 Notifications.setNotificationChannelAsync( 169 'like-via-repost' satisfies NotificationReason, 170 { 171 + name: _(msg`Likes of your reposts`), 172 importance: Notifications.AndroidImportance.HIGH, 173 }, 174 ) 175 Notifications.setNotificationChannelAsync( 176 'repost-via-repost' satisfies NotificationReason, 177 { 178 + name: _(msg`Reposts of your reposts`), 179 importance: Notifications.AndroidImportance.HIGH, 180 }, 181 )
+4 -4
src/lib/moderation/useModerationCauseDescription.ts
··· 104 if (cause.type === 'mute-word') { 105 return { 106 icon: EyeSlash, 107 - name: _(msg`Skeet Hidden by Muted Word`), 108 description: _( 109 - msg`You've chosen to hide a word or tag within this skeet.`, 110 ), 111 } 112 } 113 if (cause.type === 'hidden') { 114 return { 115 icon: EyeSlash, 116 - name: _(msg`Skeet Hidden by You`), 117 - description: _(msg`You have hidden this skeet.`), 118 } 119 } 120 if (cause.type === 'reply-hidden') {
··· 104 if (cause.type === 'mute-word') { 105 return { 106 icon: EyeSlash, 107 + name: _(msg`Post Hidden by Muted Word`), 108 description: _( 109 + msg`You've chosen to hide a word or tag within this post.`, 110 ), 111 } 112 } 113 if (cause.type === 'hidden') { 114 return { 115 icon: EyeSlash, 116 + name: _(msg`Post Hidden by You`), 117 + description: _(msg`You have hidden this post`), 118 } 119 } 120 if (cause.type === 'reply-hidden') {
+1 -1
src/locale/locales/en/messages.po
··· 11031 #: src/view/com/composer/Composer.tsx:859 11032 #: src/view/com/feeds/ComposerPrompt.tsx:191 11033 msgid "What's up?" 11034 - msgstr "" 11035 11036 #: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:147 11037 msgid "When you tap on a check, you’ll see which organizations have granted verification."
··· 11031 #: src/view/com/composer/Composer.tsx:859 11032 #: src/view/com/feeds/ComposerPrompt.tsx:191 11033 msgid "What's up?" 11034 + msgstr "Post yo shit! 🗣️" 11035 11036 #: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:147 11037 msgid "When you tap on a check, you’ll see which organizations have granted verification."
+4 -4
src/screens/Bookmarks/index.tsx
··· 58 <Layout.Header.BackButton /> 59 <Layout.Header.Content> 60 <Layout.Header.TitleText> 61 - <Trans>Saved Skeets</Trans> 62 </Layout.Header.TitleText> 63 </Layout.Header.Content> 64 <Layout.Header.Slot /> ··· 216 const remove = async () => { 217 try { 218 await bookmark({action: 'delete', uri: post.uri}) 219 - toast.show(_(msg`Removed from saved skeets`), { 220 type: 'info', 221 }) 222 } catch (e: any) { ··· 254 a.italic, 255 t.atoms.text_contrast_medium, 256 ]}> 257 - <Trans>This skeet was deleted by its author</Trans> 258 </Text> 259 </View> 260 <Button 261 - label={_(msg`Remove from saved skeets`)} 262 size="tiny" 263 color="secondary" 264 onPress={remove}>
··· 58 <Layout.Header.BackButton /> 59 <Layout.Header.Content> 60 <Layout.Header.TitleText> 61 + <Trans>Saved Posts</Trans> 62 </Layout.Header.TitleText> 63 </Layout.Header.Content> 64 <Layout.Header.Slot /> ··· 216 const remove = async () => { 217 try { 218 await bookmark({action: 'delete', uri: post.uri}) 219 + toast.show(_(msg`Removed from saved posts`), { 220 type: 'info', 221 }) 222 } catch (e: any) { ··· 254 a.italic, 255 t.atoms.text_contrast_medium, 256 ]}> 257 + <Trans>This post was deleted by its author</Trans> 258 </Text> 259 </View> 260 <Button 261 + label={_(msg`Remove from saved posts`)} 262 size="tiny" 263 color="secondary" 264 onPress={remove}>
+1 -1
src/screens/Moderation/index.tsx
··· 243 t.atoms.bg_contrast_25, 244 ]}> 245 <Link 246 - label={_(msg`View your default skeet interaction settings`)} 247 testID="interactionSettingsBtn" 248 to="/moderation/interaction-settings"> 249 {state => (
··· 243 t.atoms.bg_contrast_25, 244 ]}> 245 <Link 246 + label={_(msg`View your default post interaction settings`)} 247 testID="interactionSettingsBtn" 248 to="/moderation/interaction-settings"> 249 {state => (
+2 -2
src/screens/ModerationInteractionSettings/index.tsx
··· 31 <Layout.Header.BackButton /> 32 <Layout.Header.Content> 33 <Layout.Header.TitleText> 34 - <Trans>Skeet Interaction Settings</Trans> 35 </Layout.Header.TitleText> 36 </Layout.Header.Content> 37 <Layout.Header.Slot /> ··· 41 <Admonition type="tip"> 42 <Trans> 43 The following settings will be used as your defaults when creating 44 - new skeets. You can edit these for a specific skeet from the 45 composer. 46 </Trans> 47 </Admonition>
··· 31 <Layout.Header.BackButton /> 32 <Layout.Header.Content> 33 <Layout.Header.TitleText> 34 + <Trans>Post Interaction Settings</Trans> 35 </Layout.Header.TitleText> 36 </Layout.Header.Content> 37 <Layout.Header.Slot /> ··· 41 <Admonition type="tip"> 42 <Trans> 43 The following settings will be used as your defaults when creating 44 + new posts. You can edit these for a specific post from the 45 composer. 46 </Trans> 47 </Admonition>
+1 -1
src/screens/Post/PostLikedBy.tsx
··· 27 const {data: resolvedDid} = useResolveDidQuery(name) 28 const {data: profile} = useProfileQuery({did: resolvedDid}) 29 30 - useSetTitle(profile ? _(msg`Skeet by @${profile.handle}`) : undefined) 31 32 let likeCount 33 if (post) {
··· 27 const {data: resolvedDid} = useResolveDidQuery(name) 28 const {data: profile} = useProfileQuery({did: resolvedDid}) 29 30 + useSetTitle(profile ? _(msg`Post by @${profile.handle}`) : undefined) 31 32 let likeCount 33 if (post) {
+1 -1
src/screens/Post/PostQuotes.tsx
··· 27 const {data: resolvedDid} = useResolveDidQuery(name) 28 const {data: profile} = useProfileQuery({did: resolvedDid}) 29 30 - useSetTitle(profile ? _(msg`Skeet by @${profile.handle}`) : undefined) 31 32 let quoteCount 33 if (post) {
··· 27 const {data: resolvedDid} = useResolveDidQuery(name) 28 const {data: profile} = useProfileQuery({did: resolvedDid}) 29 30 + useSetTitle(profile ? _(msg`Post by @${profile.handle}`) : undefined) 31 32 let quoteCount 33 if (post) {
+4 -4
src/screens/Post/PostRepostedBy.tsx
··· 27 const {data: resolvedDid} = useResolveDidQuery(name) 28 const {data: profile} = useProfileQuery({did: resolvedDid}) 29 30 - useSetTitle(profile ? _(msg`Skeet by @${profile.handle}`) : undefined) 31 32 let quoteCount 33 if (post) { ··· 48 {post && ( 49 <> 50 <Layout.Header.TitleText> 51 - <Trans>Reskeeted By</Trans> 52 </Layout.Header.TitleText> 53 <Layout.Header.SubtitleText> 54 <Plural 55 value={quoteCount ?? 0} 56 - one="# reskeet" 57 - other="# reskeets" 58 /> 59 </Layout.Header.SubtitleText> 60 </>
··· 27 const {data: resolvedDid} = useResolveDidQuery(name) 28 const {data: profile} = useProfileQuery({did: resolvedDid}) 29 30 + useSetTitle(profile ? _(msg`Post by @${profile.handle}`) : undefined) 31 32 let quoteCount 33 if (post) { ··· 48 {post && ( 49 <> 50 <Layout.Header.TitleText> 51 + <Trans>Reposted By</Trans> 52 </Layout.Header.TitleText> 53 <Layout.Header.SubtitleText> 54 <Plural 55 value={quoteCount ?? 0} 56 + one="# repost" 57 + other="# reposts" 58 /> 59 </Layout.Header.SubtitleText> 60 </>
+2 -2
src/screens/PostThread/components/ThreadError.tsx
··· 23 const cleanError = useCleanError() 24 25 const {title, message} = useMemo(() => { 26 - let title = _(msg`Error loading skeet`) 27 let message = _(msg`Something went wrong. Please try again in a moment.`) 28 29 const {raw, clean} = cleanError(error) 30 31 if (error.message.startsWith('Post not found')) { 32 - title = _(msg`Skeet not found`) 33 message = clean || raw || message 34 } 35
··· 23 const cleanError = useCleanError() 24 25 const {title, message} = useMemo(() => { 26 + let title = _(msg`Error loading post`) 27 let message = _(msg`Something went wrong. Please try again in a moment.`) 28 29 const {raw, clean} = cleanError(error) 30 31 if (error.message.startsWith('Post not found')) { 32 + title = _(msg`Post not found`) 33 message = clean || raw || message 34 } 35
+8 -8
src/screens/PostThread/components/ThreadItemAnchor.tsx
··· 141 </View> 142 <Text 143 style={[a.text_md, a.font_semi_bold, t.atoms.text_contrast_medium]}> 144 - <Trans>Skeet has been deleted</Trans> 145 </Text> 146 </View> 147 </View> ··· 465 {post.repostCount != null && 466 post.repostCount !== 0 && 467 !disableRepostsMetrics ? ( 468 - <Link to={repostsHref} label={_(msg`Reskeets of this skeet`)}> 469 <Text 470 testID="repostCount-expanded" 471 style={[a.text_md, t.atoms.text_contrast_medium]}> ··· 474 </Text>{' '} 475 <Plural 476 value={post.repostCount} 477 - one="reskeet" 478 - other="reskeets" 479 /> 480 </Text> 481 </Link> ··· 484 post.quoteCount !== 0 && 485 !post.viewer?.embeddingDisabled && 486 !disableQuotesMetrics ? ( 487 - <Link to={quotesHref} label={_(msg`Quotes of this skeet`)}> 488 <Text 489 testID="quoteCount-expanded" 490 style={[a.text_md, t.atoms.text_contrast_medium]}> ··· 502 {post.likeCount != null && 503 post.likeCount !== 0 && 504 !disableLikesMetrics ? ( 505 - <Link to={likesHref} label={_(msg`Likes on this skeet`)}> 506 <Text 507 testID="likeCount-expanded" 508 style={[a.text_md, t.atoms.text_contrast_medium]}> ··· 679 <Button 680 label={_(msg`Archived post`)} 681 accessibilityHint={_( 682 - msg`Shows information about when this skeet was created`, 683 )} 684 onPress={e => { 685 e.preventDefault() ··· 720 </Prompt.TitleText> 721 <Prompt.DescriptionText> 722 <Trans> 723 - This skeet claims to have been created on{' '} 724 <RNText style={[a.font_semi_bold]}> 725 {niceDate(i18n, createdAt)} 726 </RNText>
··· 141 </View> 142 <Text 143 style={[a.text_md, a.font_semi_bold, t.atoms.text_contrast_medium]}> 144 + <Trans>Post has been deleted</Trans> 145 </Text> 146 </View> 147 </View> ··· 465 {post.repostCount != null && 466 post.repostCount !== 0 && 467 !disableRepostsMetrics ? ( 468 + <Link to={repostsHref} label={_(msg`Reposts of this post`)}> 469 <Text 470 testID="repostCount-expanded" 471 style={[a.text_md, t.atoms.text_contrast_medium]}> ··· 474 </Text>{' '} 475 <Plural 476 value={post.repostCount} 477 + one="repost" 478 + other="reposts" 479 /> 480 </Text> 481 </Link> ··· 484 post.quoteCount !== 0 && 485 !post.viewer?.embeddingDisabled && 486 !disableQuotesMetrics ? ( 487 + <Link to={quotesHref} label={_(msg`Quotes of this post`)}> 488 <Text 489 testID="quoteCount-expanded" 490 style={[a.text_md, t.atoms.text_contrast_medium]}> ··· 502 {post.likeCount != null && 503 post.likeCount !== 0 && 504 !disableLikesMetrics ? ( 505 + <Link to={likesHref} label={_(msg`Likes on this post`)}> 506 <Text 507 testID="likeCount-expanded" 508 style={[a.text_md, t.atoms.text_contrast_medium]}> ··· 679 <Button 680 label={_(msg`Archived post`)} 681 accessibilityHint={_( 682 + msg`Shows information about when this post was created`, 683 )} 684 onPress={e => { 685 e.preventDefault() ··· 720 </Prompt.TitleText> 721 <Prompt.DescriptionText> 722 <Trans> 723 + This post claims to have been created on{' '} 724 <RNText style={[a.font_semi_bold]}> 725 {niceDate(i18n, createdAt)} 726 </RNText>
+1 -1
src/screens/PostThread/components/ThreadItemPost.tsx
··· 109 </View> 110 <Text 111 style={[a.text_md, a.font_semi_bold, t.atoms.text_contrast_medium]}> 112 - <Trans>Skeet has been deleted</Trans> 113 </Text> 114 </View> 115
··· 109 </View> 110 <Text 111 style={[a.text_md, a.font_semi_bold, t.atoms.text_contrast_medium]}> 112 + <Trans>Post has been deleted</Trans> 113 </Text> 114 </View> 115
+2 -2
src/screens/PostThread/components/ThreadItemPostTombstone.tsx
··· 19 const {copy, Icon} = useMemo(() => { 20 switch (type) { 21 case 'blocked': 22 - return {copy: _(msg`Skeet blocked`), Icon: PersonXIcon} 23 case 'not-found': 24 default: 25 - return {copy: _(msg`Skeet not found`), Icon: TrashIcon} 26 } 27 }, [_, type]) 28
··· 19 const {copy, Icon} = useMemo(() => { 20 switch (type) { 21 case 'blocked': 22 + return {copy: _(msg`Post blocked`), Icon: PersonXIcon} 23 case 'not-found': 24 default: 25 + return {copy: _(msg`Post not found`), Icon: TrashIcon} 26 } 27 }, [_, type]) 28
+1 -1
src/screens/PostThread/components/ThreadItemTreePost.tsx
··· 105 ]}> 106 <TrashIcon style={[t.atoms.text]} width={14} /> 107 <Text style={[t.atoms.text_contrast_medium, a.mt_2xs]}> 108 - <Trans>Skeet has been deleted</Trans> 109 </Text> 110 </View> 111 {item.ui.isLastChild && !item.ui.precedesChildReadMore && (
··· 105 ]}> 106 <TrashIcon style={[t.atoms.text]} width={14} /> 107 <Text style={[t.atoms.text_contrast_medium, a.mt_2xs]}> 108 + <Trans>Post has been deleted</Trans> 109 </Text> 110 </View> 111 {item.ui.isLastChild && !item.ui.precedesChildReadMore && (
+1 -1
src/screens/PostThread/index.tsx
··· 525 <Layout.Header.BackButton /> 526 <Layout.Header.Content> 527 <Layout.Header.TitleText> 528 - <Trans context="description">Skeet</Trans> 529 </Layout.Header.TitleText> 530 </Layout.Header.Content> 531 <Layout.Header.Slot>
··· 525 <Layout.Header.BackButton /> 526 <Layout.Header.Content> 527 <Layout.Header.TitleText> 528 + <Trans context="description">Post</Trans> 529 </Layout.Header.TitleText> 530 </Layout.Header.Content> 531 <Layout.Header.Slot>
+30 -40
src/screens/Profile/Header/Metrics.tsx
··· 37 const disablePostsMetrics = useDisablePostsMetrics() 38 39 return ( 40 - <> 41 - {disableFollowersMetrics && disableFollowingMetrics && disablePostsMetrics ? ( null ) : 42 - <View 43 - style={[a.flex_row, a.gap_sm, a.align_center]} 44 - pointerEvents="box-none"> 45 - {!disableFollowersMetrics ? ( 46 - <InlineLinkText 47 - testID="profileHeaderFollowersButton" 48 - style={[a.flex_row, t.atoms.text]} 49 - to={makeProfileLink(profile, 'followers')} 50 - label={`${profile.followersCount || 0} ${pluralizedFollowers}`}> 51 - <Text style={[a.font_semi_bold, a.text_md]}>{followers} </Text> 52 - <Text style={[t.atoms.text_contrast_medium, a.text_md]}> 53 - {pluralizedFollowers} 54 - </Text> 55 - </InlineLinkText> 56 - ) : null} 57 - {!disableFollowingMetrics ? ( 58 - <InlineLinkText 59 - testID="profileHeaderFollowsButton" 60 - style={[a.flex_row, t.atoms.text]} 61 - to={makeProfileLink(profile, 'follows')} 62 - label={_(msg`${profile.followsCount || 0} following`)}> 63 - <Text style={[a.font_semi_bold, a.text_md]}>{following} </Text> 64 - <Text style={[t.atoms.text_contrast_medium, a.text_md]}> 65 - {pluralizedFollowings} 66 - </Text> 67 - </InlineLinkText> 68 - ) : null} 69 - {!disablePostsMetrics ? ( 70 - <Text style={[a.font_semi_bold, t.atoms.text, a.text_md]}> 71 - {formatCount(i18n, profile.postsCount || 0)}{' '} 72 - <Text style={[t.atoms.text_contrast_medium, a.font_normal, a.text_md]}> 73 - {plural(profile.postsCount || 0, {one: 'skeet', other: 'skeets'})} 74 - </Text> 75 - </Text> 76 - ) : null} 77 - </View> 78 - } 79 - </> 80 ) 81 }
··· 37 const disablePostsMetrics = useDisablePostsMetrics() 38 39 return ( 40 + <View 41 + style={[a.flex_row, a.gap_sm, a.align_center]} 42 + pointerEvents="box-none"> 43 + <InlineLinkText 44 + testID="profileHeaderFollowersButton" 45 + style={[a.flex_row, t.atoms.text]} 46 + to={makeProfileLink(profile, 'followers')} 47 + label={`${profile.followersCount || 0} ${pluralizedFollowers}`}> 48 + <Text style={[a.font_semi_bold, a.text_md]}>{followers} </Text> 49 + <Text style={[t.atoms.text_contrast_medium, a.text_md]}> 50 + {pluralizedFollowers} 51 + </Text> 52 + </InlineLinkText> 53 + <InlineLinkText 54 + testID="profileHeaderFollowsButton" 55 + style={[a.flex_row, t.atoms.text]} 56 + to={makeProfileLink(profile, 'follows')} 57 + label={_(msg`${profile.followsCount || 0} following`)}> 58 + <Text style={[a.font_semi_bold, a.text_md]}>{following} </Text> 59 + <Text style={[t.atoms.text_contrast_medium, a.text_md]}> 60 + {pluralizedFollowings} 61 + </Text> 62 + </InlineLinkText> 63 + <Text style={[a.font_semi_bold, t.atoms.text, a.text_md]}> 64 + {formatCount(i18n, profile.postsCount || 0)}{' '} 65 + <Text style={[t.atoms.text_contrast_medium, a.font_normal, a.text_md]}> 66 + {plural(profile.postsCount || 0, {one: 'post', other: 'posts'})} 67 + </Text> 68 + </Text> 69 + </View> 70 ) 71 }
+1 -1
src/screens/Profile/ProfileFeed/index.tsx
··· 228 {(isScrolledDown || hasNew) && ( 229 <LoadLatestBtn 230 onPress={onScrollToTop} 231 - label={_(msg`Load new skeets`)} 232 showIndicator={hasNew} 233 /> 234 )}
··· 228 {(isScrolledDown || hasNew) && ( 229 <LoadLatestBtn 230 onPress={onScrollToTop} 231 + label={_(msg`Load new posts`)} 232 showIndicator={hasNew} 233 /> 234 )}
+3 -3
src/screens/Profile/ProfileSearch.tsx
··· 21 const {data: resolvedDid} = useResolveDidQuery(name) 22 const {data: profile} = useProfileQuery({did: resolvedDid}) 23 24 - useSetTitle(profile ? _(msg`Search @${profile.handle}'s skeets`) : undefined) 25 26 const fixedParams = useMemo( 27 () => ({ ··· 36 inputPlaceholder={ 37 profile 38 ? currentAccount?.did === profile.did 39 - ? _(msg`Search my skeets`) 40 - : _(msg`Search @${profile.handle}'s skeets`) 41 : _(msg`Search...`) 42 } 43 fixedParams={fixedParams}
··· 21 const {data: resolvedDid} = useResolveDidQuery(name) 22 const {data: profile} = useProfileQuery({did: resolvedDid}) 23 24 + useSetTitle(profile ? _(msg`Search @${profile.handle}'s posts`) : undefined) 25 26 const fixedParams = useMemo( 27 () => ({ ··· 36 inputPlaceholder={ 37 profile 38 ? currentAccount?.did === profile.did 39 + ? _(msg`Search my posts`) 40 + : _(msg`Search @${profile.handle}'s posts`) 41 : _(msg`Search...`) 42 } 43 fixedParams={fixedParams}
+1 -1
src/screens/Profile/Sections/Feed.tsx
··· 113 {(isScrolledDown || hasNew) && ( 114 <LoadLatestBtn 115 onPress={onScrollToTop} 116 - label={_(msg`Load new skeets`)} 117 showIndicator={hasNew} 118 /> 119 )}
··· 113 {(isScrolledDown || hasNew) && ( 114 <LoadLatestBtn 115 onPress={onScrollToTop} 116 + label={_(msg`Load new posts`)} 117 showIndicator={hasNew} 118 /> 119 )}
+1 -1
src/screens/ProfileList/FeedSection.tsx
··· 109 {(isScrolledDown || hasNew) && ( 110 <LoadLatestBtn 111 onPress={onScrollToTop} 112 - label={_(msg`Load new skeets`)} 113 showIndicator={hasNew} 114 /> 115 )}
··· 109 {(isScrolledDown || hasNew) && ( 110 <LoadLatestBtn 111 onPress={onScrollToTop} 112 + label={_(msg`Load new posts`)} 113 showIndicator={hasNew} 114 /> 115 )}
+1 -1
src/screens/ProfileList/components/SubscribeMenu.tsx
··· 105 control={subscribeMutePromptControl} 106 title={_(msg`Mute these accounts?`)} 107 description={_( 108 - msg`Muting is private. Muted accounts can interact with you, but you will not see their skeets or receive notifications from them.`, 109 )} 110 onConfirm={onSubscribeMute} 111 confirmButtonCta={_(msg`Mute list`)}
··· 105 control={subscribeMutePromptControl} 106 title={_(msg`Mute these accounts?`)} 107 description={_( 108 + msg`Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.`, 109 )} 110 onConfirm={onSubscribeMute} 111 confirmButtonCta={_(msg`Mute list`)}
+1 -1
src/screens/ProfileList/index.tsx
··· 163 const isOwner = currentAccount?.did === list.creator.did 164 const scrollElRef = useAnimatedRef() 165 const addUserDialogControl = useDialogControl() 166 - const sectionTitlesCurate = [_(msg`Skeets`), _(msg`People`)] 167 168 const moderation = useMemo(() => { 169 return moderateUserList(list, moderationOpts)
··· 163 const isOwner = currentAccount?.did === list.creator.did 164 const scrollElRef = useAnimatedRef() 165 const addUserDialogControl = useDialogControl() 166 + const sectionTitlesCurate = [_(msg`Posts`), _(msg`People`)] 167 168 const moderation = useMemo(() => { 169 return moderateUserList(list, moderationOpts)
+1 -1
src/screens/Search/Explore.tsx
··· 985 return ( 986 <LoadMoreRetryBtn 987 label={_( 988 - msg`There was an issue fetching skeets. Tap here to try again.`, 989 )} 990 onPress={fetchNextPageFeedPreviews} 991 />
··· 985 return ( 986 <LoadMoreRetryBtn 987 label={_( 988 + msg`There was an issue fetching posts. Tap here to try again.`, 989 )} 990 onPress={fetchNextPageFeedPreviews} 991 />
+2 -2
src/screens/Search/Shell.tsx
··· 351 onSubmitEditing={onSubmit} 352 placeholder={ 353 inputPlaceholder ?? 354 - _(msg`Search for skeets, users, or feeds`) 355 } 356 hitSlop={{...HITSLOP_20, top: 0}} 357 /> ··· 523 style={t.atoms.text_contrast_medium as StyleProp<ViewStyle>} 524 /> 525 <Text style={[t.atoms.text_contrast_medium, a.text_md]}> 526 - <Trans>Find skeets, users, and feeds on Witchsky</Trans> 527 </Text> 528 </View> 529 </View>
··· 351 onSubmitEditing={onSubmit} 352 placeholder={ 353 inputPlaceholder ?? 354 + _(msg`Search for posts, users, or feeds`) 355 } 356 hitSlop={{...HITSLOP_20, top: 0}} 357 /> ··· 523 style={t.atoms.text_contrast_medium as StyleProp<ViewStyle>} 524 /> 525 <Text style={[t.atoms.text_contrast_medium, a.text_md]}> 526 + <Trans>Find posts, users, and feeds on Bluesky</Trans> 527 </Text> 528 </View> 529 </View>
+1 -1
src/screens/Search/modules/ExploreTrendingTopics.tsx
··· 78 const postCount = trend.postCount 79 ? _( 80 plural(trend.postCount, { 81 - other: `${formatCount(i18n, trend.postCount)} skeets`, 82 }), 83 ) 84 : null
··· 78 const postCount = trend.postCount 79 ? _( 80 plural(trend.postCount, { 81 + other: `${formatCount(i18n, trend.postCount)} posts`, 82 }), 83 ) 84 : null
+2 -2
src/screens/Settings/AccessibilitySettings.tsx
··· 55 </SettingsList.ItemText> 56 <Toggle.Item 57 name="require_alt_text" 58 - label={_(msg`Require alt text before skeeting`)} 59 value={requireAltTextEnabled ?? false} 60 onChange={value => setRequireAltTextEnabled(value)} 61 style={[a.w_full]}> 62 <Toggle.LabelText style={[a.flex_1]}> 63 - <Trans>Require alt text before skeeting</Trans> 64 </Toggle.LabelText> 65 <Toggle.Platform /> 66 </Toggle.Item>
··· 55 </SettingsList.ItemText> 56 <Toggle.Item 57 name="require_alt_text" 58 + label={_(msg`Require alt text before posting`)} 59 value={requireAltTextEnabled ?? false} 60 onChange={value => setRequireAltTextEnabled(value)} 61 style={[a.w_full]}> 62 <Toggle.LabelText style={[a.flex_1]}> 63 + <Trans>Require alt text before posting</Trans> 64 </Toggle.LabelText> 65 <Toggle.Platform /> 66 </Toggle.Item>
+2 -2
src/screens/Settings/ActivityPrivacySettings.tsx
··· 49 <ItemTextWithSubtitle 50 bold 51 titleText={ 52 - <Trans>Allow others to be notified of your skeets</Trans> 53 } 54 subtitleText={ 55 <Trans> 56 This feature allows users to receive notifications for your 57 - new skeets and replies. Who do you want to enable this for? 58 </Trans> 59 } 60 />
··· 49 <ItemTextWithSubtitle 50 bold 51 titleText={ 52 + <Trans>Allow others to be notified of your posts</Trans> 53 } 54 subtitleText={ 55 <Trans> 56 This feature allows users to receive notifications for your 57 + new posts and replies. Who do you want to enable this for? 58 </Trans> 59 } 60 />
+33 -12
src/screens/Settings/DeerSettings.tsx
··· 487 <Toggle.Item 488 name="external_share_buttons" 489 label={_( 490 - msg`Show "Open original skeet" and "Open skeet in PDSls" buttons`, 491 )} 492 value={showExternalShareButtons} 493 onChange={value => setShowExternalShareButtons(value)} 494 style={[a.w_full]}> 495 <Toggle.LabelText style={[a.flex_1]}> 496 <Trans> 497 - Show "Open original skeet" and "Open skeet in PDSls" buttons 498 </Trans> 499 </Toggle.LabelText> 500 <Toggle.Platform /> ··· 580 <SettingsList.ItemText> 581 <Trans>Tweaks</Trans> 582 </SettingsList.ItemText> 583 - 584 <Toggle.Item 585 name="show_link_in_handle" 586 label={_( ··· 599 600 <Toggle.Item 601 name="repost_carousel" 602 - label={_(msg`Combine reskeets into a horizontal carousel`)} 603 value={repostCarouselEnabled} 604 onChange={value => setRepostCarouselEnabled(value)} 605 style={[a.w_full]}> 606 <Toggle.LabelText style={[a.flex_1]}> 607 - <Trans>Combine reskeets into a horizontal carousel</Trans> 608 </Toggle.LabelText> 609 <Toggle.Platform /> 610 </Toggle.Item> ··· 655 656 <Toggle.Item 657 name="disable_via_repost_notification" 658 - label={_(msg`Disable "via reskeet" notifications`)} 659 value={disableViaRepostNotification} 660 onChange={value => setDisableViaRepostNotification(value)} 661 style={[a.w_full]}> 662 <Toggle.LabelText style={[a.flex_1]}> 663 - <Trans>Disable "via reskeet" notifications</Trans> 664 </Toggle.LabelText> 665 <Toggle.Platform /> 666 </Toggle.Item> 667 <Admonition type="info" style={[a.flex_1]}> 668 <Trans> 669 Forcefully disables the notifications other people receive when 670 - you like/reskeet a skeet someone else has reskeeted for privacy. 671 </Trans> 672 </Admonition> 673 ··· 825 826 <Toggle.Item 827 name="disable_reposts_metrics" 828 - label={_(msg`Disable reskeet metrics`)} 829 value={disableRepostsMetrics} 830 onChange={value => setDisableRepostsMetrics(value)} 831 style={[a.w_full]}> 832 <Toggle.LabelText style={[a.flex_1]}> 833 - <Trans>Disable reskeet metrics</Trans> 834 </Toggle.LabelText> 835 <Toggle.Platform /> 836 </Toggle.Item> ··· 909 910 <Toggle.Item 911 name="disable_posts_metrics" 912 - label={_(msg`Disable skeets metrics`)} 913 value={disablePostsMetrics} 914 onChange={value => setDisablePostsMetrics(value)} 915 style={[a.w_full]}> 916 <Toggle.LabelText style={[a.flex_1]}> 917 - <Trans>Disable skeets metrics</Trans> 918 </Toggle.LabelText> 919 <Toggle.Platform /> 920 </Toggle.Item>
··· 487 <Toggle.Item 488 name="external_share_buttons" 489 label={_( 490 + msg`Show "Open original post" and "Open post in PDSls" buttons`, 491 )} 492 value={showExternalShareButtons} 493 onChange={value => setShowExternalShareButtons(value)} 494 style={[a.w_full]}> 495 <Toggle.LabelText style={[a.flex_1]}> 496 <Trans> 497 + Show "Open original post" and "Open post in PDSls" buttons 498 </Trans> 499 </Toggle.LabelText> 500 <Toggle.Platform /> ··· 580 <SettingsList.ItemText> 581 <Trans>Tweaks</Trans> 582 </SettingsList.ItemText> 583 + <Toggle.Item 584 + name="repost_carousel" 585 + label={_(msg`Combine reposts into a horizontal carousel`)} 586 + value={repostCarouselEnabled} 587 + onChange={value => setRepostCarouselEnabled(value)} 588 + style={[a.w_full]}> 589 + <Toggle.LabelText style={[a.flex_1]}> 590 + <Trans>Combine reposts into a horizontal carousel</Trans> 591 + </Toggle.LabelText> 592 + <Toggle.Platform /> 593 + </Toggle.Item> 594 + <Toggle.Item 595 + name="no_discover_fallback" 596 + label={_(msg`Do not fall back to discover feed`)} 597 + value={noDiscoverFallback} 598 + onChange={value => setNoDiscoverFallback(value)} 599 + style={[a.w_full]}> 600 + <Toggle.LabelText style={[a.flex_1]}> 601 + <Trans>Do not fall back to discover feed</Trans> 602 + </Toggle.LabelText> 603 + <Toggle.Platform /> 604 + </Toggle.Item> 605 <Toggle.Item 606 name="show_link_in_handle" 607 label={_( ··· 620 621 <Toggle.Item 622 name="repost_carousel" 623 + label={_(msg`Combine reposts into a horizontal carousel`)} 624 value={repostCarouselEnabled} 625 onChange={value => setRepostCarouselEnabled(value)} 626 style={[a.w_full]}> 627 <Toggle.LabelText style={[a.flex_1]}> 628 + <Trans>Combine reposts into a horizontal carousel</Trans> 629 </Toggle.LabelText> 630 <Toggle.Platform /> 631 </Toggle.Item> ··· 676 677 <Toggle.Item 678 name="disable_via_repost_notification" 679 + label={_(msg`Disable via repost notifications`)} 680 value={disableViaRepostNotification} 681 onChange={value => setDisableViaRepostNotification(value)} 682 style={[a.w_full]}> 683 <Toggle.LabelText style={[a.flex_1]}> 684 + <Trans>Disable via repost notifications</Trans> 685 </Toggle.LabelText> 686 <Toggle.Platform /> 687 </Toggle.Item> 688 <Admonition type="info" style={[a.flex_1]}> 689 <Trans> 690 Forcefully disables the notifications other people receive when 691 + you like/repost a post someone else has reposted for privacy. 692 </Trans> 693 </Admonition> 694 ··· 846 847 <Toggle.Item 848 name="disable_reposts_metrics" 849 + label={_(msg`Disable Reposts Metrics`)} 850 value={disableRepostsMetrics} 851 onChange={value => setDisableRepostsMetrics(value)} 852 style={[a.w_full]}> 853 <Toggle.LabelText style={[a.flex_1]}> 854 + <Trans>Disable Reposts Metrics</Trans> 855 </Toggle.LabelText> 856 <Toggle.Platform /> 857 </Toggle.Item> ··· 930 931 <Toggle.Item 932 name="disable_posts_metrics" 933 + label={_(msg`Disable posts metrics`)} 934 value={disablePostsMetrics} 935 onChange={value => setDisablePostsMetrics(value)} 936 style={[a.w_full]}> 937 <Toggle.LabelText style={[a.flex_1]}> 938 + <Trans>Disable posts metrics</Trans> 939 </Toggle.LabelText> 940 <Toggle.Platform /> 941 </Toggle.Item>
+4 -4
src/screens/Settings/FollowingFeedPreferences.tsx
··· 86 <Toggle.Item 87 type="checkbox" 88 name="show-reposts" 89 - label={_(msg`Show reskeets`)} 90 value={showReposts} 91 onChange={value => 92 setFeedViewPref({ ··· 96 <SettingsList.Item> 97 <SettingsList.ItemIcon icon={RepostIcon} /> 98 <SettingsList.ItemText> 99 - <Trans>Show reskeets</Trans> 100 </SettingsList.ItemText> 101 <Toggle.Platform /> 102 </SettingsList.Item> ··· 104 <Toggle.Item 105 type="checkbox" 106 name="show-quotes" 107 - label={_(msg`Show quote skeets`)} 108 value={showQuotePosts} 109 onChange={value => 110 setFeedViewPref({ ··· 114 <SettingsList.Item> 115 <SettingsList.ItemIcon icon={QuoteIcon} /> 116 <SettingsList.ItemText> 117 - <Trans>Show quote skeets</Trans> 118 </SettingsList.ItemText> 119 <Toggle.Platform /> 120 </SettingsList.Item>
··· 86 <Toggle.Item 87 type="checkbox" 88 name="show-reposts" 89 + label={_(msg`Show reposts`)} 90 value={showReposts} 91 onChange={value => 92 setFeedViewPref({ ··· 96 <SettingsList.Item> 97 <SettingsList.ItemIcon icon={RepostIcon} /> 98 <SettingsList.ItemText> 99 + <Trans>Show reposts</Trans> 100 </SettingsList.ItemText> 101 <Toggle.Platform /> 102 </SettingsList.Item> ··· 104 <Toggle.Item 105 type="checkbox" 106 name="show-quotes" 107 + label={_(msg`Show quote posts`)} 108 value={showQuotePosts} 109 onChange={value => 110 setFeedViewPref({ ··· 114 <SettingsList.Item> 115 <SettingsList.ItemIcon icon={QuoteIcon} /> 116 <SettingsList.ItemText> 117 + <Trans>Show quote posts</Trans> 118 </SettingsList.ItemText> 119 <Toggle.Platform /> 120 </SettingsList.Item>
+3 -3
src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx
··· 102 titleText={<Trans>Activity from others</Trans>} 103 subtitleText={ 104 <Trans> 105 - Get notified about skeets and replies from accounts you 106 choose. 107 </Trans> 108 } ··· 211 const preview = useMemo(() => { 212 const actSub = profile.viewer?.activitySubscription 213 if (actSub?.post && actSub?.reply) { 214 - return _(msg`Skeets, Replies`) 215 } else if (actSub?.post) { 216 - return _(msg`Skeets`) 217 } else if (actSub?.reply) { 218 return _(msg`Replies`) 219 }
··· 102 titleText={<Trans>Activity from others</Trans>} 103 subtitleText={ 104 <Trans> 105 + Get notified about posts and replies from accounts you 106 choose. 107 </Trans> 108 } ··· 211 const preview = useMemo(() => { 212 const actSub = profile.viewer?.activitySubscription 213 if (actSub?.post && actSub?.reply) { 214 + return _(msg`Posts, Replies`) 215 } else if (actSub?.post) { 216 + return _(msg`Posts`) 217 } else if (actSub?.reply) { 218 return _(msg`Replies`) 219 }
+1 -1
src/screens/Settings/NotificationSettings/LikeNotificationSettings.tsx
··· 40 bold 41 titleText={<Trans>Likes</Trans>} 42 subtitleText={ 43 - <Trans>Get notifications when people like your skeets.</Trans> 44 } 45 /> 46 </SettingsList.Item>
··· 40 bold 41 titleText={<Trans>Likes</Trans>} 42 subtitleText={ 43 + <Trans>Get notifications when people like your posts.</Trans> 44 } 45 /> 46 </SettingsList.Item>
+2 -2
src/screens/Settings/NotificationSettings/LikesOnRepostsNotificationSettings.tsx
··· 38 <SettingsList.ItemIcon icon={LikeRepostIcon} /> 39 <ItemTextWithSubtitle 40 bold 41 - titleText={<Trans>Likes of your reskeets</Trans>} 42 subtitleText={ 43 <Trans> 44 - Get notifications when people like skeets that you've reskeeted. 45 </Trans> 46 } 47 />
··· 38 <SettingsList.ItemIcon icon={LikeRepostIcon} /> 39 <ItemTextWithSubtitle 40 bold 41 + titleText={<Trans>Likes of your reposts</Trans>} 42 subtitleText={ 43 <Trans> 44 + Get notifications when people like posts that you've reposted. 45 </Trans> 46 } 47 />
+1 -1
src/screens/Settings/NotificationSettings/QuoteNotificationSettings.tsx
··· 40 bold 41 titleText={<Trans>Quotes</Trans>} 42 subtitleText={ 43 - <Trans>Get notifications when people quote your skeets.</Trans> 44 } 45 /> 46 </SettingsList.Item>
··· 40 bold 41 titleText={<Trans>Quotes</Trans>} 42 subtitleText={ 43 + <Trans>Get notifications when people quote your posts.</Trans> 44 } 45 /> 46 </SettingsList.Item>
+1 -1
src/screens/Settings/NotificationSettings/ReplyNotificationSettings.tsx
··· 41 titleText={<Trans>Replies</Trans>} 42 subtitleText={ 43 <Trans> 44 - Get notifications when people reply to your skeets. 45 </Trans> 46 } 47 />
··· 41 titleText={<Trans>Replies</Trans>} 42 subtitleText={ 43 <Trans> 44 + Get notifications when people reply to your posts. 45 </Trans> 46 } 47 />
+2 -2
src/screens/Settings/NotificationSettings/RepostNotificationSettings.tsx
··· 38 <SettingsList.ItemIcon icon={RepostIcon} /> 39 <ItemTextWithSubtitle 40 bold 41 - titleText={<Trans>Reskeets</Trans>} 42 subtitleText={ 43 - <Trans>Get notifications when people reskeet your skeets.</Trans> 44 } 45 /> 46 </SettingsList.Item>
··· 38 <SettingsList.ItemIcon icon={RepostIcon} /> 39 <ItemTextWithSubtitle 40 bold 41 + titleText={<Trans>Reposts</Trans>} 42 subtitleText={ 43 + <Trans>Get notifications when people repost your posts.</Trans> 44 } 45 /> 46 </SettingsList.Item>
+3 -3
src/screens/Settings/NotificationSettings/RepostsOnRepostsNotificationSettings.tsx
··· 38 <SettingsList.ItemIcon icon={RepostRepostIcon} /> 39 <ItemTextWithSubtitle 40 bold 41 - titleText={<Trans>Reskeets of your reskeets</Trans>} 42 subtitleText={ 43 <Trans> 44 - Get notifications when people reskeet skeets that you've 45 - reskeeted. 46 </Trans> 47 } 48 />
··· 38 <SettingsList.ItemIcon icon={RepostRepostIcon} /> 39 <ItemTextWithSubtitle 40 bold 41 + titleText={<Trans>Reposts of your reposts</Trans>} 42 subtitleText={ 43 <Trans> 44 + Get notifications when people repost posts that you've 45 + reposted. 46 </Trans> 47 } 48 />
+4 -4
src/screens/Settings/NotificationSettings/index.tsx
··· 173 /> 174 </SettingsList.LinkItem> 175 <SettingsList.LinkItem 176 - label={_(msg`Settings for reskeet notifications`)} 177 to={{screen: 'RepostNotificationSettings'}} 178 contentContainerStyle={[a.align_start]}> 179 <SettingsList.ItemIcon icon={RepostIcon} /> 180 <ItemTextWithSubtitle 181 - titleText={<Trans>Reskeets</Trans>} 182 subtitleText={<SettingPreview preference={settings?.repost} />} 183 showSkeleton={!settings} 184 /> ··· 204 contentContainerStyle={[a.align_start]}> 205 <SettingsList.ItemIcon icon={LikeRepostIcon} /> 206 <ItemTextWithSubtitle 207 - titleText={<Trans>Likes of your reskeets</Trans>} 208 subtitleText={ 209 <SettingPreview preference={settings?.likeViaRepost} /> 210 } ··· 219 contentContainerStyle={[a.align_start]}> 220 <SettingsList.ItemIcon icon={RepostRepostIcon} /> 221 <ItemTextWithSubtitle 222 - titleText={<Trans>Reskeets of your reskeets</Trans>} 223 subtitleText={ 224 <SettingPreview preference={settings?.repostViaRepost} /> 225 }
··· 173 /> 174 </SettingsList.LinkItem> 175 <SettingsList.LinkItem 176 + label={_(msg`Settings for repost notifications`)} 177 to={{screen: 'RepostNotificationSettings'}} 178 contentContainerStyle={[a.align_start]}> 179 <SettingsList.ItemIcon icon={RepostIcon} /> 180 <ItemTextWithSubtitle 181 + titleText={<Trans>Reposts</Trans>} 182 subtitleText={<SettingPreview preference={settings?.repost} />} 183 showSkeleton={!settings} 184 /> ··· 204 contentContainerStyle={[a.align_start]}> 205 <SettingsList.ItemIcon icon={LikeRepostIcon} /> 206 <ItemTextWithSubtitle 207 + titleText={<Trans>Likes of your reposts</Trans>} 208 subtitleText={ 209 <SettingPreview preference={settings?.likeViaRepost} /> 210 } ··· 219 contentContainerStyle={[a.align_start]}> 220 <SettingsList.ItemIcon icon={RepostRepostIcon} /> 221 <ItemTextWithSubtitle 222 + titleText={<Trans>Reposts of your reposts</Trans>} 223 subtitleText={ 224 <SettingPreview preference={settings?.repostViaRepost} /> 225 }
+2 -2
src/screens/Settings/PrivacyAndSecuritySettings.tsx
··· 81 </SettingsList.LinkItem> 82 <SettingsList.LinkItem 83 label={_( 84 - msg`Settings for allowing others to be notified of your skeets`, 85 )} 86 to={{screen: 'ActivityPrivacySettings'}} 87 contentContainerStyle={[a.align_start]}> 88 <SettingsList.ItemIcon icon={BellRingingIcon} /> 89 <ItemTextWithSubtitle 90 titleText={ 91 - <Trans>Allow others to be notified of your skeets</Trans> 92 } 93 subtitleText={ 94 <NotificationDeclaration
··· 81 </SettingsList.LinkItem> 82 <SettingsList.LinkItem 83 label={_( 84 + msg`Settings for allowing others to be notified of your posts`, 85 )} 86 to={{screen: 'ActivityPrivacySettings'}} 87 contentContainerStyle={[a.align_start]}> 88 <SettingsList.ItemIcon icon={BellRingingIcon} /> 89 <ItemTextWithSubtitle 90 titleText={ 91 + <Trans>Allow others to be notified of your posts</Trans> 92 } 93 subtitleText={ 94 <NotificationDeclaration
+2 -2
src/screens/Settings/ThreadPreferences.tsx
··· 45 </SettingsList.ItemText> 46 <View style={[a.w_full, a.gap_md]}> 47 <Text style={[a.flex_1, t.atoms.text_contrast_medium]}> 48 - <Trans>Sort replies to the same skeet by:</Trans> 49 </Text> 50 <Toggle.Group 51 label={_(msg`Sort replies by`)} ··· 95 } 96 style={[a.w_full, a.gap_md]}> 97 <Toggle.LabelText style={[a.flex_1]}> 98 - <Trans>Show skeet replies in a threaded tree view</Trans> 99 </Toggle.LabelText> 100 <Toggle.Platform /> 101 </Toggle.Item>
··· 45 </SettingsList.ItemText> 46 <View style={[a.w_full, a.gap_md]}> 47 <Text style={[a.flex_1, t.atoms.text_contrast_medium]}> 48 + <Trans>Sort replies to the same post by:</Trans> 49 </Text> 50 <Toggle.Group 51 label={_(msg`Sort replies by`)} ··· 95 } 96 style={[a.w_full, a.gap_md]}> 97 <Toggle.LabelText style={[a.flex_1]}> 98 + <Trans>Show post replies in a threaded tree view</Trans> 99 </Toggle.LabelText> 100 <Toggle.Platform /> 101 </Toggle.Item>
+2 -2
src/screens/StarterPack/StarterPackScreen.tsx
··· 192 const tabs = [ 193 ...(showPeopleTab ? [_(msg`People`)] : []), 194 ...(showFeedsTab ? [_(msg`Feeds`)] : []), 195 - ...(showPostsTab ? [_(msg`Skeets`)] : []), 196 ] 197 198 const qrCodeDialogControl = useDialogControl() ··· 568 return ( 569 <> 570 <Menu.Root> 571 - <Menu.Trigger label={_(msg`Reskeet or quote skeet`)}> 572 {({props}) => ( 573 <Button 574 {...props}
··· 192 const tabs = [ 193 ...(showPeopleTab ? [_(msg`People`)] : []), 194 ...(showFeedsTab ? [_(msg`Feeds`)] : []), 195 + ...(showPostsTab ? [_(msg`Posts`)] : []), 196 ] 197 198 const qrCodeDialogControl = useDialogControl() ··· 568 return ( 569 <> 570 <Menu.Root> 571 + <Menu.Trigger label={_(msg`Repost or quote post`)}> 572 {({props}) => ( 573 <Button 574 {...props}
+1 -1
src/screens/VideoFeed/index.tsx
··· 549 a.leading_tight, 550 a.mx_xl, 551 ]}> 552 - <Trans>Skeet has been deleted</Trans> 553 </Text> 554 </View> 555 ) : (
··· 549 a.leading_tight, 550 a.mx_xl, 551 ]}> 552 + <Trans>Post has been deleted</Trans> 553 </Text> 554 </View> 555 ) : (
+2 -2
src/state/persisted/schema.ts
··· 231 kawaii: false, 232 hasCheckedForStarterPack: false, 233 subtitlesEnabled: true, 234 - trendingDisabled: true, 235 - trendingVideoDisabled: true, 236 237 // deer 238 goLinksEnabled: true,
··· 231 kawaii: false, 232 hasCheckedForStarterPack: false, 233 subtitlesEnabled: true, 234 + trendingDisabled: false, 235 + trendingVideoDisabled: false, 236 237 // deer 238 goLinksEnabled: true,
+3 -3
src/state/queries/pinned-post.ts
··· 56 }) 57 58 if (pinCurrentPost) { 59 - Toast.show(_(msg({message: 'Skeet pinned', context: 'toast'}))) 60 } else { 61 - Toast.show(_(msg({message: 'Skeet unpinned', context: 'toast'}))) 62 } 63 64 queryClient.invalidateQueries({ ··· 72 ), 73 }) 74 } catch (e: any) { 75 - Toast.show(_(msg`Failed to pin skeet`)) 76 logger.error('Failed to pin post', {message: String(e)}) 77 // revert optimistic update 78 updatePostShadow(queryClient, postUri, {
··· 56 }) 57 58 if (pinCurrentPost) { 59 + Toast.show(_(msg({message: 'Post pinned', context: 'toast'}))) 60 } else { 61 + Toast.show(_(msg({message: 'Post unpinned', context: 'toast'}))) 62 } 63 64 queryClient.invalidateQueries({ ··· 72 ), 73 }) 74 } catch (e: any) { 75 + Toast.show(_(msg`Failed to pin post`)) 76 logger.error('Failed to pin post', {message: String(e)}) 77 // revert optimistic update 78 updatePostShadow(queryClient, postUri, {
+2 -2
src/state/shell/progress-guide.tsx
··· 214 <ProgressGuideToast 215 ref={firstLikeToastRef} 216 title={_(msg`Your first like!`)} 217 - subtitle={_(msg`Like 10 skeets to train the Discover feed`)} 218 /> 219 <ProgressGuideToast 220 ref={fifthLikeToastRef} 221 title={_(msg`Half way there!`)} 222 - subtitle={_(msg`Like 10 skeets to train the Discover feed`)} 223 /> 224 <ProgressGuideToast 225 ref={tenthLikeToastRef}
··· 214 <ProgressGuideToast 215 ref={firstLikeToastRef} 216 title={_(msg`Your first like!`)} 217 + subtitle={_(msg`Like 10 posts to train the Discover feed`)} 218 /> 219 <ProgressGuideToast 220 ref={fifthLikeToastRef} 221 title={_(msg`Half way there!`)} 222 + subtitle={_(msg`Like 10 posts to train the Discover feed`)} 223 /> 224 <ProgressGuideToast 225 ref={tenthLikeToastRef}
+1 -1
src/view/com/auth/SplashScreen.tsx
··· 52 t.atoms.text_contrast_medium, 53 a.text_center, 54 ]}> 55 - <Trans>Skeet yo stuff! 🗣️</Trans> 56 </Text> 57 </View> 58
··· 52 t.atoms.text_contrast_medium, 53 a.text_center, 54 ]}> 55 + <Trans>What's up?</Trans> 56 </Text> 57 </View> 58
+1 -1
src/view/com/auth/SplashScreen.web.tsx
··· 100 a.font_semi_bold, 101 t.atoms.text_contrast_medium, 102 ]}> 103 - <Trans>Skeet yo shit! 🗣️</Trans> 104 </Text> 105 </View> 106
··· 100 a.font_semi_bold, 101 t.atoms.text_contrast_medium, 102 ]}> 103 + <Trans>What's up?</Trans> 104 </Text> 105 </View> 106
+13 -13
src/view/com/composer/Composer.tsx
··· 511 let err = cleanError(e.message) 512 if (err.includes('not locate record')) { 513 err = _( 514 - msg`We're sorry! The skeet you are replying to has been deleted.`, 515 ) 516 } else if (e instanceof EmbeddingDisabledError) { 517 - err = _(msg`This skeet's author has disabled quote skeets.`) 518 } 519 setError(err) 520 setIsPublishing(false) ··· 574 <Toast.Icon /> 575 <Toast.Text> 576 {thread.posts.length > 1 577 - ? _(msg`Your skeets were sent`) 578 : replyTo 579 ? _(msg`Your reply was sent`) 580 - : _(msg`Your skeet was sent`)} 581 </Toast.Text> 582 {postUri && ( 583 <Toast.Action 584 - label={_(msg`View skeet`)} 585 onPress={() => { 586 const {host: name, rkey} = new AtUri(postUri) 587 navigation.navigate('PostThread', {name, rkey}) 588 }}> 589 - <Trans context="Action to view the skeet the user just created"> 590 View 591 </Trans> 592 </Toast.Action> ··· 859 const selectTextInputPlaceholder = isReply 860 ? isFirstPost 861 ? _(msg`Write your reply`) 862 - : _(msg`Add another skeet`) 863 - : _(msg`Anything but skeet`) 864 const discardPromptControl = Prompt.usePromptControl() 865 866 const enableSquareButtons = useEnableSquareButtons() ··· 974 {canRemovePost && isActive && ( 975 <> 976 <Button 977 - label={_(msg`Delete skeet`)} 978 size="small" 979 color="secondary" 980 variant="ghost" ··· 999 </Button> 1000 <Prompt.Basic 1001 control={discardPromptControl} 1002 - title={_(msg`Discard skeet?`)} 1003 - description={_(msg`Are you sure you'd like to discard this skeet?`)} 1004 onConfirm={() => { 1005 dispatch({ 1006 type: 'remove_post', ··· 1135 {isReply ? ( 1136 <Trans context="action">Reply</Trans> 1137 ) : isThread ? ( 1138 - <Trans context="action">Skeet All</Trans> 1139 ) : ( 1140 - <Trans context="action">Skeet</Trans> 1141 )} 1142 </ButtonText> 1143 </Button>
··· 511 let err = cleanError(e.message) 512 if (err.includes('not locate record')) { 513 err = _( 514 + msg`We're sorry! The post you are replying to has been deleted.`, 515 ) 516 } else if (e instanceof EmbeddingDisabledError) { 517 + err = _(msg`This post's author has disabled quote posts.`) 518 } 519 setError(err) 520 setIsPublishing(false) ··· 574 <Toast.Icon /> 575 <Toast.Text> 576 {thread.posts.length > 1 577 + ? _(msg`Your posts were sent`) 578 : replyTo 579 ? _(msg`Your reply was sent`) 580 + : _(msg`Your post was sent`)} 581 </Toast.Text> 582 {postUri && ( 583 <Toast.Action 584 + label={_(msg`View post`)} 585 onPress={() => { 586 const {host: name, rkey} = new AtUri(postUri) 587 navigation.navigate('PostThread', {name, rkey}) 588 }}> 589 + <Trans context="Action to view the post the user just created"> 590 View 591 </Trans> 592 </Toast.Action> ··· 859 const selectTextInputPlaceholder = isReply 860 ? isFirstPost 861 ? _(msg`Write your reply`) 862 + : _(msg`Add another post`) 863 + : _(msg`What's up?`) 864 const discardPromptControl = Prompt.usePromptControl() 865 866 const enableSquareButtons = useEnableSquareButtons() ··· 974 {canRemovePost && isActive && ( 975 <> 976 <Button 977 + label={_(msg`Delete post`)} 978 size="small" 979 color="secondary" 980 variant="ghost" ··· 999 </Button> 1000 <Prompt.Basic 1001 control={discardPromptControl} 1002 + title={_(msg`Discard post?`)} 1003 + description={_(msg`Are you sure you'd like to discard this post?`)} 1004 onConfirm={() => { 1005 dispatch({ 1006 type: 'remove_post', ··· 1135 {isReply ? ( 1136 <Trans context="action">Reply</Trans> 1137 ) : isThread ? ( 1138 + <Trans context="action">Post All</Trans> 1139 ) : ( 1140 + <Trans context="action">Post</Trans> 1141 )} 1142 </ButtonText> 1143 </Button>
+1 -1
src/view/com/composer/labels/LabelsBtn.tsx
··· 109 <Text style={[t.atoms.text_contrast_medium, a.leading_snug]}> 110 <Trans> 111 Please add any content warning labels that are applicable for the 112 - media you are skeeting. 113 </Trans> 114 </Text> 115 </View>
··· 109 <Text style={[t.atoms.text_contrast_medium, a.leading_snug]}> 110 <Trans> 111 Please add any content warning labels that are applicable for the 112 + media you are posting. 113 </Trans> 114 </Text> 115 </View>
+2 -2
src/view/com/composer/select-language/PostLanguageSelect.tsx
··· 54 return ( 55 <> 56 <Menu.Root> 57 - <Menu.Trigger label={_(msg`Select skeet language`)}> 58 {({props}) => ( 59 <LanguageBtn currentLanguages={currentLanguages} {...props} /> 60 )} ··· 122 hitSlop={LANG_DROPDOWN_HITSLOP} 123 label={_( 124 msg({ 125 - message: `Skeet language selection`, 126 comment: `Accessibility label for button that opens dialog to choose post language settings`, 127 }), 128 )}
··· 54 return ( 55 <> 56 <Menu.Root> 57 + <Menu.Trigger label={_(msg`Select post language`)}> 58 {({props}) => ( 59 <LanguageBtn currentLanguages={currentLanguages} {...props} /> 60 )} ··· 122 hitSlop={LANG_DROPDOWN_HITSLOP} 123 label={_( 124 msg({ 125 + message: `Post language selection`, 126 comment: `Accessibility label for button that opens dialog to choose post language settings`, 127 }), 128 )}
+2 -2
src/view/com/composer/select-language/PostLanguageSelectDialog.tsx
··· 184 a.text_xl, 185 a.mb_sm, 186 ]}> 187 - <Trans>Choose Skeet Languages</Trans> 188 </Text> 189 <Text 190 nativeID="dialog-description" ··· 194 a.text_md, 195 a.mb_lg, 196 ]}> 197 - <Trans>Select up to 3 languages used in this skeet</Trans> 198 </Text> 199 </View> 200
··· 184 a.text_xl, 185 a.mb_sm, 186 ]}> 187 + <Trans>Choose Post Languages</Trans> 188 </Text> 189 <Text 190 nativeID="dialog-description" ··· 194 a.text_md, 195 a.mb_lg, 196 ]}> 197 + <Trans>Select up to 3 languages used in this post</Trans> 198 </Text> 199 </View> 200
+1 -1
src/view/com/composer/select-language/SuggestedLanguage.tsx
··· 117 label={ 118 <RNText> 119 <Trans> 120 - The skeet you're replying to was marked as being written in{' '} 121 {suggestedLanguageName} by its author. Would you like to reply in{' '} 122 <Text style={[a.font_bold]}>{suggestedLanguageName}</Text>? 123 </Trans>
··· 117 label={ 118 <RNText> 119 <Trans> 120 + The post you're replying to was marked as being written in{' '} 121 {suggestedLanguageName} by its author. Would you like to reply in{' '} 122 <Text style={[a.font_bold]}>{suggestedLanguageName}</Text>? 123 </Trans>
+1 -1
src/view/com/feeds/FeedPage.tsx
··· 167 {(isScrolledDown || hasNew) && ( 168 <LoadLatestBtn 169 onPress={onPressLoadLatest} 170 - label={_(msg`Load new skeets`)} 171 showIndicator={hasNew} 172 /> 173 )}
··· 167 {(isScrolledDown || hasNew) && ( 168 <LoadLatestBtn 169 onPress={onPressLoadLatest} 170 + label={_(msg`Load new posts`)} 171 showIndicator={hasNew} 172 /> 173 )}
+12 -12
src/view/com/notifications/NotificationFeedItem.tsx
··· 306 other={`${formattedAuthorsCount} others`} 307 /> 308 </Text>{' '} 309 - liked your skeet 310 </Trans> 311 ) : ( 312 - <Trans>{firstAuthorLink} liked your skeet</Trans> 313 ) 314 } else if (item.type === 'repost') { 315 a11yLabel = hasMultipleAuthors ··· 330 other={`${formattedAuthorsCount} others`} 331 /> 332 </Text>{' '} 333 - reskeeted your skeet 334 </Trans> 335 ) : ( 336 - <Trans>{firstAuthorLink} reskeeted your skeet</Trans> 337 ) 338 icon = <RepostIcon size="xl" style={{color: t.palette.positive_500}} /> 339 } else if (item.type === 'follow') { ··· 502 other={`${formattedAuthorsCount} others`} 503 /> 504 </Text>{' '} 505 - liked your reskeet 506 </Trans> 507 ) : ( 508 - <Trans>{firstAuthorLink} liked your reskeet</Trans> 509 ) 510 icon = <RepostHeartIcon size="xl" style={[s.likeColor]} /> 511 } else if (item.type === 'repost-via-repost') { ··· 527 other={`${formattedAuthorsCount} others`} 528 /> 529 </Text>{' '} 530 - reskeeted your reskeet 531 </Trans> 532 ) : ( 533 - <Trans>{firstAuthorLink} reskeeted your reskeet</Trans> 534 ) 535 icon = ( 536 <RepostRepostIcon size="xl" style={{color: t.palette.positive_500}} /> ··· 549 ) 550 : _( 551 msg`New ${plural(postsCount, { 552 - one: 'skeet', 553 - other: 'skeets', 554 })} from ${firstAuthorName}`, 555 ) 556 notificationContent = hasMultipleAuthors ? ( 557 <Trans> 558 - New skeets from {firstAuthorLink} and{' '} 559 <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 560 <Plural 561 value={additionalAuthorsCount} ··· 566 </Trans> 567 ) : ( 568 <Trans> 569 - New <Plural value={postsCount} one="skeet" other="skeets" /> from{' '} 570 {firstAuthorLink} 571 </Trans> 572 )
··· 306 other={`${formattedAuthorsCount} others`} 307 /> 308 </Text>{' '} 309 + liked your post 310 </Trans> 311 ) : ( 312 + <Trans>{firstAuthorLink} liked your post</Trans> 313 ) 314 } else if (item.type === 'repost') { 315 a11yLabel = hasMultipleAuthors ··· 330 other={`${formattedAuthorsCount} others`} 331 /> 332 </Text>{' '} 333 + reposted your post 334 </Trans> 335 ) : ( 336 + <Trans>{firstAuthorLink} reposted your post</Trans> 337 ) 338 icon = <RepostIcon size="xl" style={{color: t.palette.positive_500}} /> 339 } else if (item.type === 'follow') { ··· 502 other={`${formattedAuthorsCount} others`} 503 /> 504 </Text>{' '} 505 + liked your repost 506 </Trans> 507 ) : ( 508 + <Trans>{firstAuthorLink} liked your repost</Trans> 509 ) 510 icon = <RepostHeartIcon size="xl" style={[s.likeColor]} /> 511 } else if (item.type === 'repost-via-repost') { ··· 527 other={`${formattedAuthorsCount} others`} 528 /> 529 </Text>{' '} 530 + reposted your repost 531 </Trans> 532 ) : ( 533 + <Trans>{firstAuthorLink} reposted your repost</Trans> 534 ) 535 icon = ( 536 <RepostRepostIcon size="xl" style={{color: t.palette.positive_500}} /> ··· 549 ) 550 : _( 551 msg`New ${plural(postsCount, { 552 + one: 'post', 553 + other: 'posts', 554 })} from ${firstAuthorName}`, 555 ) 556 notificationContent = hasMultipleAuthors ? ( 557 <Trans> 558 + New posts from {firstAuthorLink} and{' '} 559 <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 560 <Plural 561 value={additionalAuthorsCount} ··· 566 </Trans> 567 ) : ( 568 <Trans> 569 + New <Plural value={postsCount} one="post" other="posts" /> from{' '} 570 {firstAuthorLink} 571 </Trans> 572 )
+2 -2
src/view/com/post-thread/PostRepostedBy.tsx
··· 87 isLoading={isLoadingUri || isLoadingRepostedBy} 88 isError={isError} 89 emptyType="results" 90 - emptyTitle={_(msg`No reskeets yet`)} 91 emptyMessage={_( 92 - msg`Nobody has reskeeted this yet. Maybe you should be the first!`, 93 )} 94 errorMessage={cleanError(resolveError || error)} 95 sideBorders={false}
··· 87 isLoading={isLoadingUri || isLoadingRepostedBy} 88 isError={isError} 89 emptyType="results" 90 + emptyTitle={_(msg`No reposts yet`)} 91 emptyMessage={_( 92 + msg`Nobody has reposted this yet. Maybe you should be the first!`, 93 )} 94 errorMessage={cleanError(resolveError || error)} 95 sideBorders={false}
+1 -1
src/view/com/posts/DiscoverFallbackHeader.tsx
··· 27 <View style={{flex: 1}}> 28 <Text type="md" style={pal.text}> 29 <Trans> 30 - We ran out of skeets from your follows. Here's the latest from{' '} 31 <TextLink 32 type="md-medium" 33 href="/profile/bsky.app/feed/whats-hot"
··· 27 <View style={{flex: 1}}> 28 <Text type="md" style={pal.text}> 29 <Trans> 30 + We ran out of posts from your follows. Here's the latest from{' '} 31 <TextLink 32 type="md-medium" 33 href="/profile/bsky.app/feed/whats-hot"
+1 -1
src/view/com/posts/PostFeed.tsx
··· 868 return ( 869 <LoadMoreRetryBtn 870 label={_( 871 - msg`There was an issue fetching skeets. Tap here to try again.`, 872 )} 873 onPress={onPressRetryLoadMore} 874 />
··· 868 return ( 869 <LoadMoreRetryBtn 870 label={_( 871 + msg`There was an issue fetching posts. Tap here to try again.`, 872 )} 873 onPress={onPressRetryLoadMore} 874 />
+1 -1
src/view/com/posts/PostFeedItemCarousel.tsx
··· 63 ]}> 64 <Text style={[a.text_sm, a.font_bold, t.atoms.text_contrast_medium]}> 65 {items.length}{' '} 66 - <Plural value={items.length} one="reskeet" other="reskeets" /> 67 </Text> 68 <View style={[a.gap_md, a.flex_row, a.align_end]}> 69 <Button
··· 63 ]}> 64 <Text style={[a.text_sm, a.font_bold, t.atoms.text_contrast_medium]}> 65 {items.length}{' '} 66 + <Plural value={items.length} one="repost" other="reposts" /> 67 </Text> 68 <View style={[a.gap_md, a.flex_row, a.align_end]}> 69 <Button
+3 -3
src/view/com/posts/PostFeedReason.tsx
··· 74 style={styles.includeReason} 75 to={makeProfileLink(reason.by)} 76 label={ 77 - isOwner ? _(msg`Reskeeted by you`) : _(msg`Reskeeted by ${reposter}`) 78 } 79 onPress={onOpenReposter}> 80 <RepostIcon ··· 91 ]} 92 numberOfLines={1}> 93 {isOwner ? ( 94 - <Trans>Reskeeted by you</Trans> 95 ) : ( 96 - <Trans>Reskeeted by {reposter}</Trans> 97 )} 98 </Text> 99 </ProfileHoverCard>
··· 74 style={styles.includeReason} 75 to={makeProfileLink(reason.by)} 76 label={ 77 + isOwner ? _(msg`Reposted by you`) : _(msg`Reposted by ${reposter}`) 78 } 79 onPress={onOpenReposter}> 80 <RepostIcon ··· 91 ]} 92 numberOfLines={1}> 93 {isOwner ? ( 94 + <Trans>Reposted by you</Trans> 95 ) : ( 96 + <Trans>Reposted by {reposter}</Trans> 97 )} 98 </Text> 99 </ProfileHoverCard>
+2 -2
src/view/com/profile/ProfileMenu.tsx
··· 337 </Menu.Item> 338 <Menu.Item 339 testID="profileHeaderDropdownSearchBtn" 340 - label={_(msg`Search skeets`)} 341 onPress={onPressSearch}> 342 <Menu.ItemText> 343 - <Trans>Search skeets</Trans> 344 </Menu.ItemText> 345 <Menu.ItemIcon icon={SearchIcon} /> 346 </Menu.Item>
··· 337 </Menu.Item> 338 <Menu.Item 339 testID="profileHeaderDropdownSearchBtn" 340 + label={_(msg`Search posts`)} 341 onPress={onPressSearch}> 342 <Menu.ItemText> 343 + <Trans>Search posts</Trans> 344 </Menu.ItemText> 345 <Menu.ItemIcon icon={SearchIcon} /> 346 </Menu.Item>
+1 -1
src/view/screens/ModerationMutedAccounts.tsx
··· 200 ]}> 201 <Text style={[a.text_center, a.text_sm, t.atoms.text_contrast_high]}> 202 <Trans> 203 - Muted accounts have their skeets removed from your feed and from your 204 notifications. Mutes are completely private. 205 </Trans> 206 </Text>
··· 200 ]}> 201 <Text style={[a.text_center, a.text_sm, t.atoms.text_contrast_high]}> 202 <Trans> 203 + Muted accounts have their posts removed from your feed and from your 204 notifications. Mutes are completely private. 205 </Trans> 206 </Text>
+1 -1
src/view/screens/PostThread.tsx
··· 26 const {data: resolvedDid} = useResolveDidQuery(name) 27 const {data: profile} = useProfileQuery({did: resolvedDid}) 28 29 - useSetTitle(profile ? _(msg`Skeet by @${profile.handle}`) : undefined) 30 31 useFocusEffect( 32 useCallback(() => {
··· 26 const {data: resolvedDid} = useResolveDidQuery(name) 27 const {data: profile} = useProfileQuery({did: resolvedDid}) 28 29 + useSetTitle(profile ? _(msg`Post by @${profile.handle}`) : undefined) 30 31 useFocusEffect( 32 useCallback(() => {
+1 -1
src/view/screens/Profile.tsx
··· 231 const sectionTitles = [ 232 showFiltersTab ? _(msg`Labels`) : undefined, 233 showListsTab && hasLabeler ? _(msg`Lists`) : undefined, 234 - showPostsTab ? _(msg`Skeets`) : undefined, 235 showRepliesTab ? _(msg`Replies`) : undefined, 236 showMediaTab ? _(msg`Media`) : undefined, 237 showVideosTab ? _(msg`Videos`) : undefined,
··· 231 const sectionTitles = [ 232 showFiltersTab ? _(msg`Labels`) : undefined, 233 showListsTab && hasLabeler ? _(msg`Lists`) : undefined, 234 + showPostsTab ? _(msg`Posts`) : undefined, 235 showRepliesTab ? _(msg`Replies`) : undefined, 236 showMediaTab ? _(msg`Media`) : undefined, 237 showVideosTab ? _(msg`Videos`) : undefined,
+1 -1
src/view/shell/desktop/LeftNav.tsx
··· 588 style={enableSquareButtons ? [a.rounded_sm] : [a.rounded_full]}> 589 <ButtonIcon icon={EditBig} position="left" /> 590 <ButtonText> 591 - <Trans context="action">New Skeet</Trans> 592 </ButtonText> 593 </Button> 594 </View>
··· 588 style={enableSquareButtons ? [a.rounded_sm] : [a.rounded_full]}> 589 <ButtonIcon icon={EditBig} position="left" /> 590 <ButtonText> 591 + <Trans context="action">New Post</Trans> 592 </ButtonText> 593 </Button> 594 </View>