···205205 const onDeletePost = () => {
206206 deletePostMutate({uri: postUri}).then(
207207 () => {
208208- Toast.show(_(msg({message: 'Skeet deleted', context: 'toast'})))
208208+ Toast.show(_(msg({message: 'Post deleted', context: 'toast'})))
209209210210 const route = getCurrentRoute(navigation.getState())
211211 if (route.name === 'PostThread') {
···225225 },
226226 e => {
227227 logger.error('Failed to delete post', {message: e})
228228- Toast.show(_(msg`Failed to delete skeet, please try again`), 'xmark')
228228+ Toast.show(_(msg`Failed to delete post, please try again`), 'xmark')
229229 },
230230 )
231231 }
···503503 })
504504 Toast.show(
505505 isDetach
506506- ? _(msg`Quote skeet was successfully detached`)
507507- : _(msg`Quote skeet was re-attached`),
506506+ ? _(msg`Quote post was successfully detached`)
507507+ : _(msg`Quote post was re-attached`),
508508 )
509509 } catch (e: any) {
510510 Toast.show(
···694694 <>
695695 <Prompt.Basic
696696 control={redraftPromptControl}
697697- title={_(msg`Redraft this skeet?`)}
697697+ title={_(msg`Redraft this post?`)}
698698 description={_(
699699- msg`This will delete the original skeet and open the composer with its content.`,
699699+ msg`This will delete the original post and open the composer with its content.`,
700700 )}
701701 onConfirm={onConfirmRedraft}
702702 confirmButtonCta={_(msg`Redraft`)}
···782782 testID="postDropdownCopyTextBtn"
783783 label={_(msg`Copy post text`)}
784784 onPress={onCopyPostText}>
785785- <Menu.ItemText>{_(msg`Copy skeet text`)}</Menu.ItemText>
785785+ <Menu.ItemText>{_(msg`Copy post text`)}</Menu.ItemText>
786786 <Menu.ItemIcon icon={ClipboardIcon} position="right" />
787787 </Menu.Item>
788788 </>
789789 ) : (
790790 <Menu.Item
791791 testID="postDropdownSignInBtn"
792792- label={_(msg`Sign in to view skeet`)}
792792+ label={_(msg`Sign in to view post`)}
793793 onPress={onSignIn}>
794794- <Menu.ItemText>{_(msg`Sign in to view skeet`)}</Menu.ItemText>
794794+ <Menu.ItemText>{_(msg`Sign in to view post`)}</Menu.ItemText>
795795 <Menu.ItemIcon icon={Eye} position="right" />
796796 </Menu.Item>
797797 )}
···874874 label={
875875 isReply
876876 ? _(msg`Hide reply for me`)
877877- : _(msg`Hide skeet for me`)
877877+ : _(msg`Hide post for me`)
878878 }
879879 onPress={() => hidePromptControl.open()}>
880880 <Menu.ItemText>
881881 {isReply
882882 ? _(msg`Hide reply for me`)
883883- : _(msg`Hide skeet for me`)}
883883+ : _(msg`Hide post for me`)}
884884 </Menu.ItemText>
885885 <Menu.ItemIcon icon={EyeSlash} position="right" />
886886 </Menu.Item>
···982982983983 <Menu.Item
984984 testID="postDropdownReportBtn"
985985- label={_(msg`Report skeet`)}
985985+ label={_(msg`Report post`)}
986986 onPress={() => reportDialogControl.open()}>
987987- <Menu.ItemText>{_(msg`Report skeet`)}</Menu.ItemText>
987987+ <Menu.ItemText>{_(msg`Report post`)}</Menu.ItemText>
988988 <Menu.ItemIcon icon={Warning} position="right" />
989989 </Menu.Item>
990990 </>
···10151015 testID="postDropdownDeleteBtn"
10161016 label={_(msg`Delete post`)}
10171017 onPress={() => deletePromptControl.open()}>
10181018- <Menu.ItemText>{_(msg`Delete skeet`)}</Menu.ItemText>
10181018+ <Menu.ItemText>{_(msg`Delete post`)}</Menu.ItemText>
10191019 <Menu.ItemIcon icon={Trash} position="right" />
10201020 </Menu.Item>
10211021 </>
···1027102710281028 <Prompt.Basic
10291029 control={deletePromptControl}
10301030- title={_(msg`Delete this skeet?`)}
10301030+ title={_(msg`Delete this post?`)}
10311031 description={_(
10321032- msg`If you remove this skeet, you won't be able to recover it.`,
10321032+ msg`If you remove this post, you won't be able to recover it.`,
10331033 )}
10341034 onConfirm={onDeletePost}
10351035 confirmButtonCta={_(msg`Delete`)}
···1038103810391039 <Prompt.Basic
10401040 control={hidePromptControl}
10411041- title={isReply ? _(msg`Hide this reply?`) : _(msg`Hide this skeet?`)}
10411041+ title={isReply ? _(msg`Hide this reply?`) : _(msg`Hide this post?`)}
10421042 description={_(
10431043- msg`This skeet will be hidden from feeds and threads. This cannot be undone.`,
10431043+ msg`This post will be hidden from feeds and threads. This cannot be undone.`,
10441044 )}
10451045 onConfirm={onHidePost}
10461046 confirmButtonCta={_(msg`Hide`)}
···1063106310641064 <Prompt.Basic
10651065 control={quotePostDetachConfirmControl}
10661066- title={_(msg`Detach quote skeet?`)}
10661066+ title={_(msg`Detach quote post?`)}
10671067 description={_(
10681068- msg`This will remove your skeet from this quote skeet for all users, and replace it with a placeholder.`,
10681068+ msg`This will remove your post from this quote post for all users, and replace it with a placeholder.`,
10691069 )}
10701070 onConfirm={onToggleQuotePostAttachment}
10711071 confirmButtonCta={_(msg`Yes, detach`)}
···222222 style={web({maxWidth: 400})}>
223223 <View style={[a.gap_sm]}>
224224 <Text style={[a.font_semi_bold, a.text_xl, a.pb_sm]}>
225225- <Trans>Who can interact with this skeet?</Trans>
225225+ <Trans>Who can interact with this post?</Trans>
226226 </Text>
227227 <Rules
228228 post={post}
···271271 ]}>
272272 {settings.length === 0 ? (
273273 <Trans>
274274- This skeet has an unknown type of threadgate on it. Your app may be
274274+ This post has an unknown type of threadgate on it. Your app may be
275275 out of date.
276276 </Trans>
277277 ) : settings[0].type === 'everybody' ? (
278278- <Trans>Everybody can reply to this skeet.</Trans>
278278+ <Trans>Everybody can reply to this post.</Trans>
279279 ) : settings[0].type === 'nobody' ? (
280280- <Trans>Replies to this skeet are disabled.</Trans>
280280+ <Trans>Replies to this post are disabled.</Trans>
281281 ) : (
282282 <Trans>
283283 Only{' '}
···299299 a.flex_wrap,
300300 t.atoms.text_contrast_medium,
301301 ]}>
302302- <Trans>No one but the author can quote this skeet.</Trans>
302302+ <Trans>No one but the author can quote this post.</Trans>
303303 </Text>
304304 )}
305305 </>
···5757 const wrappedOnPress = requireEmailVerification(onPress, {
5858 instructions: [
5959 <Trans key="message">
6060- Before you can get notifications for {name}'s skeets, you must first
6060+ Before you can get notifications for {name}'s posts, you must first
6161 verify your email.
6262 </Trans>,
6363 ],
···8686 size="small"
8787 color={tooltipVisible ? 'primary_subtle' : 'secondary'}
8888 shape={enableSquareButtons ? 'square' : 'round'}
8989- label={_(msg`Get notified when ${name} skeets`)}
8989+ label={_(msg`Get notified when ${name} posts`)}
9090 onPress={wrappedOnPress}>
9191 <ButtonIcon icon={Icon} size="md" />
9292 </Button>
9393 </Tooltip.Target>
9494 <Tooltip.TextBubble>
9595 <Text>
9696- <Trans>Get notified about new skeets</Trans>
9696+ <Trans>Get notified about new posts</Trans>
9797 </Text>
9898 </Tooltip.TextBubble>
9999 </Tooltip.Outer>
···105105 <View style={[a.gap_lg]}>
106106 <View style={[a.gap_sm]}>
107107 <Text style={[a.text_2xl, a.font_bold]}>
108108- <Trans>Embed skeet</Trans>
108108+ <Trans>Embed post</Trans>
109109 </Text>
110110 <Text
111111 style={[a.text_md, t.atoms.text_contrast_medium, a.leading_normal]}>
112112 <Trans>
113113- Embed this skeet in your website. Simply copy the following snippet
113113+ Embed this post in your website. Simply copy the following snippet
114114 and paste it into the HTML code of your website.
115115 </Trans>
116116 </Text>
+4-4
src/components/dialogs/MutedWords.tsx
···119119 </Text>
120120 <Text style={[a.pb_lg, a.leading_snug, t.atoms.text_contrast_medium]}>
121121 <Trans>
122122- Skeets can be muted based on their text, their tags, or both. We
123123- recommend avoiding common words that appear in many skeets, since it
124124- can result in no skeets being shown.
122122+ Posts can be muted based on their text, their tags, or both. We
123123+ recommend avoiding common words that appear in many posts, since it
124124+ can result in no posts being shown.
125125 </Trans>
126126 </Text>
127127···261261262262 <View style={[a.flex_row, a.align_center, a.gap_sm, a.flex_wrap]}>
263263 <Toggle.Item
264264- label={_(msg`Mute this word in skeet text and tags`)}
264264+ label={_(msg`Mute this word in post text and tags`)}
265265 name="content"
266266 style={[a.flex_1]}>
267267 <TargetToggle>
···106106 description = _(msg`You have muted this account.`)
107107 }
108108 } else if (modcause.type === 'mute-word') {
109109- name = _(msg`Skeet Hidden by Muted Word`)
110110- description = _(msg`You've chosen to hide a word or tag within this skeet.`)
109109+ name = _(msg`Post Hidden by Muted Word`)
110110+ description = _(msg`You've chosen to hide a word or tag within this post.`)
111111 } else if (modcause.type === 'hidden') {
112112- name = _(msg`Skeet Hidden by You`)
113113- description = _(msg`You have hidden this skeet.`)
112112+ name = _(msg`Post Hidden by You`)
113113+ description = _(msg`You have hidden this post.`)
114114 } else if (modcause.type === 'reply-hidden') {
115115 const isYou = currentAccount?.did === modcause.source.did
116116 name = isYou
+2-2
src/components/moderation/ReportDialog/copy.ts
···2222 }
2323 case 'post': {
2424 return {
2525- title: _(msg`Report this skeet`),
2626- subtitle: _(msg`Why should this skeet be reviewed?`),
2525+ title: _(msg`Report this post`),
2626+ subtitle: _(msg`Why should this post be reviewed?`),
2727 }
2828 }
2929 case 'list': {
+1-1
src/lib/api/index.ts
···187187 })
188188 if (isNetworkError(e)) {
189189 throw new Error(
190190- t`Skeet failed to upload. Please check your Internet connection and try again.`,
190190+ t`Post failed to upload. Please check your Internet connection and try again.`,
191191 )
192192 } else {
193193 throw e
+3-3
src/lib/hooks/useNotificationHandler.ts
···133133 Notifications.setNotificationChannelAsync(
134134 'repost' satisfies NotificationReason,
135135 {
136136- name: _(msg`Reskeets`),
136136+ name: _(msg`Reposts`),
137137 importance: Notifications.AndroidImportance.HIGH,
138138 },
139139 )
···168168 Notifications.setNotificationChannelAsync(
169169 'like-via-repost' satisfies NotificationReason,
170170 {
171171- name: _(msg`Likes of your reskeets`),
171171+ name: _(msg`Likes of your reposts`),
172172 importance: Notifications.AndroidImportance.HIGH,
173173 },
174174 )
175175 Notifications.setNotificationChannelAsync(
176176 'repost-via-repost' satisfies NotificationReason,
177177 {
178178- name: _(msg`Reskeets of your reskeets`),
178178+ name: _(msg`Reposts of your reposts`),
179179 importance: Notifications.AndroidImportance.HIGH,
180180 },
181181 )
···104104 if (cause.type === 'mute-word') {
105105 return {
106106 icon: EyeSlash,
107107- name: _(msg`Skeet Hidden by Muted Word`),
107107+ name: _(msg`Post Hidden by Muted Word`),
108108 description: _(
109109- msg`You've chosen to hide a word or tag within this skeet.`,
109109+ msg`You've chosen to hide a word or tag within this post.`,
110110 ),
111111 }
112112 }
113113 if (cause.type === 'hidden') {
114114 return {
115115 icon: EyeSlash,
116116- name: _(msg`Skeet Hidden by You`),
117117- description: _(msg`You have hidden this skeet.`),
116116+ name: _(msg`Post Hidden by You`),
117117+ description: _(msg`You have hidden this post`),
118118 }
119119 }
120120 if (cause.type === 'reply-hidden') {
+5-3
src/locale/i18n.ts
···13131414import {sanitizeAppLanguageSetting} from '#/locale/helpers'
1515import {AppLanguage} from '#/locale/languages'
1616+import {applySkeetReplacements} from '#/locale/linguiHook'
1617import {messages as messagesAn} from '#/locale/locales/an/messages'
1718import {messages as messagesAst} from '#/locale/locales/ast/messages'
1819import {messages as messagesCa} from '#/locale/locales/ca/messages'
···125126 break
126127 }
127128 case AppLanguage.en_GB: {
128128- i18n.loadAndActivate({locale, messages: messagesEn_GB})
129129+ const transformedMsgs = applySkeetReplacements(messagesEn_GB, locale)
130130+ i18n.loadAndActivate({locale, messages: transformedMsgs})
129131 await Promise.all([
130132 import('@formatjs/intl-pluralrules/locale-data/en'),
131133 import('@formatjs/intl-numberformat/locale-data/en-GB'),
···418420 await Promise.all([
419421 import('@formatjs/intl-pluralrules/locale-data/zh'),
420422 import('@formatjs/intl-numberformat/locale-data/zh'),
421421- import('@formatjs/intl-displaynames/locale-data/zh'),
422423 ])
423424 break
424425 }
425426 default: {
426426- i18n.loadAndActivate({locale, messages: messagesEn})
427427+ const transformedMsgs = applySkeetReplacements(messagesEn, locale)
428428+ i18n.loadAndActivate({locale, messages: transformedMsgs})
427429 break
428430 }
429431 }
+22-5
src/locale/i18n.web.ts
···11import {useEffect} from 'react'
22-import {i18n} from '@lingui/core'
22+import {i18n, type Messages} from '@lingui/core'
3344import {sanitizeAppLanguageSetting} from '#/locale/helpers'
55import {AppLanguage} from '#/locale/languages'
66+import {applySkeetReplacements} from '#/locale/linguiHook'
67import {useLanguagePrefs} from '#/state/preferences'
7889/**
910 * We do a dynamic import of just the catalog that we need
1011 */
1112export async function dynamicActivate(locale: AppLanguage) {
1212- let mod: any
1313+ let mod: {messages: Messages}
13141415 switch (locale) {
1516 case AppLanguage.an: {
···4041 mod = await import(`./locales/el/messages`)
4142 break
4243 }
4444+ case AppLanguage.en: {
4545+ mod = await import(`./locales/en/messages`)
4646+ const transformedEnMessages = applySkeetReplacements(mod.messages, locale)
4747+ i18n.load(locale, transformedEnMessages)
4848+ i18n.activate(locale)
4949+ break
5050+ }
4351 case AppLanguage.en_GB: {
4452 mod = await import(`./locales/en-GB/messages`)
5353+ const transformedEnGbMessages = applySkeetReplacements(
5454+ mod.messages,
5555+ locale,
5656+ )
5757+ i18n.load(locale, transformedEnGbMessages)
5858+ i18n.activate(locale)
4559 break
4660 }
4761 case AppLanguage.eo: {
···174188 }
175189 default: {
176190 mod = await import(`./locales/en/messages`)
191191+ const transformedDefaultMessages = applySkeetReplacements(
192192+ mod.messages,
193193+ locale,
194194+ )
195195+ i18n.load(locale, transformedDefaultMessages)
196196+ i18n.activate(locale)
177197 break
178198 }
179199 }
180180-181181- i18n.load(locale, mod.messages)
182182- i18n.activate(locale)
183200}
184201185202export function useLocaleLanguage() {
+61
src/locale/linguiHook.ts
···11+import {type Messages} from '@lingui/core'
22+33+import * as persisted from '#/state/persisted'
44+55+// Helper to apply the replacement to a single string
66+function replaceInString(text: string): string {
77+ const {string: replacement, enabled} = persisted.get('postReplacement')
88+ if (!enabled) return text
99+ let repl = replacement?.length ? replacement.toLowerCase() : 'skeet'
1010+ return text
1111+ .replaceAll('Post', repl[0].toUpperCase() + repl.slice(1))
1212+ .replaceAll('post', repl)
1313+}
1414+1515+// Recursive helper to traverse and replace strings in nested structures
1616+function traverseAndReplace(value: any): any {
1717+ if (typeof value === 'string') {
1818+ return replaceInString(value)
1919+ }
2020+ if (Array.isArray(value)) {
2121+ return value.map(item => traverseAndReplace(item))
2222+ }
2323+ if (typeof value === 'object' && value !== null) {
2424+ const newObject: Record<string, any> = {}
2525+ for (const key in value) {
2626+ if (Object.prototype.hasOwnProperty.call(value, key)) {
2727+ newObject[key] = traverseAndReplace(value[key])
2828+ }
2929+ }
3030+ return newObject
3131+ }
3232+ return value
3333+}
3434+3535+/**
3636+ * Applies "Post" to "Skeet" replacements (case-insensitive) to messages
3737+ * for English locales.
3838+ * @param messages The raw messages object loaded from Lingui.
3939+ * @param locale The current locale string.
4040+ * @returns The messages object with replacements applied if the locale is English,
4141+ * otherwise the original messages object.
4242+ */
4343+export function applySkeetReplacements(
4444+ messages: Messages,
4545+ locale: string,
4646+): Messages {
4747+ const {enabled} = persisted.get('postReplacement')
4848+ console.log('replacements enabled:', enabled)
4949+ if (!enabled || !locale.startsWith('en')) {
5050+ return messages
5151+ }
5252+5353+ // Traverse the entire messages catalog and apply replacements
5454+ const transformedCatalog: Messages = {}
5555+ for (const key in messages) {
5656+ if (Object.prototype.hasOwnProperty.call(messages, key)) {
5757+ transformedCatalog[key] = traverseAndReplace(messages[key])
5858+ }
5959+ }
6060+ return transformedCatalog
6161+}
+1-1
src/locale/locales/en/messages.po
···1103111031#: src/view/com/composer/Composer.tsx:859
1103211032#: src/view/com/feeds/ComposerPrompt.tsx:191
1103311033msgid "What's up?"
1103411034-msgstr ""
1103411034+msgstr "Post yo shit! 🗣️"
11035110351103611036#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:147
1103711037msgid "When you tap on a check, you’ll see which organizations have granted verification."
+4-4
src/screens/Bookmarks/index.tsx
···5858 <Layout.Header.BackButton />
5959 <Layout.Header.Content>
6060 <Layout.Header.TitleText>
6161- <Trans>Saved Skeets</Trans>
6161+ <Trans>Saved Posts</Trans>
6262 </Layout.Header.TitleText>
6363 </Layout.Header.Content>
6464 <Layout.Header.Slot />
···216216 const remove = async () => {
217217 try {
218218 await bookmark({action: 'delete', uri: post.uri})
219219- toast.show(_(msg`Removed from saved skeets`), {
219219+ toast.show(_(msg`Removed from saved posts`), {
220220 type: 'info',
221221 })
222222 } catch (e: any) {
···254254 a.italic,
255255 t.atoms.text_contrast_medium,
256256 ]}>
257257- <Trans>This skeet was deleted by its author</Trans>
257257+ <Trans>This post was deleted by its author</Trans>
258258 </Text>
259259 </View>
260260 <Button
261261- label={_(msg`Remove from saved skeets`)}
261261+ label={_(msg`Remove from saved posts`)}
262262 size="tiny"
263263 color="secondary"
264264 onPress={remove}>
+1-1
src/screens/Moderation/index.tsx
···243243 t.atoms.bg_contrast_25,
244244 ]}>
245245 <Link
246246- label={_(msg`View your default skeet interaction settings`)}
246246+ label={_(msg`View your default post interaction settings`)}
247247 testID="interactionSettingsBtn"
248248 to="/moderation/interaction-settings">
249249 {state => (
···3131 <Layout.Header.BackButton />
3232 <Layout.Header.Content>
3333 <Layout.Header.TitleText>
3434- <Trans>Skeet Interaction Settings</Trans>
3434+ <Trans>Post Interaction Settings</Trans>
3535 </Layout.Header.TitleText>
3636 </Layout.Header.Content>
3737 <Layout.Header.Slot />
···4141 <Admonition type="tip">
4242 <Trans>
4343 The following settings will be used as your defaults when creating
4444- new skeets. You can edit these for a specific skeet from the
4444+ new posts. You can edit these for a specific post from the
4545 composer.
4646 </Trans>
4747 </Admonition>
+1-1
src/screens/Post/PostLikedBy.tsx
···2727 const {data: resolvedDid} = useResolveDidQuery(name)
2828 const {data: profile} = useProfileQuery({did: resolvedDid})
29293030- useSetTitle(profile ? _(msg`Skeet by @${profile.handle}`) : undefined)
3030+ useSetTitle(profile ? _(msg`Post by @${profile.handle}`) : undefined)
31313232 let likeCount
3333 if (post) {
+1-1
src/screens/Post/PostQuotes.tsx
···2727 const {data: resolvedDid} = useResolveDidQuery(name)
2828 const {data: profile} = useProfileQuery({did: resolvedDid})
29293030- useSetTitle(profile ? _(msg`Skeet by @${profile.handle}`) : undefined)
3030+ useSetTitle(profile ? _(msg`Post by @${profile.handle}`) : undefined)
31313232 let quoteCount
3333 if (post) {
···2323 const cleanError = useCleanError()
24242525 const {title, message} = useMemo(() => {
2626- let title = _(msg`Error loading skeet`)
2626+ let title = _(msg`Error loading post`)
2727 let message = _(msg`Something went wrong. Please try again in a moment.`)
28282929 const {raw, clean} = cleanError(error)
30303131 if (error.message.startsWith('Post not found')) {
3232- title = _(msg`Skeet not found`)
3232+ title = _(msg`Post not found`)
3333 message = clean || raw || message
3434 }
3535
···105105 control={subscribeMutePromptControl}
106106 title={_(msg`Mute these accounts?`)}
107107 description={_(
108108- msg`Muting is private. Muted accounts can interact with you, but you will not see their skeets or receive notifications from them.`,
108108+ msg`Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.`,
109109 )}
110110 onConfirm={onSubscribeMute}
111111 confirmButtonCta={_(msg`Mute list`)}
···985985 return (
986986 <LoadMoreRetryBtn
987987 label={_(
988988- msg`There was an issue fetching skeets. Tap here to try again.`,
988988+ msg`There was an issue fetching posts. Tap here to try again.`,
989989 )}
990990 onPress={fetchNextPageFeedPreviews}
991991 />
+2-2
src/screens/Search/Shell.tsx
···351351 onSubmitEditing={onSubmit}
352352 placeholder={
353353 inputPlaceholder ??
354354- _(msg`Search for skeets, users, or feeds`)
354354+ _(msg`Search for posts, users, or feeds`)
355355 }
356356 hitSlop={{...HITSLOP_20, top: 0}}
357357 />
···523523 style={t.atoms.text_contrast_medium as StyleProp<ViewStyle>}
524524 />
525525 <Text style={[t.atoms.text_contrast_medium, a.text_md]}>
526526- <Trans>Find skeets, users, and feeds on Witchsky</Trans>
526526+ <Trans>Find posts, users, and feeds on Witchsky</Trans>
527527 </Text>
528528 </View>
529529 </View>
···5555 </SettingsList.ItemText>
5656 <Toggle.Item
5757 name="require_alt_text"
5858- label={_(msg`Require alt text before skeeting`)}
5858+ label={_(msg`Require alt text before posting`)}
5959 value={requireAltTextEnabled ?? false}
6060 onChange={value => setRequireAltTextEnabled(value)}
6161 style={[a.w_full]}>
6262 <Toggle.LabelText style={[a.flex_1]}>
6363- <Trans>Require alt text before skeeting</Trans>
6363+ <Trans>Require alt text before posting</Trans>
6464 </Toggle.LabelText>
6565 <Toggle.Platform />
6666 </Toggle.Item>
+2-2
src/screens/Settings/ActivityPrivacySettings.tsx
···4949 <ItemTextWithSubtitle
5050 bold
5151 titleText={
5252- <Trans>Allow others to be notified of your skeets</Trans>
5252+ <Trans>Allow others to be notified of your posts</Trans>
5353 }
5454 subtitleText={
5555 <Trans>
5656 This feature allows users to receive notifications for your
5757- new skeets and replies. Who do you want to enable this for?
5757+ new posts and replies. Who do you want to enable this for?
5858 </Trans>
5959 }
6060 />
+95-12
src/screens/Settings/DeerSettings.tsx
···100100 useSetNoDiscoverFallback,
101101} from '#/state/preferences/no-discover-fallback'
102102import {
103103+ usePostReplacement,
104104+ useSetPostReplacement,
105105+} from '#/state/preferences/post-name-replacement'
106106+import {
103107 useRepostCarouselEnabled,
104108 useSetRepostCarouselEnabled,
105109} from '#/state/preferences/repost-carousel-enabled'
···119123import {Admonition} from '#/components/Admonition'
120124import {Button, ButtonText} from '#/components/Button'
121125import * as Dialog from '#/components/Dialog'
126126+import * as TextField from '#/components/forms/TextField'
122127import * as Toggle from '#/components/forms/Toggle'
123128import {Atom_Stroke2_Corner0_Rounded as DeerIcon} from '#/components/icons/Atom'
124129import {ChainLink_Stroke2_Corner0_Rounded as ChainLinkIcon} from '#/components/icons/ChainLink'
···126131import {Earth_Stroke2_Corner2_Rounded as EarthIcon} from '#/components/icons/Globe'
127132import {Lab_Stroke2_Corner0_Rounded as _BeakerIcon} from '#/components/icons/Lab'
128133import {PaintRoller_Stroke2_Corner2_Rounded as PaintRollerIcon} from '#/components/icons/PaintRoller'
134134+import {Pencil_Stroke2_Corner0_Rounded as PencilIcon} from '#/components/icons/Pencil'
129135import {RaisingHand4Finger_Stroke2_Corner0_Rounded as RaisingHandIcon} from '#/components/icons/RaisingHand'
130136import {Star_Stroke2_Corner0_Rounded as StarIcon} from '#/components/icons/Star'
131137import {Verified_Stroke2_Corner2_Rounded as VerifiedIcon} from '#/components/icons/Verified'
···425431426432 const setLibreTranslateInstanceControl = Dialog.useDialogControl()
427433434434+ const postReplacement = usePostReplacement()
435435+ const setPostReplacement = useSetPostReplacement()
436436+428437 return (
429438 <Layout.Screen>
430439 <Layout.Header.Outer>
···487496 <Toggle.Item
488497 name="external_share_buttons"
489498 label={_(
490490- msg`Show "Open original skeet" and "Open skeet in PDSls" buttons`,
499499+ msg`Show "Open original post" and "Open post in PDSls" buttons`,
491500 )}
492501 value={showExternalShareButtons}
493502 onChange={value => setShowExternalShareButtons(value)}
494503 style={[a.w_full]}>
495504 <Toggle.LabelText style={[a.flex_1]}>
496505 <Trans>
497497- Show "Open original skeet" and "Open skeet in PDSls" buttons
506506+ Show "Open original post" and "Open post in PDSls" buttons
498507 </Trans>
499508 </Toggle.LabelText>
500509 <Toggle.Platform />
···576585 <SettingsList.Divider />
577586578587 <SettingsList.Group contentContainerStyle={[a.gap_sm]}>
588588+ <SettingsList.ItemIcon icon={PencilIcon} />
589589+ <SettingsList.ItemText>
590590+ <Trans>
591591+ Call posts{' '}
592592+ {postReplacement.string.length
593593+ ? postReplacement.string.toLowerCase()
594594+ : 'skeet'}
595595+ s
596596+ </Trans>
597597+ </SettingsList.ItemText>
598598+ <Toggle.Item
599599+ name="call_posts_skeets"
600600+ label={_(
601601+ msg`Changes post to another word of your choosing. Requires a refresh to update.`,
602602+ )}
603603+ value={postReplacement.enabled}
604604+ onChange={value =>
605605+ setPostReplacement({
606606+ enabled: value,
607607+ string: postReplacement.string,
608608+ })
609609+ }
610610+ style={[a.w_full]}>
611611+ <Toggle.LabelText style={[a.flex_1]}>
612612+ <Trans>
613613+ Changes post to another word of your choosing. Requires a
614614+ refresh to update.
615615+ </Trans>
616616+ </Toggle.LabelText>
617617+ <Toggle.Platform />
618618+ </Toggle.Item>
619619+620620+ {postReplacement.enabled && (
621621+ <SettingsList.Item>
622622+ <TextField.Root>
623623+ <TextField.Input
624624+ label={_(msg`Custom post name`)}
625625+ value={postReplacement.string}
626626+ onChangeText={(value: string) =>
627627+ setPostReplacement(
628628+ (curr: {enabled: boolean; string: string}) => ({
629629+ ...curr,
630630+ string: value,
631631+ }),
632632+ )
633633+ }
634634+ />
635635+ </TextField.Root>
636636+ </SettingsList.Item>
637637+ )}
638638+ </SettingsList.Group>
639639+640640+ <SettingsList.Group contentContainerStyle={[a.gap_sm]}>
579641 <SettingsList.ItemIcon icon={PaintRollerIcon} />
580642 <SettingsList.ItemText>
581643 <Trans>Tweaks</Trans>
582644 </SettingsList.ItemText>
583583-645645+ <Toggle.Item
646646+ name="repost_carousel"
647647+ label={_(msg`Combine reposts into a horizontal carousel`)}
648648+ value={repostCarouselEnabled}
649649+ onChange={value => setRepostCarouselEnabled(value)}
650650+ style={[a.w_full]}>
651651+ <Toggle.LabelText style={[a.flex_1]}>
652652+ <Trans>Combine reposts into a horizontal carousel</Trans>
653653+ </Toggle.LabelText>
654654+ <Toggle.Platform />
655655+ </Toggle.Item>
656656+ <Toggle.Item
657657+ name="no_discover_fallback"
658658+ label={_(msg`Do not fall back to discover feed`)}
659659+ value={noDiscoverFallback}
660660+ onChange={value => setNoDiscoverFallback(value)}
661661+ style={[a.w_full]}>
662662+ <Toggle.LabelText style={[a.flex_1]}>
663663+ <Trans>Do not fall back to discover feed</Trans>
664664+ </Toggle.LabelText>
665665+ <Toggle.Platform />
666666+ </Toggle.Item>
584667 <Toggle.Item
585668 name="show_link_in_handle"
586669 label={_(
···599682600683 <Toggle.Item
601684 name="repost_carousel"
602602- label={_(msg`Combine reskeets into a horizontal carousel`)}
685685+ label={_(msg`Combine reposts into a horizontal carousel`)}
603686 value={repostCarouselEnabled}
604687 onChange={value => setRepostCarouselEnabled(value)}
605688 style={[a.w_full]}>
606689 <Toggle.LabelText style={[a.flex_1]}>
607607- <Trans>Combine reskeets into a horizontal carousel</Trans>
690690+ <Trans>Combine reposts into a horizontal carousel</Trans>
608691 </Toggle.LabelText>
609692 <Toggle.Platform />
610693 </Toggle.Item>
···655738656739 <Toggle.Item
657740 name="disable_via_repost_notification"
658658- label={_(msg`Disable "via reskeet" notifications`)}
741741+ label={_(msg`Disable via repost notifications`)}
659742 value={disableViaRepostNotification}
660743 onChange={value => setDisableViaRepostNotification(value)}
661744 style={[a.w_full]}>
662745 <Toggle.LabelText style={[a.flex_1]}>
663663- <Trans>Disable "via reskeet" notifications</Trans>
746746+ <Trans>Disable via repost notifications</Trans>
664747 </Toggle.LabelText>
665748 <Toggle.Platform />
666749 </Toggle.Item>
667750 <Admonition type="info" style={[a.flex_1]}>
668751 <Trans>
669752 Forcefully disables the notifications other people receive when
670670- you like/reskeet a skeet someone else has reskeeted for privacy.
753753+ you like/repost a post someone else has reposted for privacy.
671754 </Trans>
672755 </Admonition>
673756···825908826909 <Toggle.Item
827910 name="disable_reposts_metrics"
828828- label={_(msg`Disable reskeet metrics`)}
911911+ label={_(msg`Disable Reposts Metrics`)}
829912 value={disableRepostsMetrics}
830913 onChange={value => setDisableRepostsMetrics(value)}
831914 style={[a.w_full]}>
832915 <Toggle.LabelText style={[a.flex_1]}>
833833- <Trans>Disable reskeet metrics</Trans>
916916+ <Trans>Disable Reposts Metrics</Trans>
834917 </Toggle.LabelText>
835918 <Toggle.Platform />
836919 </Toggle.Item>
···909992910993 <Toggle.Item
911994 name="disable_posts_metrics"
912912- label={_(msg`Disable skeets metrics`)}
995995+ label={_(msg`Disable posts metrics`)}
913996 value={disablePostsMetrics}
914997 onChange={value => setDisablePostsMetrics(value)}
915998 style={[a.w_full]}>
916999 <Toggle.LabelText style={[a.flex_1]}>
917917- <Trans>Disable skeets metrics</Trans>
10001000+ <Trans>Disable posts metrics</Trans>
9181001 </Toggle.LabelText>
9191002 <Toggle.Platform />
9201003 </Toggle.Item>
···4040 bold
4141 titleText={<Trans>Likes</Trans>}
4242 subtitleText={
4343- <Trans>Get notifications when people like your skeets.</Trans>
4343+ <Trans>Get notifications when people like your posts.</Trans>
4444 }
4545 />
4646 </SettingsList.Item>
···3838 <SettingsList.ItemIcon icon={LikeRepostIcon} />
3939 <ItemTextWithSubtitle
4040 bold
4141- titleText={<Trans>Likes of your reskeets</Trans>}
4141+ titleText={<Trans>Likes of your reposts</Trans>}
4242 subtitleText={
4343 <Trans>
4444- Get notifications when people like skeets that you've reskeeted.
4444+ Get notifications when people like posts that you've reposted.
4545 </Trans>
4646 }
4747 />
···4040 bold
4141 titleText={<Trans>Quotes</Trans>}
4242 subtitleText={
4343- <Trans>Get notifications when people quote your skeets.</Trans>
4343+ <Trans>Get notifications when people quote your posts.</Trans>
4444 }
4545 />
4646 </SettingsList.Item>
···4141 titleText={<Trans>Replies</Trans>}
4242 subtitleText={
4343 <Trans>
4444- Get notifications when people reply to your skeets.
4444+ Get notifications when people reply to your posts.
4545 </Trans>
4646 }
4747 />
···3838 <SettingsList.ItemIcon icon={RepostRepostIcon} />
3939 <ItemTextWithSubtitle
4040 bold
4141- titleText={<Trans>Reskeets of your reskeets</Trans>}
4141+ titleText={<Trans>Reposts of your reposts</Trans>}
4242 subtitleText={
4343 <Trans>
4444- Get notifications when people reskeet skeets that you've
4545- reskeeted.
4444+ Get notifications when people repost posts that you've
4545+ reposted.
4646 </Trans>
4747 }
4848 />
···8181 </SettingsList.LinkItem>
8282 <SettingsList.LinkItem
8383 label={_(
8484- msg`Settings for allowing others to be notified of your skeets`,
8484+ msg`Settings for allowing others to be notified of your posts`,
8585 )}
8686 to={{screen: 'ActivityPrivacySettings'}}
8787 contentContainerStyle={[a.align_start]}>
8888 <SettingsList.ItemIcon icon={BellRingingIcon} />
8989 <ItemTextWithSubtitle
9090 titleText={
9191- <Trans>Allow others to be notified of your skeets</Trans>
9191+ <Trans>Allow others to be notified of your posts</Trans>
9292 }
9393 subtitleText={
9494 <NotificationDeclaration
+2-2
src/screens/Settings/ThreadPreferences.tsx
···4545 </SettingsList.ItemText>
4646 <View style={[a.w_full, a.gap_md]}>
4747 <Text style={[a.flex_1, t.atoms.text_contrast_medium]}>
4848- <Trans>Sort replies to the same skeet by:</Trans>
4848+ <Trans>Sort replies to the same post by:</Trans>
4949 </Text>
5050 <Toggle.Group
5151 label={_(msg`Sort replies by`)}
···9595 }
9696 style={[a.w_full, a.gap_md]}>
9797 <Toggle.LabelText style={[a.flex_1]}>
9898- <Trans>Show skeet replies in a threaded tree view</Trans>
9898+ <Trans>Show post replies in a threaded tree view</Trans>
9999 </Toggle.LabelText>
100100 <Toggle.Platform />
101101 </Toggle.Item>
···214214 <ProgressGuideToast
215215 ref={firstLikeToastRef}
216216 title={_(msg`Your first like!`)}
217217- subtitle={_(msg`Like 10 skeets to train the Discover feed`)}
217217+ subtitle={_(msg`Like 10 posts to train the Discover feed`)}
218218 />
219219 <ProgressGuideToast
220220 ref={fifthLikeToastRef}
221221 title={_(msg`Half way there!`)}
222222- subtitle={_(msg`Like 10 skeets to train the Discover feed`)}
222222+ subtitle={_(msg`Like 10 posts to train the Discover feed`)}
223223 />
224224 <ProgressGuideToast
225225 ref={tenthLikeToastRef}
+12-12
src/view/com/composer/Composer.tsx
···511511 let err = cleanError(e.message)
512512 if (err.includes('not locate record')) {
513513 err = _(
514514- msg`We're sorry! The skeet you are replying to has been deleted.`,
514514+ msg`We're sorry! The post you are replying to has been deleted.`,
515515 )
516516 } else if (e instanceof EmbeddingDisabledError) {
517517- err = _(msg`This skeet's author has disabled quote skeets.`)
517517+ err = _(msg`This post's author has disabled quote posts.`)
518518 }
519519 setError(err)
520520 setIsPublishing(false)
···574574 <Toast.Icon />
575575 <Toast.Text>
576576 {thread.posts.length > 1
577577- ? _(msg`Your skeets were sent`)
577577+ ? _(msg`Your posts were sent`)
578578 : replyTo
579579 ? _(msg`Your reply was sent`)
580580- : _(msg`Your skeet was sent`)}
580580+ : _(msg`Your post was sent`)}
581581 </Toast.Text>
582582 {postUri && (
583583 <Toast.Action
584584- label={_(msg`View skeet`)}
584584+ label={_(msg`View post`)}
585585 onPress={() => {
586586 const {host: name, rkey} = new AtUri(postUri)
587587 navigation.navigate('PostThread', {name, rkey})
588588 }}>
589589- <Trans context="Action to view the skeet the user just created">
589589+ <Trans context="Action to view the post the user just created">
590590 View
591591 </Trans>
592592 </Toast.Action>
···859859 const selectTextInputPlaceholder = isReply
860860 ? isFirstPost
861861 ? _(msg`Write your reply`)
862862- : _(msg`Add another skeet`)
862862+ : _(msg`Add another post`)
863863 : _(msg`Anything but skeet`)
864864 const discardPromptControl = Prompt.usePromptControl()
865865···974974 {canRemovePost && isActive && (
975975 <>
976976 <Button
977977- label={_(msg`Delete skeet`)}
977977+ label={_(msg`Delete post`)}
978978 size="small"
979979 color="secondary"
980980 variant="ghost"
···999999 </Button>
10001000 <Prompt.Basic
10011001 control={discardPromptControl}
10021002- title={_(msg`Discard skeet?`)}
10031003- description={_(msg`Are you sure you'd like to discard this skeet?`)}
10021002+ title={_(msg`Discard post?`)}
10031003+ description={_(msg`Are you sure you'd like to discard this post?`)}
10041004 onConfirm={() => {
10051005 dispatch({
10061006 type: 'remove_post',
···11351135 {isReply ? (
11361136 <Trans context="action">Reply</Trans>
11371137 ) : isThread ? (
11381138- <Trans context="action">Skeet All</Trans>
11381138+ <Trans context="action">Post All</Trans>
11391139 ) : (
11401140- <Trans context="action">Skeet</Trans>
11401140+ <Trans context="action">Post</Trans>
11411141 )}
11421142 </ButtonText>
11431143 </Button>
+1-1
src/view/com/composer/labels/LabelsBtn.tsx
···109109 <Text style={[t.atoms.text_contrast_medium, a.leading_snug]}>
110110 <Trans>
111111 Please add any content warning labels that are applicable for the
112112- media you are skeeting.
112112+ media you are posting.
113113 </Trans>
114114 </Text>
115115 </View>
···184184 a.text_xl,
185185 a.mb_sm,
186186 ]}>
187187- <Trans>Choose Skeet Languages</Trans>
187187+ <Trans>Choose Post Languages</Trans>
188188 </Text>
189189 <Text
190190 nativeID="dialog-description"
···194194 a.text_md,
195195 a.mb_lg,
196196 ]}>
197197- <Trans>Select up to 3 languages used in this skeet</Trans>
197197+ <Trans>Select up to 3 languages used in this post</Trans>
198198 </Text>
199199 </View>
200200
···117117 label={
118118 <RNText>
119119 <Trans>
120120- The skeet you're replying to was marked as being written in{' '}
120120+ The post you're replying to was marked as being written in{' '}
121121 {suggestedLanguageName} by its author. Would you like to reply in{' '}
122122 <Text style={[a.font_bold]}>{suggestedLanguageName}</Text>?
123123 </Trans>
···306306 other={`${formattedAuthorsCount} others`}
307307 />
308308 </Text>{' '}
309309- liked your skeet
309309+ liked your post
310310 </Trans>
311311 ) : (
312312- <Trans>{firstAuthorLink} liked your skeet</Trans>
312312+ <Trans>{firstAuthorLink} liked your post</Trans>
313313 )
314314 } else if (item.type === 'repost') {
315315 a11yLabel = hasMultipleAuthors
···330330 other={`${formattedAuthorsCount} others`}
331331 />
332332 </Text>{' '}
333333- reskeeted your skeet
333333+ reposted your post
334334 </Trans>
335335 ) : (
336336- <Trans>{firstAuthorLink} reskeeted your skeet</Trans>
336336+ <Trans>{firstAuthorLink} reposted your post</Trans>
337337 )
338338 icon = <RepostIcon size="xl" style={{color: t.palette.positive_500}} />
339339 } else if (item.type === 'follow') {
···502502 other={`${formattedAuthorsCount} others`}
503503 />
504504 </Text>{' '}
505505- liked your reskeet
505505+ liked your repost
506506 </Trans>
507507 ) : (
508508- <Trans>{firstAuthorLink} liked your reskeet</Trans>
508508+ <Trans>{firstAuthorLink} liked your repost</Trans>
509509 )
510510 icon = <RepostHeartIcon size="xl" style={[s.likeColor]} />
511511 } else if (item.type === 'repost-via-repost') {
···527527 other={`${formattedAuthorsCount} others`}
528528 />
529529 </Text>{' '}
530530- reskeeted your reskeet
530530+ reposted your repost
531531 </Trans>
532532 ) : (
533533- <Trans>{firstAuthorLink} reskeeted your reskeet</Trans>
533533+ <Trans>{firstAuthorLink} reposted your repost</Trans>
534534 )
535535 icon = (
536536 <RepostRepostIcon size="xl" style={{color: t.palette.positive_500}} />
···549549 )
550550 : _(
551551 msg`New ${plural(postsCount, {
552552- one: 'skeet',
553553- other: 'skeets',
552552+ one: 'post',
553553+ other: 'posts',
554554 })} from ${firstAuthorName}`,
555555 )
556556 notificationContent = hasMultipleAuthors ? (
557557 <Trans>
558558- New skeets from {firstAuthorLink} and{' '}
558558+ New posts from {firstAuthorLink} and{' '}
559559 <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}>
560560 <Plural
561561 value={additionalAuthorsCount}
···566566 </Trans>
567567 ) : (
568568 <Trans>
569569- New <Plural value={postsCount} one="skeet" other="skeets" /> from{' '}
569569+ New <Plural value={postsCount} one="post" other="posts" /> from{' '}
570570 {firstAuthorLink}
571571 </Trans>
572572 )
+2-2
src/view/com/post-thread/PostRepostedBy.tsx
···8787 isLoading={isLoadingUri || isLoadingRepostedBy}
8888 isError={isError}
8989 emptyType="results"
9090- emptyTitle={_(msg`No reskeets yet`)}
9090+ emptyTitle={_(msg`No reposts yet`)}
9191 emptyMessage={_(
9292- msg`Nobody has reskeeted this yet. Maybe you should be the first!`,
9292+ msg`Nobody has reposted this yet. Maybe you should be the first!`,
9393 )}
9494 errorMessage={cleanError(resolveError || error)}
9595 sideBorders={false}
+1-1
src/view/com/posts/DiscoverFallbackHeader.tsx
···2727 <View style={{flex: 1}}>
2828 <Text type="md" style={pal.text}>
2929 <Trans>
3030- We ran out of skeets from your follows. Here's the latest from{' '}
3030+ We ran out of posts from your follows. Here's the latest from{' '}
3131 <TextLink
3232 type="md-medium"
3333 href="/profile/bsky.app/feed/whats-hot"
+1-1
src/view/com/posts/PostFeed.tsx
···868868 return (
869869 <LoadMoreRetryBtn
870870 label={_(
871871- msg`There was an issue fetching skeets. Tap here to try again.`,
871871+ msg`There was an issue fetching posts. Tap here to try again.`,
872872 )}
873873 onPress={onPressRetryLoadMore}
874874 />
···200200 ]}>
201201 <Text style={[a.text_center, a.text_sm, t.atoms.text_contrast_high]}>
202202 <Trans>
203203- Muted accounts have their skeets removed from your feed and from your
203203+ Muted accounts have their posts removed from your feed and from your
204204 notifications. Mutes are completely private.
205205 </Trans>
206206 </Text>